
FakeNet-NG - Dynamisches Netzwerkanalyse-Tool der nächsten Generation
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
D O K U M E N T A T I O N
FakeNet-NG 3.5 ist ein dynamisches Netzwerkanalyse-Tool der nächsten Generation für Malware-Analysten und Penetrationstester. Es ist Open Source und für die neuesten Windows-Versionen (und Linux, für bestimmte Betriebsmodi) ausgelegt. FakeNet-NG basiert auf dem hervorragenden Fakenet-Tool, das von Andrew Honig und Michael Sikorski entwickelt wurde.
Das Tool ermöglicht es Ihnen, den gesamten oder bestimmten Netzwerkverkehr abzufangen und umzuleiten, während legitime Netzwerkdienste simuliert werden. Mit FakeNet-NG können Malware-Analysten schnell die Funktionalität von Malware identifizieren und Netzwerksignaturen erfassen. Penetrationstester und Bug-Hunter werden die konfigurierbare Abfang-Engine und das modulare Framework von FakeNet-NG als äußerst nützlich empfinden, wenn sie die spezifische Funktionalität von Anwendungen testen und Proof-of-Concepts prototypisieren.
Sie können FakeNet-NG auf verschiedene Arten installieren. Beachten Sie, dass die folgenden Installationsprozesse Bibliotheken von Drittanbietern (Open Source) abrufen, die von FakeNet-NG verwendet werden, und auf Ihr System herunterladen. Diese Bibliotheken werden zur Laufzeit dynamisch geladen, und einige dieser Bibliotheken können unter der LGPL lizenziert sein.
Am einfachsten ist es, die kompilierte Version herunterzuladen, die von der Releases-Seite bezogen werden kann:
https://github.com/mandiant/flare-fakenet-ng/releases
Führen Sie FakeNet-NG aus, indem Sie 'fakenet.exe' starten.
Dies ist die bevorzugte Methode zur Verwendung von FakeNet-NG unter Windows, da sie keine Installation zusätzlicher Module erfordert, was ideal für eine Malware-Analysemaschine ist.
HINWEIS: FakeNet-NG kann von Antiviren- (AV) und Endpoint Detection and Response (EDR) -Lösungen (z. B. Windows Defender, Chrome Safe Browsing) als bösartig eingestuft werden. Dies liegt wahrscheinlich an seiner Fähigkeit, Netzwerkverkehr zu modifizieren und Netzwerkdienste zu simulieren, sowie an der Verwendung von PyInstaller zur Erstellung der Release-ausführbaren Dateien. Die offiziellen Release-Binärdateien sind sicher, und diese Erkennungen sollten als Fehlalarme betrachtet werden. Zur Erinnerung: FakeNet-NG ist für den Einsatz in einer kontrollierten und isolierten Umgebung, wie z. B. einer virtuellen Maschine (VM), konzipiert und wird dringend empfohlen, wo es sicher die Netzwerkeinstellungen des Systems ändern kann.
Installieren Sie Python 3.10.11 und die neueste pip für Windows/Linux-Betriebssysteme.
Unter Windows laden Sie die Visual C++ Build Tools herunter und installieren Sie diese.
Die Installation unter Linux erfordert die folgenden Abhängigkeiten:
Installieren Sie diese Abhängigkeiten mit dem folgenden Befehl:
sudo apt-get install build-essential python3.10-dev libnetfilter-queue-dev
Installieren Sie FakeNet-NG als Python-Modul mit pip:
python -m pip install https://github.com/mandiant/flare-fakenet-ng/zipball/master
Oder laden Sie den neuesten Quellcode herunter und installieren Sie ihn manuell:
git clone https://github.com/mandiant/flare-fakenet-ng/
Installieren Sie die Python-Abhängigkeiten, indem Sie die folgenden Befehle mit Administratorrechten ausführen:
Unter Linux (getestet unter Ubuntu 24.04.2 LTS) führen Sie die folgenden Befehle vor der Ausführung von setup.py aus:
python -m pip install --upgrade setuptools
# wheel für Python 3.10 erstellen
python -m pip install --force-reinstall netifaces
# Bei Tests wurde ein "ModuleNotFoundError: No module named '_cffi_backend'"-Fehler beobachtet
# Dadurch wird die erforderliche Version der cffi-Pakete für die Kryptografie installiert
python -m pip install --upgrade cryptography
Wenn Sie schließlich eine Installation von FakeNet-NG vermeiden und es einfach so ausführen möchten (z. B. für die Entwicklung), dann müssen Sie den Quellcode herunterladen und die Abhängigkeiten wie folgt installieren:
Installieren Sie 64-Bit- oder 32-Bit- Python 3.10.11 für die 64-Bit- bzw. 32-Bit-Versionen von Windows/Linux.
Unter Windows installieren Sie die Python-Abhängigkeiten, indem Sie die folgenden Befehle mit Administratorrechten ausführen:
python -m pip install pydivert dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
HINWEIS: pydivert lädt auch die WinDivert-Bibliothek und den Treiber in das Verzeichnis %PYTHONHOME%\DLLs herunter und installiert sie. FakeNet-NG bündelt diese Dateien, sodass sie für den normalen Gebrauch nicht erforderlich sind.
Unter Linux installieren Sie die Python-Abhängigkeiten, indem Sie die folgenden Befehle mit Administratorrechten ausführen:
python -m pip install --upgrade setuptools
# wheel für Python 3.10 erstellen
python -m pip install --force-reinstall netifaces
# Bei Tests wurde ein "ModuleNotFoundError: No module named '_cffi_backend'"-Fehler beobachtet
# Dadurch wird die erforderliche Version der cffi-Pakete für die Kryptografie installiert
python -m pip install --upgrade cryptography
python -m pip install netfilterqueue dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
Optional können Sie das folgende Modul installieren, das zum Testen verwendet wird:
python -m pip install requests
Laden Sie den Quellcode von FakeNet-NG herunter:
git clone https://github.com/mandiant/flare-fakenet-ng
Der einfachste Weg, FakeNet-NG auszuführen, besteht darin, die bereitgestellte ausführbare Datei einfach als Administrator auszuführen. Sie können den --help-Befehlszeilenparameter verwenden, um eine einfache Hilfe zu erhalten:
C:\tools\fakenet-ng>fakenet.exe --help
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Version 3.5
_____________________________________________________________
Entwickelt vom FLARE Team
Copyright (C) 2016-2026 Mandiant, Inc. Alle Rechte vorbehalten.
_____________________________________________________________
Nutzung: python -m fakenet.fakenet [Optionen]:
Optionen:
-h, --help Hilfe anzeigen und beenden
-c DATEI, --config-file=DATEI
Konfigurationsdateiname
-v, --verbose Ausführlichere Meldungen ausgeben (Standard: False)
-l LOG_DATEI, --log-file=LOG_DATEI
-s, --log-syslog Ins Syslog via /dev/log protokollieren (Standard: False)
-f STOP_FLAG, --stop-flag=STOP_FLAG
Beenden, wenn die Stop-Flag-Datei erstellt wird
-p, --no-pause Pause zur Bestätigung vor dem Schließen der Konsole deaktivieren
(Standard: pausieren)
-n, --no-console-output
Konsolenausgabe unterdrücken (zum Testen unter Linux)
Wie Sie aus der einfachen Hilfe oben ersehen können, ist es möglich, die Konfigurationsdatei zu konfigurieren, die zum Starten von FakeNet-NG verwendet wird. Standardmäßig verwendet das Tool configs\default.ini; dies kann jedoch mit dem Parameter -c geändert werden. Im Verzeichnis configs befinden sich mehrere Beispielkonfigurationsdateien. Aufgrund der großen Anzahl verschiedener Einstellungen verlässt sich FakeNet-NG auf die Konfigurationsdateien, um seine Funktionalität zu steuern.
HINWEIS: FakeNet-NG versucht, die angegebene Konfigurationsdatei zu finden, zunächst unter Verwendung des angegebenen absoluten oder relativen Pfads, falls Sie alle Ihre Konfigurationen speichern möchten. Wenn die angegebene Konfigurationsdatei nicht gefunden wird, sucht es in seinem configs-Verzeichnis.
Die restlichen Befehlszeilenoptionen ermöglichen es Ihnen, die Menge der ausgegebenen Protokollierungsinformationen zu steuern und sie in eine Datei umzuleiten, anstatt sie auf dem Bildschirm anzuzeigen.
Bevor wir loslegen und FakeNet-NG ausführen, lassen Sie uns einige grundlegende Konzepte durchgehen. Das Tool besteht aus mehreren Modulen, die zusammenarbeiten. Ein solches wichtiges Modul ist der Diverter, der für die Umleitung von Datenverkehr an eine Sammlung von Listenern verantwortlich ist. Der Diverter zwingt Anwendungen, mit FakeNet-NG zu interagieren, anstatt mit echten Servern. Listener sind einzelne Dienste, die eingehende Verbindungen bearbeiten und uns die Untersuchung des Anwendungsdatenverkehrs (z. B. Malware-Signaturen) ermöglichen.
Starten wir FakeNet-NG mit den Standardeinstellungen, indem wir den folgenden Befehl ausführen:
C:\tools\fakenet-ng>fakenet.exe
Unten sehen Sie das kommentierte Ausgabeprotokoll, das eine beispielhafte abgefangene DNS-Anfrage und eine HTTP-Verbindung veranschaulicht:
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Version 3.5
_____________________________________________________________
Entwickelt vom FLARE Team
Copyright (C) 2016-2026 Mandiant, Inc. Alle Rechte vorbehalten.
_____________________________________________________________
07/06/16 22:20:52 [ FakeNet] Konfigurationsdatei geladen: configs/default.ini
/
Standard-Konfigurationsdatei /
07/06/16 22:20:52 [ Diverter] Datenverkehr wird aufgezeichnet in packets_20160706_222052.pcap
/
PCAP-Ausgabedatei /
07/06/16 22:20:52 [ FakeNet] Anonymer Forwarder-Listener auf TCP-Port 8080...
\
\ Anonyme Listener-Regel
07/06/16 22:20:52 [ RawTCPListener] Starte...
07/06/16 22:20:52 [ RawUDPListener] Starte...
07/06/16 22:20:52 [ FilteredListener] Starte...
07/06/16 22:20:52 [ DNS Server] Starte...
07/06/16 22:20:52 [ HTTPListener80] Starte...
07/06/16 22:20:52 [ HTTPListener443] Starte...
07/06/16 22:20:52 [ SMTPListener] Starte...
07/06/16 22:20:52 [ Diverter] Starte...
\
\ Listener starten
07/06/16 22:20:52 [ Diverter] Ports werden umgeleitet:
07/06/16 22:20:52 [ Diverter] TCP: 1337, 80, 443, 25
07/06/16 22:20:52 [ Diverter] UDP: 1337, 53
/
Zusammenfassung der umgeleiteten Ports /
07/06/16 22:21:03 [ Diverter] Ändere ausgehendes externes UDP-Anforderungspaket:
07/06/16 22:21:03 [ Diverter] von: 192.168.250.140:49383 -> 4.2.2.1:53
07/06/16 22:21:03 [ Diverter] nach: 192.168.250.140:49383 -> 192.168.250.140:53
07/06/16 22:21:03 [ Diverter] pid: 456 name: malware.exe
/
Abgefangener Datenverkehr zum DNS-Server von malware.exe /
07/06/16 22:21:03 [ DNS Server] A-Anfrage für Domain 'evil.com' erhalten.
\
\ Fake DNS-Listener bearbeitet die obige Anfrage
07/06/16 22:21:04 [ Diverter] Ändere ausgehendes externes TCP-Anforderungspaket:
07/06/16 22:21:04 [ Diverter] von: 192.168.250.140:2179 -> 192.0.2.123:80
07/06/16 22:21:04 [ Diverter] nach: 192.168.250.140:2179 -> 192.168.250.140:80
07/06/16 22:21:04 [ Diverter] pid: 456 name: malware.exe
/
Abgefangener Datenverkehr zum Webserver von malware.exe /
07/06/16 22:21:08 [ HTTPListener80] GET-Anforderung erhalten.
07/06/16 22:21:08 [ HTTPListener80] --------------------------------------------------------------------------------
07/06/16 22:21:08 [ HTTPListener80] GET / HTTP/1.0
07/06/16 22:21:08 [ HTTPListener80]
07/06/16 22:21:08 [ HTTPListener80] --------------------------------------------------------------------------------
\
\ Fake HTTP-Listener bearbeitet die obige Anfrage
Beachten Sie, dass jede Protokollzeile einen Namen des aktuell laufenden FakeNet-NG-Moduls enthält. Wenn z. B. Datenverkehr umgeleitet wird, werden die Protokolle mit dem Label Diverter versehen:
07/06/16 22:21:03 [ Diverter] Ändere ausgehendes externes UDP-Anforderungspaket:
07/06/16 22:21:03 [ Diverter] von: 192.168.250.140:49383 -> 4.2.2.1:53
07/06/16 22:21:03 [ Diverter] nach: 192.168.250.140:49383 -> 192.168.250.140:53
07/06/16 22:21:03 [ Diverter] pid: 456 name: malware.exe
Gleichzeitig werden Protokolle, wenn einzelne Listener den umgeleiteten Datenverkehr bearbeiten, mit dem in der Konfigurationsdatei festgelegten Namen beschriftet:
07/06/16 22:21:03 [ DNS Server] A-Anfrage für Domain 'evil.com' erhalten.
Um FakeNet-NG zu beenden und die generierte PCAP-Datei und den HTML-Bericht auf der Festplatte zu speichern, drücken Sie einfach STRG-C:
07/06/16 22:21:41 [ FakeNet] Stoppe...
07/06/16 22:21:42 [ HTTPListener80] Stoppe...
07/06/16 22:21:42 [ HTTPListener443] Stoppe...
07/06/16 22:21:42 [ SMTPListener] Stoppe...
07/06/16 22:21:43 [ Diverter] Stoppe...
07/06/16 22:21:43 [ Diverter] Neuer HTML-Bericht erstellt: report_20160607_102143.html
[Drücken Sie die Eingabetaste, um zu beenden]
Warten Sie, bis PCAP und Bericht erstellt wurden, und drücken Sie dann die Eingabetaste, um das Programm zu beenden. Das Konsolenfenster bleibt geöffnet, bis Sie dies tun; dies kann (z. B. in Skripten) mit dem Flag --no-pause deaktiviert werden.
Mit jeder Sitzung von FakeNet-NG wird ein HTML-Bericht erstellt, der die während der Sitzung erfassten Netzwerkbasierten Indikatoren (Network-Based Indicators, NBIs) enthält. Wenn FakeNet durch Drücken von STRG-C beendet wird, wird diese HTML-Datei im Stammverzeichnis von FakeNet gespeichert. Ein Benutzer kann die NBIs überprüfen, indem er diese HTML-Datei in einem Browser wie Chrome oder Firefox anzeigt.
Der HTML-Bericht dient als interaktive grafische Benutzeroberfläche (GUI), die die NBI-Zusammenfassung benutzerfreundlich präsentiert. Er enthält verschiedene Funktionen zum Auswählen, Filtern und Kopieren von NBIs, was die Netzwerkanalyse erleichtert. Die UI organisiert alle NBIs basierend auf ihren Prozessinformationen und kategorisiert sie dann weiter nach dem von ihnen verwendeten Anwendungsschicht- oder Transportschichtprotokoll.
Die Informationen in der NBI-Zusammenfassungstabelle werden in tabellarischer Form dargestellt und enthalten die folgenden Details:
Auswählen: Durch Klicken auf das Kontrollkästchen wird der entsprechende NBI ausgewählt. Sie können mehrere NBIs über verschiedene oder dieselben Protokolle hinweg auswählen. Die gesamte Zeile kann auch durch Klicken an einer beliebigen Stelle innerhalb der Zeile ausgewählt werden. Ausgewählte NBIs können mit der Schaltfläche "Ausgewählte NBIs kopieren" kopiert werden.
NBI: Diese Zelle stellt den tatsächlich erfassten NBI dar. Sie enthält Befehle, Parameter, URIs und andere signifikante Aktivitäten, die vom Client gegen den Listener generiert wurden. Diese Zelle fasst das Malware-Verhalten zum besseren Verständnis zusammen.
Zusätzliche Informationen: Diese Zelle liefert zusätzliche Informationen zu jeder NBI-Anforderung, wie das verwendete Transportschichtprotokoll, die Ziel-IP, den Port und die SSL-Verschlüsselung.
Aktionen: Diese Zelle ermöglicht es Ihnen, Aktionen für einzelne NBIs durchzuführen. Derzeit wird nur das Kopieren unterstützt. Durch Klicken auf die Kopierschaltfläche werden die Daten der spezifischen NBI-Zelle in einem Markdown-Format kopiert, das sich für die Erstellung von Berichten eignet.
Die UI enthält auch verschiedene interaktive Funktionen:
Kontrollkästchenauswahl: Vor jedem Prozess- und Protokollblock sind Kontrollkästchen verfügbar. Durch Aktivieren eines Kontrollkästchens werden alle NBIs unter diesem Prozess oder Protokoll ausgewählt. Dies ist nützlich, wenn Sie alle NBIs von einem bestimmten Prozess oder Protokoll auswählen möchten. Sie können dann die Schaltfläche Ausgewählte NBIs kopieren verwenden, um die ausgewählten Daten zu kopieren.
Suchleiste: Mit der Suchleiste können Sie Schlüsselwörter eingeben, und nur die Zeilen, die diese Schlüsselwörter im Prozessnamen, im NBI oder in den zusätzlichen Informationen enthalten, werden auf der HTML-Seite angezeigt. Sie können dann die Schaltfläche "Gefilterte Daten kopieren" verwenden, um die angezeigten Daten im Markdown-Format zu kopieren. Das Löschen der Suchanfrage stellt die ursprüngliche Tabellenansicht wieder her.
Schaltflächen zum Kopieren:
Ausgewählte Daten kopieren: Kopiert alle ausgewählten NBIs im Markdown-Format. Sie können einzelne NBIs oder alle NBIs unter einem Prozess auswählen, indem Sie Kontrollkästchen aktivieren.Gefilterte Daten kopieren: Kopiert die Daten der gefilterten NBIs im Markdown-Format. Wenn keine Suchanfrage verwendet wird, kopiert diese Schaltfläche die gesamten Daten.Alle NBIs kopieren: Kopiert alle auf der HTML-Seite vorhandenen NBIs im Markdown-Format. Selbst wenn ein Filter angewendet wird, kopiert das Klicken auf diese Schaltfläche alle NBIs.Haftungsausschluss-Schaltfläche: Zeigt den Haftungsausschluss an, der wichtige Fakten für den Benutzer darlegt, die vor Annahmen über die angezeigte NBI-Zusammenfassung zu berücksichtigen sind.
Schaltfläche "Nach oben": Erscheint, wenn der Inhalt der Seite den sichtbaren Bereich überschreitet. Durch Klicken auf diese Schaltfläche gelangen Sie zum Seitenanfang, wo Sie auf wichtige Schaltflächen wie Ausgewählte NBIs kopieren, , und die Suchleiste zugreifen können.
Um die Fähigkeiten von FakeNet-NG voll auszuschöpfen, müssen wir die Struktur und die Einstellungen der Konfigurationsdatei verstehen. Nachfolgend sehen Sie eine beispielhafte Konfigurationsdatei:
###############################################################################
# Fakenet-Konfiguration
[FakeNet]
DivertTraffic: Yes
###############################################################################
# Diverter-Konfiguration
[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-Konfiguration
[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
Die Konfigurationsdatei ist in mehrere Abschnitte unterteilt.* [FakeNet] - Steuert das Verhalten der Anwendung selbst. Die derzeit einzig gültige Option ist DivertTraffic. Wenn aktiviert, weist es das Tool an, das entsprechende Diverter-Plugin zu starten und Datenverkehr abzufangen. Wenn diese Option deaktiviert ist, startet FakeNet-NG weiterhin Listener, verlässt sich jedoch auf eine andere Methode, um Datenverkehr an diese zu leiten (z. B. manuelles Ändern des DNS-Servers).
[Diverter] - Einstellungen zur Umleitung von Datenverkehr. Wird unten ausführlich behandelt.
[Listener Name] - Eine Sammlung von Listener-Konfigurationen. Jeder Listener verfügt über eine Reihe von Standardeinstellungen (z. B. Port, Protokoll) sowie listenerspezifische Konfigurationen (z. B. DumpHTTPPosts für den HTTPListener).
Angenommen, Sie haben die Einstellung DivertTraffic im Konfigurationsblock [FakeNet] aktiviert, dann aktiviert das Tool seine Verkehrsumleitungs-Engine, die wir ab jetzt als Diverter bezeichnen, in Anlehnung an die hervorragende WinDivert-Bibliothek, die die Magie hinter den Kulissen auf Windows-Plattformen durchführt (die Linux-Implementierung des Diverter verwendet python-netfilterqueue).
Der Diverter untersucht alle ausgehenden Pakete und gleicht sie mit einer Liste von Protokollen und Ports der aktivierten Listener ab. Wenn ein Listener auf dem Port und Protokoll des Pakets lauscht, wird die Zieladresse auf die IP-Adresse des lokalen Rechners geändert, wo der Listener die Anfrage bearbeitet. Gleichzeitig werden Antworten des Listeners so geändert, dass die Quell-IP-Adresse so erscheint, als käme das Paket vom ursprünglich angeforderten Host.
Sie können optional die Einstellung DumpPackets aktivieren, um den gesamten von FakeNet-NG beobachteten Verkehr (umgeleitet oder weitergeleitet) in einer PCAP-Datei zu speichern. Es ist möglich, SSL-Verkehr zwischen einer abgefangenen Anwendung und einem der Listener mit SSL-Unterstützung zu entschlüsseln. Verwenden Sie die Anweisungen auf der folgenden Seite:
https://wiki.wireshark.org/TLS
Die Schlüssel privkey.pem und server.pem, die von den Servern von FakeNet-NG verwendet werden, befinden sich im Stammverzeichnis der Anwendung.
SingleHost: Datenverkehr von lokalen Prozessen manipulieren.MultiHost: Datenverkehr von anderen Systemen manipulieren.Auto: Verwenden Sie den NetworkMode, der auf der aktuellen Plattform am funktionalsten ist.NetworkMode-Einstellungen. Hier ist der aktuelle Unterstützungsstatus:
SingleHostMultiHost und experimentell den SingleHost-Modus (funktioniert mit Ausnahme der Blacklist- und Whitelist-Funktionen für Prozesse, Ports und Hosts).Auto eingestellt, um auf Windows den SingleHost-Modus und auf Linux den MultiHost-Modus zu erhalten.Der Diverter unterstützt im Allgemeinen die folgende DNS-bezogene Einstellung:
Die Windows-Implementierung des Diverter unterstützt die folgende DNS-bezogene Einstellung:
Die Linux-Implementierung des Diverter unterstützt die folgenden Einstellungen:
LinuxRedirectNonlocal - Wenn FakeNet-NG verwendet wird, um Internetverbindung für einen anderen Host zu simulieren, gibt dies an, welche externen Netzwerkschnittstellen zu FakeNet-NG umgeleitet werden sollen.
LinuxFlushIptables - Löscht alle iptables-Regeln, bevor Regeln für FakeNet-NG hinzugefügt werden. Der Linux-Diverter stellt die alten Regeln wieder her, solange seine Beendigungssequenz nicht unterbrochen wird.
LinuxFlushDnsCommand - Geben Sie den korrekten Befehl für Ihre Linux-Distribution an, um den DNS-Resolver-Cache zu leeren, falls zutreffend.
DebugLevel - Geben Sie granulare Debug-Ereignisse zur Anzeige an. Beachten Sie fakenet/diverters/linutil.py für gültige Bezeichnungen.
Standardmäßig fängt der Diverter nur Datenverkehr ab, für den ein dedizierter Listener erstellt wurde. Durch Aktivieren der Einstellung RedirectAllTraffic und Konfigurieren der standardmäßigen TCP- und UDP-Handler mit den Einstellungen DefaultTCPListener und DefaultUDPListener ist es jedoch möglich, Datenverkehr zu Ports dynamisch zu behandeln, die nicht explizit in einem der Listener definiert sind. Betrachten wir zum Beispiel eine Beispielkonfiguration, die den gesamten Datenverkehr zu lokalen TCP- und UDP-Listenern auf den Ports 1234 umleitet:
RedirectAllTraffic: Yes
DefaultTCPListener: TCPListener1234
DefaultUDPListener: UDPListener1234
HINWEIS: Wir springen ein wenig voraus mit Listener-Definitionen, aber bedenken Sie einfach, dass TCPListener1234 und UDPListener1234 im folgenden Abschnitt definiert werden.
Mit der Einstellung RedirectAllTraffic ändert FakeNet-NG nicht nur die Zieladresse, sondern auch den Zielport, damit er von einem der Standard-Listener bearbeitet werden kann. Nachfolgend ein Beispielprotokoll von Datenverkehr, der an eine externe Host-IP-Adresse 1.1.1.1 auf Port 4444 adressiert war und stattdessen zum Standard-Listener auf Port 1234 umgeleitet wurde:
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
Es ist wichtig zu beachten, dass Datenverkehr, der für den Port eines explizit definierten Listeners bestimmt ist, weiterhin von diesem Listener und nicht vom Standard-Listener bearbeitet wird. Beispielsweise wird der standardmäßige UDP-Listener keinen DNS-Verkehr bearbeiten, wenn ein separater DNS-Listener für UDP-Port 53 definiert ist.
Ein Problem bei der Aktivierung der RedirectAllTraffic-Option ist, dass Sie möglicherweise etwas Datenverkehr durchlassen möchten, um den normalen Betrieb des Rechners zu gewährleisten. Stellen Sie sich ein Szenario vor, in dem Sie eine Anwendung analysieren, die weiterhin eine Verbindung zu einem externen DNS-Server herstellen muss. Sie können die Einstellungen BlackListPortsTCP und BlackListPortsUDP verwenden, um eine Liste von Ports zu definieren, für die der Datenverkehr ignoriert und unverändert weitergeleitet wird, oder BlackListIDsICMP (nur Windows), um eine Liste von ICMP-IDs zu definieren, die gefiltert und ignoriert werden sollen:
BlackListPortsUDP: 53
Einige andere Diverter-Einstellungen, die Sie in Betracht ziehen könnten, sind ProcessBlackList und HostBlackList, die es dem Diverter ermöglichen, Datenverkehr von einem bestimmten Prozessnamen bzw. für einen bestimmten Host zu ignorieren und weiterzuleiten.
Listener-Konfigurationen definieren das Verhalten einzelner Listener. Schauen wir uns eine Beispielkonfiguration eines Listeners an:
[TCPListener1234]
Enabled: True
Port: 1234
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 10
Hidden: False
Die obige Konfiguration besteht aus dem Listener-Namen TCPListener1234. Dieser wird zu Protokollzwecken verwendet, damit Sie zwischen verschiedenen Listenern unterscheiden können, die Verbindungen bearbeiten, selbst wenn sie dasselbe Protokoll verarbeiten.
Die folgenden Einstellungen sind für alle Listener generisch:
Die Einstellungen Port und Protocol sind notwendig, damit die Listener wissen, an welche Ports sie sich binden müssen, und, wenn sie mehrere Protokolle unterstützen (z. B. RawListener), entscheiden, welches Protokoll verwendet werden soll. Sie werden auch vom Diverter verwendet, um herauszufinden, welche Ports und Protokolle umgeleitet werden sollen.
Die Einstellung Listener definiert eines der verfügbaren Listener-Plugins zur Bearbeitung umgeleiteten Datenverkehrs. Die aktuelle Version von FakeNet-NG wird mit den folgenden Listenern ausgeliefert:
DNSResponse. Sie können auch das Attribut NXDomains auf die Anzahl der Anfragen setzen, die der Listener ignorieren soll. Auf diese Weise können Sie möglicherweise die Malware dazu bringen, alle ihre Backup-C2-Controller-Namen anzufordern. Der Listener unterstützt sowohl TCP- als auch UDP-Protokolle.Webroot-Verzeichnis, basierend auf der angeforderten Dateierweiterung. Optional werden POST-Anfragen in eine konfigurierbare Datei geschrieben, die mit den Einstellungen DumpHTTPPosts und DumpHTTPPostsFilePrefix angegeben werden kann.HINWEIS: FakeNet-NG versucht, das Webroot-Verzeichnis zu finden, zuerst unter Verwendung der angegebenen absoluten oder relativen Pfade. Wenn der angegebene Webroot-Pfad nicht gefunden wird, sucht es in seinem defaultFiles-Verzeichnis.
Als Sonderfall antwortet die Windows-Diverter-Implementierung während des Betriebs automatisch auf alle ICMP-Anfragen. Falls also eine Malware versucht, einen Host anzupingen, um die Verbindung zu testen, erhält sie eine gültige Antwort. Der Linux-Diverter protokolliert und leitet alle ICMP-Pakete an localhost weiter.
HINWEIS: Einige Listener können Datei-Uploads verarbeiten (z. B. TFTPListener und BITSListener). Alle hochgeladenen Dateien werden im aktuellen Arbeitsverzeichnis mit einem konfigurierbaren Präfix gespeichert (z. B. "tftp_" für TFTP-Uploads).
FakeNet-NG unterstützt mehrere Filterregeln, bestehend aus Blacklists und Whitelists für Prozesse und Hosts. Die Whitelists werden als Regeln behandelt, die Verbindungen zu den Listenern erlauben, während die Blacklists verwendet werden, um eingehende Verbindungen zu ignorieren und sie einfach weiterzuleiten.
Betrachten Sie zum Beispiel die folgende Konfiguration mit Prozess- und Hostfiltern:
[FilteredListener]
Enabled: True
Port: 31337
Protocol: TCP
Listener: RawListener
UseSSL: No
Timeout: 10
ProcessWhiteList: malware.exe, ncat.exe
HostBlackList: 5.5.5.5
Der obige FilteredListener bearbeitet nur Verbindungen von den Prozessen malware.exe und ncat.exe, ignoriert jedoch alle Verbindungen, die für den Host 5.5.5.5 bestimmt sind. Das bedeutet, dass ein Prozess namens test.exe, der versucht, auf Port 31337 zu verbinden, nicht zum Listener umgeleitet wird, sondern dorthin weitergeleitet wird, wo er ursprünglich hin sollte, sofern die Route verfügbar ist.
Wenn gleichzeitig der Prozess malware.exe versucht, auf Port 31337 auf einem anderen Host als 5.5.5.5 zu verbinden, wird er zum FilteredListener umgeleitet. Alle Verbindungen vom Prozess malware.exe, die für 5.5.5.5 bestimmt sind, werden durchgelassen.
Eine weitere leistungsstarke Konfigurationseinstellung ist ExecuteCmd. Sie ermöglicht es Ihnen, beim ersten erkannten Paket der Verbindung einen beliebigen Befehl auszuführen. Der Wert von ExecuteCmd kann mehrere Format-String-Variablen verwenden:
{pid} - Prozess-ID{procname} - Name der ausführbaren Prozessdatei{src_addr} - Quelladresse{src_port} - Quellport{dst_addr} - Zieladresse{dst_port} - ZielportBetrachten Sie ein Szenario einer gepackten Malware-Probe, die eine Verbindung zu einem konfigurierten C2-Server auf Port 8443 herstellt (verwenden Sie RedirectAllTraffic, wenn der Port nicht bekannt ist). In vielen Fällen entpackt sich die Malware zum Zeitpunkt der Verbindung, was diesen Ausführungspunkt ideal macht, um mit einem Debugger an den Prozess anzuhängen und eine entpackte Version für die weitere Analyse auszulagern.
Sehen wir uns an, wie dies verwendet werden kann, um automatisch einen Debugger bei der ersten Verbindung zu starten:
[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}
Sobald FakeNet-NG eine neue Verbindung vom whitelisteten Prozess malware.exe erkennt (diese Einstellung ist optional), startet es automatisch windbg und hängt es an den verbindenden Prozess an.
HINWEIS: Möglicherweise möchten Sie die normale Timeout-Einstellung verlängern, falls die Malware weiter mit dem Listener interagieren muss.
Es gibt einen speziellen Anwendungsfall, bei dem Sie eine neue Listener-Konfiguration erstellen können, ohne den tatsächlichen Listener zu definieren, der sie bearbeitet:
[Forwarder]
Enabled: True
Port: 8080
Protocol: TCP
ProcessWhiteList: chrome.exe
Ohne einen definierten Listener wird FakeNet-NG den Datenverkehr weiterhin auf den lokalen Rechner umleiten, aber ein separater Listener muss vom Benutzer gestartet werden. Beispielsweise könnten Sie einen HTTP-Proxy haben, der auf Port 8080 auf Verbindungen lauscht, und FakeNet-NG den gesamten Datenverkehr von Anwendungen abfangen lassen, die die Proxy-Server-Einstellungen des Systems nicht verwenden oder fest codierte IP-Adressen verwenden. Mit anonymen Listenern können Sie die erweiterten Verkehrs- und Prozessfilterfähigkeiten von FakeNet-NG auf Drittanbieter-Tools anwenden.
Sie möchten möglicherweise auch die ProcessBlackList-Einstellung des Diverter aktivieren, damit das externe Tool mit dem Internet kommunizieren kann. Fügen Sie zum Beispiel den Prozessnamen des HTTP-Proxys zur Prozess-Blacklist hinzu, damit er den proxyierten Verkehr weiterleiten kann. Fügen Sie zum Beispiel den folgenden Prozess hinzu, damit Burp Proxy mit dem Internet kommunizieren kann:
ProcessBlackList: java.exe
In dem Szenario, in dem eine Anwendung auf einem unbekannten Port kommuniziert, Sie sie aber dennoch zum anonymen Listener auf Port 8080 umleiten möchten, können Sie den Standard-Listener wie folgt definieren:
RedirectAllTraffic: Yes
DefaultTCPListener: ForwarderTCP
DefaultUDPListener: RawUDPListener
Um schließlich zu ermöglichen, dass DNS-Verkehr weiterhin zum standardmäßigen DNS-Server im Internet gelangt, während aller anderer Verkehr umgeleitet wird, fügen Sie Port 53 zur UDP-Port-Blacklist des Diverter hinzu, wie folgt:
BlackListPortsUDP:
Das neueste Release von FakeNet-NG implementiert einen neuen Proxy-Listener, der in der Lage ist, das kommunizierende Protokoll (einschließlich SSL-Verkehr) dynamisch zu erkennen und die Verbindung an einen geeigneten Listener umzuleiten.
Sie können den Proxy-Listener so konfigurieren, dass er auf einem bestimmten Port arbeitet, wie in der folgenden Konfiguration dargestellt:
[ProxyTCPListener]
Enabled: True
Protocol: TCP
Listener: ProxyListener
Port: 38926
Listeners: HTTPListener, RawListener, FTPListener, DNSListener, POPListener, SMTPListener, TFTPListener, IRCListener, BITSListener
Hidden: False
Beachten Sie den neuen Parameter Listeners, der eine Liste potenzieller Protokollhandler definiert, die für alle eingehenden Verbindungen ausprobiert werden sollen.
Es wird auch empfohlen, einen Proxy-Listener als Standard-Handler zu definieren, indem Sie die folgenden Diverter-Konfigurationen aktualisieren:
RedirectAllTraffic: Yes
DefaultTCPListener: ProxyTCPListener
DefaultUDPListener: ProxyUDPListener
Mit dem Standard-Listener, der auf den Proxy-Listener zeigt, werden alle unbekannten Verbindungen angemessen behandelt. Sie können weiterhin bestimmte Listener Ports zuweisen, um ein bestimmtes Protokoll zu erzwingen (z. B. immer den HTTP-Listener für Port 80 verwenden).
Der Proxy bestimmt das Protokoll von Paketen, indem er alle verfügbaren Listener mit der Funktion taste() abfragt. Jeder Listener, der taste() implementiert, antwortet mit einem Score, der die Wahrscheinlichkeit angibt, dass das von diesem Listener verarbeitete Protokoll mit dem Paketinhalt übereinstimmt. Der Proxy leitet das Paket an den Listener weiter, der den höchsten Score zurückgegeben hat. Der RawListener gibt immer einen Score von 1 zurück, sodass er ausgewählt wird, wenn alle anderen Listener 0 zurückgeben, und dient somit als Standard.
Benutzer können den Konfigurationsparameter 'Hidden' in der Konfiguration jedes Listeners ändern. Wenn Hidden 'False' ist, wird der Listener an einen bestimmten Port gebunden und empfängt automatisch den gesamten Datenverkehr auf diesem Port. Bei Hidden 'True' kann der Listener nur Datenverkehr empfangen, der über den Proxy umgeleitet wird.
FakeNet-NG wird in Python entwickelt, was Ihnen die schnelle Entwicklung neuer Plugins und die Erweiterung vorhandener Funktionalität ermöglicht. Einzelheiten finden Sie unter Developing for FakeNet-NG.
Zum Zeitpunkt dieses Schreibens beträgt die Standard-Puffergröße in pydivert 1500. Wenn FakeNet-NG auf ein Paket trifft, das größer als die Standard-Puffergröße ist, kann dieser Fehler auftreten. Eine Problemumgehung besteht darin, die gewünschte Puffergröße in self.handle.recv(bufsize=<your_bufsize>) in fakenet/diverters/windows anzugeben. Siehe hier.
Siehe "Kein Abfangen von Datenverkehr" unten.
Damit FakeNet-NG das Paket abfangen und modifizieren kann, muss eine gültige Netzwerkroute existieren, damit das Paket sein Ziel erreichen kann.
Es gibt eine einfache Möglichkeit zu überprüfen, ob die Routen korrekt eingerichtet sind. Versuchen Sie, ohne das laufende Tool, den Zielhost anzupingen. Sie sollten entweder eine gültige Antwort oder eine Timeout-Meldung erhalten. Wenn Sie stattdessen einen Fehler "Ziel nicht erreichbar" erhalten, dann haben Sie keine gültige Route.
Dies wird in der Regel dadurch verursacht, dass Ihr Gateway entweder nicht gesetzt oder nicht erreichbar ist. Bei einem VMWare-Rechner im Host-Only-Modus ist beispielsweise das Gateway nicht konfiguriert, sodass FakeNet-NG keinen Datenverkehr sehen kann.
Um dieses Problem zu beheben, konfigurieren Sie Ihre primäre Schnittstelle manuell auf das Gateway im selben Subnetz. Überprüfen Sie zunächst den Schnittstellennamen:
C:\>netsh interface show interface
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Connected Dedicated Local Area Connection
In diesem Fall lautet der Schnittstellenname "Local Area Connection", daher verwenden wir ihn für die restlichen Befehle.Konfigurieren Sie die IP-Adresse und das Gateway der Schnittstelle manuell wie folgt:
C:\>netsh interface ip set address name="Local Area Connection" static 192.168.249.123 255.255.255.0 192.168.249.254
Legen Sie die IP-Adresse des DNS-Servers manuell fest:
C:\>netsh interface ip set dns name="Local Area Connection" static 4.2.2.2
Falls Sie weiterhin Probleme haben, stellen Sie sicher, dass die Gateway-IP-Adresse selbst routingfähig ist.
Stellen Sie sicher, dass der DNS Listener erfolgreich an seinen Port gebunden wurde. Fehler wie die folgenden zeigen an, dass der DNS Listener nicht erfolgreich gebunden wurde:``` 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
Verwenden Sie `netstat`, `tcpview` oder andere Tools, um herauszufinden, welche Anwendung an den Port gebunden ist, und schlagen Sie in der entsprechenden Betriebssystem- oder Anwendungsdokumentation nach, um den Dienst zu deaktivieren.
Es kann sinnvoll sein, vor der Neukonfiguration einen VM-Snapshot zu erstellen.
Zum Beispiel aktiviert Ubuntu häufig den `dnsmasq`-Dienst in `/etc/NetworkManager/NetworkManager.conf` mit der Zeile `dns=dnsmasq`. Das Deaktivieren (z.B. durch Auskommentieren) und Neustarten des `network-manager`-Dienstes (z.B. `service network-manager restart`) reicht aus, um den Port freizugeben, bevor FakeNet-NG neu gestartet wird.
In neueren Versionen von Ubuntu oder in anderen Distributionen kann die Verwendung von `lsof -i` zeigen, dass stattdessen `systemd-resolved` verwendet wird. In diesen Fällen können Sie diese an <https://askubuntu.com/questions/907246/how-to-disable-systemd-resolved-in-ubuntu> angepassten Schritte versuchen:```
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Dann fügen Sie in /etc/NetworkManager/NetworkManager.conf unter dem Abschnitt [main] eine Zeile hinzu, die Folgendes angibt:```
dns=default
Lösche den Symlink `/etc/resolv.conf`, d.h. `rm /etc/resolv.conf`.
Starten Sie abschließend den `NetworkManager` neu:```
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.
Only Windows Vista+ is supported for SingleHost mode. Please use the
original Fakenet for Windows XP/2003 operating systems.
Only Linux is supported for MultiHost mode.
Old versions of python-netfilterqueue can cause a segmentation fault in
python. If you experience this issue, check that you are using the latest
version of python-netfilterqueue.
Due to the hard-coded buffer size used by python-netfilterqueue, the Linux
Diverter does not correctly handle packets greater than 4,016 bytes in size.
In practice, this does not affect Linux MultiHost mode for interfaces
configured with the conventional 1,500 byte maximum transmittal unit (MTU).
If the Linux interface you are using with FakeNet-NG supports an MTU greater
than 4016, you will need to recompile python-netfilterqueue to support a
buffer size of <your_mtu> + 80 (python-netfilterqueue devotes 80 bytes of
the buffer to overhead).
Local machine only traffic is not intercepted on Windows (e.g. if you tried to connect directly to one of the listeners).
Only traffic using TCP, UDP, and ICMP protocols is intercepted.
For bugs, crashes, or other comments please contact [email protected].
Subscribe to the FLARE mailing list for community announcements! Email "subscribe" to [email protected].
Wenn Sie manuell installieren, wechseln Sie in das heruntergeladene Verzeichnis flare-fakenet-ng und führen Sie Folgendes mit Administratorrechten aus:
python setup.py install
Unter Linux: Geben Sie Port 53 für den DNS-Listener frei:
sudo systemctl stop systemd-resolved
Führen Sie FakeNet-NG in einer privilegierten Shell von einem beliebigen Verzeichnis aus mit 'fakenet' aus.
Unter Linux: Geben Sie Port 53 für den DNS-Listener frei:
sudo systemctl stop systemd-resolved
Führen Sie FakeNet-NG in einer privilegierten Shell mit einem Python-Interpreter aus:
python -m fakenet.fakenet
Alle NBIs kopierenGefilterte NBIs kopieren