Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
hfinger — 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. | Kitploit
Outils/GitHubGitHub/cert-polska/hfinger
Collecte d'InformationsAnalyse de MalwareRenseignement sur les Menaces
GitHubcert-polska/hfinger

hfinger

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.

Voir le dépôt
14710il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Hfinger - empreinte numérique des requêtes HTTP de malwares

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.

Table des matières

  1. L'idée
  2. Installation
  3. Utilisation
  4. Création des empreintes
  5. Modes de rapport

L'idée

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 :

  • Méthode de requête
  • Version du protocole
  • Ordre des en-têtes
  • Valeurs des en-têtes courants
  • Longueur de la charge utile, entropie et présence de caractères non-ASCII

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.

Installation

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.

Utilisation

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 :

root@kitploit:~
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 :

root@kitploit:~
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.

Utiliser hfinger dans une application Python

À partir de la version 0.2.0, Hfighter permet l'importation dans d'autres applications Python. Pour l'utiliser dans votre application, importez simplement la fonction hfinger_analyze depuis hfinger.analysis et appelez-la avec le chemin du fichier pcap et le mode de rapport. Le résultat retourné est une liste de dictionnaires avec les résultats d'empreinte numérique.

Par exemple :

root@kitploit:~
from hfinger.analysis import hfinger_analyze

pcap_path = "SPECIFY_PCAP_PATH_HERE"
reporting_mode = 4
print(hfinger_analyze(pcap_path, reporting_mode))

À partir de la version 0.2.1, Hfinger utilise le module logging pour enregistrer 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. Hfinger crée son propre logger avec le nom hfinger, mais sans configuration préalable, les informations de journal sont en pratique ignorées. Si vous souhaitez recevoir ces informations de journal, avant d'appeler hfinger_analyze, vous devez configurer le logger hfinger, définir le niveau de journalisation sur logging.INFO, configurer un gestionnaire de journal selon vos besoins, et l'ajouter au logger. Plus d'informations sont disponibles dans la docstring de la fonction hfinger_analyze.

Création des empreintes

