
Automatisierter Scanner zum Auffinden von DLL-Suchreihenfolge-Hijacking-Kandidaten in Windows-ausführbaren Dateien, mit Importtabellen-Parsing, Laufzeitmodul-Aufzählung und API-Hooking über Microsoft Detours.
DLL Hijack SCanner – Ein Tool zur Generierung von Leads und automatischen Erkennung von Kandidaten für DLL Search Order Hijacking
Dieses Repository enthält die Visual-Studio-Projektdatei für das Tool (DLLHSC), die Projektdatei für die API-Hooking-Funktionalität (detour), die Projektdatei für die Payload und nicht zuletzt die kompilierten ausführbaren Dateien für x86- und x64-Architektur (im Release-Bereich dieses Repos). Der Code wurde mit Visual Studio Community 2019 geschrieben und kompiliert.
Wenn Sie das Tool aus dem Quellcode kompilieren, müssen Sie die Projekte DLLHSC, detour und payload kompilieren. DLLHSC implementiert die Kernfunktionalität dieses Tools. Das detour-Projekt erzeugt eine DLL, die zum Hooking von APIs verwendet wird. Und das payload-Projekt erzeugt die DLL, die als Proof-of-Concept dient, um zu prüfen, ob die getestete ausführbare Datei sie per Search Order Hijacking laden kann. Die erzeugte Payload muss im selben Verzeichnis wie DLLHSC und detour platziert werden, benannt als payload32.dll für die x86-Architektur und payload64.dll für die x64-Architektur.
Das Tool implementiert 3 Betriebsmodi, die nachfolgend erläutert werden.
Lädt das ausführbare Image in den Speicher, parst die Importtabelle und ersetzt dann jede in der Importtabelle aufgeführte DLL durch eine Payload-DLL.
Das Tool platziert im Anwendungsverzeichnis nur ein Modul (eine DLL), das nicht im Anwendungsverzeichnis vorhanden ist, nicht zu WinSxS gehört und nicht zu den KnownDLLs gehört.
Die Payload-DLL erzeugt bei der Ausführung eine Datei unter folgendem Pfad:
C:\Users\%USERNAME%\AppData\Local\Temp\DLLHSC.tmp als Nachweis der Ausführung. Das Tool startet die Anwendung und meldet, ob die Payload-DLL ausgeführt wurde, indem es prüft, ob die temporäre Datei existiert. Da einige ausführbare Dateien Funktionen aus den geladenen DLLs importieren, können Fehlermeldungsfenster angezeigt werden, wenn die bereitgestellte DLL diese Funktionen nicht exportiert und damit die Abhängigkeiten des bereitgestellten Images nicht erfüllt. Die Meldungsfenster deuten jedoch darauf hin, dass die DLL ein guter Kandidat für die Payload-Ausführung sein könnte, wenn die Abhängigkeiten erfüllt sind. In diesem Fall ist eine zusätzliche Analyse erforderlich. Der Titel dieser Meldungsfenster kann die Zeichenfolgen Ordinal Not Found oder Entry Point Not Found enthalten. DLLHSC sucht nach Fenstern, die diese Zeichenfolgen enthalten, schließt sie sofort nach ihrem Erscheinen und meldet die Ergebnisse.
Erstellt einen Prozess mit dem bereitgestellten ausführbaren Image, zählt die Module auf, die in den Adressraum dieses Prozesses geladen sind, und meldet die Ergebnisse nach Anwendung von Filtern.
Das Tool meldet nur die Module, die aus dem Systemverzeichnis geladen werden und nicht zu den KnownDLLs gehören. Die Ergebnisse sind Leads, die eine zusätzliche Analyse erfordern. Der Analyst kann dann die gemeldeten Module im Anwendungsverzeichnis platzieren und prüfen, ob die Anwendung das bereitgestellte Modul stattdessen lädt.
Hookt die APIs LoadLibrary und LoadLibraryEx mittels Microsoft Detours und meldet die Module, die zur Laufzeit geladen werden.
Jedes Mal, wenn die gescannte Anwendung LoadLibrary und LoadLibraryEx aufruft, fängt das Tool den Aufruf ab und schreibt das angeforderte Modul in die Datei C:\Users\%USERNAME%\AppData\Local\Temp\DLLHSCRTLOG.tmp. Wenn LoadLibraryEx speziell mit dem Flag LOAD_LIBRARY_SEARCH_SYSTEM32 aufgerufen wird, wird keine Ausgabe in die Datei geschrieben. Nachdem alle Abfangvorgänge abgeschlossen sind, liest das Tool die Datei und gibt die Ergebnisse aus. Von Interesse für eine weitere Analyse sind Module, die nicht im KnownDLLs-Registrierungsschlüssel vorhanden sind, Module, die nicht im Systemverzeichnis vorhanden sind, und Module ohne vollständigen Pfad (für diese Module wendet der Lader die normale Suchreihenfolge an).
Wenn Sie das Tool aus dem Quellcode kompilieren möchten, wird empfohlen, dies in Visual Studio 2019 zu tun. Damit das Tool ordnungsgemäß funktioniert, müssen die Projekte DLLHSC, detour und payload für dieselbe Architektur kompiliert und dann im selben Verzeichnis platziert werden. Bitte beachten Sie, dass die aus dem Projekt payload erzeugte DLL in payload32.dll für 32-Bit-Architektur bzw. payload64.dll für 64-Bit-Architektur umbenannt werden muss.
Das Hilfemenü für diese Anwendung
NAME
dllhsc - DLL Hijack SCanner
SYNOPSIS
dllhsc.exe -h
dllhsc.exe -e <executable image path> (-l|-lm|-rt) [-t seconds]
DESCRIPTION
DLLHSC scans a given executable image for DLL Hijacking and reports the results
It requires elevated privileges
OPTIONS
-h, --help
display this help menu and exit
-e, --executable-image
executable image to scan
-l, --lightweight
parse the import table, attempt to launch a payload and report the results
-lm, --list-modules
list loaded modules that do not exist in the application's directory
-rt, --runtime-load
display modules loaded in run-time by hooking LoadLibrary and LoadLibraryEx APIs
-t, --timeout
number of seconds to wait for checking any popup error windows - defaults to 10 seconds
Dieser Abschnitt enthält Beispiele, wie Sie DLLHSC ausführen können, sowie die gemeldeten Ergebnisse. Zu diesem Zweck wurde das legitime Microsoft-Dienstprogramm OleView.exe (MD5: D1E6767900C85535F300E08D76AAC9AB) verwendet. Für bessere Ergebnisse wird empfohlen, das bereitgestellte ausführbare Image in seinem Installationsverzeichnis zu scannen.
Das Flag -l parst die Importtabelle der bereitgestellten ausführbaren Datei, wendet Filter an und versucht, die importierten Module zu weaponisieren, indem eine Payload-DLL im aktuellen Verzeichnis der Anwendung platziert wird. Die gescannte ausführbare Datei kann ein Fehlerfenster anzeigen, wenn Abhängigkeiten für die Payload-DLL (exportierte Funktionen) nicht erfüllt sind. In diesem Fall erscheint ein Fehlermeldungsfenster. DLLHSC prüft standardmäßig 10 Sekunden lang, ob ein Meldungsfenster geöffnet wurde, oder so viele Sekunden, wie vom Benutzer mit dem Flag -t angegeben. Ein Fehlermeldungsfenster zeigt an, dass das Modul weaponisiert werden kann, wenn die Abhängigkeiten erfüllt sind.
Der folgende Screenshot zeigt das Fehlermeldungsfenster, das angezeigt wird, wenn OleView.dll die Payload-DLL lädt:

Das Tool wartet maximal 10 Sekunden (oder -t Sekunden), um sicherzustellen, dass die Prozessinitialisierung abgeschlossen ist und alle Meldungsfenster erzeugt wurden. Es erkennt dann das Meldungsfenster, schließt es und meldet das Ergebnis:

Das Flag -lm startet die bereitgestellte ausführbare Datei und gibt die Module aus, die sie lädt, die weder zur KnownDLLs-Liste gehören noch WinSxS-Abhängigkeiten sind. Dieser Modus dient dazu, eine Vorstellung von DLLs zu geben, die als Payload verwendet werden könnten, und dient nur dazu, Leads für den Analysten zu generieren.

Das Flag -rt gibt die Module aus, die das bereitgestellte ausführbare Image in seinen Adressraum lädt, wenn es als Prozess gestartet wird. Dies wird erreicht, indem die APIs LoadLibrary und LoadLibraryEx mittels Microsoft Detours gehookt werden.

Für jegliches Feedback zu diesem Tool nutzen Sie bitte den GitHub-Issues-Bereich.