
Génère des empreintes uniques de requêtes HTTP de malwares à partir de fichiers pcap en utilisant Tshark, permettant l'identification et le regroupement de familles de malwares via l'analyse de la structure des requêtes, des en-têtes et des caractéristiques de la charge utile.
Outil pour l'empreinte numérique (fingerprinting) des requêtes HTTP de malwares. Basé sur Tshark et écrit en Python3. Stade de prototype fonctionnel :-)
Son objectif principal est de fournir des représentations uniques (empreintes) des requêtes de malwares, ce qui facilite leur identification. Unique signifie ici que chaque empreinte ne devrait être observée que dans une seule famille de malwares particulière, mais une famille peut avoir plusieurs empreintes. Hfinger représente la requête sous une forme plus courte que l'affichage complet de la requête, mais toujours interprétable par un humain.
Hfinger peut être utilisé dans l'analyse manuelle de malwares mais aussi dans des systèmes de sandbox ou des SIEMs. Les empreintes générées sont utiles pour regrouper des requêtes, identifier des requêtes appartenant à des familles de malwares particulières, distinguer différentes opérations d'une même famille, ou découvrir des requêtes malveillantes inconnues négligées par d'autres systèmes de sécurité mais qui partagent une empreinte.
Un article académique accompagne le travail sur cet outil, décrivant par exemple la motivation des choix de conception, et l'évaluation de l'outil par rapport à p0f, FATT, et Mercury.
L'hypothèse de base de ce projet est que les requêtes HTTP de différentes familles de malwares sont plus ou moins uniques, de sorte qu'elles peuvent être empreintes (fingerprinted) pour fournir une forme d'identification. Hfinger conserve des informations sur la structure et les valeurs de certains en-têtes pour permettre une analyse plus poussée. Par exemple, le regroupement de requêtes similaires - pour l'instant, il s'agit encore d'un travail en cours.
Après analyse des requêtes HTTP et des en-têtes de malwares, nous avons identifié certaines parties des requêtes comme étant les plus distinctives. Celles-ci incluent :
De plus, certaines caractéristiques standard de l'URL de la requête ont également été prises en compte. Toutes ces parties ont été traduites en un ensemble de caractéristiques, décrites en détail ici.
Les caractéristiques ci-dessus sont traduites en une représentation de longueur variable, qui est l'empreinte réelle. Selon le mode de rapport, différentes caractéristiques sont utilisées pour empreinter les requêtes. Plus d'informations sur ces modes sont présentées ci-dessous. Le processus de sélection des caractéristiques sera décrit dans le prochain article académique.
Prérequis minimum avant l'installation :
Python >= 3.3,Tshark >= 2.2.0.Installation disponible depuis PyPI :
pip install hfinger
Hfinger a été testé sur Xubuntu 22.04 LTS avec le paquet tshark en version 3.6.2, mais devrait fonctionner avec des versions plus anciennes comme 2.6.10 sur Xubuntu 18.04 ou 3.2.3 sur Xubuntu 20.04.
Veuillez noter que comme pour toute preuve de concept (PoC), vous devriez exécuter Hfinger dans un environnement isolé, au moins avec un environnement virtuel Python. Sa configuration n'est pas couverte ici, mais vous pouvez essayer ce tutoriel.
Après installation, vous pouvez appeler l'outil directement depuis une ligne de commande avec hfinger ou en tant que module Python avec python -m hfinger.
Par exemple :
foo@bar:~$ hfinger -f /tmp/test.pcap
[{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst": "127.0.0.1", "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]
L'aide peut être affichée avec les options courtes -h ou longues --help :
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
[-l LOGFILE]
Hfinger - fingerprinting malware HTTP requests stored in pcap files
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Read a single pcap file
-d DIR, --directory DIR
Read pcap files from the directory DIR
-o output_path, --output-path output_path
Path to the output directory
-m {0,1,2,3,4}, --mode {0,1,2,3,4}
Fingerprint report mode.
0 - similar number of collisions and fingerprints as mode 2, but using fewer features,
1 - representation of all designed features, but a little more collisions than modes 0, 2, and 4,
2 - optimal (the default mode),
3 - the lowest number of generated fingerprints, but the highest number of collisions,
4 - the highest fingerprint entropy, but slightly more fingerprints than modes 0-2
-v, --verbose Report information about non-standard values in the request
(e.g., non-ASCII characters, no CRLF tags, values not present in the configuration list).
Without --logfile (-l) will print to the standard error.
-l LOGFILE, --logfile LOGFILE
Output logfile in the verbose mode. Implies -v or --verbose switch.
Vous devez fournir un chemin vers un fichier pcap (-f), ou un répertoire (-d) contenant des fichiers pcap. La sortie est au format JSON. Elle sera affichée sur la sortie standard ou dans le répertoire fourni (-o) en utilisant le nom du fichier source. Par exemple, la sortie de la commande :
hfinger -f example.pcap -o /tmp/pcap
sera enregistrée dans :
/tmp/pcap/example.pcap.json
Le mode de rapport -m/--mode peut être utilisé pour changer le mode de rapport par défaut en fournissant un entier dans la plage 0-4. Les modes diffèrent selon les caractéristiques de requête représentées ou les modes d'arrondi. Le mode par défaut (2) a été choisi par nous pour représenter toutes les caractéristiques qui sont habituellement utilisées lors de l'analyse des requêtes, mais il offre également un faible nombre de collisions et d'empreintes générées. Avec les autres modes, vous pouvez atteindre différents objectifs. Par exemple, dans le mode 3, vous obtenez un nombre plus faible d'empreintes générées mais une probabilité plus élevée de collision entre familles de malwares. Si vous n'êtes pas sûr, vous n'avez rien à changer. Plus d'informations sur les modes de rapport sont ici.
À partir de la version 0.2.1, Hfinger est moins verbeux. Vous devez utiliser -v/--verbose si vous souhaitez recevoir des informations sur les valeurs non standard des en-têtes rencontrées, les caractères non-ASCII dans la partie non-charge utile de la requête, l'absence de balises CRLF (\r\n\r\n), et d'autres problèmes avec les requêtes analysées qui ne sont pas des erreurs d'application. Lorsque de tels problèmes sont rencontrés en mode verbeux, ils seront imprimés sur la sortie d'erreur standard. Vous pouvez également enregistrer le journal dans un emplacement défini en utilisant l'option -l/--log (qui implique -v/--verbose). Les données du journal seront ajoutées au fichier journal.