
Opensvp is a security tool implementing "attacks" to be able to test the resistance of firewall to protocol level attack.
Opensvp — это инструмент безопасности, реализующий "атаки" для проверки устойчивости брандмауэра к атакам на уровне протоколов. Он реализует классические атаки, а также некоторые новые виды атак на шлюзы прикладного уровня (называемые хелперами в мире Netfilter).
Например, opensvp может при определенных условиях (см. пояснения ниже) открыть отверстие в брандмауэре, защищающем FTP-сервер: даже если политика фильтрации гарантирует, что открыт только порт 21, вы можете открыть 'любой' порт на сервере с помощью opensvp.
Предположим, есть сервер 192.168.2.3, работающий с FTP, расположенный за брандмауэром. Если пользователь под root выполнит::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
То он получит временный доступ к порту 23 сервера независимо от правил брандмауэра.
Документ "Secure use of iptables and connection tracking helpers" https://home.regit.org/netfilter-en/secure-use-of-helpers/ описывает метод защиты от этого типа атак.
См. следующую главу для точного описания реализованной атаки.
Находясь в сети, напрямую подключенной к брандмауэру через интерфейс eth0, атакующий может выполнить следующую команду::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
192.168.2.3 — это адрес FTP-сервера, а 23 — порт, который мы хотим открыть на сервере.
После успешной атаки можно подключиться к 192.168.2.3 по порту 23.
Клиент может отправить поддельное командное сообщение, которое интерпретируется брандмауэрами как возможное открытие динамического соединения.
Можно использовать стандартный сервер для отправки атаки, но с помощью пользовательского сервера вы будете знать преобразования, выполняемые возможным NAT-шлюзом.
Типичный сеанс выглядит следующим образом. На сервере с IP-адресом 1.2.3.4 можно запустить::
$ opensvp --server --helper irc -v
Затем на клиенте можно выполнить::
$ opensvp --client -t 1.2.3.4 --helper irc --port 23 -v 2.3.4.5:23 should be opened from outside
На сервере отобразится следующее сообщение::
You should be able to connect to 2.3.4.5:23
Здесь 2.3.4.5 — это публичный адрес клиента.
На атакующей стороне необходимо запустить opensvp и указать, какая очередь Netfilter используется и какой выходной интерфейс::
Затем нужно использовать iptables для перенаправления трафика, который вы хотите скрыть от механизма распознавания протоколов, в пользовательское пространство::
iptables -I INPUT -p tcp --sport 443 -j NFQUEUE iptables -I OUTPUT -p tcp --dport 443 -j NFQUEUE
Когда закончите, нажмите CTRL+C, чтобы прервать процесс атаки.
Некоторые сетевые протоколы используют несколько соединений для обмена между клиентом и сервером. Самый известный пример — FTP, где команды передаются через соединение на порту 21, а обмен данными осуществляется в двух разных режимах (соединение с порта 20 или динамическое соединение).
Некоторые реализации брандмауэров реализуют шлюзы прикладного уровня (ALG) для обнаружения этого параллельного соединения и динамического разрешения его. Другие решения — использование ретранслятора приложений (прозрачного прокси) или открытие всех возможных потоков (то есть почти всего).
ALG анализирует трафик, обнаруживает и разбирает команды, отправляемые между пирами, для объявления параметров параллельных соединений. После этого они временно открывают отверстия в брандмауэре, чтобы пропустить вероятный трафик.
Идея этой атаки — подделать такие сообщения для открытия отверстий в брандмауэре, которые не должны были быть открыты.
Условия:
Кинематика следующая:
Сниффер в сети атакующего захватывает один пакет из потока протокола
Поддельный пакет отправляется на интерфейс, подключенный к брандмауэру
Брандмауэр передает пакет обратно клиенту и теперь ожидает пакет с характеристиками, основанными на вводе атакующего
Эта атака является прямым применением описанного принципа. Как только пакет данных получен, атакующий отправляет поддельную DCC-команду.
В этой атаке клиентское соединение открывается атакующим. Он подключается к FTP-серверу за брандмауэром и устанавливает реальное соединение. После того как сессия установлена, он запускает атаку, отправляя поддельную команду 227.
Если используется IPv6, та же атака выполняется с поддельной командой 229.
Возможные цели
Основное ограничение этих атак — атакующий должен находиться в сети,
напрямую подключенной к брандмауэру.
Таким образом, основные возможности:
* Атака из локальной сети пользователя
* Атака в хостинг-центре
В обоих случаях это может привести к серьезному раскрытию информации, предоставляя атакующему доступ к
незащищенным службам.
Linux
~~~~~
Известно, что эта атака работает на IPv4-брандмауэрах Netfilter, если rp_filter установлен в
0 (что, к счастью, не является значением по умолчанию).
В настоящее время нет реализации обратной проверки пути (reverse path filtering) для IPv6, поэтому брандмауэр
не защищен, и защиту необходимо настраивать в правилах брандмауэра (см.
следующую главу).
Известно, что некоторые программные брандмауэры уязвимы:
* fwbuilder: требуется специальная политика
* shorewall: последние версии исправляют проблему
* edenwall: уязвим
Атака работает как для шлюзовых, так и для локальных брандмауэров. На локальном брандмауэре должна быть активирована фильтрация FORWARD
и должно быть установлено правило ESTABLISHED ACCEPT в этой
цепочке. Это может быть характерно для систем, работающих с виртуальными машинами.
Защита от атаки
===============
Linux
-----
См. следующий документ, посвященный этой теме: https://home.regit.org/netfilter-en/secure-use-of-helpers/
Другие ОС и устройства
-----------------------
Основное требование — включить строгую защиту от спуфинга и, по возможности, контролировать загрузку ALG.