
FakeNet-NG - Outil d'analyse dynamique de réseau de nouvelle génération
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
D O C U M E N T A T I O N
FakeNet-NG 3.5 est un outil d'analyse réseau dynamique de nouvelle génération pour les analystes de logiciels malveillants et les testeurs d'intrusion. Il est open source et conçu pour les dernières versions de Windows (et Linux, pour certains modes de fonctionnement). FakeNet-NG est basé sur l'excellent outil Fakenet développé par Andrew Honig et Michael Sikorski.
L'outil vous permet d'intercepter et de rediriger tout ou partie du trafic réseau tout en simulant des services réseau légitimes. En utilisant FakeNet-NG, les analystes de logiciels malveillants peuvent rapidement identifier la fonctionnalité des malwares et capturer des signatures réseau. Les testeurs d'intrusion et les chasseurs de bugs trouveront le moteur d'interception configurable et le cadre modulaire de FakeNet-NG très utiles lors des tests de fonctionnalités spécifiques d'applications et du prototypage de PoCs.
Vous pouvez installer FakeNet-NG de plusieurs façons. Notez que les processus d'installation suivants récupèreront des bibliothèques open-source tierces utilisées par FakeNet-NG sur votre système. Ces bibliothèques seront chargées dynamiquement au moment de l'exécution, et certaines de ces bibliothèques peuvent être sous licence LGPL.
Il est plus simple de télécharger la version compilée qui peut être obtenue depuis la page des versions :
https://github.com/mandiant/flare-fakenet-ng/releases
Exécutez FakeNet-NG en lançant 'fakenet.exe'.
C'est la méthode préférée pour utiliser FakeNet-NG sur Windows car elle ne nécessite pas l'installation de modules supplémentaires, ce qui est idéal pour une machine d'analyse de logiciels malveillants.
REMARQUE : FakeNet-NG peut être signalé comme malveillant par les solutions Antivirus (AV) et de Détection et Réponse des Points d'Accès (EDR) (par exemple, Windows Defender, Navigation sécurisée de Chrome). Cela est probablement dû à sa capacité à modifier le trafic réseau et à simuler des services réseau, en plus de l'utilisation de PyInstaller pour construire les exécutables de version. Les binaires de version officiels sont sûrs et ces détections doivent être considérées comme des faux positifs. Pour rappel, FakeNet-NG est conçu et fortement recommandé pour une utilisation dans un environnement contrôlé et isolé, tel qu'une Machine Virtuelle (VM), où il peut modifier en toute sécurité les paramètres réseau du système.
Installez Python 3.10.11 et la dernière version de pip pour Windows/Linux.
Sur Windows, téléchargez et installez Visual C++ build tools.
L'installation sur Linux nécessite les dépendances suivantes :
Installez ces dépendances en utilisant la commande suivante :
sudo apt-get install build-essential python3.10-dev libnetfilter-queue-dev
Installez FakeNet-NG en tant que module Python en utilisant pip :
python -m pip install https://github.com/mandiant/flare-fakenet-ng/zipball/master
Ou en obtenant le dernier code source et en l'installant manuellement :
git clone https://github.com/mandiant/flare-fakenet-ng/
Installez les dépendances Python en exécutant les commandes suivantes avec des privilèges d'administrateur :
Sous Linux (testé sur Ubuntu 24.04.2 LTS), exécutez les commandes suivantes avant d'exécuter 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
Enfin, si vous souhaitez éviter d'installer FakeNet-NG et simplement l'exécuter tel quel (par exemple pour le développement), vous devez obtenir le code source et installer les dépendances comme suit :
Installez Python 3.10.11 64 bits ou 32 bits pour les versions 64 bits ou 32 bits de Windows/Linux respectivement.
Sous Windows, installez les dépendances Python en exécutant les commandes suivantes avec des privilèges d'administrateur :
python -m pip install pydivert dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
REMARQUE : pydivert téléchargera et installera également la bibliothèque et le pilote WinDivert
dans le répertoire %PYTHONHOME%\DLLs. FakeNet-NG intègre ces fichiers, ils ne sont donc pas nécessaires pour une utilisation normale.
Sous Linux, installez les dépendances Python en exécutant les commandes suivantes avec des privilèges d'administrateur :
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
Vous pouvez éventuellement installer le module suivant utilisé pour les tests :
python -m pip install requests
Téléchargez le code source de FakeNet-NG :
git clone https://github.com/mandiant/flare-fakenet-ng
Sous Linux, libérez le port 53 pour l'écoute DNS :
La façon la plus simple d'exécuter FakeNet-NG est d'exécuter simplement l'exécutable fourni en tant qu'Administrateur. Vous pouvez fournir le paramètre de ligne de commande --help pour obtenir une aide simple :
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)
Comme vous pouvez le voir dans l'aide simple ci-dessus, il est possible de configurer le fichier de configuration utilisé pour démarrer FakeNet-NG. Par défaut, l'outil utilise configs\default.ini ; cependant, il peut être modifié avec le paramètre -c. Il existe plusieurs exemples de fichiers de configuration dans le répertoire configs. En raison du grand nombre de paramètres différents, FakeNet-NG s'appuie sur les fichiers de configuration pour contrôler sa fonctionnalité.
REMARQUE : FakeNet-NG tentera de localiser le fichier de configuration spécifié, d'abord en utilisant le chemin absolu ou relatif fourni au cas où vous souhaiteriez stocker toutes vos configurations. Si le fichier de configuration spécifié n'est pas trouvé, il essaiera alors de chercher dans son répertoire configs.
Les autres options de ligne de commande vous permettent de contrôler la quantité de sortie de journalisation affichée ainsi que de la rediriger vers un fichier plutôt que de l'afficher à l'écran.
Avant de plonger et d'exécuter FakeNet-NG, passons en revue quelques concepts de base. L'outil est composé de plusieurs modules travaillant ensemble. L'un de ces modules importants est le Diverter, qui est responsable de la redirection du trafic vers une collection d'écouteurs. Le Diverter force les applications à interagir avec FakeNet-NG plutôt qu'avec de véritables serveurs. Les écouteurs sont des services individuels gérant les connexions entrantes et nous permettant d'examiner le trafic de l'application (par exemple, les signatures de logiciels malveillants).
Lançons FakeNet-NG avec les paramètres par défaut en exécutant la commande suivante :
C:\tools\fakenet-ng>fakenet.exe
Ci-dessous se trouve le journal de sortie annoté illustrant une requête DNS interceptée et une connexion 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
Remarquez que chaque ligne de journal a le nom du module FakeNet-NG actuellement en cours d'exécution. Par exemple, lorsqu'il détourne le trafic, les journaux seront préfixés avec l'étiquette 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
Parallèlement, lorsque des écouteurs individuels gèrent le trafic détourné, les journaux seront étiquetés avec le nom défini dans le fichier de configuration :
07/06/16 10:21:03 PM [ DNS Server] Received A request for domain 'evil.com'.
Pour arrêter FakeNet-NG et enregistrer le fichier PCAP et le rapport HTML générés sur le disque, appuyez simplement sur 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]
Attendez que le PCAP et le rapport soient générés, puis appuyez sur Entrée pour quitter. La fenêtre de console restera ouverte jusqu'à ce que vous le fassiez ; cela peut être désactivé (par exemple, dans les scripts) avec l'option --no-pause.
Avec chaque session de FakeNet-NG, un rapport HTML contenant les Indicateurs Basés sur le Réseau (NBI) capturés tout au long de la session est généré. Lors de l'arrêt de FakeNet en appuyant sur CTRL-C, ce fichier HTML sera enregistré dans le répertoire racine de FakeNet. Un utilisateur peut consulter les NBI en visualisant ce fichier HTML dans un navigateur tel que Chrome ou Firefox.
Le rapport HTML sert d'Interface Graphique Utilisateur (GUI) interactive qui présente le résumé des NBI de manière conviviale. Il comprend diverses fonctionnalités pour sélectionner, filtrer et copier les NBI, ce qui facilite l'analyse réseau. L'interface organise tous les NBI en fonction de leurs informations de processus, puis les catégorise davantage par le protocole de couche application ou de couche transport qu'ils utilisent.
Les informations dans le tableau récapitulatif des NBI sont présentées sous forme tabulaire et incluent les détails suivants :
Select : Cliquer sur la case à cocher sélectionne le NBI correspondant. Vous pouvez sélectionner plusieurs NBI dans différents protocoles ou dans le même protocole. La ligne entière peut également être sélectionnée en cliquant n'importe où dans la ligne. Les NBI sélectionnés peuvent être copiés à l'aide du bouton "Copier les NBI sélectionnés".
NBI : Cette cellule représente le NBI réellement capturé. Elle inclut les commandes, paramètres, URI et autres activités significatives générées par le client vers l'écouteur. Cette cellule résume le comportement du malware pour une meilleure compréhension.
Informations supplémentaires : Cette cellule fournit des informations supplémentaires sur chaque requête NBI, telles que le protocole de couche transport utilisé, l'IP de destination, le port, et le chiffrement SSL.
Actions : Cette cellule vous permet d'effectuer des actions sur des NBI individuels. Actuellement, seule la copie est prise en charge. Cliquer sur le bouton de copie copie les données de la cellule NBI spécifique dans un format markdown adapté à la création de rapports.
L'interface comprend également diverses fonctionnalités interactives :
Sélection par case à cocher : Des cases à cocher sont disponibles avant chaque bloc de processus et de protocole. Cochez une case pour sélectionner tous les NBI sous ce processus ou protocole. Cela est utile lorsque vous souhaitez sélectionner tous les NBI d'un processus ou d'un protocole particulier. Vous pouvez ensuite utiliser le bouton Copier les NBI sélectionnés pour copier les données sélectionnées.
Barre de recherche : La barre de recherche vous permet de saisir des mots-clés, et seules les lignes contenant ces mots-clés dans le nom du processus, le NBI ou les informations supplémentaires seront affichées dans la page HTML. Vous pouvez ensuite utiliser le bouton "Copier les données filtrées" pour copier les données affichées au format markdown. Effacer la requête de recherche restaure la vue du tableau d'origine.
Boutons de copie :
Copier les données sélectionnées : Copie tous les NBI sélectionnés au format markdown. Vous pouvez sélectionner des NBI individuels ou tous les NBI sous un processus en cochant les cases.Copier les données filtrées : Copie les données des NBI filtrés au format markdown. Si aucune requête de recherche n'est utilisée, ce bouton copie l'ensemble des données.Copier tous les NBI : Copie tous les NBI au format markdown présents dans la page HTML. Même si un filtre est appliqué, cliquer sur ce bouton copie tous les NBI.Bouton d'avertissement : Affiche l'avertissement, qui souligne les faits importants que l'utilisateur doit prendre en compte avant de faire des hypothèses sur le résumé des NBI affiché.
Bouton Aller en haut : Apparaît lorsque le contenu de la page dépasse la zone visible. Cliquer sur ce bouton vous amène en haut de la page, où vous pouvez accéder aux boutons importants tels que Copier les NBI sélectionnés, Copier tous les NBI, , et la barre de recherche.
Pour tirer pleinement parti des capacités de FakeNet-NG, nous devons comprendre sa structure de fichier de configuration et ses paramètres. Voici un exemple de fichier de configuration :
###############################################################################
# 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
Le fichier de configuration est divisé en plusieurs sections.* [FakeNet] - Contrôle le comportement de l'application elle-même. La seule option valide à ce stade est DivertTraffic. Lorsqu'elle est activée, elle ordonne à l'outil de lancer le plugin Diverter approprié et d'intercepter le trafic. Si cette option est désactivée, FakeNet-NG lancera quand même les écouteurs, mais comptera sur une autre méthode pour diriger le trafic vers eux (par exemple, modifier manuellement le serveur DNS).
[Diverter] - Paramètres pour rediriger le trafic. Décrits en détail ci-dessous.
[Nom de l'écouteur] - Un ensemble de configurations d'écouteur. Chaque écouteur possède un ensemble de paramètres par défaut (par exemple, port, protocole) ainsi que des configurations spécifiques à l'écouteur (par exemple, DumpHTTPPosts pour HTTPListener).
En supposant que vous ayez activé le paramètre DivertTraffic dans le bloc de configuration [FakeNet], l'outil activera son moteur de redirection de trafic que nous appellerons Diverter à partir de maintenant, en référence à l'excellente bibliothèque WinDivert utilisée pour effectuer la magie en coulisse sur les plateformes Windows (l'implémentation Linux du Diverter utilise python-netfilterqueue).
Le Diverter examinera tous les paquets sortants et les comparera à une liste de protocoles et de ports des écouteurs activés. S'il existe un écouteur à l'écoute sur le port et le protocole du paquet, l'adresse de destination sera changée en l'adresse IP de la machine locale où l'écouteur traitera la requête. En même temps, les réponses provenant de l'écouteur seront modifiées de sorte que l'adresse IP source apparaisse comme si le paquet provenait de l'hôte initialement demandé.
Vous pouvez éventuellement activer le paramètre DumpPackets pour stocker tout le trafic observé par FakeNet-NG (redirigé ou transmis) dans un fichier PCAP. Il est possible de déchiffrer le trafic SSL entre une application interceptée et l'un des écouteurs prenant en charge SSL. Utilisez les instructions à la page suivante :
https://wiki.wireshark.org/TLS
Les clés privkey.pem et server.pem utilisées par les serveurs de FakeNet-NG se trouvent dans le répertoire racine de l'application.
SingleHost : manipule le trafic des processus locaux.MultiHost : manipule le trafic d'autres systèmes.Auto : utilise le NetworkMode le plus fonctionnel sur la plateforme actuelle.NetworkMode. Voici l'état actuel du support :
SingleHostMultiHost et supporte expérimentalement le mode SingleHost (fonctionne à l'exception des listes noires et blanches de processus, ports et hôtes).Auto
pour obtenir le mode SingleHost sous Windows et le mode MultiHost sous Linux.Le Diverter supporte généralement le paramètre suivant lié au DNS :
L'implémentation Windows du Diverter supporte le paramètre suivant lié au DNS :
L'implémentation Linux du Diverter supporte les paramètres suivants :
LinuxRedirectNonlocal - Lors de l'utilisation de FakeNet-NG pour simuler la connectivité Internet pour un hôte différent, cela spécifie quelles interfaces réseau externes doivent être redirigées vers FakeNet-NG.
LinuxFlushIptables - Vide toutes les règles iptables avant d'ajouter des règles pour FakeNet-NG. Le Diverter Linux restaurera les anciennes règles tant que sa séquence de terminaison n'est pas interrompue.
LinuxFlushDnsCommand - Spécifiez la commande correcte pour votre distribution Linux pour vider le cache du résolveur DNS si applicable.
DebugLevel - Spécifiez les événements de débogage fins à afficher. Référez-vous à fakenet/diverters/linutil.py pour les étiquettes valides.
Par défaut, le Diverter n'intercepte que le trafic pour lequel un écouteur dédié a été créé. Cependant, en activant le paramètre RedirectAllTraffic et en configurant les gestionnaires TCP et UDP par défaut avec les paramètres DefaultTCPListener et DefaultUDPListener, il est possible de gérer dynamiquement le trafic vers des ports non explicitement définis dans l'un des écouteurs. Par exemple, regardons une configuration type qui redirige tout le trafic vers les écouteurs TCP et UDP locaux sur les ports 1234 :
RedirectAllTraffic: Yes
DefaultTCPListener: TCPListener1234
DefaultUDPListener: UDPListener1234
NOTE : Nous anticipons un peu avec les définitions d'écouteurs, mais considérez simplement que TCPListener1234 et UDPListener1234 seront définis dans la section ci-dessous.
Avec le paramètre RedirectAllTraffic, FakeNet-NG modifiera non seulement l'adresse de destination, mais aussi le port de destination afin qu'il puisse être pris en charge par l'un des écouteurs par défaut. Voici un exemple de journal du trafic destiné à l'adresse IP externe 1.1.1.1 sur le port 4444 qui a été redirigé vers l'écouteur par défaut sur le port 1234 à la place :
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
Il est important de noter que le trafic destiné au port de l'un des écouteurs explicitement définis sera toujours traité par cet écouteur et non par l'écouteur par défaut. Par exemple, l'écouteur UDP par défaut ne traitera pas le trafic DNS si un écouteur DNS séparé sur le port UDP 53 est défini.
Un problème lors de l'activation de l'option RedirectAllTraffic est que vous voudrez peut-être encore laisser passer une partie du trafic pour assurer le fonctionnement normal de la machine. Considérez un scénario où vous essayez d'analyser une application qui doit encore se connecter à un serveur DNS externe. Vous pouvez utiliser les paramètres BlackListPortsTCP et BlackListPortsUDP pour définir une liste de ports pour lesquels le trafic sera ignoré et transmis sans modification, ou BlackListIDsICMP (Windows uniquement) pour définir une liste d'ID ICMP à filtrer et ignorer :
BlackListPortsUDP: 53
Parmi les autres paramètres du Diverter que vous pourriez considérer, citons ProcessBlackList et HostBlackList qui permettent au Diverter d'ignorer et de transmettre le trafic provenant d'un nom de processus spécifique ou destiné à un hôte spécifique respectivement.
Les configurations des écouteurs définissent le comportement des écouteurs individuels. Regardons un exemple de configuration d'écouteur :
[TCPListener1234]
Enabled: True
Port: 1234
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 10
Hidden: False
La configuration ci-dessus se compose du nom d'écouteur TCPListener1234. Il sera utilisé à des fins de journalisation afin que vous puissiez distinguer les différents écouteurs gérant les connexions même s'ils traitent le même protocole.
Les paramètres suivants sont génériques pour tous les écouteurs :
Les paramètres Port et Protocol sont nécessaires pour que les écouteurs sachent sur quels ports se lier et, s'ils supportent plusieurs protocoles (par exemple RawListener), décident quel protocole utiliser. Ils sont également utilisés par le Diverter pour déterminer quels ports et protocoles rediriger.
Le paramètre Listener définit l'un des plugins d'écouteur disponibles pour gérer le trafic redirigé. La version actuelle de FakeNet-NG est livrée avec les écouteurs suivants :
DNSResponse. Vous pouvez également définir l'attribut NXDomains sur le nombre de requêtes que l'écouteur doit ignorer. De cette façon, vous pourrez peut-être amener le malware à demander tous les noms de ses serveurs C2 de secours. L'écouteur prend en charge les protocoles TCP et UDP.Webroot configurable en fonction de l'extension de fichier demandée. Optionnellement, vide les requêtes POST dans un fichier configurable qui peut être spécifié à l'aide des paramètres DumpHTTPPosts et DumpHTTPPostsFilePrefix.NOTE : FakeNet-NG tentera de localiser le répertoire webroot, d'abord en utilisant les chemins absolus ou relatifs fournis. Si le chemin webroot spécifié n'est pas trouvé, il essaiera de chercher dans son répertoire defaultFiles.
Cas particulier : l'implémentation Windows du Diverter répond automatiquement à toutes les requêtes ICMP pendant son exécution. Ainsi, si un malware tente de ping un hôte pour tester la connectivité, il obtiendra une réponse valide. Le Diverter Linux journalise et transmet tous les paquets ICMP à localhost.
NOTE : Certains écouteurs peuvent gérer les téléchargements de fichiers (par exemple, TFTPListener et BITSListener). Tous les fichiers téléchargés seront stockés dans le répertoire de travail actuel avec un préfixe configurable (par exemple, "tftp_" pour les téléchargements TFTP).
FakeNet-NG prend en charge plusieurs règles de filtrage composées de listes noires et blanches de processus et d'hôtes. Les listes blanches sont traitées comme les règles qui autorisent les connexions aux écouteurs, tandis que les listes noires sont utilisées pour ignorer les connexions entrantes et les laisser simplement être transmises.
Par exemple, considérez la configuration ci-dessous avec des filtres de processus et d'hôtes :
[FilteredListener]
Enabled: True
Port: 31337
Protocol: TCP
Listener: RawListener
UseSSL: No
Timeout: 10
ProcessWhiteList: malware.exe, ncat.exe
HostBlackList: 5.5.5.5
Le FilteredListener ci-dessus ne traitera que les connexions provenant des processus malware.exe et ncat.exe, mais ignorera toutes les connexions destinées à l'hôte 5.5.5.5. Cela signifie que si un processus appelé test.exe tentait de se connecter sur le port 31337, il ne sera pas redirigé vers l'écouteur et sera transmis là où il était initialement destiné si la route est disponible.
En même temps, si le processus malware.exe tentait de se connecter au port 31337 sur un hôte autre que 5.5.5.5, il sera redirigé vers le FilteredListener. Toute connexion du processus malware.exe destinée à 5.5.5.5 serait autorisée à passer.
Un autre paramètre de configuration puissant est ExecuteCmd. Il vous permet essentiellement d'exécuter une commande arbitraire sur le premier paquet détecté de la connexion. La valeur de ExecuteCmd peut utiliser plusieurs variables de chaîne de format :
{pid} - identifiant du processus{procname} - nom de l'exécutable du processus{src_addr} - adresse source{src_port} - port source{dst_addr} - adresse de destination{dst_port} - port de destinationConsidérez un scénario d'un échantillon de malware empaqueté qui se connecte à un serveur C2 configuré sur le port 8443 (utilisez RedirectAllTraffic si le port n'est pas connu). Dans de nombreux cas, le malware se dépaqueterait au moment où il établit la connexion, ce qui rend ce point d'exécution idéal pour s'attacher au processus avec un débogueur et vider une version dépaquetée pour une analyse plus approfondie.
Voyons comment cela peut être utilisé pour lancer automatiquement un débogueur sur la première connexion :
[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}
Une fois que FakeNet-NG détecte une nouvelle connexion provenant du processus autorisé malware.exe (ce paramètre est facultatif), il lancera automatiquement windbg et l'attachera au processus connecté.
NOTE : Vous voudrez peut-être prolonger le paramètre normal Timeout au cas où le malware aurait besoin d'interagir davantage avec l'écouteur.
Il existe un cas d'utilisation spécial où vous pouvez créer une nouvelle configuration d'écouteur sans définir l'écouteur réel pour le gérer :
[Forwarder]
Enabled: True
Port: 8080
Protocol: TCP
ProcessWhiteList: chrome.exe
Sans écouteur défini, FakeNet-NG déviera toujours le trafic vers la machine locale, mais un écouteur séparé doit être lancé par l'utilisateur. Par exemple, vous pourriez avoir un proxy HTTP à l'écoute des connexions sur le port 8080 et laisser FakeNet-NG intercepter tout le trafic des applications qui n'utilisent pas les paramètres du serveur proxy du système ou qui utilisent des adresses IP codées en dur. En utilisant des écouteurs anonymes, vous pouvez apporter les capacités avancées de filtrage du trafic et des processus de FakeNet-NG aux outils tiers.
Vous pouvez également activer le paramètre ProcessBlackList du Diverter pour permettre à l'outil externe de communiquer vers Internet. Par exemple, pour permettre à un proxy HTTP de transmettre le trafic proxyé, ajoutez son nom de processus à la liste noire des processus. Par exemple, ajoutez le processus suivant pour laisser Burp Proxy communiquer vers Internet :
ProcessBlackList: java.exe
Dans le scénario où l'application communique sur un port inconnu, mais que vous voulez toujours la rediriger vers l'écouteur anonyme sur le port 8080, vous pouvez définir l'écouteur par défaut comme suit :
RedirectAllTraffic: Yes
DefaultTCPListener: ForwarderTCP
DefaultUDPListener: RawUDPListener
Enfin, pour permettre au trafic DNS de continuer à aller vers le serveur DNS par défaut sur Internet, tout en redirigeant tout autre trafic, ajoutez le port 53 à la liste noire des ports UDP du Diverter comme suit :
BlackListPortsUDP:
La dernière version de FakeNet-NG implémente un nouvel écouteur proxy capable de détecter dynamiquement le protocole de communication (y compris le trafic SSL) et de rediriger la connexion vers un écouteur approprié.
Vous pouvez configurer l'écouteur proxy pour qu'il fonctionne sur un port spécifique comme illustré dans la configuration ci-dessous :
[ProxyTCPListener]
Enabled: True
Protocol: TCP
Listener: ProxyListener
Port: 38926
Listeners: HTTPListener, RawListener, FTPListener, DNSListener, POPListener, SMTPListener, TFTPListener, IRCListener, BITSListener
Hidden: False
Notez le nouveau paramètre Listeners qui définit une liste de gestionnaires de protocole potentiels à essayer pour toutes les connexions entrantes.
Il est également recommandé de définir un écouteur proxy comme gestionnaire par défaut en mettant à jour les configurations de diverter suivantes :
RedirectAllTraffic: Yes
DefaultTCPListener: ProxyTCPListener
DefaultUDPListener: ProxyUDPListener
Avec l'écouteur par défaut pointant vers l'écouteur proxy, toutes les connexions inconnues seront correctement traitées. Vous pouvez toujours attribuer des écouteurs spécifiques à des ports pour imposer un protocole spécifique (par exemple, toujours utiliser l'écouteur HTTP pour le port 80).
Le proxy détermine le protocole des paquets en interrogeant tous les écouteurs disponibles avec la fonction taste(). Chaque écouteur qui implémente taste() répondra avec un score indiquant la probabilité que le protocole géré par cet écouteur corresponde au contenu du paquet. Le proxy transmettra le paquet à l'écouteur qui a renvoyé le score le plus élevé. Le RawListener renverra toujours un score de 1, il sera donc choisi dans le cas où tous les autres écouteurs renvoient 0, servant ainsi de valeur par défaut.
Les utilisateurs peuvent modifier le paramètre de configuration 'Hidden' dans la configuration de chaque écouteur. Si 'Hidden' est 'False', l'écouteur sera lié à un port spécifique et recevra automatiquement tout le trafic sur ce port. Avec 'Hidden' défini sur 'True', l'écouteur ne peut recevoir que le trafic redirigé via le proxy.
FakeNet-NG est développé en Python, ce qui vous permet de développer rapidement de nouveaux plugins et d'étendre les fonctionnalités existantes. Pour plus de détails, consultez Développer pour FakeNet-NG.
Au moment de cette rédaction, la taille de tampon par défaut dans pydivert est de 1500. Si FakeNet-NG rencontre un paquet plus grand que la taille de tampon par défaut, vous pouvez observer cette erreur. Une solution de contournement consiste à spécifier la taille de tampon souhaitée dans self.handle.recv(bufsize=<votre_bufsize>) dans fakenet/diverters/windows. Voir ici
Voir "N'intercepte pas le trafic" ci-dessous.
Pour que FakeNet-NG intercepte et modifie le paquet, il doit exister une route réseau valide pour que le paquet atteigne sa destination.
Il existe un moyen simple de vérifier si vous avez correctement configuré les routes. Sans l'outil en cours d'exécution, essayez de pinguer l'hôte de destination. Vous devriez observer soit une réponse valide, soit un message de délai d'attente. Si vous recevez une erreur de destination inaccessible à la place, alors vous n'avez pas de route valide.
Ceci est généralement causé par une passerelle non définie ou inaccessible. Par exemple, sur une machine VMWare en mode hôte seul, votre machine n'aura pas la passerelle configurée, empêchant ainsi FakeNet-NG de voir le trafic.
Pour corriger ce problème, configurez manuellement votre interface principale sur la passerelle dans le même sous-réseau. Vérifiez d'abord le nom de l'interface :
C:\>netsh interface show interface
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Connected Dedicated Local Area Connection
Dans ce cas, le nom de l'interface est "Local Area Connection", nous allons donc l'utiliser pour le reste des commandes.Configurez manuellement l'adresse IP et la passerelle de l'interface comme suit :
C:\>netsh interface ip set address name="Local Area Connection" static 192.168.249.123 255.255.255.0 192.168.249.254
Définissez manuellement l'adresse IP du serveur DNS
C:\>netsh interface ip set dns name="Local Area Connection" static 4.2.2.2
Si vous rencontrez toujours un problème, assurez-vous que l'adresse IP de la passerelle elle-même est routable.
Assurez-vous que l'écouteur DNS s'est correctement lié à son port. Des erreurs comme celles-ci indiquent que l'écouteur DNS ne s'est pas lié correctement :``` 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
Utilisez `netstat`, `tcpview`, ou d'autres outils pour découvrir quelle application est liée au port, puis consultez la documentation du système d'exploitation ou de l'application correspondante pour désactiver le service.
Il peut être judicieux de prendre un instantané de la VM avant d'entreprendre la reconfiguration.
Par exemple, Ubuntu active couramment le service `dnsmasq` dans `/etc/NetworkManager/NetworkManager.conf` avec la ligne `dns=dnsmasq`. Désactiver ce service (par exemple en le commentant) et redémarrer le service `network-manager` (p. ex. `service network-manager restart`) est suffisant pour libérer le port avant de relancer FakeNet-NG.
Dans les versions plus récentes d'Ubuntu ou dans d'autres distributions, l'utilisation de `lsof -i` peut révéler que `systemd-resolved` est utilisé à la place. Dans ces cas, vous pouvez essayer ces étapes adaptées depuis <https://askubuntu.com/questions/907246/how-to-disable-systemd-resolved-in-ubuntu>:```
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Ensuite, dans /etc/NetworkManager/NetworkManager.conf sous la section [main], ajoutez une ligne spécifiant :```
dns=default
Supprimez le lien symbolique `/etc/resolv.conf`, c'est-à-dire `rm /etc/resolv.conf`.
Enfin, redémarrez `NetworkManager` :```
sudo systemctl restart NetworkManager
Veuillez vous assurer que FakeNet-NG est extrait sur le disque local C: pour garantir que le pilote WinDivert soit chargé correctement.
Cette erreur peut survenir lors de l'exécution d'une version exécutable autonome de Fakenet. Veuillez télécharger et installer l'exécutable du runtime Visual C++ 2008.
Seul Windows Vista+ est pris en charge pour le mode SingleHost. Veuillez utiliser le
Fakenet original pour les systèmes d'exploitation Windows XP/2003.
Seul Linux est pris en charge pour le mode MultiHost.
Les anciennes versions de python-netfilterqueue peuvent provoquer une erreur de segmentation dans
python. Si vous rencontrez ce problème, vérifiez que vous utilisez la version la plus récente
de python-netfilterqueue.
En raison de la taille de tampon codée en dur utilisée par python-netfilterqueue, le
Diverter Linux ne gère pas correctement les paquets de taille supérieure à 4 016 octets.
En pratique, cela n'affecte pas le mode MultiHost Linux pour les interfaces
configurées avec l'unité de transmission maximale (MTU) conventionnelle de 1 500 octets.
Si l'interface Linux que vous utilisez avec FakeNet-NG prend en charge une MTU supérieure
à 4 016, vous devrez recompiler python-netfilterqueue pour prendre en charge une
taille de tampon de <votre_mtu> + 80 (python-netfilterqueue consacre 80 octets du
tampon aux frais généraux).
Le trafic local uniquement n'est pas intercepté sur Windows (par exemple, si vous essayez de vous connecter directement à l'un des écouteurs).
Seul le trafic utilisant les protocoles TCP, UDP et ICMP est intercepté.
Pour les bogues, plantages ou autres commentaires, veuillez contacter [email protected].
Abonnez-vous à la liste de diffusion FLARE pour les annonces de la communauté ! Envoyez « subscribe » à [email protected].
Si vous installez manuellement, changez de répertoire vers le dossier flare-fakenet-ng téléchargé et exécutez la commande suivante avec des privilèges d'administrateur :
python setup.py install
Sous Linux, libérez le port 53 pour l'écoute DNS :
sudo systemctl stop systemd-resolved
Exécutez FakeNet-NG en lançant 'fakenet' depuis n'importe quel répertoire dans un shell avec privilèges.
sudo systemctl stop systemd-resolved
Exécutez FakeNet-NG en le lançant avec un interpréteur Python dans un shell avec privilèges :
python -m fakenet.fakenet
Copier les NBI filtrés