Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
hfinger — Erzeugt eindeutige Fingerabdrücke von Malware-HTTP-Anfragen aus pcap-Dateien mithilfe von Tshark und ermöglicht die Identifizierung und Gruppierung von Malware-Familien durch Analyse der Anfragestruktur, Header und Nutzlastmerkmale. | Kitploit
Tools/GitHubGitHub/cert-polska/hfinger
InformationsbeschaffungMalware-AnalyseBedrohungsanalyse
GitHubcert-polska/hfinger

hfinger

Erzeugt eindeutige Fingerabdrücke von Malware-HTTP-Anfragen aus pcap-Dateien mithilfe von Tshark und ermöglicht die Identifizierung und Gruppierung von Malware-Familien durch Analyse der Anfragestruktur, Header und Nutzlastmerkmale.

Repository anzeigen
14710vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Hfinger - Fingerprinting von Malware-HTTP-Anfragen

Werkzeug zum Fingerprinting von HTTP-Anfragen von Malware. Basiert auf Tshark und in Python3 geschrieben. Prototyp-Stadium :-)

Das Hauptziel ist die Erstellung eindeutiger Darstellungen (Fingerabdrücke) von Malware-Anfragen, die bei deren Identifizierung helfen. Eindeutig bedeutet hier, dass jeder Fingerabdruck nur in einer bestimmten Malware-Familie vorkommen sollte, dennoch kann eine Familie mehrere Fingerabdrücke haben. Hfinger stellt die Anfrage in einer kürzeren Form dar als die gesamte Anfrage auszugeben, bleibt aber für Menschen interpretierbar.

Hfinger kann in der manuellen Malware-Analyse, aber auch in Sandbox-Systemen oder SIEMs eingesetzt werden. Die generierten Fingerabdrücke sind nützlich, um Anfragen zu gruppieren, Anfragen bestimmten Malware-Familien zuzuordnen, verschiedene Operationen einer Familie zu identifizieren, oder unbekannte bösartige Anfragen zu entdecken, die von anderen Sicherheitssystemen übersehen werden, aber denselben Fingerabdruck teilen.

Ein wissenschaftlicher Artikel begleitet die Arbeit an diesem Werkzeug und beschreibt zum Beispiel die Motivation der Designentscheidungen, sowie die Evaluierung des Werkzeugs im Vergleich zu p0f, FATT und Mercury.

Inhaltsverzeichnis

  1. Die Idee
  2. Installation
  3. Verwendung
  4. Fingerabdruck-Erstellung
  5. Berichtsmodi

Die Idee

Die grundlegende Annahme dieses Projekts ist, dass HTTP-Anfragen verschiedener Malware-Familien mehr oder weniger einzigartig sind, sodass sie fingerprinted werden können, um eine Art Identifikation zu ermöglichen. Hfinger behält Informationen über die Struktur und Werte einiger Header, um Mittel für weitere Analysen bereitzustellen. Zum Beispiel die Gruppierung ähnlicher Anfragen – dies ist momentan noch in Arbeit.

Nach der Analyse von HTTP-Anfragen und Headern von Malware haben wir einige Teile der Anfragen als am meisten unterscheidend identifiziert. Diese umfassen:

  • Anfragemethode
  • Protokollversion
  • Header-Reihenfolge
  • Werte gängiger Header
  • Payload-Länge, Entropie und Vorhandensein von Nicht-ASCII-Zeichen

Zusätzlich wurden einige Standardmerkmale der Anfrage-URL berücksichtigt. All diese Teile wurden in einen Satz von Merkmalen übersetzt, die detailliert hier beschrieben sind.

Die oben genannten Merkmale werden in eine Darstellung variabler Länge übersetzt, den eigentlichen Fingerabdruck. Je nach Berichtsmodus werden verschiedene Merkmale zum Fingerprinting der Anfragen verwendet. Weitere Informationen zu diesen Modi finden Sie unten. Der Merkmalsauswahlprozess wird in einem kommenden wissenschaftlichen Artikel beschrieben.

Installation

Mindestanforderungen vor der Installation:

  • Python >= 3.3,
  • Tshark >= 2.2.0.

Installation über PyPI verfügbar:

pip install hfinger

