
Ein automatischer Entpacker und Logger für auf das DotNet Framework abzielende Dateien
Ein automatischer Unpacker und Logger für .NET Framework-basierte Dateien! Dieses Tool wurde auf der Black Hat USA 2022 vorgestellt. Auf der Black Hat Asia 2023 wurden DotDumperGUI und DotDumperNative zusammen mit Version 1.1-stable von DotDumper veröffentlicht. Diese drei Tools sind für den gemeinsamen Einsatz gedacht, wobei DotDumper 1.1-stable die DLLs von DotDumperNative benötigt, während DotDumperGUI als grafische Benutzeroberfläche zum Öffnen und Filtern der JSON-Ausgabe von DotDumper-Durchläufen dient.
Die automatische Erkennung und Klassifizierung einer beliebigen Datei auf zuverlässige Weise wird oft als der heilige Gral der Malware-Analyse angesehen. Die Hindernisse und Mühen, dorthin zu gelangen, sind zahlreich, weshalb die Erstellung eines solchen Systems hoch geschätzt wird. Bei .NET-basierten Binärdateien zielt unser neues Open-Source-Tool DotDumper darauf ab, bei mehreren entscheidenden Schritten auf dem Weg zu helfen: Protokollierung von (In-Memory-)Aktivitäten, Dumping interessanter Speichersegmente und Extrahieren von Merkmalen aus der gegebenen Probe.
Kurz gesagt, das manuelle Unpacking ist ein mühsamer Prozess, der für Analysten unverhältnismäßig viel Zeit in Anspruch nimmt. Obfuskierte Binärdateien erhöhen die Zeit, die ein Analyst für das Unpacking einer Datei aufwenden muss, weiter. Betrachtet man dies in großem Maßstab, benötigen Unternehmen zahlreiche Analysten, die täglich Malware sezieren, wahrscheinlich in Kombination mit einer skalierbaren Sandbox. Die wertvolle Zeit, die verloren geht, könnte stattdessen genutzt werden, um sich in interessante Kampagnen oder Proben zu vertiefen, um neue Bedrohungen aufzudecken, anstatt sich mit der alltäglichen, weit verbreiteten generischen Malware zu befassen. Schließlich suchen Analysten nach den wenigen Nadeln im Heuhaufen.
Welchen Unterschied macht DotDumper also? Die Ausführung einer .NET-basierten Malware-Probe über DotDumper liefert Protokolldateien von entscheidenden, kontextualisierenden und häufigen Funktionsaufrufen in drei Formaten (menschenlesbares Klartext, JSON und XML) sowie Kopien nützlicher In-Memory-Segmente. Dadurch kann ein Analyst das Funktionsaufruf-Protokoll überfliegen. Zudem können die gedumpten Dateien gescannt werden, um sie zu klassifizieren, was zusätzliche Einblicke in die Malware-Probe und die darin enthaltenen Daten bietet. Dies verkürzt die für Triage- und Incident-Response-Prozesse entscheidende Zeit und schafft Zeit für SOC-Analysten und Forscher für anspruchsvollere Analyseanforderungen.
Um die kontextualisierenden Funktionsaufrufe und deren Ergebnisse zu protokollieren und zu dumpen, verwendet DotDumper eine Mischung aus Reflexion und verwalteten Hooks, die alle in reinem C# geschrieben sind. Im Folgenden werden die wichtigsten Funktionen hervorgehoben und erläutert, in Kombination mit Auszügen aus den Ergebnissen von DotDumper zu einer gepackten AgentTesla-Stealer-Probe, deren Hashes unten aufgeführt sind.
| Hash-Typ | Hash-Wert |
|---|---|
| SHA-256 | b7512e6b8e9517024afdecc9e97121319e7dad2539eb21a79428257401e5558d |
| SHA-1 | c10e48ee1f802f730f41f3d11ae9d7bcc649080c |
| MD-5 | 23541daadb154f1f59119952e7232d6b |
DotDumper ist über eine Befehlszeilenschnittstelle mit einer Vielzahl von Argumenten zugänglich. Das folgende Bild zeigt das Hilfemenü. Beachten Sie, dass nicht alle Argumente besprochen werden, sondern hauptsächlich die am häufigsten verwendeten.

Die Mindestanforderung zum Ausführen einer Probe ist die Angabe des Arguments „-file“ zusammen mit einem Dateinamen oder Dateipfad. Wenn ein vollständiger Pfad angegeben wird, wird dieser verwendet. Wenn ein Dateiname angegeben wird, wird das aktuelle Arbeitsverzeichnis sowie der Ordner des DotDumper-Ausführungsverzeichnisses überprüft.
Sofern kein Verzeichnisnamen angegeben wird, wird der Ordnername „-log“ gleich dem Dateinamen der Probe ohne Erweiterung (falls vorhanden) gesetzt. Der Ordner befindet sich im selben Ordner wie DotDumper, in dem die Protokolle und gedumpten Dateien gespeichert werden.
Im Falle einer Bibliothek oder eines alternativen Einstiegspunkts in eine Binärdatei muss der Einstiegspunkt mit „-overrideEntry true“ überschrieben werden. Zusätzlich muss die vollständig qualifizierte Klasse, einschließlich des Namespace, mit „-fqcn My.NameSpace.MyClass“ angegeben werden. Dies teilt DotDumper mit, welche Klasse ausgewählt werden soll, aus der der angegebene Funktionsname (mittels „-functionName MyFunction“) abgerufen wird.
Wenn die ausgewählte Funktion Argumente erfordert, muss die Anzahl der Argumente mit „-argc“ und die Anzahl der erforderlichen Argumente angegeben werden. Die Argumenttypen und -werte sind als „string|myValue int|9“ anzugeben. Beachten Sie, dass bei Verwendung von Leerzeichen in den Werten das Argument in der Befehlszeilenschnittstelle in Anführungszeichen gesetzt werden muss, um sicherzustellen, dass es als einzelnes Argument übergeben wird.
Andere weniger häufig verwendete Optionen wie „-raceTime“ oder „-deprecated“ sind in ihren Standardeinstellungen sicher, könnten jedoch aufgrund von Änderungen im .NET Framework in Zukunft angepasst werden müssen. Sie sind derzeit in der Befehlszeilenschnittstelle verfügbar, um bei Bedarf einfache Änderungen zu ermöglichen, selbst wenn zu diesem Zeitpunkt eine ältere Version von DotDumper verwendet wird.
Protokollierung und Dumping sind die beiden Kernfunktionen von DotDumper. Um die für die Analyse benötigte Zeit zu minimieren, sollte die Protokollierung dem Analysten Kontext bieten. Dies wird erreicht, indem dem Analysten für jeden protokollierten Funktionsaufruf die folgenden Informationen bereitgestellt werden:
Beachten Sie, dass für jede gedumpte Datei der Dateiname dem SHA-256-Hash der Datei entspricht.