6 мая 2024 года исследователи по ИБ из Leviathan в рамках подробного технического описания сетевого инцидента раскрыли детали атаки TunnelVision (CVE-2024-3661), позволяющую злоумышленнику перенаправить VPN-трафик через манипуляции с DHCP при наличии доступа к локальной сети или контроле над беспроводной сетью.
Атака TunnelVision позволяет осуществить перенаправление на свой хост трафика жертвы в обход VPN (вместо отправки через VPN трафик будет идти в открытом виде без туннелирования на систему атакующего). Проблеме подвержены любые VPN-клиенты, не использующие изолированные пространства имён сетевой подсистемы (network namespace) при направлении трафика в туннель или не выставляющие при настройке туннеля правила пакетного фильтра, запрещающие маршрутизацию VPN-трафика через имеющиеся физические сетевые интерфейсы.
Согласно данным OpenNET, суть атаки заключается в том, что атакующий может запустить свой DHCP-сервер и использовать его для передачи клиенту информации для изменения маршрутизации. В частности, атакующий может воспользоваться предоставляемой в протоколе DHCP опцией 121 (RFC-3442, принят в 2002 году), предназначенной для передачи сведений о статических маршрутах, для внесения изменений в таблицу маршрутизации на машине жертвы и направления трафика в обход VPN.
Перенаправление осуществляется через выставления серии маршрутов для подсетей с префиксом /1, которые имеют более высокий приоритет, чем применяемый по умолчанию маршрут с префиксом /0 (0.0.0.0/0), соответственно, трафик вместо выставленного для VPN виртуального сетевого интерфейса, будет направлен через физический сетевой интерфейс на хост атакующего в локальной сети.
Атака может быть осуществлена в любых операционных системах, поддерживающих 121 опцию DHCP, включая Linux, Windows, iOS и macOS, независимо от используемого протокола VPN (Wireguard, OpenVPN, IPsec) и набора шифров. Платформа Android атаке не подвержена, так как не обрабатывает опцию 121 в DHCP. При этом атака позволяет получить доступ к трафику, но не даёт возможность вклиниться в соединения и определить содержимое, передаваемое с использованием защищённых протоколов уровня приложений, таких как TLS и SSH, например, атакующий не может определить содержимое запросов по HTTPS, но может понять, к каким серверам они отправляются.
Для защиты от атаки TunnelVision можно запретить на уровне пакетного фильтра отправку пакетов, адресованных в VPN-интерфейс, через другие сетевые интерфейсы; блокировать DHCP-пакеты с опцией 121; использовать VPN внутри отдельной виртуальной машины (или контейнера), изолированной от внешней сети, или применять специальные режимы настройки туннелей, использующие пространства имён в Linux (network namespace).
Видео с примером PoC (proof of concept):
Репозиторий на GitHub: Lab Setup Code. TunnelVision: Decloaking Routing-Based VPNs с набором скриптов для экспериментов с проведением атаки TunnelVision.
DHCP Server image: TunnelVisionVM.ova.