Hfinger wurde auf Xubuntu 22.04 LTS mit dem tshark-Paket in Version 3.6.2 getestet, sollte aber auch mit älteren Versionen wie 2.6.10 auf Xubuntu 18.04 oder 3.2.3 auf Xubuntu 20.04 funktionieren.

Bitte beachten Sie, dass Sie Hfinger wie bei jedem PoC in einer abgeschotteten Umgebung ausführen sollten, zumindest mit einer Python-Virtualenvironment. Deren Einrichtung wird hier nicht behandelt, aber Sie können dieses Tutorial ausprobieren.

Verwendung

Nach der Installation können Sie das Werkzeug direkt von der Kommandozeile mit hfinger aufrufen oder als Python-Modul mit python -m hfinger.

Zum Beispiel:

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"}]

Hilfe kann mit der kurzen -h oder der langen --help-Option angezeigt werden:

root@kitploit:~
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
               [-l LOGFILE]

Hfinger - Fingerprinting von Malware-HTTP-Anfragen, gespeichert in pcap-Dateien

optionale Argumente:
  -h, --help            Zeigt diese Hilfemeldung an und beendet das Programm
  -f FILE, --file FILE  Liest eine einzelne pcap-Datei
  -d DIR, --directory DIR
                        Liest pcap-Dateien aus dem Verzeichnis DIR
  -o output_path, --output-path output_path
                        Pfad zum Ausgabeverzeichnis
  -m {0,1,2,3,4}, --mode {0,1,2,3,4}
                        Fingerprint-Berichtsmodus. 
                        0 - ähnliche Anzahl von Kollisionen und Fingerprints wie Modus 2, aber mit weniger Merkmalen, 
                        1 - Darstellung aller entworfenen Merkmale, aber etwas mehr Kollisionen als Modi 0, 2 und 4, 
                        2 - optimal (Standardmodus), 
                        3 - geringste Anzahl generierter Fingerprints, aber höchste Anzahl von Kollisionen, 
                        4 - höchste Fingerprint-Entropie, aber geringfügig mehr Fingerprints als Modi 0-2
  -v, --verbose         Meldet Informationen über nicht standardmäßige Werte in der Anfrage 
                        (z.B. Nicht-ASCII-Zeichen, fehlende CRLF-Tags, Werte, die nicht in der Konfigurationsliste vorhanden sind). 
                        Ohne --logfile (-l) wird auf die Standardfehlerausgabe geschrieben.
  -l LOGFILE, --logfile LOGFILE
                        Ausgabe-Logdatei im ausführlichen Modus. Impliziert die Option -v oder --verbose.

Sie müssen einen Pfad zu einer pcap-Datei (-f) oder einem Verzeichnis (-d) mit pcap-Dateien angeben. Die Ausgabe erfolgt im JSON-Format. Sie wird auf die Standardausgabe oder in das angegebene Verzeichnis (-o) unter Verwendung des Namens der Quelldatei ausgegeben. Zum Beispiel wird die Ausgabe des Befehls:

hfinger -f example.pcap -o /tmp/pcap

gespeichert unter:

/tmp/pcap/example.pcap.json

Der Berichtsmodus -m/--mode kann verwendet werden, um den Standardberichtsmodus zu ändern, indem eine ganze Zahl im Bereich 0-4 angegeben wird. Die Modi unterscheiden sich in den dargestellten Anfragemerkmalen oder Rundungsmodi. Der Standardmodus (2) wurde von uns gewählt, um alle Merkmale darzustellen, die üblicherweise bei der Analyse von Anfragen verwendet werden, bietet aber auch eine geringe Anzahl von Kollisionen und generierten Fingerprints. Mit anderen Modi können Sie unterschiedliche Ziele erreichen. Zum Beispiel erhalten Sie im Modus 3 eine geringere Anzahl generierter Fingerprints, aber eine höhere Wahrscheinlichkeit einer Kollision zwischen Malware-Familien. Wenn Sie unsicher sind, müssen Sie nichts ändern. Weitere Informationen zu den Berichtsmodi finden Sie hier.

