
FakeNet-NG — Инструмент динамического анализа сети нового поколения
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Д О К У М Е Н Т А Ц И Я
FakeNet-NG 3.5 — это инструмент динамического анализа сети нового поколения для специалистов по анализу вредоносного ПО и тестировщиков на проникновение. Он является открытым и разработан для последних версий Windows (и Linux, для определенных режимов работы). FakeNet-NG основан на отличном инструменте Fakenet, разработанном Эндрю Хонигом и Майклом Сикорски.
Инструмент позволяет перехватывать и перенаправлять весь сетевой трафик или его часть, одновременно имитируя легитимные сетевые службы. Используя FakeNet-NG, аналитики вредоносного ПО могут быстро идентифицировать функциональность вредоносного ПО и захватывать сетевые сигнатуры. Специалисты по тестированию на проникновение и исследователи уязвимостей найдут настраиваемый механизм перехвата и модульную архитектуру FakeNet-NG чрезвычайно полезными при тестировании специфической функциональности приложений и прототипировании PoC.
Вы можете установить FakeNet-NG несколькими различными способами. Обратите внимание, что описанные ниже процессы установки загрузят на вашу систему сторонние библиотеки с открытым исходным кодом, используемые FakeNet-NG. Эти библиотеки будут динамически загружаться во время выполнения, и некоторые из них могут быть лицензированы по LGPL.
Проще всего просто загрузить скомпилированную версию, которую можно получить на странице релизов:
https://github.com/mandiant/flare-fakenet-ng/releases
Запустите FakeNet-NG, выполнив 'fakenet.exe'.
Это предпочтительный метод использования FakeNet-NG в Windows, так как он не требует установки дополнительных модулей, что идеально для машины анализа вредоносного ПО.
ПРИМЕЧАНИЕ: FakeNet-NG может быть помечен как вредоносный антивирусными (AV) и решениями для обнаружения и реагирования на конечных точках (EDR) (например, Защитник Windows, Безопасный просмотр Chrome). Это, вероятно, связано с его способностью изменять сетевой трафик и имитировать сетевые службы, а также с использованием PyInstaller для сборки исполняемых файлов релиза. Официальные бинарные файлы релиза безопасны, и эти обнаружения следует считать ложными срабатываниями. Напоминаем, что FakeNet-NG разработан и настоятельно рекомендуется для использования в контролируемой и изолированной среде, такой как виртуальная машина (VM), где он может безопасно изменять сетевые настройки системы.
Установите Python 3.10.11 и последнюю версию pip для ОС Windows/Linux.
В Windows загрузите и установите Средства сборки Visual C++.
Установка в Linux требует следующих зависимостей:
Установите эти зависимости с помощью следующей команды:
sudo apt-get install build-essential python3.10-dev libnetfilter-queue-dev
Установите FakeNet-NG как модуль Python с помощью pip:
python -m pip install https://github.com/mandiant/flare-fakenet-ng/zipball/master
Или получив последний исходный код и установив его вручную:
git clone https://github.com/mandiant/flare-fakenet-ng/
Установите зависимости Python, выполнив следующие команды с правами администратора:
В Linux (протестировано в Ubuntu 24.04.2 LTS) выполните следующие команды перед запуском setup.py:
python -m pip install --upgrade setuptools
# сборка wheel для python 3.10
python -m pip install --force-reinstall netifaces
# Наблюдалась ошибка "ModuleNotFoundError: No module named '_cffi_backend'" во время тестирования
# Это позволит получить необходимую версию пакетов cffi для cryptography
python -m pip install --upgrade cryptography
Наконец, если вы хотите избежать установки FakeNet-NG и просто запустить его как есть (например, для разработки), вам необходимо получить исходный код и установить зависимости следующим образом:
Установите 64-битную или 32-битную Python 3.10.11 для 64-битной или 32-битной версии Windows/Linux соответственно.
В Windows установите зависимости Python, выполнив следующие команды с правами администратора:
python -m pip install pydivert dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
ПРИМЕЧАНИЕ: pydivert также загрузит и установит библиотеку и драйвер WinDivert в каталог %PYTHONHOME%\DLLs. FakeNet-NG включает эти файлы, поэтому они не требуются для обычного использования.
В Linux установите зависимости Python, выполнив следующие команды с правами администратора:
python -m pip install --upgrade setuptools
# сборка wheel для python 3.10
python -m pip install --force-reinstall netifaces
# Наблюдалась ошибка "ModuleNotFoundError: No module named '_cffi_backend'" во время тестирования
# Это позволит получить необходимую версию пакетов cffi для cryptography
python -m pip install --upgrade cryptography
python -m pip install netfilterqueue dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
Опционально можно установить следующий модуль, используемый для тестирования:
python -m pip install requests
Загрузите исходный код FakeNet-NG:
git clone https://github.com/mandiant/flare-fakenet-ng
В Linux освободите порт 53 для DNS-прослушивателя:
Самый простой способ запустить FakeNet-NG — просто выполнить предоставленный исполняемый файл от имени администратора. Вы можете указать параметр командной строки --help, чтобы получить простую справку:
C:\tools\fakenet-ng>fakenet.exe --help
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Версия 3.5
_____________________________________________________________
Разработано командой FLARE
Copyright (C) 2016-2026 Mandiant, Inc. Все права защищены.
_____________________________________________________________
Использование: python -m fakenet.fakenet [опции]:
Опции:
-h, --help показать это справочное сообщение и выйти
-c FILE, --config-file=FILE
имя файла конфигурации
-v, --verbose выводить более подробные сообщения (по умолчанию: False)
-l LOG_FILE, --log-file=LOG_FILE
-s, --log-syslog Ведение журнала в syslog через /dev/log (по умолчанию: False)
-f STOP_FLAG, --stop-flag=STOP_FLAG
завершить работу, если создан файл сигнального флага
-p, --no-pause отключить паузу для подтверждения перед закрытием консоли
(по умолчанию: пауза)
-n, --no-console-output
Подавить вывод на консоль (для тестирования в Linux)
Как видно из приведенной выше простой справки, можно настроить файл конфигурации, используемый для запуска FakeNet-NG. По умолчанию инструмент использует configs\default.ini; однако его можно изменить с помощью параметра -c. В каталоге configs находится несколько примеров файлов конфигурации. Из-за большого количества различных настроек FakeNet-NG полагается на файлы конфигурации для управления своей функциональностью.
ПРИМЕЧАНИЕ: FakeNet-NG попытается найти указанный файл конфигурации, сначала используя предоставленный абсолютный или относительный путь, если вы хотите хранить все свои конфигурации. Если указанный файл конфигурации не найден, тогда он попытается найти его в своем каталоге configs.
Остальные параметры командной строки позволяют управлять объемом выводимых журналов, а также перенаправлять их в файл, вместо вывода на экран.
Прежде чем углубиться и запустить FakeNet-NG, давайте рассмотрим несколько основных концепций. Инструмент состоит из нескольких модулей, работающих вместе. Один из таких важных модулей — Diverter, который отвечает за перенаправление трафика в набор слушателей. Diverter заставляет приложения взаимодействовать с FakeNet-NG, а не с реальными серверами. Слушатели — это отдельные службы, обрабатывающие входящие соединения и позволяющие нам анализировать трафик приложения (например, сигнатуры вредоносного ПО).
Давайте запустим FakeNet-NG с настройками по умолчанию, выполнив следующую команду:
C:\tools\fakenet-ng>fakenet.exe
Ниже представлен аннотированный вывод журнала, иллюстрирующий пример перехваченного DNS-запроса и HTTP-соединения:
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Версия 3.5
_____________________________________________________________
Разработано командой FLARE
Copyright (C) 2016-2026 Mandiant, Inc. Все права защищены.
_____________________________________________________________
07/06/16 10:20:52 PM [ FakeNet] Загружен файл конфигурации: configs/default.ini
/
файл конфигурации по умолчанию /
07/06/16 10:20:52 PM [ Diverter] Захват трафика в packets_20160706_222052.pcap
/
файл вывода PCAP /
07/06/16 10:20:52 PM [ FakeNet] Анонимный пересыльщик слушает на TCP порту 8080...
\
\ Правило анонимного слушателя
07/06/16 10:20:52 PM [ RawTCPListener] Запуск...
07/06/16 10:20:52 PM [ RawUDPListener] Запуск...
07/06/16 10:20:52 PM [ FilteredListener] Запуск...
07/06/16 10:20:52 PM [ DNS Server] Запуск...
07/06/16 10:20:52 PM [ HTTPListener80] Запуск...
07/06/16 10:20:52 PM [ HTTPListener443] Запуск...
07/06/16 10:20:52 PM [ SMTPListener] Запуск...
07/06/16 10:20:52 PM [ Diverter] Запуск...
\
\ Запуск слушателей
07/06/16 10:20:52 PM [ Diverter] Перенаправление портов:
07/06/16 10:20:52 PM [ Diverter] TCP: 1337, 80, 443, 25
07/06/16 10:20:52 PM [ Diverter] UDP: 1337, 53
/
Сводка перенаправляемых портов /
07/06/16 10:21:03 PM [ Diverter] Изменение исходящего внешнего пакета UDP-запроса:
07/06/16 10:21:03 PM [ Diverter] от: 192.168.250.140:49383 -> 4.2.2.1:53
07/06/16 10:21:03 PM [ Diverter] к: 192.168.250.140:49383 -> 192.168.250.140:53
07/06/16 10:21:03 PM [ Diverter] pid: 456 имя: malware.exe
/
Перехваченный трафик к DNS-серверу от malware.exe /
07/06/16 10:21:03 PM [ DNS Server] Получен A-запрос для домена 'evil.com'.
\
\ Поддельный DNS-слушатель обрабатывает указанный выше запрос
07/06/16 10:21:04 PM [ Diverter] Изменение исходящего внешнего пакета TCP-запроса:
07/06/16 10:21:04 PM [ Diverter] от: 192.168.250.140:2179 -> 192.0.2.123:80
07/06/16 10:21:04 PM [ Diverter] к: 192.168.250.140:2179 -> 192.168.250.140:80
07/06/16 10:21:04 PM [ Diverter] pid: 456 имя: malware.exe
/
Перехваченный трафик к веб-серверу от malware.exe /
07/06/16 10:21:08 PM [ HTTPListener80] Получен GET-запрос.
07/06/16 10:21:08 PM [ HTTPListener80] --------------------------------------------------------------------------------
07/06/16 10:21:08 PM [ HTTPListener80] GET / HTTP/1.0
07/06/16 10:21:08 PM [ HTTPListener80]
07/06/16 10:21:08 PM [ HTTPListener80] --------------------------------------------------------------------------------
\
\ Поддельный HTTP-слушатель обрабатывает указанный выше запрос
Обратите внимание, что каждая строка журнала содержит имя текущего запущенного модуля FakeNet-NG. Например, при перенаправлении трафика журналы будут иметь префикс с меткой Diverter:
07/06/16 10:21:03 PM [ Diverter] Изменение исходящего внешнего пакета UDP-запроса:
07/06/16 10:21:03 PM [ Diverter] от: 192.168.250.140:49383 -> 4.2.2.1:53
07/06/16 10:21:03 PM [ Diverter] к: 192.168.250.140:49383 -> 192.168.250.140:53
07/06/16 10:21:03 PM [ Diverter] pid: 456 имя: malware.exe
В то же время, когда отдельные слушатели обрабатывают перенаправленный трафик, журналы будут помечены именем, заданным в файле конфигурации:
07/06/16 10:21:03 PM [ DNS Server] Получен A-запрос для домена 'evil.com'.
Чтобы остановить FakeNet-NG и сохранить созданный файл PCAP и HTML-отчет на диск, просто нажмите CTRL-C:
07/06/16 10:21:41 PM [ FakeNet] Остановка...
07/06/16 10:21:42 PM [ HTTPListener80] Остановка...
07/06/16 10:21:42 PM [ HTTPListener443] Остановка...
07/06/16 10:21:42 PM [ SMTPListener] Остановка...
07/06/16 10:21:43 PM [ Diverter] Остановка...
07/06/16 10:21:43 PM [ Diverter] Создан новый HTML-отчет: report_20160607_102143.html
[Нажмите Enter для выхода]
Подождите, пока будут созданы PCAP и отчет, затем нажмите Enter, чтобы выйти. Окно консоли останется открытым, пока вы этого не сделаете; это можно отключить (например, в скриптах) с помощью флага --no-pause.
С каждым сеансом FakeNet-NG создается HTML-отчет, содержащий сетевые индикаторы (NBI), захваченные в течение сеанса. После завершения работы FakeNet нажатием CTRL-C этот HTML-файл будет сохранен в корневой каталог FakeNet. Пользователь может просмотреть NBI, открыв этот HTML-файл в браузере, таком как Chrome или Firefox.
HTML-отчет служит интерактивным графическим интерфейсом пользователя (GUI), который представляет сводку NBI в удобной для пользователя форме. Он включает различные функции для выбора, фильтрации и копирования NBI, что упрощает анализ сети. Пользовательский интерфейс организует все NBI на основе информации об их процессе, а затем дополнительно категоризирует их по протоколу прикладного или транспортного уровня, который они используют.
Информация в таблице сводки NBI представлена в табличном формате и включает следующие сведения:
Выбрать: Нажатие на флажок выбирает соответствующий NBI. Вы можете выбрать несколько NBI в разных или одних и тех же протоколах. Всю строку также можно выбрать, щелкнув в любом месте строки. Выбранные NBI можно скопировать с помощью кнопки "Копировать выбранные NBI".
NBI: Эта ячейка представляет фактический захваченный NBI. Она включает команды, параметры, URI и другие значимые действия, выполняемые клиентом по отношению к слушателю. Эта ячейка суммирует поведение вредоносного ПО для лучшего понимания.
Дополнительная информация: Эта ячейка предоставляет дополнительную информацию о каждом запросе NBI, такую как используемый протокол транспортного уровня, IP-адрес назначения, порт и шифрование SSL.
Действия: Эта ячейка позволяет выполнять действия с отдельными NBI. В настоящее время поддерживается только копирование. Нажатие кнопки копирования копирует данные конкретной ячейки NBI в формате markdown, подходящем для создания отчетов.
Пользовательский интерфейс также включает различные интерактивные функции:
Выбор с помощью флажков: Флажки доступны перед каждым блоком процесса и протокола. Установка флажка выбирает все NBI в рамках этого процесса или протокола. Это полезно, когда вы хотите выбрать все NBI из определенного процесса или протокола. Затем вы можете использовать кнопку Копировать выбранные NBI, чтобы скопировать выбранные данные.
Строка поиска: Строка поиска позволяет вводить ключевые слова, и на HTML-странице будут отображаться только строки, содержащие эти ключевые слова в имени процесса, NBI или дополнительной информации. Затем вы можете использовать кнопку "Копировать отфильтрованные данные", чтобы скопировать отображаемые данные в формате markdown. Очистка поискового запроса восстанавливает исходное представление таблицы.
Кнопки копирования:
Копировать выбранные данные: Копирует все выбранные NBI в формате markdown. Вы можете выбрать отдельные NBI или все NBI в рамках процесса, установив флажки.Копировать отфильтрованные данные: Копирует данные отфильтрованных NBI в формате markdown. Если поисковый запрос не используется, эта кнопка копирует все данные.Копировать все NBI: Копирует все NBI, присутствующие на HTML-странице, в формате markdown. Даже если применяется фильтр, нажатие этой кнопки копирует все NBI.Кнопка отказа от ответственности: Отображает отказ от ответственности, который описывает важные факты, которые пользователь должен учитывать перед тем, как делать предположения об отображаемой сводке NBI.
Кнопка "Перейти вверх": Появляется, когда содержимое страницы превышает видимую область. Нажатие этой кнопки приводит к переходу в верхнюю часть страницы, где вы можете получить доступ к важным кнопкам, таким как Копировать выбранные NBI, Копировать все NBI, и строке поиска.
Чтобы в полной мере использовать возможности FakeNet-NG, мы должны понимать структуру его файла конфигурации и настройки. Ниже приведен пример файла конфигурации:
###############################################################################
# Fakenet Configuration
[FakeNet]
DivertTraffic: Yes
###############################################################################
# Diverter Configuration
[Diverter]
NetworkMode: Auto
LinuxRedirectNonlocal: *
LinuxFlushIptables: Yes
LinuxFlushDNSCommand: service dns-clean restart
DumpPackets: Yes
DumpPacketsFilePrefix: packets
ModifyLocalDNS: No
StopDNSService: Yes
RedirectAllTraffic: Yes
DefaultTCPListener: RawTCPListener
DefaultUDPListener: RawUDPListener
###############################################################################
# Listener Configuration
[DNS Server]
Enabled: True
Port: 53
Protocol: UDP
Listener: DNSListener
DNSResponse: 192.0.2.123
NXDomains: 0
Hidden: False
[RawTCPListener]
Enabled: True
Port: 1337
Protocol: TCP
Listener: RawListener
UseSSL: No
Timeout: 10
Hidden: False
Файл конфигурации разбит на несколько разделов.* [FakeNet] - Управляет поведением самого приложения. Единственный допустимый на данный момент параметр — DivertTraffic. Если он включен, инструмент запускает соответствующий плагин Diverter и перехватывает трафик. Если параметр отключен, FakeNet-NG по-прежнему запускает прослушиватели, но полагается на другой метод направления трафика к ним (например, ручное изменение DNS-сервера).
[Diverter] - Настройки перенаправления трафика. Подробно описаны ниже.
[Имя прослушивателя] - Набор конфигураций прослушивателя. Каждый прослушиватель имеет набор настроек по умолчанию (например, порт, протокол), а также специфические конфигурации (например, DumpHTTPPosts для HTTPListener).
Предположим, вы включили параметр DivertTraffic в блоке конфигурации [FakeNet]. Инструмент активирует свой механизм перенаправления трафика, который мы будем называть Diverter, ссылаясь на отличную библиотеку WinDivert, используемую для выполнения всей магии на платформах Windows (реализация Diverter для Linux использует python-netfilterqueue).
Diverter проверяет все исходящие пакеты и сопоставляет их со списком протоколов и портов включенных прослушивателей. Если есть прослушиватель, ожидающий на порту и протоколе пакета, то адрес назначения будет изменен на IP-адрес локальной машины, где прослушиватель обработает запрос. В то же время ответы от прослушивателя будут изменены так, чтобы исходный IP-адрес выглядел так, как будто пакет приходит от первоначально запрошенного хоста.
Вы можете дополнительно включить параметр DumpPackets, чтобы сохранить весь трафик, наблюдаемый FakeNet-NG (перенаправленный или переадресованный), в файл PCAP. Также возможно расшифровать SSL-трафик между перехваченным приложением и одним из прослушивателей с поддержкой SSL. Используйте инструкции на следующей странице:
https://wiki.wireshark.org/TLS
Ключи privkey.pem и server.pem, используемые серверами FakeNet-NG, находятся в корневом каталоге приложения.
SingleHost: манипулировать трафиком от локальных процессов.MultiHost: манипулировать трафиком от других систем.Auto: использовать тот NetworkMode, который наиболее функционален на текущей платформе.NetworkMode. Вот текущий статус поддержки:
SingleHostMultiHost и экспериментально поддерживает режим SingleHost (работает, за исключением черных и белых списков процессов, портов и хостов).Auto, чтобы получить режим SingleHost на Windows и режим MultiHost на Linux.Diverter в целом поддерживает следующую настройку, связанную с DNS:
Реализация Diverter для Windows поддерживает следующую настройку, связанную с DNS:
Реализация Diverter для Linux поддерживает следующие настройки:
LinuxRedirectNonlocal - При использовании FakeNet-NG для имитации подключения к Интернету для другого хоста, эта настройка указывает, какие внешние сетевые интерфейсы следует перенаправлять на FakeNet-NG.
LinuxFlushIptables - Сбрасывает все правила iptables перед добавлением правил для FakeNet-NG. Linux Diverter восстановит старые правила, если его последовательность завершения не будет прервана.
LinuxFlushDnsCommand - Укажите правильную команду для вашего дистрибутива Linux для очистки кеша DNS-резолвера, если применимо.
DebugLevel - Указывает детализированные события отладки для отображения. См. fakenet/diverters/linutil.py для допустимых меток.
По умолчанию Diverter перехватывает только тот трафик, для которого создан специальный прослушиватель. Однако, включив параметр RedirectAllTraffic и настроив обработчики TCP и UDP по умолчанию с помощью DefaultTCPListener и DefaultUDPListener, можно динамически обрабатывать трафик, идущий на порты, не определенные явно ни в одном из прослушивателей. Например, рассмотрим пример конфигурации, которая перенаправляет весь трафик на локальные прослушиватели TCP и UDP на портах 1234:
RedirectAllTraffic: Yes
DefaultTCPListener: TCPListener1234
DefaultUDPListener: UDPListener1234
ПРИМЕЧАНИЕ: Мы несколько забегаем вперед с определениями прослушивателей, но просто учтите, что TCPListener1234 и UDPListener1234 будут определены в разделе ниже.
С настройкой RedirectAllTraffic FakeNet-NG будет изменять не только адрес назначения, но и порт назначения, чтобы он мог быть обработан одним из прослушивателей по умолчанию. Ниже приведен пример журнала трафика, направленного на внешний хост с IP-адресом 1.1.1.1 на порт 4444, который был перенаправлен на прослушиватель по умолчанию на порт 1234:
07/06/16 01:13:47 AM [ Diverter] Modifying outbound external TCP request packet:
07/06/16 01:13:47 AM [ Diverter] from: 192.168.66.129:1650 -> 1.1.1.1:4444
07/06/16 01:13:47 AM [ Diverter] to: 192.168.66.129:1650 -> 192.168.66.129:1234
07/06/16 01:13:47 AM [ Diverter] pid: 3716 name: malware.exe
Важно отметить, что трафик, направленный на порт из одного из явно определенных прослушивателей, по-прежнему будет обрабатываться этим прослушивателем, а не прослушивателем по умолчанию. Например, прослушиватель UDP по умолчанию не будет обрабатывать DNS-трафик, если определен отдельный DNS-прослушиватель на UDP порте 53.
Одна из проблем при включении параметров RedirectAllTraffic заключается в том, что вы можете захотеть пропустить некоторый трафик для обеспечения нормальной работы машины. Рассмотрим сценарий, когда вы пытаетесь проанализировать приложение, которому все еще нужно подключаться к внешнему DNS-серверу. Вы можете использовать настройки BlackListPortsTCP и BlackListPortsUDP для определения списка портов, трафик на которые будет игнорироваться и пересылаться без изменений, или BlackListIDsICMP (только Windows) для определения списка ICMP-идентификаторов, которые будут отфильтрованы и проигнорированы:
BlackListPortsUDP: 53
Некоторые другие настройки Diverter, которые вы можете рассмотреть: ProcessBlackList и HostBlackList, которые позволяют Diverter игнорировать и пересылать трафик, поступающий от определенного имени процесса или предназначенный для определенного хоста, соответственно.
Конфигурации прослушивателей определяют поведение отдельных прослушивателей. Рассмотрим пример конфигурации прослушивателя:
[TCPListener1234]
Enabled: True
Port: 1234
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 10
Hidden: False
Приведенная выше конфигурация состоит из имени прослушивателя TCPListener1234. Оно будет использоваться для целей ведения журнала, чтобы вы могли различать разные прослушиватели, обрабатывающие соединения, даже если они обрабатывают один и тот же протокол.
Следующие настройки являются общими для всех прослушивателей:
Настройки Port и Protocol необходимы прослушивателям, чтобы знать, к каким портам привязываться, и, если они поддерживают несколько протоколов (например, RawListener), решить, какой протокол использовать. Они также используются Diverter, чтобы определить, какие порты и протоколы перенаправлять.
Настройка Listener определяет один из доступных плагинов прослушивателя для обработки перенаправленного трафика. Текущая версия FakeNet-NG поставляется со следующими прослушивателями:
DNSResponse. Вы также можете установить атрибут NXDomains на количество запросов, которые прослушиватель должен игнорировать. Таким образом вы можете заставить вредоносное ПО запрашивать все свои резервные имена C2-контроллеров. Прослушиватель поддерживает как TCP, так и UDP протоколы.Webroot в зависимости от запрошенного расширения файла. Опционально сохраняет POST-запросы в настраиваемый файл, который можно указать с помощью настроек DumpHTTPPosts и DumpHTTPPostsFilePrefix.ПРИМЕЧАНИЕ: FakeNet-NG попытается найти корневой каталог веб-сервера, сначала используя указанные абсолютные или относительные пути. Если указанный путь корневого каталога не найден, он попытается найти его в своем каталоге defaultFiles.
В качестве особого случая, реализация Diverter для Windows автоматически отвечает на все ICMP-запросы во время работы. Так что если вредоносное ПО попытается выполнить ping к хосту для проверки связи, оно получит действительный ответ. Linux Diverter регистрирует и пересылает все ICMP-пакеты на localhost.
ПРИМЕЧАНИЕ: Некоторые прослушиватели могут обрабатывать загрузку файлов (например, TFTPListener и BITSListener). Все загруженные файлы будут сохранены в текущем рабочем каталоге с настраиваемым префиксом (например, "tftp_" для загрузок TFTP).
FakeNet-NG поддерживает несколько правил фильтрации, состоящих из черных и белых списков процессов и хостов. Белые списки рассматриваются как правила, разрешающие подключения к прослушивателям, в то время как черные списки используются для игнорирования входящих подключений и их простой пересылки.
Например, рассмотрим конфигурацию ниже с фильтрами процессов и хостов:
[FilteredListener]
Enabled: True
Port: 31337
Protocol: TCP
Listener: RawListener
UseSSL: No
Timeout: 10
ProcessWhiteList: malware.exe, ncat.exe
HostBlackList: 5.5.5.5
Приведенный выше FilteredListener будет обрабатывать только подключения от процессов malware.exe и ncat.exe, но будет игнорировать любые подключения, предназначенные для хоста 5.5.5.5. Это означает, что если процесс с именем test.exe попытается подключиться на порт 31337, он не будет перенаправлен на прослушиватель и будет переслан туда, куда изначально предполагалось, если маршрут доступен.
В то же время, если процесс malware.exe попытается подключиться к порту 31337 на любом хосте, кроме 5.5.5.5, он будет перенаправлен на FilteredListener. Любые подключения от процесса malware.exe к 5.5.5.5 будут пропущены.
Еще одна мощная настройка конфигурации — ExecuteCmd. Она позволяет выполнять произвольную команду при первом обнаруженном пакете соединения. Значение ExecuteCmd может использовать несколько переменных форматной строки:
{pid} - идентификатор процесса{procname} - имя исполняемого файла процесса{src_addr} - исходный адрес{src_port} - исходный порт{dst_addr} - адрес назначения{dst_port} - порт назначенияРассмотрим сценарий упакованного образца вредоносного ПО, которое подключается к настроенному C2-серверу на порту 8443 (используйте RedirectAllTraffic, если порт неизвестен). Во многих случаях вредоносное ПО распаковывается к моменту установления соединения, что делает эту точку выполнения идеальной для подключения к процессу с помощью отладчика и дампа распакованной версии для дальнейшего анализа.
Посмотрим, как это можно использовать для автоматического запуска отладчика при первом соединении:
[C2Listener]
Enabled: True
Port: 8443
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 300
ProcessWhiteList: malware.exe
ExecuteCmd: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\windbg.exe -p {pid}
Как только FakeNet-NG обнаружит новое соединение от процесса из белого списка malware.exe (эта настройка необязательна), он автоматически запустит windbg и подключит его к соединяющемуся процессу.
ПРИМЕЧАНИЕ: Возможно, вы захотите увеличить обычную настройку Timeout, если вредоносному ПО потребуется дальнейшее взаимодействие с прослушивателем.
Существует особый вариант использования, когда вы можете создать новую конфигурацию прослушивателя без определения фактического прослушивателя для его обработки:
[Forwarder]
Enabled: True
Port: 8080
Protocol: TCP
ProcessWhiteList: chrome.exe
Без определенного прослушивателя FakeNet-NG по-прежнему будет перенаправлять трафик на локальную машину, но отдельный прослушиватель должен быть запущен пользователем. Например, вы можете иметь HTTP-прокси, прослушивающий соединения на порту 8080, и позволить FakeNet-NG перехватывать весь трафик от приложений, которые не используют системные настройки прокси-сервера или используют жестко заданные IP-адреса. С помощью анонимных прослушивателей вы можете добавить расширенные возможности фильтрации трафика и процессов FakeNet-NG к сторонним инструментам.
Вы также можете включить настройку Diverter ProcessBlackList, чтобы разрешить внешнему инструменту связываться с Интернетом. Например, чтобы разрешить HTTP-прокси пересылать проксированный трафик, добавьте имя его процесса в черный список процессов. Например, добавьте следующий процесс, чтобы разрешить Burp Proxy связываться с Интернетом:
ProcessBlackList: java.exe
В сценарии, когда приложение связывается по неизвестному порту, но вы все равно хотите перенаправить его на анонимный прослушиватель на порту 8080, вы можете определить прослушиватель по умолчанию следующим образом:
RedirectAllTraffic: Yes
DefaultTCPListener: ForwarderTCP
DefaultUDPListener: RawUDPListener
Наконец, чтобы разрешить DNS-трафику по-прежнему уходить на DNS-сервер по умолчанию в Интернете, одновременно перенаправляя весь остальной трафик, добавьте порт 53 в черный список UDP-портов Diverter следующим образом:
BlackListPortsUDP:
Последний выпуск FakeNet-NG реализует новый прокси-прослушиватель, который способен динамически определять протокол связи (включая SSL-трафик) и перенаправлять соединение на соответствующий прослушиватель.
Вы можете настроить прокси-прослушиватель для работы на определенном порту, как показано в конфигурации ниже:
[ProxyTCPListener]
Enabled: True
Protocol: TCP
Listener: ProxyListener
Port: 38926
Listeners: HTTPListener, RawListener, FTPListener, DNSListener, POPListener, SMTPListener, TFTPListener, IRCListener, BITSListener
Hidden: False
Обратите внимание на новый параметр Listeners, который определяет список потенциальных обработчиков протоколов для всех входящих соединений.
Также рекомендуется определить прокси-прослушиватель в качестве обработчика по умолчанию, обновив следующие конфигурации diverter:
RedirectAllTraffic: Yes
DefaultTCPListener: ProxyTCPListener
DefaultUDPListener: ProxyUDPListener
Когда прослушиватель по умолчанию указывает на прокси-прослушиватель, все неизвестные соединения будут обрабатываться соответствующим образом. Вы по-прежнему можете назначать конкретные прослушиватели на порты, чтобы обеспечить определенный протокол (например, всегда использовать HTTP-прослушиватель для порта 80).
Прокси определяет протокол пакетов, опрашивая все доступные прослушиватели с помощью функции taste(). Каждый прослушиватель, реализующий taste(), отвечает оценкой, указывающей вероятность того, что протокол, обрабатываемый этим прослушивателем, соответствует содержимому пакета. Прокси пересылает пакет прослушивателю, который вернул наивысшую оценку. RawListener всегда возвращает оценку 1, поэтому он будет выбран в случае, если все остальные прослушиватели вернут 0, таким образом выступая в качестве прослушивателя по умолчанию.
Пользователи могут изменить параметр конфигурации 'Hidden' в конфигурации каждого прослушивателя. Если Hidden равно 'False', прослушиватель будет привязан к определенному порту и автоматически получать весь трафик на этом порту. Если Hidden установлено в 'True', прослушиватель может получать трафик только через прокси.
FakeNet-NG разработан на Python, что позволяет быстро создавать новые плагины и расширять существующую функциональность. Подробнее см. Разработка для FakeNet-NG.
На момент написания размер буфера по умолчанию в pydivert равен 1500. Если FakeNet-NG встретит пакет больше размера буфера по умолчанию, вы можете увидеть эту ошибку. Обходной путь — указать желаемый размер буфера в self.handle.recv(bufsize=<your_bufsize>) в fakenet/diverters/windows. См. здесь
См. "Не перехватывает трафик" ниже.
Чтобы FakeNet-NG мог перехватывать и изменять пакет, должен существовать действительный сетевой маршрут для достижения пакетом своего назначения.
Есть простой способ проверить, правильно ли настроены маршруты. Без запущенного инструмента попробуйте выполнить ping к хосту назначения. Вы должны увидеть либо действительный ответ, либо сообщение о тайм-ауте. Если вместо этого вы получаете ошибку "адрес назначения недоступен", значит, у вас нет действительного маршрута.
Обычно это вызвано тем, что ваш шлюз не установлен или недоступен. Например, на машине VMWare в режиме host-only шлюз не будет настроен, что помешает FakeNet-NG видеть какой-либо трафик.
Чтобы исправить эту проблему, вручную настройте ваш основной интерфейс на шлюз в той же подсети. Сначала проверьте имя интерфейса:
C:\>netsh interface show interface
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Connected Dedicated Local Area Connection
В данном случае имя интерфейса — "Local Area Connection", поэтому мы будем использовать его в остальных командах.Вручную настройте IP-адрес интерфейса и шлюз следующим образом:
C:\>netsh interface ip set address name="Local Area Connection" static 192.168.249.123 255.255.255.0 192.168.249.254
Вручную задайте IP-адрес DNS-сервера
C:\>netsh interface ip set dns name="Local Area Connection" static 4.2.2.2
Если у вас всё ещё возникают проблемы, убедитесь, что IP-адрес шлюза сам является маршрутизируемым.
Убедитесь, что DNS-Listener успешно привязался к своему порту. Ошибки, такие как следующая, указывают на то, что DNS-Listener не смог привязаться:``` 05/01/17 11:11:16 AM [ FakeNet] Error starting DNSListener listener: 05/01/17 11:11:16 AM [ FakeNet] [Errno 98] Address already in use
Используйте `netstat`, `tcpview` или другие утилиты, чтобы определить, какое приложение привязано к порту, и обратитесь к соответствующей документации операционной системы или приложения, чтобы отключить эту службу.
Может иметь смысл создать снимок виртуальной машины перед перенастройкой.
Например, в Ubuntu часто включается служба `dnsmasq` в файле `/etc/NetworkManager/NetworkManager.conf` строкой `dns=dnsmasq`. Отключение этой опции (например, закомментировав её) и перезапуск службы `network-manager` (например, `service network-manager restart`) освобождает порт перед повторным запуском FakeNet-NG.
В более новых версиях Ubuntu или в других дистрибутивах использование `lsof -i` может показать, что вместо этого используется `systemd-resolved`. В таких случаях можно попробовать следующие шаги, адаптированные из <https://askubuntu.com/questions/907246/how-to-disable-systemd-resolved-in-ubuntu>:```
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Затем в /etc/NetworkManager/NetworkManager.conf в разделе [main] добавьте строку, указывающую:```
dns=default
Удалите симлинк `/etc/resolv.conf`, т.е. `rm /etc/resolv.conf`.
Наконец, перезапустите `NetworkManager`:```
sudo systemctl restart NetworkManager
Пожалуйста, убедитесь, что FakeNet-NG извлечен на локальный диск C:, чтобы драйвер WinDivert был загружен правильно.
Эта ошибка может возникнуть при запуске автономной исполняемой версии Fakenet. Пожалуйста, загрузите и установите исполняемый файл среды выполнения Visual C++ 2008.
Только Windows Vista+ поддерживается для режима SingleHost. Пожалуйста, используйте оригинальный Fakenet для операционных систем Windows XP/2003.
Для режима MultiHost поддерживается только Linux.
Старые версии python-netfilterqueue могут вызывать ошибку сегментации в python. Если вы столкнулись с этой проблемой, проверьте, что используете последнюю версию python-netfilterqueue.
Из-за жестко заданного размера буфера, используемого python-netfilterqueue, Linux Diverter некорректно обрабатывает пакеты размером более 4 016 байт. На практике это не влияет на режим Linux MultiHost для интерфейсов, настроенных с обычным максимальным блоком передачи (MTU) в 1 500 байт. Если используемый вами с FakeNet-NG интерфейс Linux поддерживает MTU больше 4016, вам потребуется перекомпилировать python-netfilterqueue, чтобы он поддерживал размер буфера <your_mtu> + 80 (python-netfilterqueue выделяет 80 байт буфера на служебные данные).
Трафик, направленный только на локальную машину, не перехватывается в Windows (например, если вы попытаетесь подключиться напрямую к одному из слушателей).
Перехватывается только трафик, использующий протоколы TCP, UDP и ICMP.
По вопросам ошибок, сбоев или другим замечаниям обращайтесь по адресу [email protected].
Подпишитесь на список рассылки FLARE для объявлений сообщества! Отправьте письмо с темой "subscribe" на адрес [email protected].
Если устанавливаете вручную, перейдите в каталог загруженного flare-fakenet-ng и выполните следующую команду с правами администратора:
python setup.py install
В Linux освободите порт 53 для DNS-прослушивателя:
sudo systemctl stop systemd-resolved
Запустите FakeNet-NG, выполнив 'fakenet' из любого каталога в привилегированной оболочке.
sudo systemctl stop systemd-resolved
Запустите FakeNet-NG, выполнив его с помощью интерпретатора Python в привилегированной оболочке:
python -m fakenet.fakenet
Копировать отфильтрованные NBI