Несколько дней назад он был выпущен техника атаки (CVE-2019-14899), который Позволяет заменять, изменять или заменять пакеты в TCP-соединениях, пересылаемых через VPN-туннели.. Проблема Он влияет на Linux, FreeBSD, OpenBSD, Android, macOS, iOS и другие Unix-подобные системы.
Метод позволяет замену пакетов на уровне TCP-соединений. которые проходят внутри зашифрованного туннеля, но он не позволяет соединение в соединениях с использованием дополнительных уровней шифрования (например, TLS, HTTPS, SSH). Алгоритмы шифрования, используемые в VPN, не имеют значения, поскольку ложные пакеты поступают из внешнего интерфейса, но ядро обрабатывает их как пакеты из интерфейса VPN.
Наиболее вероятная цель атаки - вмешаться в незашифрованные HTTP-соединения., но не исключено использование атаки для манипулирования ответами DNS.
Успешная замена пакета доказана для туннелей созданы с OpenVPN, WireGuard и IKEv2 / IPSec.Tor. На него не влияет проблема, поскольку он использует SOCKS для пересылки трафика и присоединяется к интерфейсу обратной связи.
Для IPv4 атака возможна, если rp_filter переведен в свободный режим. Механизм rp_filter используется для дополнительной проверки маршрутов пакетов, чтобы избежать подделки адреса источника.
- Если установлено значение 0, адрес источника не проверяется, и любые пакеты могут перенаправляться между сетевыми интерфейсами без ограничений.
- Режим 1 «Строгий» включает проверку того, что каждый пакет, поступающий извне, соответствует таблице маршрутизации, и если сетевой интерфейс, через который был получен пакет, не подключен к оптимальному пути доставки ответа, пакет отбрасывается.
- Режим 2 «Свободный» сглаживает тест, чтобы разрешить работу при использовании балансировщиков нагрузки или асимметричной маршрутизации, когда путь ответа может не проходить через сетевой интерфейс, по которому прибыл входящий пакет.
В режиме «Loose» проверяется соответствие входящего пакета таблице маршрутизации., но считается действительным, если к исходному адресу можно получить доступ через любой доступный сетевой интерфейс.
Чтобы провести атаку:
Во-первых, шлюз, через который входит пользователь, должен контролироваться в сеть (например, через организацию MITM, когда жертва подключается к точке беспроводного доступа, контролируемой злоумышленником, или через взломанный маршрутизатор).
Управляя дверью ссылка, по которой пользователь подключается к сети, злоумышленник может отправлять фиктивные пакеты Они будут восприниматься в контексте сетевого интерфейса VPN, но ответы будут отправляться через туннель.
При создании фиктивного потока пакетов, в котором заменен IP-адрес интерфейса VPN, предпринимается попытка повлиять на соединение, установленное клиентомe, но влияние этих пакетов можно наблюдать только путем пассивного анализа зашифрованного потока трафика, связанного с работой туннеля.
Чтобы осуществить атаку, вам необходимо узнать IP-адрес туннельного сетевого интерфейса, назначенный VPN-сервером а также определить, что соединение с конкретным хостом в настоящее время активно через туннель.
Чтобы определить IP VPN-интерфейса виртуальной сети, пакеты отправляются в пакеты SYN-ACK системы жертвы, последовательное упорядочивание всего диапазона виртуальных адресов.
Аналогично определяется наличие связи с конкретным сайтом. и номер порта на стороне клиента: заказывая номера портов пользователю, SYN-пакет отправляется в качестве исходного адреса, в котором подставляется IP-адрес сайта, а адрес назначения - виртуальный IP-адрес VPN.
Порт сервера можно предсказать (80 для HTTP), а номер порта на стороне клиента можно вычислить методом перебора, анализируя для разных номеров изменение интенсивности ответов ACK в сочетании с отсутствием пакета с флагом RST.
На этом этапе злоумышленник знает четыре элемента соединения. (исходный IP-адрес / порт и целевой IP-адрес / порт), но для генерации фиктивного пакета, который система-жертва примет, злоумышленник должен определить порядковые номера и номера распознавания (seq и ack) TCP-соединения.
Решение.
Наконец, для защиты при использовании туннелей с адресами IPv4, достаточно установить rp_filter в "строгом" режиме
sysctl net.ipv4.conf.all.rp_filter = 1
На стороне VPN метод определения порядкового номера может быть заблокирован путем добавления дополнительного заполнения к зашифрованным пакетам, что делает размер всех пакетов одинаковым.
Превосходный вклад в обеспечение безопасности, особенно в наше время, когда количество атак на безопасность возросло. Спасибо и привет.