Une empreinte est basée sur des caractéristiques extraites d'une requête. L'utilisation de caractéristiques particulières parmi la liste complète dépend du mode de rapport choisi parmi une liste prédéfinie (plus d'informations sur les modes de rapport sont ici). La figure ci-dessous représente la création d'une empreinte exemplaire dans le mode de rapport par défaut.

example

Trois parties de la requête sont analysées pour extraire des informations : l'URI, la structure des en-têtes (incluant la méthode et la version du protocole), et la charge utile. Les caractéristiques particulières de l'empreinte sont séparées par | (pipe). L'empreinte finale générée pour la requête POST de l'exemple est :

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

La création des caractéristiques est décrite ci-dessous dans l'ordre d'apparition dans l'empreinte.

Premièrement, les caractéristiques de l'URI sont extraites :

  • Longueur de l'URI représentée comme un logarithme en base 10 de la longueur, arrondi à un entier, (dans l'exemple, l'URI fait 43 caractères, donc log10(43)≈2),
  • nombre de répertoires, (dans l'exemple il y a 3 répertoires),
  • longueur moyenne des répertoires, représentée comme un logarithme en base 10 de la longueur moyenne réelle du répertoire, arrondi à un entier, (dans l'exemple, il y a trois répertoires avec une longueur totale de 20 caractères (6+6+8), donc log10(20/3)≈1),
  • extension du fichier demandé, mais seulement si elle se trouve dans une liste d'extensions connues dans hfinger/configs/extensions.txt,
  • longueur moyenne des valeurs représentée comme un logarithme en base 10 de la longueur moyenne réelle des valeurs, arrondi à une décimale, (dans l'exemple, deux valeurs ont la même longueur de 4 caractères, ce qui est évidemment égal à 4 caractères, et log10(4)≈0.6).

Deuxièmement, les caractéristiques de la structure des en-têtes sont analysées :

  • méthode de requête encodée comme les deux premières lettres de la méthode (PO),
  • version du protocole encodée comme un entier (1 pour la version 1.1, 0 pour la version 1.0, et 9 pour la version 0.9),
  • ordre des en-têtes,
  • et en-têtes courants et leurs valeurs.

Pour représenter l'ordre des en-têtes dans la requête, chaque nom d'en-tête est encodé selon le schéma dans hfinger/configs/headerslow.json, par exemple, l'en-tête User-Agent est encodé comme us-ag. Les noms encodés sont séparés par ,. Si le nom de l'en-tête ne commence pas par une lettre majuscule (ou l'une de ses parties lors de l'analyse d'en-têtes composés comme Accept-Encoding), alors la représentation encodée est préfixée par !. Si le nom de l'en-tête ne figure pas dans la liste des en-têtes connus, il est haché en utilisant le hachage FNV1a, et le hachage est utilisé comme encodage.

Lors de l'analyse des en-têtes courants, on vérifie s'ils apparaissent dans la requête. Ces en-têtes sont :

  • Connection
  • Accept-Encoding
  • Content-Encoding
  • Cache-Control
  • TE
  • Accept-Charset
  • Content-Type
  • Accept
  • Accept-Language
  • User-Agent

Lorsque l'en-tête est trouvé dans la requête, sa valeur est vérifiée par rapport à une table de valeurs typiques pour créer des paires représentation_nom_en-tête:représentation_valeur. Le nom de l'en-tête est encodé selon le schéma dans hfinger/configs/headerslow.json (comme présenté précédemment), et la valeur est encodée selon le schéma stocké dans le répertoire hfinger/configs ou le fichier configs.py, selon l'en-tête. Dans l'exemple ci-dessus, Accept est encodé comme ac et sa valeur */* comme as-as (asterisk-asterisk), donnant ac:as-as. Les paires sont insérées dans l'empreinte dans l'ordre d'apparition dans la requête et sont délimitées par /. Si la valeur de l'en-tête ne peut pas être trouvée dans la table d'encodage, elle est hachée en utilisant le hachage FNV1a. Si la valeur de l'en-tête est composée de plusieurs valeurs, elles sont tokenisées pour fournir une liste de valeurs délimitées par ,, par exemple, donnerait . Cependant, à ce stade du développement, si la valeur de l'en-tête contient une balise "quality value" (), alors toute la valeur est encodée avec son hachage FNV1a. Enfin, les valeurs des en-têtes et sont directement encodées en utilisant leurs hachages FNV1a.

Enfin, dans les caractéristiques de la charge utile :

  • présence de caractères non-ASCII, représentée par la lettre N, et par A sinon,
  • entropie de Shannon de la charge utile, arrondie à un entier,
  • et longueur de la charge utile, représentée comme un logarithme en base 10 de la longueur réelle de la charge utile, arrondi à une décimale.

Modes de rapport

Hfinger fonctionne en cinq modes de rapport, qui diffèrent par les caractéristiques représentées dans l'empreinte, donc les informations extraites des requêtes. Ce sont (avec le numéro utilisé dans la configuration de l'outil) :

  • mode 0 - produisant un nombre similaire de collisions et d'empreintes que le mode 2, mais en utilisant moins de caractéristiques,
  • mode 1 - représentant toutes les caractéristiques conçues, mais produisant un peu plus de collisions que les modes 0, 2 et 4,
  • mode 2 - optimal (mode par défaut), représentant toutes les caractéristiques qui sont habituellement utilisées lors de l'analyse des requêtes, mais offrant également un faible nombre de collisions et d'empreintes générées,
  • mode 3 - produisant le plus faible nombre d'empreintes générées parmi tous les modes, mais atteignant le plus grand nombre de collisions,
  • mode 4 - offrant la plus haute entropie d'empreinte, mais générant également légèrement plus d'empreintes que les modes 0-2.

Les modes ont été choisis afin d'optimiser les capacités de Hfinger à identifier de manière unique les familles de malwares par rapport au nombre d'empreintes générées. Les modes 0, 2 et 4 offrent un nombre similaire de collisions entre familles de malwares, cependant, le mode 4 génère un peu plus d'empreintes que les deux autres. Le mode 2 représente plus de caractéristiques de requête que le mode 0 avec un nombre comparable d'empreintes générées et de collisions. Le mode 1 est le seul à représenter toutes les caractéristiques conçues, mais il augmente le nombre de collisions de presque deux fois par rapport aux modes 0, 1 et 4. Le mode 3 produit au moins deux fois moins d'empreintes que les autres modes, mais il introduit environ neuf fois plus de collisions. La description de toutes les caractéristiques conçues est ici.

Les modes sont constitués des caractéristiques (dans l'ordre d'apparition dans l'empreinte) :

  • mode 0 :
    • nombre de répertoires,
    • longueur moyenne des répertoires représentée comme un entier,
    • extension du fichier demandé,
    • longueur moyenne des valeurs représentée comme un flottant,
    • ordre des en-têtes,
    • en-têtes courants et leurs valeurs,
    • longueur de la charge utile représentée comme un flottant.
  • mode 1 :
    • longueur de l'URI représentée comme un entier,
    • nombre de répertoires,
    • longueur moyenne des répertoires représentée comme un entier,
    • extension du fichier demandé,
    • longueur des variables représentée comme un entier,
    • nombre de variables,
    • longueur moyenne des valeurs représentée comme un entier,
    • méthode de requête,
    • version du protocole,
    • ordre des en-têtes,
    • en-têtes courants et leurs valeurs,
    • présence de caractères non-ASCII,
    • entropie de la charge utile représentée comme un entier,
    • longueur de la charge utile représentée comme un entier.
  • mode 2 :
    • longueur de l'URI représentée comme un entier,
    • nombre de répertoires,
    • longueur moyenne des répertoires représentée comme un entier,
    • extension du fichier demandé,
    • longueur moyenne des valeurs représentée comme un flottant,
    • méthode de requête,
    • version du protocole,
    • ordre des en-têtes,
    • en-têtes courants et leurs valeurs,
    • présence de caractères non-ASCII,
    • entropie de la charge utile représentée comme un entier,
    • longueur de la charge utile représentée comme un flottant.
  • mode 3 :
    • longueur de l'URI représentée comme un entier,
    • longueur moyenne des répertoires représentée comme un entier,
    • extension du fichier demandé,
    • longueur moyenne des valeurs représentée comme un entier,

Co-financed by the Connecting Europe Facility by of the European Union

Télécharger l’outil
Accept: */*, text/*
ac:as-as,te-as
q=
User-Agent
Accept-Language
  • ordre des en-têtes.
  • mode 4 :
    • longueur de l'URI représentée comme un flottant,
    • nombre de répertoires,
    • longueur moyenne des répertoires représentée comme un flottant,
    • extension du fichier demandé,
    • longueur des variables représentée comme un flottant,
    • longueur moyenne des valeurs représentée comme un flottant,
    • méthode de requête,
    • version du protocole,
    • ordre des en-têtes,
    • en-têtes courants et leurs valeurs,
    • présence de caractères non-ASCII,
    • entropie de la charge utile représentée comme un flottant,
    • longueur de la charge utile représentée comme un flottant.