Многие пользователи доверяют различным решениям VPN для надежной защиты своей конфиденциальности или доступа к личным или корпоративным ресурсам при подключении из ненадежной сети. Это может быть сеть WiFi в аэропорту или кафе. В этой статье описывается, как использовать NetworkManager что бы улучшить эту безопасность.
Несколько месяцев назад исследователи раскрыли уязвимость TunnelVision с идентификатором CVE-2024-3661. CVE описывает способ перенаправления трафика за пределы зашифрованного канала большого количества VPN-решений. Атака тривиальна для вредоносных агентов, имеющих доступ к сети, к которой подключается пользователь. Им даже не нужно эксплуатировать какую-либо неизвестную ошибку или скрытую уязвимость. Им нужно только перенастроить одну стандартную функцию протокола DHCP.
Атака основана на установке через DHCP некоторых маршрутов в вашей системе. Давайте начнем с изучения того, что такое DHCP и маршрутизация и как атака их использует. Если вы просто хотите узнать решение, перейдите к разделу «Политики маршрутизации спешит на помощь». Перейдите к разделу «Настройка NetworkManager», чтобы увидеть, как эффективно смягчить последствия в вашей системе при настройке VPN с помощью NetworkManager.
DHCP
DHCP это Dynamic Host Configuration Protocol (протокол динамической конфигурации хоста). Это протокол для автоматического назначения IP-адресов и другой конфигураций, связанной с IP, хостам, которые подключаются к сети. Когда вы подключаетесь к домашней сети и автоматически получаете частный IP-адрес, вместо того, чтобы настраивать его вручную, весьма вероятно, что это происходит благодаря DHCP-серверу, работающему на вашем маршрутизаторе, поскольку DHCP является наиболее широко используемым методом для этой цели.
Типичные части конфигурации, которые хост получает от DHCP, это IP-адрес хоста, сетевая маска и шлюз. Этих трех настроек обычно достаточно, чтобы выяснить, как достичь других хостов в той же частной сети и в Интернете.
SLAAC обычно заменяет DHCP для IPv6, но работает аналогично.
Базовое объяснение маршрутизации
Маршрутизация это то, как ваш хост решает, куда отправить каждый пакет в зависимости от IP-адреса назначения. С помощью
команды ip route
вы можете увидеть некоторые маршруты, которые использует ваша система. Они выглядят примерно так (
упрощенно):
|
|
Примечание: определение подсетей в формате 192.168.1.0/24 соответствует нотации CIDR. Смотрите здесь, если вы не знаете, что это значит.
Сначала мы видим прямой маршрут, указывающий на отправку пакетов, направленных на IP-адреса в подсети 192.168.1.0/24, через eth0. Затем прямой маршрут, указывающий на отправку пакетов, направленных на IP-адреса в подсети 172.16.0.0/16, через eth1. Прямые маршруты используются для пакетов, направленных в ту же подсеть, что и хост, поскольку они напрямую доступны. Ядро использует маршруты, чтобы решить, какое устройство является правильным для отправки пакета. Было бы ошибкой отправлять пакет, направленный на 192.168.1.20, через интерфейс eth1, который подключен к другой физической сети.
Третий маршрут содержит via 192.168.1.25. Это следующий переход (next hop), он нужен для отправки пакетов в физически не доступные нашей системе пункты назначения. Тут указано, что пакеты должны отправляться через промежуточное устройство с IP-адресом 192.168.1.25. Это должен быть маршрутизатор с возможностью пересылки пакета в другие сети, где пункт назначения доступен.
Последний известен как маршрут по умолчанию. Ядро использует его для отправки пакетов, которые не соответствуют никакому другому маршруту. Обычно он используется для настройки шлюза, адреса следующего перехода. На него следует направлять все пакеты, маршрут к которым мы явно не знаем. Именно так наши пакеты попадают в Интернет.
Как работает атака
Большинство клиентов VPN являются VPN на основе маршрутизации. Этот тип клиентов устанавливает туннель к сети VPN, создавая виртуальное устройство. Обычно оно называется tun0 или как-то похоже. Программа VPN шифрует весь трафик, проходящий через это виртуальное устройство, и отправляет его на другой конец туннеля. Идея заключается в том, что, хотя трафик все еще проходит через потенциально скомпрометированную сеть, теперь он делает это как зашифрованные данные.
Чтобы выбрать, какой трафик отправлять через интерфейс туннеля, в вашу систему добавляются некоторые маршруты. Как минимум, создается маршрут, похожий на 10.0.0.0/8 dev tun0. Он направляет трафик в другие системы внутри того же VPN. Для тех, кто хочет направить весь трафик через VPN, также добавляется маршрут по умолчанию, похожий на default via 10.11.12.13 dev tun0.
Что происходит, когда 2 маршрута перекрываются таким образом, что IP-адрес назначения совпадает с обоими? Например, адрес 10.0.0.1 находится в обеих подсетях 10.0.0.0/8 и 10.0.0.0/24. Тогда побеждает маршрут с большим префиксом. В данном случае 10.0.0.0/24. Это происходит потому, что это более конкретный маршрут, так как он определяет меньший диапазон адресов, поэтому они являются подмножеством другого, который является более общим.
Этим могут воспользоваться вредоносные агенты, имеющие доступ к сети. Они могут настроить свой DHCP-сервер на отправку 2 маршрутов с большим префиксом, чем те, которые настроены вашим VPN. Это заставляет вашу систему использовать больший префикс и не отправлять трафик через виртуальное туннельное устройство, поэтому он остается незашифрованным.
|
|
Маршрут по умолчанию также может быть скрыт. Default эквивалентен 0.0.0.0/0, поэтому маршруты для 0.0.0.0/1 и 128.0.0.0/1 переопределят его, так как у них больший префикс. Это означает, что злоумышленник может перенаправить весь трафик.
Политики маршрутизации спешит на помощь
Мы можем использовать политики маршрутизации для уменьшения влияния атаки TunnelVision и других подобных атак, таких
как TunnelCrack. Политики маршрутизации это метод принятия решений о
маршрутизации на основе пользовательских политик. В дистрибутивах на базе Linux, вроде Fedora, мы можем увидеть
политики с помощью команды ip rule
.
Чтобы предотвратить атаку, мы можем использовать политику маршрутизации, чтобы переместить маршруты VPN в выделенную таблицу маршрутизации с более высоким приоритетом, чем таблица, содержащая маршруты, настроенные через DHCP.
Сделайте это, создав правило политики, которое ищет пользовательскую таблицу маршрутизации, например, таблицу 75, для всех исходящих пакетов. Используйте более низкое значение приоритета, чем в основной таблице, которая равна 32766, чтобы гарантировать, что наши маршруты будут сопоставляться первыми. Обратите внимание, что более низкие значения означают более высокий приоритет.
|
|
Затем заново создайте те же маршруты, что и у VPN в новой таблице.
|
|
С помощью команды ip rule
проверьте, что правило установлено. С помощью ip route list table 75
проверьте, что
маршруты действительно были добавлены в таблицу.
Вот и все. Если какой-либо маршрут из нашей пользовательской таблицы применим, он используется. В противном случае основная таблица проверяется как обычно. Поскольку маршруты из DHCP добавляются в основную таблицу по умолчанию, они не могут переопределить маршруты VPN.
Настройка NetworkManager
На этом этапе большинство читателей, возможно, уже заметили, что ручная настройка этого каждый раз будет очень утомительной и подверженной ошибкам. Кроме того, неопытные пользователи могут столкнуться с большими трудностями при определении того, какие из маршрутов VPN, а какие являются остальными маршрутами. Более того, маршруты для несуществующего устройства не могут быть добавлены, поэтому нам нужно дождаться создания устройства VPN (например, tun0). После создания оно обычно сразу же запускается. Это создает риск утечки данных до настройки политики маршрутизации.
Если вы управляете VPN-подключением с помощью NetworkManager, вы можете поручить ему настроить политику маршрутизации. Следующая команда выполнит настройку. Вам нужно запустить ее только один раз, и изменения будут установлены в постоянную конфигурацию (даже после перезагрузки).
|
|
Совет: найдите имя подключения с помощью команды nmcli connection
.
Теперь деактивируйте и снова активируйте соединение. С этими настройками NetworkManager добавит правила и поместит маршруты в указанную таблицу.
Это довольно продвинутые конфигурации, поэтому они обычно не доступны на панели настроек графического интерфейса вашего рабочего стола.
Примечание: Из-за ошибки в NetworkManager эти настройки частично игнорировались для VPN-подключений. Это исправлено в версии 1.51.6. Новейшие версии Fedora 40 и 41 также содержат исправление. Обновите Fedora и убедитесь, что у вас есть как минимум версия NetworkManager 1.46.6-1 или 1.50.2-1.
Возможные побочные эффекты
Люди используют VPN для безопасного доступа к ресурсам внутри самого VPN. По желанию они используют его для маршрутизации всего трафика через VPN, в основном из соображений конфиденциальности. Такое поведение можно включить с помощью опции «использовать только для ресурсов в этом подключении» (называемой never-default в nmcli).
Когда VPN используется для маршрутизации всего трафика, описанная конфигурация политика маршрутизации направляет весь трафик через VPN. Даже трафик, направленный в локальную сеть (то есть на 192.168.1.20), который, как следствие, перестанет работать. Captive portals, такие, как те, которые используются для входа в сеть WiFi отелей, также не будут работать. Это происходит потому, что маршрут по умолчанию, такой как default via VPN_ADDRESS, добавляется в новую таблицу с более высоким приоритетом. Если это произойдет, вам может потребоваться отключить эту конфигурацию. Если вы достаточно опытны, вы можете добавить несколько пользовательских маршрутов в таблицу, чтобы исправить это.
Любое другое соединение, которому также необходимо добавлять маршруты, может перестать работать. Вам придется настроить его таблицу маршрутизации и конфигурации правил маршрутизации, чтобы создать правило с более высоким приоритетом.
Даже с учетом потенциальных недостатков это очень надежная конфигурация, которая должна защитить вас от любой утечки данных, связанной с подобными атаками маршрутизации.