
Инструмент для аудита и обхода межсетевых экранов нового поколения
v0.2
Fireaway — это инструмент для аудита, обхода и экфильтрации данных через правила инспекции уровня 7/AppID на межсетевых экранах нового поколения (NGFW), а также через другие механизмы защиты с глубокой инспекцией пакетов, такие как системы предотвращения потери данных (DLP) и прокси, распознающие приложения. Эти методы основаны на принципе, что для анализа данных уровня 7 межсетевой экран должен разрешить установку соединения, а также на подмене приложений для сокрытия каналов связи в журналах межсетевого экрана под видом обычного трафика пользователей (например, веб-сёрфинга). В случае обхода DLP Fireaway отправляет данные небольшими «чанками», которые не соответствуют триггерам регулярных выражений и другим правилам DLP, а также встраивает данные в поддельные HTTP-заголовки легитимных приложений — большинство технологий DLP не предназначены для их инспекции. Инструмент также успешно противостоит системам обнаружения аномалий и эвристическим движкам благодаря способности подменять заголовки приложений и скрывать внутри них данные.
Запуск сервера FireAway: Обычно сервер FireAway запускается на стороне эгресса межсетевого экрана (например, на сервере в Интернете) и прослушивает порт, который предположительно закрыт, чтобы проверить, пропускает ли трафик на этот порт какое-либо правило на основе приложений, или для получения необработанных фрагментов данных с целью выявить, могут ли DLP или прокси-приложений их идентифицировать:
python fa_server.py <порт для прослушивания> <номер режима>
Сервер может быть запущен в четырёх режимах:
Тестовый режим (режим 0) — приём данных, отправленных последовательно или сгенерированных случайным образом. Данные записываются по мере получения, сборка не требуется.
Последовательный приём чанков (режим 1) — данные отправляются на один или несколько серверов чанками заданного клиентом размера последовательно. fa_server записывает в вывод временную метку получения чанка и использует время получения как ключ порядка при сборке. Также сервер генерирует «ключ сборки» для использования с fa_assembler.py. Это случайно сгенерированный 4-символьный ключ, используемый в качестве разделителя между чанками, с расчётом на то, что эти символы не встречаются в передаваемых фрагментах данных.
Случайный приём чанков (режим 2) — данные отправляются на один или несколько серверов в случайном порядке. Этот режим зависит от передачи «сообщения с ключом последовательности» от клиента на случайный сервер в пуле. При запуске каждого сервера появится запрос на ввод «идентификатора ключа последовательности». Это должен быть шаблон, отсутствующий в передаваемом файле, чтобы сервер мог правильно идентифицировать данные, полученные через соединение, как ключ последовательности. УБЕДИТЕСЬ, ЧТО НА ВСЕХ СЕРВЕРАХ ИСПОЛЬЗУЕТСЯ ОДИН И ТОТ ЖЕ ИДЕНТИФИКАТОР КЛЮЧА ПОСЛЕДОВАТЕЛЬНОСТИ! Клиент случайным образом выберет сервер для передачи ключа последовательности, поэтому важно, чтобы все серверы могли найти ключ последовательности в полученных данных. Ключ последовательности будет записан принимающим сервером в файл 'SequenceKey.txt'.
Приём чанков с подменой приложения (режим 3) — данные в кодировке Base64 отправляются на один или несколько серверов внутри HTTP-заголовков, имитирующих легитимные приложения. Этот режим также генерирует «ключ сборки» для использования со скриптом fa_assembler.
Все данные, полученные серверами на указанном порту, сохраняются в файл ReceivedData.txt в каталоге, из которого был запущен сервер. Если сервер обнаруживает разный объём полученных данных (что указывает на срабатывание фильтрации межсетевого экрана), в консоли сервера отображается:
Получено одинаковое или меньшее количество данных при двух последовательных запусках. Если отправляются тестовые данные, возможно, достигнут максимальный размер утечки данных.
Запуск клиента FireAway / средства подмены приложений: Клиент FireAway имеет три режима:
Тестовый режим (режим 0) — отправка случайных данных чанками увеличивающегося размера для определения максимального объёма данных, который можно передать до срабатывания средств контроля уровня 7 и остановки потока.
Режим последовательной экфильтрации (режим 1) — открыть файл и отправить его чанками заданного размера. Данные передаются последовательно.
Режим случайной экфильтрации (режим 2) — открыть файл и отправить его чанками заданного размера, но в случайном порядке. При использовании этого режима клиент запросит идентификатор ключа последовательности. Это значение, заданное на удалённых серверах; клиент помечает сгенерированный ключ последовательности этим идентификатором и передаёт его на случайный сервер (если предоставлен список) или на указанный IP-адрес сервера перед началом передачи файла.
Для запуска базового клиента:
python fa_client.py <IP-адрес сервера FireAway или путь к файлу со списком серверов> <Порт сервера FireAway> <Режим клиента>
Список серверов должен быть простым текстовым файлом, содержащим список IP-адресов (по одному на строку). Если используется только один сервер, можно указать один IP-адрес.
Клиент подмены приложений имеет три режима:
Тестовый режим (режим 0) — отправка случайных тестовых данных внутри HTTP-заголовков чанками увеличивающегося размера для определения максимального объёма данных, который можно передать до срабатывания средств контроля уровня 7 и остановки потока.
Режим экфильтрации с кодированием Base64 (режим 1) — кодирование входного файла в Base64 и передача частей закодированного файла внутри случайно сгенерированных HTTP-заголовков для обхода DLP и маскировки передачи под легитимное приложение.
Для запуска клиента подмены приложений:
python fa_spoof.py <IP-адрес сервера FireAway или путь к файлу со списком серверов> <Порт сервера FireAway> <Режим клиента>
Подмена приложений случайным образом вставляет HTTP-заголовки внутрь заголовков, выглядящих как легитимные приложения (например, Facebook, LinkedIn и т.д.), с фрагментами данных, чтобы засорить журналы различными приложениями и замаскировать экфильтрацию данных.
Сборщик Fireaway: Сборщик Fireaway (fa_assembler.py) используется для сборки данных, полученных серверами Fireaway. Сборщик имеет три режима, соответствующие режиму серверов, которые получили данные:
Режим 1 — сборка данных, полученных в последовательном порядке серверами в режиме 1. Сборщик запросит указать ключ сборки для файла с полученными данными от каждого сервера; это случайное значение, которое сервер сгенерировал и отобразил при запуске. Это значение также можно найти, просмотрев файлы с полученными чанками и проверив первые четыре символа.
Режим 2 — сборка данных, полученных в случайном порядке серверами в режиме 2. Сборщик запросит путь к ключу последовательности, который был получен от клиента случайным сервером во время передачи. Также будет запрос ключей сборки для каждого файла.
Режим 3 — сборка данных в кодировке Base64, полученных в поддельных HTTP-заголовках приложений. Этот режим, как и режим 1, также запросит ключ сборки.
Для запуска сборщика:
python fa_assembler.py <режим сборки> <разделённые запятыми пути к файлам для сборки>
Результат будет сохранён в указанное имя файла.
О любых проблемах или вопросах сообщайте через Github.