
FakeNet-NG - Ferramenta de Análise Dinâmica de Rede de Próxima Geração
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
D O C U M E N T A T I O N
O FakeNet-NG 3.5 é uma ferramenta de análise de rede dinâmica de próxima geração para analistas de malware e testadores de penetração. É de código aberto e projetado para as versões mais recentes do Windows (e Linux, para certos modos de operação). O FakeNet-NG é baseado na excelente ferramenta Fakenet desenvolvida por Andrew Honig e Michael Sikorski.
A ferramenta permite interceptar e redirecionar todo ou parte do tráfego de rede, simulando serviços legítimos de rede. Usando o FakeNet-NG, analistas de malware podem identificar rapidamente a funcionalidade do malware e capturar assinaturas de rede. Testadores de penetração e caçadores de bugs acharão o mecanismo de interceptação configurável e o módulo framework do FakeNet-NG extremamente úteis ao testar funcionalidades específicas de aplicações e prototipar PoCs.
Você pode instalar o FakeNet-NG de algumas maneiras diferentes. Observe que os seguintes processos de instalação recuperarão bibliotecas de código aberto de terceiros usadas pelo FakeNet-NG para o seu sistema. Essas bibliotecas serão carregadas dinamicamente em tempo de execução, e algumas dessas bibliotecas podem ser licenciadas sob LGPL.
O mais fácil é simplesmente baixar a versão compilada, que pode ser obtida na página de lançamentos:
https://github.com/mandiant/flare-fakenet-ng/releases
Execute o FakeNet-NG executando 'fakenet.exe'.
Este é o método preferido para usar o FakeNet-NG no Windows, pois não requer a instalação de módulos adicionais, o que é ideal para uma máquina de análise de malware.
NOTA: O FakeNet-NG pode ser sinalizado como malicioso por soluções de Antivírus (AV) e Detecção e Resposta de Endpoint (EDR) (por exemplo, Windows Defender, Safe Browsing do Chrome). Isso provavelmente se deve à sua capacidade de modificar o tráfego de rede e simular serviços de rede, além do uso do PyInstaller para construir os executáveis de lançamento. Os binários oficiais de lançamento são seguros, e essas detecções devem ser consideradas falsos positivos. Como lembrete, o FakeNet-NG é projetado e altamente recomendado para uso em um ambiente controlado e isolado, como uma Máquina Virtual (VM), onde pode alterar com segurança as configurações de rede do sistema.
Instale Python 3.10.11 e a versão mais recente do pip para Windows/Linux.
No Windows, baixe e instale as Ferramentas de compilação Visual C++.
A instalação no Linux requer as seguintes dependências:
Instale essas dependências usando o seguinte comando:
sudo apt-get install build-essential python3.10-dev libnetfilter-queue-dev
Instale o FakeNet-NG como módulo Python usando o pip:
python -m pip install https://github.com/mandiant/flare-fakenet-ng/zipball/master
Ou obtendo o código fonte mais recente e instalando manualmente:
git clone https://github.com/mandiant/flare-fakenet-ng/
Instale as dependências Python executando os seguintes comandos com privilégios de administrador:
No Linux (testado no Ubuntu 24.04.2 LTS), execute os seguintes comandos antes de executar setup.py:
python -m pip install --upgrade setuptools
# build wheel for python 3.10
python -m pip install --force-reinstall netifaces
# Observed "ModuleNotFoundError: No module named '_cffi_backend'" error while testing
# This will get the required version of cffi packages for cryptography
python -m pip install --upgrade cryptography
Finalmente, se você quiser evitar instalar o FakeNet-NG e apenas executá-lo como está (por exemplo, para desenvolvimento), então você precisará obter o código fonte e instalar as dependências da seguinte forma:
Instale o Python 3.10.11 de 64 bits ou 32 bits Python para as versões de 64 bits ou 32 bits do Windows/Linux, respectivamente.
No Windows, instale as dependências Python executando os seguintes comandos com privilégios de administrador:
python -m pip install pydivert dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
NOTA: pydivert também baixará e instalará a biblioteca e driver WinDivert no diretório %PYTHONHOME%\DLLs. O FakeNet-NG inclui esses arquivos, portanto não são necessários para uso normal.
No Linux, instale as dependências Python executando os seguintes comandos com privilégios de administrador:
python -m pip install --upgrade setuptools
# build wheel for python 3.10
python -m pip install --force-reinstall netifaces
# Observed "ModuleNotFoundError: No module named '_cffi_backend'" error while testing
# This will get the required version of cffi packages for cryptography
python -m pip install --upgrade cryptography
python -m pip install netfilterqueue dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
Opcionalmente, você pode instalar o seguinte módulo usado para teste:
python -m pip install requests
Baixe o código fonte do FakeNet-NG:
git clone https://github.com/mandiant/flare-fakenet-ng
No Linux, libere a porta 53 para o listener DNS:
A maneira mais fácil de executar o FakeNet-NG é simplesmente executar o executável fornecido como Administrador. Você pode fornecer o parâmetro de linha de comando --help para obter ajuda simples:
C:\tools\fakenet-ng>fakenet.exe --help
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Version 3.5
_____________________________________________________________
Developed by FLARE Team
Copyright (C) 2016-2026 Mandiant, Inc. All rights reserved.
_____________________________________________________________
Usage: python -m fakenet.fakenet [options]:
Options:
-h, --help show this help message and exit
-c FILE, --config-file=FILE
configuration filename
-v, --verbose print more verbose messages (default: False)
-l LOG_FILE, --log-file=LOG_FILE
-s, --log-syslog Log to syslog via /dev/log (default: False)
-f STOP_FLAG, --stop-flag=STOP_FLAG
terminate if stop flag file is created
-p, --no-pause disable pause for confirmation before closing the console
(default: pause)
-n, --no-console-output
Suppress console output (for testing on Linux)
Como você pode ver na ajuda simples acima, é possível configurar o arquivo de configuração usado para iniciar o FakeNet-NG. Por padrão, a ferramenta usa configs\default.ini; no entanto, pode ser alterado com o parâmetro -c. Existem vários arquivos de configuração de exemplo no diretório configs. Devido ao grande número de configurações diferentes, o FakeNet-NG depende dos arquivos de configuração para controlar sua funcionalidade.
NOTA: O FakeNet-NG tentará localizar o arquivo de configuração especificado, primeiro usando o caminho absoluto ou relativo fornecido, caso você queira armazenar todas as suas configurações. Se o arquivo de configuração especificado não for encontrado, então ele tentará procurar em seu diretório configs.
As outras opções de linha de comando permitem controlar a quantidade de saída de logs exibida, bem como redirecioná-la para um arquivo em vez de exibi-la na tela.
Antes de nos aprofundarmos e executarmos o FakeNet-NG, vamos revisar alguns conceitos básicos. A ferramenta consiste em vários módulos trabalhando juntos. Um módulo importante é o Diverter, responsável por redirecionar o tráfego para uma coleção de listeners. O Diverter força as aplicações a interagirem com o FakeNet-NG em vez de servidores reais. Os Listeners são serviços individuais que lidam com conexões de entrada e nos permitem examinar o tráfego da aplicação (por exemplo, assinaturas de malware).
Vamos iniciar o FakeNet-NG usando as configurações padrão executando o seguinte comando:
C:\tools\fakenet-ng>fakenet.exe
Abaixo está o log de saída anotado ilustrando uma solicitação DNS interceptada e uma conexão HTTP:
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Version 3.5
_____________________________________________________________
Developed by FLARE Team
Copyright (C) 2016-2026 Mandiant, Inc. All rights reserved.
_____________________________________________________________
07/06/16 10:20:52 PM [ FakeNet] Loaded configuration file: configs/default.ini
/
default configuration file /
07/06/16 10:20:52 PM [ Diverter] Capturing traffic to packets_20160706_222052.pcap
/
PCAP output file /
07/06/16 10:20:52 PM [ FakeNet] Anonymous Forwarder listener on TCP port 8080...
\
\ Anonymous Listener rule
07/06/16 10:20:52 PM [ RawTCPListener] Starting...
07/06/16 10:20:52 PM [ RawUDPListener] Starting...
07/06/16 10:20:52 PM [ FilteredListener] Starting...
07/06/16 10:20:52 PM [ DNS Server] Starting...
07/06/16 10:20:52 PM [ HTTPListener80] Starting...
07/06/16 10:20:52 PM [ HTTPListener443] Starting...
07/06/16 10:20:52 PM [ SMTPListener] Starting...
07/06/16 10:20:52 PM [ Diverter] Starting...
\
\ Listeners starting up
07/06/16 10:20:52 PM [ Diverter] Diverting ports:
07/06/16 10:20:52 PM [ Diverter] TCP: 1337, 80, 443, 25
07/06/16 10:20:52 PM [ Diverter] UDP: 1337, 53
/
Summary of diverted ports /
07/06/16 10:21:03 PM [ Diverter] Modifying outbound external UDP request packet:
07/06/16 10:21:03 PM [ Diverter] from: 192.168.250.140:49383 -> 4.2.2.1:53
07/06/16 10:21:03 PM [ Diverter] to: 192.168.250.140:49383 -> 192.168.250.140:53
07/06/16 10:21:03 PM [ Diverter] pid: 456 name: malware.exe
/
Intercepted traffic to the DNS server from malware.exe /
07/06/16 10:21:03 PM [ DNS Server] Received A request for domain 'evil.com'.
\
\ Fake DNS Listener handling the above request
07/06/16 10:21:04 PM [ Diverter] Modifying outbound external TCP request packet:
07/06/16 10:21:04 PM [ Diverter] from: 192.168.250.140:2179 -> 192.0.2.123:80
07/06/16 10:21:04 PM [ Diverter] to: 192.168.250.140:2179 -> 192.168.250.140:80
07/06/16 10:21:04 PM [ Diverter] pid: 456 name: malware.exe
/
Intercepted traffic to the web server from malware.exe /
07/06/16 10:21:08 PM [ HTTPListener80] Received a GET request.
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] --------------------------------------------------------------------------------
\
\ Fake HTTP Listener handling the above request
Observe que cada linha de log tem o nome do módulo atualmente em execução do FakeNet-NG. Por exemplo, quando está desviando tráfego, os logs serão prefixados com o rótulo Diverter:
07/06/16 10:21:03 PM [ Diverter] Modifying outbound external UDP request packet:
07/06/16 10:21:03 PM [ Diverter] from: 192.168.250.140:49383 -> 4.2.2.1:53
07/06/16 10:21:03 PM [ Diverter] to: 192.168.250.140:49383 -> 192.168.250.140:53
07/06/16 10:21:03 PM [ Diverter] pid: 456 name: malware.exe
Ao mesmo tempo, sempre que listeners individuais estão lidando com tráfego desviado, os logs serão rotulados com o nome definido no arquivo de configuração:
07/06/16 10:21:03 PM [ DNS Server] Received A request for domain 'evil.com'.
Para parar o FakeNet-NG e salvar o arquivo PCAP gerado e o relatório HTML no disco, basta pressionar CTRL-C:
07/06/16 10:21:41 PM [ FakeNet] Stopping...
07/06/16 10:21:42 PM [ HTTPListener80] Stopping...
07/06/16 10:21:42 PM [ HTTPListener443] Stopping...
07/06/16 10:21:42 PM [ SMTPListener] Stopping...
07/06/16 10:21:43 PM [ Diverter] Stopping...
07/06/16 10:21:43 PM [ Diverter] Generated new HTML report: report_20160607_102143.html
[Press Enter to exit]
Aguarde a geração do PCAP e do relatório, depois pressione Enter para sair. A janela do console permanecerá aberta até que você faça isso; isso pode ser desabilitado (por exemplo, em scripts) com a flag --no-pause.
Com cada sessão do FakeNet-NG, um relatório HTML contendo os Indicadores Baseados em Rede (NBIs) capturados durante a sessão é gerado. Ao encerrar o FakeNet pressionando CTRL-C, este arquivo HTML será salvo no diretório raiz do FakeNet. Um usuário pode revisar os NBIs visualizando este arquivo HTML em um navegador como Chrome ou Firefox.
O relatório HTML serve como uma Interface Gráfica do Usuário (GUI) interativa que apresenta o resumo dos NBIs de maneira amigável. Inclui vários recursos para selecionar, filtrar e copiar NBIs, facilitando a análise de rede. A IU organiza todos os NBIs com base em suas informações de processo e, em seguida, os categoriza ainda mais pelo protocolo da camada de aplicação ou transporte que utilizam.
As informações na tabela de resumo dos NBIs são apresentadas em formato tabular e incluem os seguintes detalhes:
Select: Clicar na caixa de seleção seleciona o NBI correspondente. Você pode selecionar múltiplos NBIs em diferentes protocolos ou no mesmo protocolo. A linha inteira também pode ser selecionada clicando em qualquer lugar dentro da linha. Os NBIs selecionados podem ser copiados usando o botão "Copy Selected NBIs".
NBI: Esta célula representa o NBI realmente capturado. Inclui comandos, parâmetros, URIs e outras atividades significativas geradas pelo cliente contra o listener. Esta célula resume o comportamento do malware para melhor compreensão.
Additional Information: Esta célula fornece informações extras sobre cada solicitação NBI, como o protocolo da camada de transporte usado, IP de destino, porta e criptografia SSL.
Actions: Esta célula permite realizar ações em NBIs individuais. Atualmente, apenas a cópia é suportada. Clicar no botão de cópia copia os dados da célula NBI específica em formato markdown adequado para criar relatórios.
A IU também inclui vários recursos interativos:
Checkbox Selection: As caixas de seleção estão disponíveis antes de cada bloco de processo e protocolo. Marcar uma caixa de seleção seleciona todos os NBIs sob aquele processo ou protocolo. Isso é útil quando você deseja selecionar todos os NBIs de um determinado processo ou protocolo. Você pode então usar o botão Copy Selected NBIs para copiar os dados selecionados.
Search Bar: A barra de pesquisa permite digitar palavras-chave, e apenas as linhas que contêm essas palavras-chave no nome do processo, NBI ou informações adicionais serão exibidas na página HTML. Você pode então usar o botão "Copy Filtered Data" para copiar os dados exibidos em formato markdown. Limpar a consulta de pesquisa restaura a visualização original da tabela.
Copy Buttons:
Copy Selected Data: Copia todos os NBIs selecionados em formato markdown. Você pode selecionar NBIs individuais ou todos os NBIs sob um processo marcando as caixas de seleção.Copy Filtered Data: Copia os dados dos NBIs filtrados em formato markdown. Se nenhuma consulta de pesquisa for usada, este botão copia todos os dados.Copy All NBIs: Copia todos os NBIs em formato markdown presentes na página HTML. Mesmo se um filtro for aplicado, clicar neste botão copia todos os NBIs.Disclaimer Button: Exibe o aviso legal, que descreve fatos importantes para o usuário considerar antes de fazer suposições sobre o resumo dos NBIs exibido.
Go To Top Button: Aparece quando o conteúdo da página excede a área visível. Clicar neste botão leva você ao topo da página, onde pode acessar botões importantes como Copy Selected NBIs, Copy All NBIs, Copy Filtered NBIs e a barra de pesquisa.
Para aproveitar ao máximo os recursos do FakeNet-NG, devemos entender sua estrutura de arquivo de configuração e configurações. Abaixo está um exemplo de arquivo de configuração:
###############################################################################
# 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
O arquivo de configuração é dividido em várias seções.* [FakeNet] - Controla o comportamento da própria aplicação. A única opção válida neste momento é DivertTraffic. Quando ativado, instrui a ferramenta a iniciar o plugin Diverter apropriado e interceptar o tráfego. Se esta opção estiver desativada, o FakeNet-NG ainda iniciará os listeners, mas dependerá de outro método para direcionar o tráfego até eles (por exemplo, alterar manualmente o servidor DNS).
[Diverter] - Configurações para redirecionamento de tráfego. Abordado em detalhes abaixo.
[Nome do Listener] - Uma coleção de configurações de listener. Cada listener tem um conjunto de configurações padrão (ex.: porta, protocolo), bem como configurações específicas do listener (ex.: DumpHTTPPosts para o HTTPListener).
Supondo que tenha ativado a opção DivertTraffic no bloco de configuração [FakeNet], a ferramenta ativará seu motor de redirecionamento de tráfego, o qual chamaremos de Diverter a partir de agora, como referência à excelente biblioteca WinDivert utilizada para realizar a mágica nos bastidores em plataformas Windows (a implementação Linux do Diverter usa python-netfilterqueue).
O Diverter examinará todos os pacotes de saída e os comparará com uma lista de protocolos e portas dos listeners ativados. Se houver um listener escutando na porta e protocolo do pacote, o endereço de destino será alterado para o endereço IP da máquina local, onde o listener tratará a solicitação. Ao mesmo tempo, as respostas provenientes do listener serão alteradas para que o endereço IP de origem pareça que o pacote está vindo do host originalmente solicitado.
Opcionalmente, pode ativar a opção DumpPackets para armazenar todo o tráfego observado pelo FakeNet-NG (redirecionado ou encaminhado) em um arquivo PCAP. É possível descriptografar o tráfego SSL entre uma aplicação interceptada e um dos listeners com suporte a SSL. Utilize as instruções na página seguinte:
https://wiki.wireshark.org/TLS
As chaves privkey.pem e server.pem usadas pelos servidores do FakeNet-NG estão no diretório raiz da aplicação.
SingleHost: manipula tráfego de processos locais.MultiHost: manipula tráfego de outros sistemas.Auto: usa o NetworkMode que for mais funcional na plataforma atual.NetworkMode. Segue o estado atual do suporte:
SingleHostMultiHost e, experimentalmente, o modo SingleHost (funciona, com exceção da lista negra e lista branca de processos, portas e hosts).Auto
para obter o modo SingleHost no Windows e o modo MultiHost no Linux.O Diverter geralmente suporta a seguinte configuração relacionada a DNS:
A implementação Windows do Diverter suporta a seguinte configuração relacionada a DNS:
A implementação Linux do Diverter suporta as seguintes configurações:
LinuxRedirectNonlocal - Ao usar o FakeNet-NG para simular conectividade com a Internet para um host diferente, especifica quais interfaces de rede voltadas para o exterior devem ser redirecionadas para o FakeNet-NG.
LinuxFlushIptables - Limpa todas as regras iptables antes de adicionar regras para o FakeNet-NG. O Diverter Linux restaurará as regras antigas desde que a sua sequência de terminação não seja interrompida.
LinuxFlushDnsCommand - Especifica o comando correto para a sua distribuição Linux limpar o cache do resolvedor DNS, se aplicável.
DebugLevel - Especifica eventos de depuração detalhados a serem exibidos. Consulte fakenet/diverters/linutil.py para obter os rótulos válidos.
Por padrão, o Diverter interceptará apenas tráfego que tenha um listener dedicado criado para ele. No entanto, ao ativar a opção RedirectAllTraffic e configurar os tratadores TCP e UDP padrão com as opções DefaultTCPListener e DefaultUDPListener, é possível lidar dinamicamente com o tráfego destinado a portas não definidas explicitamente em nenhum dos listeners. Por exemplo, vejamos uma configuração de exemplo que redireciona todo o tráfego para listeners TCP e UDP locais nas portas 1234:
RedirectAllTraffic: Yes
DefaultTCPListener: TCPListener1234
DefaultUDPListener: UDPListener1234
NOTA: Estamos avançando um pouco com as definições de listener, mas considere que TCPListener1234 e UDPListener1234 serão definidos na seção abaixo.
Com a opção RedirectAllTraffic, o FakeNet-NG modificará não apenas o endereço de destino, mas também a porta de destino, para que possa ser tratado por um dos listeners padrão. Abaixo está um exemplo de log de tráfego destinado a um host externo com endereço IP 1.1.1.1 na porta 4444, que foi redirecionado para o listener padrão na porta 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
É importante observar que o tráfego destinado à porta de um dos listeners explicitamente definidos ainda será tratado por esse listener e não pelo listener padrão. Por exemplo, o listener UDP padrão não tratará tráfego DNS se um listener DNS separado na porta UDP 53 estiver definido.
Um problema ao ativar a opção RedirectAllTraffic é que você pode ainda querer deixar algum tráfego passar para garantir o funcionamento normal da máquina. Considere um cenário onde está tentando analisar uma aplicação que ainda precisa se conectar a um servidor DNS externo. Pode utilizar as opções BlackListPortsTCP e BlackListPortsUDP para definir uma lista de portas para as quais o tráfego será ignorado e encaminhado inalterado, ou BlackListIDsICMP (apenas Windows) para definir uma lista de IDs ICMP a serem filtrados e ignorados:
BlackListPortsUDP: 53
Outras configurações do Diverter que pode considerar são ProcessBlackList e HostBlackList, que permitem ao Diverter ignorar e encaminhar tráfego proveniente de um nome de processo específico ou destinado a um host específico, respectivamente.
As configurações dos listeners definem o comportamento de listeners individuais. Vejamos uma configuração de listener de exemplo:
[TCPListener1234]
Enabled: True
Port: 1234
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 10
Hidden: False
A configuração acima consiste no nome do listener TCPListener1234. Será utilizado para fins de registro, para que possa distinguir entre diferentes listeners que tratam conexões, mesmo que estejam a lidar com o mesmo protocolo.
As seguintes configurações são genéricas para todos os listeners:
As opções Port e Protocol são necessárias para que os listeners saibam em que portas se ligar e, se suportarem múltiplos protocolos (ex.: RawListener), decidir qual protocolo usar. Também são usadas pelo Diverter para descobrir quais portas e protocolos redirecionar.
A opção Listener define um dos plugins de listener disponíveis para tratar o tráfego redirecionado. A versão atual do FakeNet-NG vem com os seguintes listeners:
DNSResponse. Pode também definir o atributo NXDomains para o número de pedidos que o listener deve ignorar. Desta forma, pode conseguir que o malware solicite todos os nomes dos seus servidores C2 de backup. O listener suporta os protocolos TCP e UDP.Webroot com base na extensão do ficheiro solicitado. Opcionalmente, descarrega pedidos POST para um ficheiro configurável que pode ser especificado através das opções DumpHTTPPosts e DumpHTTPPostsFilePrefix.NOTA: O FakeNet-NG tentará localizar o diretório webroot, primeiro usando os caminhos absolutos ou relativos fornecidos. Se o caminho webroot especificado não for encontrado, então tentará procurar no seu diretório defaultFiles.
Como caso especial, a implementação Windows do Diverter responde automaticamente a todos os pedidos ICMP enquanto estiver em execução. Assim, se um malware tentar fazer ping a um host para testar a conectividade, receberá uma resposta válida. O Diverter Linux regista e encaminha todos os pacotes ICMP para o localhost.
NOTA: Alguns listeners podem lidar com uploads de ficheiros (ex.: TFTPListener e BITSListener). Todos os ficheiros carregados serão armazenados no diretório de trabalho atual com um prefixo configurável (ex.: "tftp_" para uploads TFTP).
O FakeNet-NG suporta várias regras de filtragem que consistem em listas negras e listas brancas de processos e hosts. As listas brancas são tratadas como regras que permitem ligações aos listeners, enquanto as listas negras são usadas para ignorar as ligações recebidas e deixá-las ser simplesmente encaminhadas.
Por exemplo, considere a configuração abaixo com filtros de processo e host:
[FilteredListener]
Enabled: True
Port: 31337
Protocol: TCP
Listener: RawListener
UseSSL: No
Timeout: 10
ProcessWhiteList: malware.exe, ncat.exe
HostBlackList: 5.5.5.5
O FilteredListener acima lidará apenas com ligações provenientes dos processos malware.exe e ncat.exe, mas ignorará quaisquer ligações destinadas ao host 5.5.5.5. Isto significa que se um processo chamado test.exe tentar conectar na porta 31337, não será redirecionado para o listener e será encaminhado para onde quer que fosse originalmente destinado, se a rota estiver disponível.
Ao mesmo tempo, se o processo malware.exe tentar conectar na porta 31337 em qualquer host que não seja 5.5.5.5, será desviado para o FilteredListener. Quaisquer ligações do processo malware.exe destinadas a 5.5.5.5 seriam permitidas.
Outra opção de configuração poderosa é ExecuteCmd. Essencialmente, permite executar um comando arbitrário no primeiro pacote detetado da ligação. O valor de ExecuteCmd pode usar várias variáveis de formato de string:
{pid} - id do processo{procname} - nome do executável do processo{src_addr} - endereço de origem{src_port} - porta de origem{dst_addr} - endereço de destino{dst_port} - porta de destinoConsidere um cenário de uma amostra de malware empacotada que se conecta a um servidor C2 configurado na porta 8443 (Use RedirectAllTraffic se a porta não for conhecida). Em muitos casos, o malware desempacotar-se-á no momento em que faz a conexão, tornando esse ponto na execução ideal para anexar o processo com um depurador e despejar uma versão desempacotada para análise posterior.
Vejamos como isto pode ser usado para lançar automaticamente um depurador na primeira conexão:
[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}
Assim que o FakeNet-NG deteta uma nova conexão proveniente do processo na lista branca malware.exe (esta opção é opcional), lançará automaticamente o windbg e anexá-lo-á ao processo conector.
NOTA: Poderá querer estender a opção normal Timeout se o malware precisar de interagir mais com o listener.
Existe um caso de uso especial onde pode criar uma nova configuração de listener sem definir o listener real para o tratar:
[Forwarder]
Enabled: True
Port: 8080
Protocol: TCP
ProcessWhiteList: chrome.exe
Sem um listener definido, o FakeNet-NG ainda desviará o tráfego para a máquina local, mas um listener separado deve ser lançado pelo utilizador. Por exemplo, poderia ter um proxy HTTP a escutar ligações na porta 8080 e deixar o FakeNet-NG interceptar todo o tráfego de aplicações que não usam as configurações de proxy do sistema ou usam endereços IP fixos. Usando listeners anónimos, pode trazer as capacidades avançadas de filtragem de tráfego e processos do FakeNet-NG para ferramentas de terceiros.
Poderá também querer ativar a opção ProcessBlackList do Diverter para permitir que a ferramenta externa comunique com a Internet. Por exemplo, para permitir que um proxy HTTP encaminhe tráfego proxied, adicione o nome do seu processo à lista negra de processos. Por exemplo, adicione o seguinte processo para permitir que o Burp Proxy comunique com a Internet:
ProcessBlackList: java.exe
No cenário onde a aplicação comunica numa porta desconhecida, mas ainda quer redirecioná-la para o listener anónimo na porta 8080, pode definir o listener padrão da seguinte forma:
RedirectAllTraffic: Yes
DefaultTCPListener: ForwarderTCP
DefaultUDPListener: RawUDPListener
Finalmente, para permitir que o tráfego DNS ainda vá para o servidor DNS padrão na Internet, enquanto redireciona todo o outro tráfego, adicione a porta 53 à lista negra de portas UDP do Diverter da seguinte forma:
BlackListPortsUDP:
A versão mais recente do FakeNet-NG implementa um novo proxy listener que é capaz de detetar dinamicamente o protocolo de comunicação (incluindo tráfego SSL) e redirecionar a conexão para um listener apropriado.
Pode configurar o proxy listener para funcionar numa porta específica, conforme ilustrado na configuração abaixo:
[ProxyTCPListener]
Enabled: True
Protocol: TCP
Listener: ProxyListener
Port: 38926
Listeners: HTTPListener, RawListener, FTPListener, DNSListener, POPListener, SMTPListener, TFTPListener, IRCListener, BITSListener
Hidden: False
Note o novo parâmetro Listeners que define uma lista de potenciais tratadores de protocolo a experimentar para todas as conexões recebidas.
Também é recomendado definir um proxy listener como seu tratador padrão atualizando as seguintes configurações do diverter:
RedirectAllTraffic: Yes
DefaultTCPListener: ProxyTCPListener
DefaultUDPListener: ProxyUDPListener
Com o listener padrão apontando para o proxy listener, todas as conexões desconhecidas serão tratadas adequadamente. Pode ainda atribuir listeners específicos a portas para impor um protocolo específico (ex.: usar sempre o listener HTTP para a porta 80).
O Proxy determina o protocolo dos pacotes consultando todos os listeners disponíveis com a função taste(). Cada Listener que implementa taste() responderá com uma pontuação indicando a probabilidade de que o protocolo tratado por esse listener corresponda ao conteúdo do pacote. O Proxy encaminhará o pacote para o Listener que devolveu a pontuação mais alta. O RawListener devolverá sempre uma pontuação de 1, por isso será escolhido no caso de todos os outros Listeners devolverem 0, servindo assim como padrão.
Os utilizadores podem alterar o parâmetro de configuração 'Hidden' na configuração de cada Listener. Se Hidden for 'False', o Listener será vinculado a uma porta específica e receberá automaticamente todo o tráfego nessa porta. Com Hidden definido como 'True', o Listener só pode receber tráfego que seja redirecionado através do Proxy.
O FakeNet-NG é desenvolvido em Python, o que permite desenvolver rapidamente novos plugins e estender a funcionalidade existente. Para mais detalhes, consulte Developing for FakeNet-NG.
No momento desta redação, o tamanho padrão do buffer no pydivert é 1500. Se o FakeNet-NG encontrar um pacote maior que o tamanho padrão do buffer, poderá observar este erro. Uma solução alternativa é especificar o tamanho do buffer desejado em self.handle.recv(bufsize=<your_bufsize>) em fakenet/diverters/windows. Veja aqui
Veja "Não está a interceptar tráfego" abaixo.
Para que o FakeNet-NG intercepte e modifique o pacote, deve existir uma rota de rede válida para o pacote chegar ao seu destino.
Existe uma forma fácil de verificar se tem as rotas configuradas corretamente. Sem a ferramenta em execução, tente fazer ping ao host de destino. Deverá observar uma resposta válida ou uma mensagem de timeout. Se receber um erro de destino inalcançável, então não tem uma rota válida.
Isto é geralmente causado pela sua gateway não estar definida ou não ser alcançável. Por exemplo, numa máquina VMWare com modo host-only, a sua máquina não terá a gateway configurada, impedindo assim o FakeNet-NG de ver qualquer tráfego.
Para corrigir este problema, configure manualmente a sua interface principal para a gateway na mesma sub-rede. Primeiro verifique o nome da interface:
C:\>netsh interface show interface
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Connected Dedicated Local Area Connection
Neste caso, o nome da interface é "Local Area Connection", por isso iremos usá-la para o resto dos comandos.Configure manualmente o endereço IP da interface e o gateway da seguinte forma:
C:\>netsh interface ip set address name="Local Area Connection" static 192.168.249.123 255.255.255.0 192.168.249.254
Defina manualmente o endereço IP do servidor DNS
C:\>netsh interface ip set dns name="Local Area Connection" static 4.2.2.2
Se você ainda estiver com problemas, certifique-se de que o endereço IP do gateway em si seja roteável.
Certifique-se de que o DNS Listener tenha se vinculado com sucesso à sua porta. Erros como os seguintes indicam que o DNS Listener não se vinculou com sucesso:``` 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
Use `netstat`, `tcpview` ou outras ferramentas para descobrir qual aplicação está vinculada à porta e consulte a documentação do sistema operacional ou da aplicação correspondente para desabilitar o serviço.
Pode fazer sentido capturar um snapshot da VM antes de realizar a reconfiguração.
Por exemplo, o Ubuntu frequentemente habilita o serviço `dnsmasq` no arquivo `/etc/NetworkManager/NetworkManager.conf` com a linha `dns=dnsmasq`. Desabilitar isso (por exemplo, comentando a linha) e reiniciar o serviço `network-manager` (ex.: `service network-manager restart`) é suficiente para liberar a porta antes de reiniciar o FakeNet-NG.
Em versões mais recentes do Ubuntu ou em outras distribuições, usar `lsof -i` pode revelar que o `systemd-resolved` está sendo usado em seu lugar. Nesses casos, você pode tentar estas etapas adaptadas de
<https://askubuntu.com/questions/907246/how-to-disable-systemd-resolved-in-ubuntu>:```
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Em seguida, em /etc/NetworkManager/NetworkManager.conf na seção [main], adicione uma linha especificando:```
dns=default
Apague o link simbólico `/etc/resolv.conf`, ou seja, `rm /etc/resolv.conf`.
Finalmente, reinicie o `NetworkManager`:```
sudo systemctl restart NetworkManager
Por favor, certifique-se de que o FakeNet-NG foi extraído na unidade C: local para garantir que o driver WinDivert seja carregado corretamente.
Este erro pode ocorrer ao executar uma versão executável autônoma do Fakenet. Faça o download e instale o executável de tempo de execução do Visual C++ 2008.
Apenas Windows Vista+ é suportado para o modo SingleHost. Por favor, use o
Fakenet original para sistemas operacionais Windows XP/2003.
Apenas Linux é suportado para o modo MultiHost.
Versões antigas do python-netfilterqueue podem causar uma falha de segmentação no
python. Se você encontrar esse problema, verifique se está usando a versão
mais recente do python-netfilterqueue.
Devido ao tamanho fixo do buffer usado pelo python-netfilterqueue, o
Diverter Linux não processa corretamente pacotes maiores que 4.016 bytes.
Na prática, isso não afeta o modo Linux MultiHost para interfaces
configuradas com a unidade máxima de transmissão (MTU) convencional de 1.500 bytes.
Se a interface Linux que você está usando com o FakeNet-NG suportar um MTU maior
que 4016, você precisará recompilar o python-netfilterqueue para suportar um
tamanho de buffer de <seu_mtu> + 80 (o python-netfilterqueue dedica 80 bytes do
buffer à sobrecarga).
O tráfego apenas da máquina local não é interceptado no Windows (por exemplo, se você tentar conectar diretamente a um dos listeners).
Apenas o tráfego que utiliza os protocolos TCP, UDP e ICMP é interceptado.
Para bugs, travamentos ou outros comentários, entre em contato pelo e-mail [email protected].
Inscreva-se na lista de e-mails FLARE para anúncios da comunidade! Envie um e-mail com "subscribe" para [email protected].
Se instalar manualmente, mude para o diretório flare-fakenet-ng baixado e execute o seguinte comando com privilégios de administrador:
python setup.py install
No Linux, libere a porta 53 para o listener DNS:
sudo systemctl stop systemd-resolved
Execute o FakeNet-NG executando 'fakenet' de qualquer diretório em um shell com privilégios.
sudo systemctl stop systemd-resolved
Execute o FakeNet-NG executando-o com um interpretador Python em um shell privilegiado:
python -m fakenet.fakenet