Ab Version 0.2.1 ist Hfinger weniger ausführlich. Sie sollten -v/--verbose verwenden, wenn Sie Informationen über aufgetretene nicht standardmäßige Header-Werte, Nicht-ASCII-Zeichen im Nicht-Payload-Teil der Anfrage, fehlende CRLF-Tags (\r\n\r\n) und andere Probleme mit analysierten Anfragen, die keine Anwendungsfehler sind, erhalten möchten. Wenn im ausführlichen Modus solche Probleme auftreten, werden sie auf die Standardfehlerausgabe geschrieben. Sie können das Log auch mit dem Schalter -l/--log an einem definierten Ort speichern (dies impliziert -v/--verbose). Die Logdaten werden an die Logdatei angehängt.

Verwendung von hfinger in einer Python-Anwendung

Ab Version 0.2.0 unterstützt Hfinger den Import in andere Python-Anwendungen. Um es in Ihrer App zu verwenden, importieren Sie einfach die Funktion hfinger_analyze aus hfinger.analysis und rufen Sie sie mit einem Pfad zur pcap-Datei und dem Berichtsmodus auf. Das zurückgegebene Ergebnis ist eine Liste von Dictionaries mit Fingerprinting-Ergebnissen.

Zum Beispiel:

root@kitploit:~
from hfinger.analysis import hfinger_analyze

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

Ab Version 0.2.1 verwendet Hfinger das logging-Modul zum Protokollieren von Informationen über aufgetretene nicht standardmäßige Header-Werte, Nicht-ASCII-Zeichen im Nicht-Payload-Teil der Anfrage, fehlende CRLF-Tags (\r\n\r\n) und andere Probleme mit analysierten Anfragen, die keine Anwendungsfehler sind. Hfinger erstellt einen eigenen Logger mit dem Namen hfinger, aber ohne vorherige Konfiguration werden Loginformationen in der Praxis verworfen. Wenn Sie diese Loginformationen erhalten möchten, sollten Sie vor dem Aufruf von hfinger_analyze den hfinger-Logger konfigurieren, das Log-Level auf logging.INFO setzen, den Log-Handler nach Ihren Bedürfnissen konfigurieren und ihn zum Logger hinzufügen. Weitere Informationen finden Sie im Docstring der Funktion hfinger_analyze.

Fingerabdruck-Erstellung

Ein Fingerabdruck basiert auf Merkmalen, die aus einer Anfrage extrahiert werden. Die Verwendung bestimmter Merkmale aus der vollständigen Liste hängt vom gewählten Berichtsmodus aus einer vordefinierten Liste ab (weitere Informationen zu den Berichtsmodi finden Sie hier). Die folgende Abbildung zeigt die Erstellung eines beispielhaften Fingerabdrucks im Standardberichtsmodus.

Beispiel

Drei Teile der Anfrage werden analysiert, um Informationen zu extrahieren: URI, Header-Struktur (einschließlich Methode und Protokollversion) und Payload. Bestimmte Merkmale des Fingerabdrucks werden mit | (Pipe) getrennt. Der endgültige Fingerabdruck, der für die POST-Anfrage aus dem Beispiel generiert wurde, lautet:

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

Die Erstellung der Merkmale wird im Folgenden in der Reihenfolge ihres Auftretens im Fingerabdruck beschrieben.

Zuerst werden URI-Merkmale extrahiert:

  • URI-Länge, dargestellt als Logarithmus zur Basis 10 der Länge, gerundet auf eine ganze Zahl, (im Beispiel ist die URI 43 Zeichen lang, also log10(43)≈2),
  • Anzahl der Verzeichnisse, (im Beispiel gibt es 3 Verzeichnisse),
  • durchschnittliche Verzeichnislänge, dargestellt als Logarithmus zur Basis 10 der tatsächlichen durchschnittlichen Länge des Verzeichnisses, gerundet auf eine ganze Zahl, (im Beispiel gibt es drei Verzeichnisse mit einer Gesamtlänge von 20 Zeichen (6+6+8), also log10(20/3)≈1),
  • Erweiterung der angeforderten Datei, aber nur, wenn sie in einer Liste bekannter Erweiterungen in hfinger/configs/extensions.txt enthalten ist,
  • durchschnittliche Wertelänge, dargestellt als Logarithmus zur Basis 10 der tatsächlichen durchschnittlichen Wertelänge, gerundet auf eine Dezimalstelle, (im Beispiel haben zwei Werte die gleiche Länge von 4 Zeichen, was offensichtlich 4 Zeichen entspricht, und log10(4)≈0.6).

