
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.
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.
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:
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.
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.
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:
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:
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.