Брандмауэры, или как еще говорят файрволы, — это важная часть системы сетевой безопасности, которая служит барьером между доверенными внутренними сетями и небезопасными внешними, такими как Интернет. Они контролируют и управляют входящим и исходящим сетевым трафиком на основе заранее установленных правил безопасности. В статье расскажу, как работают фаерволы нового поколения NGFW и познакомлю вас с инструментом, который позволяет обойти такие средства защиты.
Еще по теме: Как отключить файрвол Kali Linux
Фаерволы нового поколения NGFW
Рассматривая, как работают фаерволы нового поколения (NGFW), можно заметить нечто интересное. Например, предположим, что правило фаервола гласит «Только команда A может использовать веб-порты (80 и 443)». При начальном сканировании портов с помощью Nmap, можно обнаружить множество открытых портов. Это может ввести пентестера в заблуждение, заставив его думать, что фаервол настроен неправильно. Однако при попытке подключиться к этим, казалось бы, открытым портам соединение неожиданно обрывается.
Статья для обучения этичных хакеров. Несанкционированный взлом — уголовное преступление. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Конкретный пример такого поведения можно увидеть на Cisco Firepower Threat Defense (FTD), который, для глубокой инспекции пакетов, использует движок Snort. Согласно документации Cisco:
Чтобы движок Snort мог определить приложение, ему необходимо проанализировать несколько пакетов (обычно 3-10, в зависимости от декодера приложения). Таким образом, несколько пакетов пропускаются через FTD и достигают назначения. Эти пакеты все равно подлежат проверке по политике предотвращения вторжений на основе опции «Политика доступа —> Дополнительно —> Используемая политика предотвращения вторжений до определения правила контроля доступа».
Это означает, что даже если соединение кажется начатым, файрвол все равно может его заблокировать после анализа этих первых пакетов. Такой подход позволяет фаерволу принимать более обоснованные решения о трафике, но также может привести к появлению «открытых» портов, которые на самом деле недоступны.
Чтобы понять, как это происходит, полезно знать, как работают TCP-соединения.
Установление TCP-соединения (трехстороннее рукопожатие):
- SYN — клиент отправляет SYN-пакет с случайным номером последовательности A.
- SYN-ACK — сервер отвечает пакетом SYN-ACK. Номер подтверждения равен A + 1, и он устанавливает свой собственный номер последовательности B.
- ACK — клиент отправляет ACK с номером последовательности A + 1 и номером подтверждения B + 1.
После этого приложение может начать обмен данными через установленную сессию. Чтобы завершить соединение, конечная точка, желающая прекратить общение, инициирует завершение соединения:
Завершение TCP-соединения (четырехстороннее рукопожатие):
- FIN — один из хостов отправляет FIN-пакет, чтобы начать закрытие соединения.
- ACK — другой хост подтверждает получение FIN.
- FIN — второй хост отправляет свой собственный FIN, когда готов к закрытию.
- ACK — первый хост отправляет финальный ACK.
Теперь мы знаем, что движок IPS/IDS первоначально пропускает несколько пакетов, пока не определит, является ли трафик вредоносным. Поэтому мы можем изменить общую практику программирования и воспользоваться этой особенностью.
Общая архитектура для программирования сокетов выглядит так: мы можем подключиться, отправить данные, получить ответы, закрыть сокет и повторить процесс. Это помогает избежать обнаружения системами IDS/IPS, которые в противном случае могли бы заблокировать соединение. Именно так и работает Fragtunnel!
Обход файрвола NGFW используя Fragtunnel
Этот инструмент на Python представляет собой уникальный метод обхода фаерволов нового поколения. Он отличается от традиционных прокси или стандартных туннелей и позволяет туннелировать трафик приложений на целевые серверы, обходя обнаружение NGFW.
Механизм работы:
- Входящие данные приложения делятся на более мелкие фрагменты.
- Каждый фрагмент отправляется индивидуально через отдельные TCP-сессии.
- Фрагменты собираются на стороне назначения для восстановления исходных данных.
- Восстановленные данные передаются конечному целевому серверу.
Чтобы начать, достаточно скачать скрипт с GitHub и запустить его. Однако для правильной работы скрипта необходимо настроить как сервер туннеля, так и клиента туннеля.
Выполните следующие шаги на сервере:
1 |
git clone https://github.com/efeali/fragtunnel.git |
1 |
cd fragtunnel/ |
1 |
sudo python3 fragtunnel.py -b 127.0.0.1:80 -v |
- -b, --bind — задает IP-адрес и порт, на которых сервер туннеля будет слушать входящие соединения.
- -v, --verbose — включает подробный режим, предоставляя более детализированный вывод или информацию в журнале во время работы приложения туннелирования.
Действия на стороне клиента:
1 |
sudo python fragtunnel.py -p 1234 -t :80 -T :80 -v |
- -p, --port — указывает номер порта, на котором локальное приложение будет слушать для установления соединения.
- -t, --target — указывает IP-адрес и порт целевого сервера или службы, к которым локальное приложение намеревается подключиться.
- -T, --Tunnel — указывает IP-адрес и порт сервера туннеля, который будет способствовать соединению между локальным приложением и целевым сервером.
Когда клиент туннеля запущен и подключен к серверу туннеля, можно взаимодействовать с целевым сервером так, как если бы вы напрямую подключались к нему с локальной машины.
Если запустить tcpdump, можно заметить, что вся связь происходит с сервером, в данном случае AWS.
Заключение
Движки IDS/IPS, используемые большинством файрволов нового поколения, позволяют нескольким пакетам данных достичь цели, пока они собирают достаточно информации, чтобы принять решение о разрешении или блокировке трафика. Этот недостаток может быть использован для получения неограниченного доступа к серверу с помощью таких инструментов, как Fragtunnel.