Zweitens werden Header-Struktur-Merkmale analysiert:

  • Anfragemethode, codiert als die ersten beiden Buchstaben der Methode (PO),
  • Protokollversion, codiert als ganze Zahl (1 für Version 1.1, 0 für Version 1.0 und 9 für Version 0.9),
  • Reihenfolge der Header,
  • und gängige Header und ihre Werte.

Um die Reihenfolge der Header in der Anfrage darzustellen, wird jeder Header-Name gemäß dem Schema in hfinger/configs/headerslow.json codiert, zum Beispiel wird der User-Agent-Header als us-ag codiert. Codierte Namen werden durch , getrennt. Wenn der Header-Name nicht mit einem Großbuchstaben beginnt (oder einem seiner Teile bei der Analyse zusammengesetzter Header wie Accept-Encoding), wird die codierte Darstellung mit ! vorangestellt. Wenn der Header-Name nicht in der Liste der bekannten Header enthalten ist, wird er mit FNV1a-Hash gehasht, und der Hash wird als Codierung verwendet.

Bei der Analyse gängiger Header wird überprüft, ob sie in der Anfrage vorkommen. Diese Header sind:

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

Wenn der Header in der Anfrage gefunden wird, wird sein Wert gegen eine Tabelle typischer Werte geprüft, um Paare aus Header-Name-Darstellung:Wert-Darstellung zu erstellen. Der Name des Headers wird gemäß dem Schema in hfinger/configs/headerslow.json codiert (wie zuvor gezeigt), und der Wert wird gemäß dem Schema codiert, das im Verzeichnis hfinger/configs oder in der Datei configs.py gespeichert ist, abhängig vom Header. Im obigen Beispiel wird Accept als ac codiert und sein Wert */* als as-as (Asterisk-Asterisk), was ac:as-as ergibt. Die Paare werden in der Reihenfolge ihres Auftretens in der Anfrage in den Fingerabdruck eingefügt und mit / getrennt. Wenn der Header-Wert nicht in der Codierungstabelle gefunden werden kann, wird er mit dem FNV1a-Hash gehasht.
Wenn der Header-Wert aus mehreren Werten besteht, werden sie tokenisiert, um eine Liste von Werten zu erhalten, die mit , getrennt sind, zum Beispiel würde ergeben. Allerdings wird an diesem Punkt der Entwicklung, wenn der Header-Wert ein "Qualitätswert"-Tag () enthält, der gesamte Wert mit seinem FNV1a-Hash codiert. Schließlich werden die Werte der Header und direkt mit ihren FNV1a-Hashes codiert.

Zuletzt werden bei den Payload-Merkmalen:

  • Vorhandensein von Nicht-ASCII-Zeichen, dargestellt mit dem Buchstaben N, andernfalls mit A,
  • Shannons Entropie der Payload, gerundet auf eine ganze Zahl,
  • und Payload-Länge, dargestellt als Logarithmus zur Basis 10 der tatsächlichen Payload-Länge, gerundet auf eine Dezimalstelle.

Berichtsmodi

Hfinger arbeitet in fünf Berichtsmodi, die sich in den im Fingerabdruck dargestellten Merkmalen unterscheiden, also in den Informationen, die aus Anfragen extrahiert werden. Diese sind (mit der in der Tool-Konfiguration verwendeten Nummer):

  • Modus 0 – erzeugt eine ähnliche Anzahl von Kollisionen und Fingerprints wie Modus 2, aber mit weniger Merkmalen,
  • Modus 1 – stellt alle entworfenen Merkmale dar, erzeugt aber etwas mehr Kollisionen als die Modi 0, 2 und 4,
  • Modus 2 – optimal (der Standardmodus), stellt alle Merkmale dar, die üblicherweise bei der Analyse von Anfragen verwendet werden, bietet aber auch eine geringe Anzahl von Kollisionen und generierten Fingerprints,
  • Modus 3 – erzeugt die geringste Anzahl generierter Fingerprints aller Modi, erreicht aber die höchste Anzahl von Kollisionen,
  • Modus 4 – bietet die höchste Fingerprint-Entropie, erzeugt aber auch geringfügig mehr Fingerprints als die Modi 0-2.

Die Modi wurden gewählt, um Hfingers Fähigkeiten zur eindeutigen Identifizierung von Malware-Familien im Verhältnis zur Anzahl der generierten Fingerprints zu optimieren. Die Modi 0, 2 und 4 bieten eine ähnliche Anzahl von Kollisionen zwischen Malware-Familien, jedoch erzeugt Modus 4 etwas mehr Fingerprints als die anderen beiden. Modus 2 stellt mehr Anfragemerkmale dar als Modus 0 bei vergleichbarer Anzahl generierter Fingerprints und Kollisionen. Modus 1 ist der einzige, der alle entworfenen Merkmale darstellt, aber er erhöht die Anzahl der Kollisionen um fast das Doppelte im Vergleich zu den Modi 0, 1 und 4. Modus 3 erzeugt mindestens zweimal weniger Fingerprints als die anderen Modi, aber er führt zu etwa neunmal mehr Kollisionen. Eine Beschreibung aller entworfenen Merkmale finden Sie hier.

Die Modi bestehen aus Merkmalen (in der Reihenfolge ihres Auftretens im Fingerabdruck):

  • Modus 0:
    • Anzahl der Verzeichnisse,
    • durchschnittliche Verzeichnislänge, dargestellt als ganze Zahl,
    • Erweiterung der angeforderten Datei,
    • durchschnittliche Wertelänge, dargestellt als Gleitkommazahl,
    • Reihenfolge der Header,
    • gängige Header und ihre Werte,
    • Payload-Länge, dargestellt als Gleitkommazahl.
  • Modus 1:
    • URI-Länge, dargestellt als ganze Zahl,
    • Anzahl der Verzeichnisse,
    • durchschnittliche Verzeichnislänge, dargestellt als ganze Zahl,
    • Erweiterung der angeforderten Datei,
    • Variablenlänge, dargestellt als ganze Zahl,
    • Anzahl der Variablen,
    • durchschnittliche Wertelänge, dargestellt als ganze Zahl,
    • Anfragemethode,
    • Protokollversion,
    • Reihenfolge der Header,
    • gängige Header und ihre Werte,
    • Vorhandensein von Nicht-ASCII-Zeichen,
    • Payload-Entropie, dargestellt als ganze Zahl,
    • Payload-Länge, dargestellt als ganze Zahl.
  • Modus 2:
    • URI-Länge, dargestellt als ganze Zahl,
    • Anzahl der Verzeichnisse,
    • durchschnittliche Verzeichnislänge, dargestellt als ganze Zahl,
    • Erweiterung der angeforderten Datei,
    • durchschnittliche Wertelänge, dargestellt als Gleitkommazahl,
    • Anfragemethode,
    • Protokollversion,
    • Reihenfolge der Header,
    • gängige Header und ihre Werte,
    • Vorhandensein von Nicht-ASCII-Zeichen,
    • Payload-Entropie, dargestellt als ganze Zahl,
    • Payload-Länge, dargestellt als Gleitkommazahl.
  • Modus 3:
    • URI-Länge, dargestellt als ganze Zahl,
    • durchschnittliche Verzeichnislänge, dargestellt als ganze Zahl,
    • Erweiterung der angeforderten Datei,
    • durchschnittliche Wertelänge, dargestellt als ganze Zahl,

Kofinanziert von der Fazilität „Connecting Europe“ der Europäischen Union

Tool herunterladen
Accept: */*, text/*
ac:as-as,te-as
q=
User-Agent
Accept-Language
  • Reihenfolge der Header.
  • Modus 4:
    • URI-Länge, dargestellt als Gleitkommazahl,
    • Anzahl der Verzeichnisse,
    • durchschnittliche Verzeichnislänge, dargestellt als Gleitkommazahl,
    • Erweiterung der angeforderten Datei,
    • Variablenlänge, dargestellt als Gleitkommazahl,
    • durchschnittliche Wertelänge, dargestellt als Gleitkommazahl,
    • Anfragemethode,
    • Protokollversion,
    • Reihenfolge der Header,
    • gängige Header und ihre Werte,
    • Vorhandensein von Nicht-ASCII-Zeichen,
    • Payload-Entropie, dargestellt als Gleitkommazahl,
    • Payload-Länge, dargestellt als Gleitkommazahl.