Для совершения атаки злоумышленник должен иметь возможность подключения к одному VPN-серверу с жертвой, что возможно, например, при использовании типовых VPN-операторов и публичных VPN-сервисов, предоставляющих доступ всем желающим. Уязвимость затрагивает VPN-серверы, использующие трансляцию адресов (NAT) для организации обращения клиентов к внешним ресурсам, при том, что для приёма трафика от клиентов и отправки запросов к внешним сайтам на сервере должен использоваться один и тот же IP-адрес.
Атака основана на том, что через отправку специально оформленных запросов атакующий, подключённый к тому же VPN-серверу и использующий общий NAT, может добиться искажения содержимого таблиц трансляции адресов, которое приведёт к тому, что пакеты, адресованные одному пользователю, будут направлены другому пользователю. В таблицах трансляции адресов информация о том, с каким внутренним IP-адресом сопоставлен отправленный запрос, определяется на основе номера исходного сетевого порта, использованного при отправке запроса. Атакующий через отправку определённых SYN- и ACK-пакетов и одновременных манипуляций со стороны клиентского соединения к VPN-серверу и со стороны подконтрольного атакующего внешнего сервера может добиться возникновения коллизии в таблице NAT и добавления записи с тем же номером исходного порта, но ассоциированной с его локальным адресом, что приведёт к тому, что ответы на чужой запрос будут возвращены на адрес атакующего.
В ходе исследования были протестированы системы трансляции адресов Linux и FreeBSD в сочетании с VPN OpenVPN, OpenConnect и WireGuard. Платформа FreeBSD оказалась не подвержена методам атаки по перенаправлению запросов, осуществляемым со стороны других пользователей, подключённых к тому же VPN. Подстановку в таблицы NAT удалось совершить только в ходе атаки ATIP (Adjacent-to-In-Path), при которой атакующий может вклиниться в трафик между пользователем и VPN-сервером или между VPN-сервером и целевым сайтом (например, когда пользователь подключается к подконтрольной атакующему сети Wi-Fi). При этом NAT FreeBSD также затронула атака, позволяющая определить факт подключения пользователя к определённому сайту (Connection Inference).
Что касается Linux, то подсистема Netfilter оказалась подвержена атакам по подстановке записей в таблицу трансляции адресов, позволяющим перенаправить входящие пакеты другому пользователю, добиться отправки пакетов вне шифрованного VPN-канала (Decapsulation) или определить открытые сетевые порты на стороне клиента.
В качестве мер для блокирования атаки VPN-провайдерам рекомендуется использовать адекватные методы рандомизации номеров исходных портов в NAT, ограничить число допустимых одновременных соединений к VPN-серверу от одного пользователя, а также блокировать возможность выбора клиентом сетевого порта, принимающего запросы на стороне VPN-сервера.
По мнению представителя компании Proton AG, атака не затрагивает VPN-сервисы, в которых используются раздельные IP для входящих и исходящих запросов. Кроме того, имеются сомнения в возможности применения атаки к реальным VPN-сервисам, так как успешная атака пока продемонстрирована только в лабораторных условиях и для её проведения требуется выполнение определённых условий на стороне VPN-сервера и атакуемого клиента. Кроме того, атака может быть полезна только для манипуляций с незашифрованными запросами, такими как обращение к DNS, в то время как использование TLS и HTTPS на уровне приложений делает перенаправление трафика бесполезным.
Манипулирующие с таблицами трансляции адресов атаки применимы не только к VPN, но и к беспроводным сетям, в которых для подключения пользователей к внешним ресурсам в точке доступа используется NAT. В прошлом месяце опубликованы результаты исследования возможности проведения похожей атаки по перехвату TCP-соединений других пользователей беспроводной сети. Метод атаки оказался применим к 24 из 33 протестированным беспроводным точкам доступа.
Предложенная для Wi-Fi атака оказалась значительно проще, чем вышеотмеченный метод для VPN, так как
из-за применения оптимизаций, многие точки доступа не проверяли корректность номеров последовательностей в TCP-пакетах. В итоге, для атаки достаточно было отправить фиктивный RST-пакет для очистки записи в таблице трансляции адресов, а затем добиться направления ответа на хост атакующего для определения номеров последовательности (SEQ) и подтверждения (ACK), необходимых для перехвата TCP-соединения.
Источник: http://www.opennet.ru/opennews/art.shtml?num=61571