
FakeNet-NG - Strumento di Analisi della Rete Dinamica di Nuova Generazione
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
D O C U M E N T A T I O N
FakeNet-NG 3.5 è uno strumento di analisi di rete dinamico di nuova generazione per analisti di malware e penetration tester. È open source e progettato per le ultime versioni di Windows (e Linux, per determinate modalità operative). FakeNet-NG si basa sull'eccellente strumento Fakenet sviluppato da Andrew Honig e Michael Sikorski.
Lo strumento consente di intercettare e reindirizzare tutto il traffico di rete o parti specifiche, simulando al contempo servizi di rete legittimi. Utilizzando FakeNet-NG, gli analisti di malware possono identificare rapidamente le funzionalità del malware e catturare le firme di rete. I penetration tester e i bug hunter troveranno il motore di intercettazione configurabile e il framework modulare di FakeNet-NG estremamente utili quando testano funzionalità specifiche di applicazioni e prototipano PoC.
Puoi installare FakeNet-NG in diversi modi. Nota che i seguenti processi di installazione recupereranno sul tuo sistema librerie open-source di terze parti utilizzate da FakeNet-NG. Queste librerie verranno caricate dinamicamente in fase di esecuzione e alcune di esse potrebbero essere concesse in licenza LGPL.
Il modo più semplice è scaricare la versione compilata, ottenibile dalla pagina delle release:
https://github.com/mandiant/flare-fakenet-ng/releases
Esegui FakeNet-NG lanciando 'fakenet.exe'.
Questo è il metodo preferito per utilizzare FakeNet-NG su Windows, in quanto non richiede l'installazione di moduli aggiuntivi, ideale per una macchina di analisi malware.
NOTA: FakeNet-NG potrebbe essere segnalato come dannoso da soluzioni Antivirus (AV) e Endpoint Detection and Response (EDR) (ad esempio, Windows Defender, la navigazione sicura di Chrome). Ciò è probabilmente dovuto alla sua capacità di modificare il traffico di rete e simulare servizi di rete, oltre all'uso di PyInstaller per creare gli eseguibili delle release. I binari ufficiali delle release sono sicuri e queste rilevazioni dovrebbero essere considerate falsi positivi. Come promemoria, FakeNet-NG è progettato e fortemente consigliato per l'uso in un ambiente controllato e isolato, come una macchina virtuale (VM), dove può modificare in sicurezza le impostazioni di rete del sistema.
Installa Python 3.10.11 e l'ultima versione di pip per sistemi operativi Windows/Linux.
Su Windows, scarica e installa Visual C++ build tools.
L'installazione su Linux richiede le seguenti dipendenze:
Installa queste dipendenze usando il seguente comando:
sudo apt-get install build-essential python3.10-dev libnetfilter-queue-dev
Installa FakeNet-NG come modulo Python usando pip:
python -m pip install https://github.com/mandiant/flare-fakenet-ng/zipball/master
Oppure ottenendo il codice sorgente più recente e installandolo manualmente:
git clone https://github.com/mandiant/flare-fakenet-ng/
Installa le dipendenze Python eseguendo i seguenti comandi con privilegi di amministratore:
In Linux (testato su Ubuntu 24.04.2 LTS), esegui i seguenti comandi prima di eseguire 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
Se installi manualmente, spostati nella directory flare-fakenet-ng scaricata ed esegui quanto segue con privilegi di amministratore:
Infine, se vuoi evitare di installare FakeNet-NG e semplicemente eseguirlo così com'è (ad esempio per sviluppo), allora devi ottenere il codice sorgente e installare le dipendenze come segue:
Installa Python 3.10.11 a 64 o 32 bit per le versioni a 64 o 32 bit di Windows/Linux rispettivamente.
In Windows, installa le dipendenze Python eseguendo i seguenti comandi con privilegi di amministratore:
python -m pip install pydivert dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
NOTA: pydivert scaricherà e installerà anche la libreria e il driver WinDivert nella directory %PYTHONHOME%\DLLs. FakeNet-NG include già questi file, quindi non sono necessari per l'uso normale.
In Linux, installa le dipendenze Python eseguendo i seguenti comandi con privilegi di amministratore:
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
Opzionalmente, puoi installare il seguente modulo utilizzato per i test:
python -m pip install requests
Scarica il codice sorgente di FakeNet-NG:
git clone https://github.com/mandiant/flare-fakenet-ng
In Linux, libera la porta 53 per il listener DNS:
sudo systemctl stop systemd-resolved
Il modo più semplice per eseguire FakeNet-NG è eseguire semplicemente l'eseguibile fornito come Amministratore. Puoi fornire il parametro da riga di comando --help per ottenere un aiuto semplice:
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)
Come puoi vedere dall'aiuto semplice sopra, è possibile configurare il file di configurazione utilizzato per avviare FakeNet-NG. Per impostazione predefinita, lo strumento utilizza configs\default.ini; tuttavia, può essere modificato con il parametro -c. Ci sono diversi file di configurazione di esempio nella directory configs. A causa del gran numero di impostazioni diverse, FakeNet-NG si basa sui file di configurazione per controllare la sua funzionalità.
NOTA: FakeNet-NG tenterà di individuare il file di configurazione specificato, prima utilizzando il percorso assoluto o relativo fornito nel caso in cui tu voglia conservare tutte le tue configurazioni. Se il file di configurazione specificato non viene trovato, allora proverà a cercarlo nella sua directory configs.
Le restanti opzioni della riga di comando ti consentono di controllare la quantità di output di logging visualizzato, nonché di reindirizzarlo a un file invece di stamparlo a schermo.
Prima di addentrarci ed eseguire FakeNet-NG, esaminiamo alcuni concetti di base. Lo strumento è composto da diversi moduli che lavorano insieme. Un modulo importante è il Diverter, responsabile del reindirizzamento del traffico verso una raccolta di listener. Il Diverter forza le applicazioni a interagire con FakeNet-NG anziché con server reali. I Listener sono singoli servizi che gestiscono le connessioni in arrivo e ci permettono di esaminare il traffico dell'applicazione (ad esempio, le firme del malware).
Lanciamo FakeNet-NG utilizzando le impostazioni predefinite eseguendo il seguente comando:
C:\tools\fakenet-ng>fakenet.exe
Di seguito è riportato il log di output annotato che illustra una richiesta DNS intercettata di esempio e una connessione 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
Nota che ogni riga di log ha un nome del modulo attualmente in esecuzione di FakeNet-NG. Ad esempio, quando sta deviando il traffico, i log saranno prefissati con l'etichetta 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
Allo stesso tempo, quando i singoli listener gestiscono il traffico deviato, i log saranno etichettati con il nome impostato nel file di configurazione:
07/06/16 10:21:03 PM [ DNS Server] Received A request for domain 'evil.com'.
Per fermare FakeNet-NG e salvare su disco il file PCAP generato e il report HTML, premi semplicemente 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]
Attendi la generazione del PCAP e del report, quindi premi Enter per uscire. La finestra della console rimarrà aperta fino a quando non lo farai; questo può essere disabilitato (ad esempio, negli script) con il flag --no-pause.
Con ogni sessione di FakeNet-NG, viene generato un report HTML contenente gli Indicatori Basati sulla Rete (NBI) catturati durante la sessione. Al termine di FakeNet premendo CTRL-C, questo file HTML verrà salvato nella directory principale di FakeNet. Un utente può rivedere gli NBI visualizzando questo file HTML in un browser come Chrome o Firefox.
Il report HTML funge da Interfaccia Grafica Utente (GUI) interattiva che presenta il riepilogo degli NBI in modo user-friendly. Include varie funzionalità per selezionare, filtrare e copiare gli NBI, semplificando l'analisi di rete. L'interfaccia organizza tutti gli NBI in base alle informazioni sul processo e poi li categorizza ulteriormente in base al protocollo del livello applicativo o di trasporto utilizzato.
Le informazioni nella tabella di riepilogo NBI sono presentate in formato tabellare e includono i seguenti dettagli:
Seleziona: Cliccando sulla checkbox si seleziona il corrispondente NBI. Puoi selezionare più NBI in protocolli diversi o nello stesso protocollo. L'intera riga può anche essere selezionata cliccando in un punto qualsiasi della riga. Gli NBI selezionati possono essere copiati usando il pulsante "Copia NBI selezionati".
NBI: Questa cella rappresenta l'effettivo NBI catturato. Include comandi, parametri, URI e altre attività significative generate dal client verso il listener. Questa cella riassume il comportamento del malware per una migliore comprensione.
Informazioni aggiuntive: Questa cella fornisce informazioni extra su ogni richiesta NBI, come il protocollo del livello di trasporto utilizzato, l'IP di destinazione, la porta e la crittografia SSL.
Azioni: Questa cella ti permette di eseguire azioni su singoli NBI. Attualmente è supportata solo la copia. Cliccando sul pulsante di copia si copiano i dati della cella NBI specifica in un formato markdown adatto per la creazione di report.
L'interfaccia include anche varie funzionalità interattive:
Selezione tramite checkbox: Le checkbox sono disponibili prima di ogni blocco di processo e protocollo. Selezionando una checkbox si selezionano tutti gli NBI sotto quel processo o protocollo. Ciò è utile quando si desidera selezionare tutti gli NBI da un particolare processo o protocollo. Puoi quindi utilizzare il pulsante Copia NBI selezionati per copiare i dati selezionati.
Barra di ricerca: La barra di ricerca ti permette di digitare parole chiave e nella pagina HTML verranno visualizzate solo le righe che contengono queste parole chiave nel nome del processo, nell'NBI o nelle informazioni aggiuntive. Puoi quindi utilizzare il pulsante "Copia dati filtrati" per copiare i dati visualizzati in formato markdown. Cancellando la query di ricerca si ripristina la visualizzazione della tabella originale.
Pulsanti di copia:
Copia dati selezionati: Copia tutti gli NBI selezionati in formato markdown. Puoi selezionare singoli NBI o tutti gli NBI sotto un processo selezionando le checkbox.Copia dati filtrati: Copia i dati degli NBI filtrati in formato markdown. Se non viene utilizzata alcuna query di ricerca, questo pulsante copia l'intero set di dati.Copia tutti gli NBI: Copia tutti gli NBI presenti nella pagina HTML in formato markdown. Anche se viene applicato un filtro, cliccando su questo pulsante vengono copiati tutti gli NBI.Pulsante di disclaimer: Visualizza il disclaimer, che delinea fatti importanti che l'utente deve considerare prima di formulare ipotesi sul riepilogo NBI visualizzato.
Pulsante Vai all'inizio: Appare quando il contenuto della pagina supera l'area visualizzabile. Cliccando su questo pulsante si torna all'inizio della pagina, dove è possibile accedere a pulsanti importanti come Copia NBI selezionati, Copia tutti gli NBI, e la barra di ricerca.
Per sfruttare appieno le capacità di FakeNet-NG, dobbiamo comprendere la struttura del suo file di configurazione e le sue impostazioni. Di seguito è riportato un file di configurazione di esempio:
###############################################################################
# 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
Il file di configurazione è suddiviso in diverse sezioni.* [FakeNet] - Controlla il comportamento dell'applicazione stessa. L'unica opzione valida a questo punto è DivertTraffic. Se abilitata, istruisce lo strumento a lanciare il plugin Diverter appropriato e intercettare il traffico. Se questa opzione è disabilitata, FakeNet-NG avvierà comunque i listener, ma si affiderà a un altro metodo per indirizzare il traffico verso di essi (ad es. cambiare manualmente il server DNS).
[Diverter] - Impostazioni per il reindirizzamento del traffico. Trattate in dettaglio più avanti.
[Nome Listener] - Una raccolta di configurazioni dei listener. Ogni listener ha un insieme di impostazioni predefinite (ad es. porta, protocollo) oltre a configurazioni specifiche del listener (ad es. DumpHTTPPosts per HTTPListener).
Supponendo che tu abbia abilitato l'impostazione DivertTraffic nel blocco di configurazione [FakeNet], lo strumento abiliterà il suo motore di reindirizzamento del traffico, che d'ora in poi chiameremo Diverter, in riferimento all'eccellente libreria WinDivert utilizzata per eseguire la magia dietro le quinte sulle piattaforme Windows (l'implementazione Linux del Diverter utilizza python-netfilterqueue).
Il Diverter esaminerà tutti i pacchetti in uscita e li confronterà con un elenco di protocolli e porte dei listener abilitati. Se esiste un listener in ascolto sulla porta e sul protocollo del pacchetto, l'indirizzo di destinazione verrà modificato nell'indirizzo IP della macchina locale, dove il listener gestirà la richiesta. Contemporaneamente, le risposte provenienti dal listener verranno modificate in modo che l'indirizzo IP sorgente appaia come se il pacchetto provenisse dall'host originariamente richiesto.
Puoi opzionalmente abilitare l'impostazione DumpPackets per memorizzare tutto il traffico osservato da FakeNet-NG (reindirizzato o inoltrato) in un file PCAP. È possibile decifrare il traffico SSL tra un'applicazione intercettata e uno dei listener con supporto SSL. Segui le istruzioni nella seguente pagina:
https://wiki.wireshark.org/TLS
Le chiavi privkey.pem e server.pem utilizzate dai server di FakeNet-NG si trovano nella directory principale dell'applicazione.
SingleHost: manipola il traffico dai processi locali.MultiHost: manipola il traffico da altri sistemi.Auto: utilizza qualunque NetworkMode sia più funzionale sulla piattaforma corrente.NetworkMode. Ecco lo stato attuale del supporto:
SingleHostMultiHost e sperimentalmente supporta la modalità SingleHost (funziona ad eccezione della blacklist e whitelist di processi, porte e host).Auto
per ottenere la modalità SingleHost su Windows e la modalità MultiHost su Linux.Il Diverter generalmente supporta la seguente impostazione relativa al DNS:
L'implementazione Windows del Diverter supporta la seguente impostazione relativa al DNS:
L'implementazione Linux del Diverter supporta le seguenti impostazioni:
LinuxRedirectNonlocal - Quando si utilizza FakeNet-NG per simulare la connettività Internet per un host diverso, specifica quali interfacce di rete rivolte verso l'esterno devono essere reindirizzate a FakeNet-NG.
LinuxFlushIptables - Elimina tutte le regole iptables prima di aggiungere le regole per FakeNet-NG. Il Diverter Linux ripristinerà le vecchie regole purché la sua sequenza di terminazione non venga interrotta.
LinuxFlushDnsCommand - Specifica il comando corretto per la tua distribuzione Linux per svuotare la cache del resolver DNS, se applicabile.
DebugLevel - Specifica eventi di debug granulari da visualizzare. Fare riferimento a fakenet/diverters/linutil.py per le etichette valide.
Per impostazione predefinita, il Diverter intercetterà solo il traffico per cui è stato creato un listener dedicato. Tuttavia, abilitando l'impostazione RedirectAllTraffic e configurando i gestori TCP e UDP predefiniti con le impostazioni DefaultTCPListener e DefaultUDPListener, è possibile gestire dinamicamente il traffico verso porte non definite esplicitamente in uno dei listener. Ad esempio, diamo un'occhiata a una configurazione di esempio che reindirizza tutto il traffico verso listener TCP e UDP locali sulle porte 1234:
RedirectAllTraffic: Yes
DefaultTCPListener: TCPListener1234
DefaultUDPListener: UDPListener1234
NOTA: Stiamo anticipando un po' le definizioni dei listener, ma considera che TCPListener1234 e UDPListener1234 saranno definiti nella sezione sottostante.
Con l'impostazione RedirectAllTraffic, FakeNet-NG modificherà non solo l'indirizzo di destinazione, ma anche la porta di destinazione in modo che possa essere gestita da uno dei listener predefiniti. Di seguito è riportato un esempio di log del traffico destinato a un host esterno con indirizzo IP 1.1.1.1 sulla porta 4444, che è stato reindirizzato al listener predefinito sulla porta 1234:
07/06/16 01:13:47 AM [ Diverter] Modifica del pacchetto di richiesta TCP esterna in uscita:
07/06/16 01:13:47 AM [ Diverter] da: 192.168.66.129:1650 -> 1.1.1.1:4444
07/06/16 01:13:47 AM [ Diverter] a: 192.168.66.129:1650 -> 192.168.66.129:1234
07/06/16 01:13:47 AM [ Diverter] pid: 3716 nome: malware.exe
È importante notare che il traffico destinato alla porta di uno dei listener definiti esplicitamente sarà comunque gestito da quel listener e non dal listener predefinito. Ad esempio, il listener UDP predefinito non gestirà il traffico DNS se è definito un listener DNS separato sulla porta UDP 53.
Un problema quando si abilitano le opzioni RedirectAllTraffic è che potresti voler lasciar passare comunque del traffico per garantire il normale funzionamento della macchina. Considera uno scenario in cui stai cercando di analizzare un'applicazione che deve ancora connettersi a un server DNS esterno. Puoi utilizzare le impostazioni BlackListPortsTCP e BlackListPortsUDP per definire un elenco di porte per le quali il traffico verrà ignorato e inoltrato inalterato, oppure BlackListIDsICMP (solo Windows) per definire un elenco di ID ICMP da filtrare e ignorare:
BlackListPortsUDP: 53
Altre impostazioni del Diverter che potresti considerare sono ProcessBlackList e HostBlackList, che consentono al Diverter di ignorare e inoltrare il traffico proveniente da uno specifico nome di processo o destinato a uno specifico host, rispettivamente.
Le configurazioni dei listener definiscono il comportamento dei singoli listener. Diamo un'occhiata a una configurazione di esempio di un listener:
[TCPListener1234]
Enabled: True
Port: 1234
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 10
Hidden: False
La configurazione sopra è composta dal nome del listener TCPListener1234. Verrà utilizzato per scopi di logging in modo da poter distinguere tra diversi listener che gestiscono connessioni, anche se stanno gestendo lo stesso protocollo.
Le seguenti impostazioni sono generiche per tutti i listener:
Le impostazioni Port e Protocol sono necessarie affinché i listener sappiano a quali porte associarsi e, se supportano più protocolli (ad es. RawListener), decidano quale protocollo utilizzare. Sono anche utilizzate dal Diverter per capire quali porte e protocolli reindirizzare.
L'impostazione Listener definisce uno dei plugin listener disponibili per gestire il traffico reindirizzato. La versione corrente di FakeNet-NG include i seguenti listener:
DNSResponse. Puoi anche impostare l'attributo NXDomains sul numero di richieste che il listener deve ignorare. In questo modo potresti essere in grado di far sì che il malware richieda tutti i nomi dei suoi C2 di backup. Il listener supporta sia i protocolli TCP che UDP.Webroot configurabile in base all'estensione del file richiesto. Facoltativamente, scarica le richieste POST in un file configurabile, che può essere specificato utilizzando le impostazioni DumpHTTPPosts e DumpHTTPPostsFilePrefix.NOTA: FakeNet-NG tenterà di individuare la directory webroot, prima utilizzando i percorsi assoluti o relativi forniti. Se il percorso webroot specificato non viene trovato, cercherà nella sua directory defaultFiles.
Come caso speciale, l'implementazione Windows del Diverter risponde automaticamente a tutte le richieste ICMP durante l'esecuzione. Quindi, se un malware tenta di eseguire il ping di un host per testare la connettività, riceverà una risposta valida. Il Diverter Linux registra e inoltra tutti i pacchetti ICMP a localhost.
NOTA: Alcuni listener possono gestire caricamenti di file (ad es. TFTPListener e BITSListener). Tutti i file caricati verranno memorizzati nella directory di lavoro corrente con un prefisso configurabile (ad es. "tftp_" per i caricamenti TFTP).
FakeNet-NG supporta diverse regole di filtraggio costituite da blacklist e whitelist di processi e host. Le whitelist sono trattate come regole che consentono connessioni ai listener, mentre le blacklist vengono utilizzate per ignorare le connessioni in arrivo e farle semplicemente inoltrare.
Ad esempio, considera la configurazione seguente con filtri per processi 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
Il FilteredListener sopra gestirà solo le connessioni provenienti dai processi malware.exe e ncat.exe, ma ignorerà qualsiasi connessione destinata all'host 5.5.5.5. Ciò significa che se un processo chiamato test.exe tentasse di connettersi sulla porta 31337, non verrà reindirizzato al listener e verrà inoltrato ovunque fosse originariamente inteso, se la rotta è disponibile.
Allo stesso tempo, se il processo malware.exe tentava di connettersi alla porta 31337 su qualsiasi host diverso da 5.5.5.5, verrà deviato al FilteredListener. Qualsiasi connessione dal processo malware.exe destinata a 5.5.5.5 sarebbe permessa.
Un'altra potente impostazione di configurazione è ExecuteCmd. Essa ti consente essenzialmente di eseguire un comando arbitrario al primo pacchetto rilevato della connessione. Il valore di ExecuteCmd può utilizzare diverse variabili di formato stringa:
{pid} - id del processo{procname} - nome eseguibile del processo{src_addr} - indirizzo sorgente{src_port} - porta sorgente{dst_addr} - indirizzo di destinazione{dst_port} - porta di destinazioneConsidera uno scenario di un campione di malware impacchettato che si connette a un server C2 configurato sulla porta 8443 (usa RedirectAllTraffic se la porta non è nota). In molti casi, il malware si spacchetta al momento della connessione, rendendo quel punto dell'esecuzione ideale per collegarsi al processo con un debugger e scaricare una versione spacchettata per ulteriori analisi.
Vediamo come questo può essere utilizzato per avviare automaticamente un debugger alla prima connessione:
[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}
Una volta che FakeNet-NG rileva una nuova connessione proveniente dal processo whitelistato malware.exe (questa impostazione è opzionale), avvierà automaticamente windbg e lo collegherà al processo che si connette.
NOTA: Potresti voler estendere l'impostazione Timeout normale nel caso in cui il malware
debba interagire ulteriormente con il listener.
Esiste un caso d'uso speciale in cui puoi creare una nuova configurazione di listener senza definire il listener effettivo per gestirla:
[Forwarder]
Enabled: True
Port: 8080
Protocol: TCP
ProcessWhiteList: chrome.exe
Senza un listener definito, FakeNet-NG devierà comunque il traffico verso la macchina locale, ma un listener separato deve essere avviato dall'utente. Ad esempio, potresti avere un proxy HTTP in ascolto di connessioni sulla porta 8080 e lasciare che FakeNet-NG intercetti tutto il traffico proveniente da applicazioni che non utilizzano le impostazioni del server proxy di sistema o che utilizzano indirizzi IP hard-coded. Utilizzando listener anonimi, puoi portare le capacità avanzate di filtraggio del traffico e dei processi di FakeNet-NG a strumenti di terze parti.
Potresti anche voler abilitare l'impostazione ProcessBlackList del Diverter per consentire allo strumento esterno di comunicare con Internet. Ad esempio, per consentire a un proxy HTTP di inoltrare il traffico proxy, aggiungi il suo nome di processo alla blacklist dei processi. Ad esempio, aggiungi il seguente processo per consentire a Burp Proxy di comunicare con Internet:
ProcessBlackList: java.exe
Nello scenario in cui l'applicazione comunica su una porta sconosciuta, ma desideri comunque reindirizzarla al listener anonimo sulla porta 8080, puoi definire il listener predefinito come segue:
RedirectAllTraffic: Yes
DefaultTCPListener: ForwarderTCP
DefaultUDPListener: RawUDPListener
Infine, per consentire al traffico DNS di continuare ad andare al server DNS predefinito su Internet, reindirizzando tutto il resto del traffico, aggiungi la porta 53 alla blacklist delle porte UDP del Diverter come segue:
BlackListPortsUDP:
L'ultima release di FakeNet-NG implementa un nuovo proxy listener in grado di rilevare dinamicamente il protocollo di comunicazione (incluso il traffico SSL) e reindirizzare la connessione a un listener appropriato.
Puoi configurare il proxy listener per lavorare su una porta specifica, come illustrato nella configurazione seguente:
[ProxyTCPListener]
Enabled: True
Protocol: TCP
Listener: ProxyListener
Port: 38926
Listeners: HTTPListener, RawListener, FTPListener, DNSListener, POPListener, SMTPListener, TFTPListener, IRCListener, BITSListener
Hidden: False
Nota il nuovo parametro Listeners che definisce un elenco di potenziali gestori di protocollo da provare per tutte le connessioni in arrivo.
Si consiglia inoltre di definire un proxy listener come gestore predefinito aggiornando le seguenti configurazioni del diverter:
RedirectAllTraffic: Yes
DefaultTCPListener: ProxyTCPListener
DefaultUDPListener: ProxyUDPListener
Con il listener predefinito che punta al proxy listener, tutte le connessioni sconosciute verranno gestite appropriatamente. Puoi comunque assegnare listener specifici alle porte per imporre un protocollo specifico (ad es. utilizzare sempre il listener HTTP per la porta 80).
Il proxy determina il protocollo dei pacchetti interrogando tutti i listener disponibili con la funzione taste(). Ogni listener che implementa taste() risponderà con un punteggio che indica la probabilità che il protocollo gestito da quel listener corrisponda al contenuto del pacchetto. Il proxy inoltrerà il pacchetto al listener che ha restituito il punteggio più alto. Il RawListener restituirà sempre un punteggio di 1, quindi verrà scelto nel caso in cui tutti gli altri listener restituiscano 0, fungendo quindi da predefinito.
Gli utenti possono modificare il parametro di configurazione 'Hidden' in ciascuna configurazione del listener. Se 'Hidden' è 'False', il listener verrà associato a una porta specifica e riceverà automaticamente tutto il traffico su quella porta. Con 'Hidden' impostato su 'True', il listener può ricevere solo traffico che viene reindirizzato attraverso il proxy.
FakeNet-NG è sviluppato in Python, il che ti consente di sviluppare rapidamente nuovi plugin ed estendere le funzionalità esistenti. Per i dettagli, consulta Developing for FakeNet-NG.
Al momento di questa scrittura, la dimensione predefinita del buffer in pydivert è 1500. Se FakeNet-NG incontra un pacchetto più grande della dimensione predefinita del buffer, potresti osservare questo errore. Una soluzione alternativa è specificare la dimensione del buffer desiderata in self.handle.recv(bufsize=<your_bufsize>) in fakenet/diverters/windows. Vedi qui
Vedi "Non intercetta il traffico" sotto.
Affinché FakeNet-NG possa intercettare e modificare il pacchetto, deve esistere una rotta di rete valida affinché il pacchetto possa raggiungere la sua destinazione.
C'è un modo semplice per verificare se le rotte sono impostate correttamente. Senza lo strumento in esecuzione, prova a eseguire il ping dell'host di destinazione. Dovresti osservare una risposta valida o un messaggio di timeout. Se invece ricevi un errore "destinazione non raggiungibile", non hai una rotta valida.
Questo è solitamente causato dal fatto che il gateway non è impostato o non è raggiungibile. Ad esempio, su una macchina VMWare con modalità host-only, la macchina non avrà il gateway configurato, impedendo così a FakeNet-NG di vedere qualsiasi traffico.
Per risolvere questo problema, configura manualmente la tua interfaccia primaria sul gateway nella stessa sottorete. Prima controlla il nome dell'interfaccia:
C:\>netsh interface show interface
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Connected Dedicated Local Area Connection
In questo caso, il nome dell'interfaccia è "Local Area Connection", quindi lo useremo per il resto dei comandi.Configura manualmente l'indirizzo IP dell'interfaccia e il gateway come segue:
C:\>netsh interface ip set address name="Local Area Connection" static 192.168.249.123 255.255.255.0 192.168.249.254
Imposta manualmente l'indirizzo IP del server DNS
C:\>netsh interface ip set dns name="Local Area Connection" static 4.2.2.2
Se hai ancora problemi, assicurati che l'indirizzo IP del gateway stesso sia raggiungibile.
Assicurati che il Listener DNS si sia legato correttamente alla sua porta. Errori come i seguenti indicano che il Listener DNS non si è legato correttamente:``` 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
Usa `netstat`, `tcpview` o altri strumenti per scoprire quale applicazione è associata alla porta e consulta la documentazione del sistema operativo o dell'applicazione corrispondente per disabilitare il servizio.
Potrebbe essere utile acquisire un'istantanea della VM prima di procedere alla riconfigurazione.
Ad esempio, Ubuntu abilita comunemente il servizio `dnsmasq` in `/etc/NetworkManager/NetworkManager.conf` con la riga `dns=dnsmasq`.
Disabilitarlo (ad esempio commentandolo) e riavviare il servizio `network-manager` (es. `service network-manager restart`) è sufficiente per liberare la porta prima di rilanciare FakeNet-NG.
Nelle versioni più recenti di Ubuntu o in altre distribuzioni, usando `lsof -i` potrebbe rivelare che viene invece utilizzato `systemd-resolved`. In questi casi, puoi provare questi passaggi adattati da <https://askubuntu.com/questions/907246/how-to-disable-systemd-resolved-in-ubuntu>:```
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Quindi in /etc/NetworkManager/NetworkManager.conf sotto la sezione [main], aggiungere una riga che specifica:```
dns=default
Elimina il symlink `/etc/resolv.conf`, cioè `rm /etc/resolv.conf`.
Infine, riavvia `NetworkManager`:```
sudo systemctl restart NetworkManager
Please ensure that FakeNet-NG is extracted to the local C: drive to make sure the WinDivert driver is loaded correctly.
This error may occur when running a stand-alone executable version of Fakenet. Please download and install Visual C++ 2008 runtime executable.
Solo Windows Vista+ è supportato per la modalità SingleHost. Utilizza il
Fakenet originale per i sistemi operativi Windows XP/2003.
Solo Linux è supportato per la modalità MultiHost.
Le vecchie versioni di python-netfilterqueue possono causare un segmentation fault in
python. Se riscontri questo problema, verifica che stai utilizzando l'ultima
versione di python-netfilterqueue.
A causa della dimensione del buffer hard-coded utilizzata da python-netfilterqueue, il
Diverter Linux non gestisce correttamente i pacchetti di dimensioni superiori a 4.016 byte.
In pratica, ciò non influisce sulla modalità Linux MultiHost per le interfacce
configurate con la convenzionale unità massima di trasmissione (MTU) di 1.500 byte.
Se l'interfaccia Linux che stai utilizzando con FakeNet-NG supporta un MTU maggiore
di 4016, dovrai ricompilare python-netfilterqueue per supportare una
dimensione del buffer di <your_mtu> + 80 (python-netfilterqueue dedica 80 byte del
buffer al sovraccarico).
Il traffico solo in locale non viene intercettato su Windows (ad esempio, se provi a connetterti direttamente a uno dei listener).
Viene intercettato solo il traffico che utilizza i protocolli TCP, UDP e ICMP.
Per bug, crash o altri commenti contatta [email protected].
Iscriviti alla mailing list FLARE per annunci della comunità! Invia un'email con oggetto "subscribe" a [email protected].
python setup.py install
In Linux, libera la porta 53 per il listener DNS:
sudo systemctl stop systemd-resolved
Esegui FakeNet-NG lanciando 'fakenet' da qualsiasi directory in una shell privilegiata.
Esegui FakeNet-NG lanciandolo con un interprete Python in una shell privilegiata:
python -m fakenet.fakenet
Copia NBI filtrati