
Automatisierte Entdeckung, Validierung und Bestätigung von DLL-Hijacking. Lokale Fehlkonfigurationen in bewaffnete, bestätigte Angriffspfade verwandeln.
Automatisierte DLL-Hijacking-Erkennung, -Validierung und -Bestätigung
Lokale Fehlkonfigurationen in bewaffnete, bestätigte Angriffspfade verwandeln.
DLLHijackHunter ist ein automatisiertes Windows-DLL-Hijacking-Erkennungstool, das über die statische Analyse hinausgeht. Es entdeckt, validiert und bestätigt DLL-Hijacking-Möglichkeiten mithilfe einer mehrphasigen Pipeline:
Die meisten DLL-Hijacking-Tools stoppen bei „diese DLL könnte hijackbar sein.“ DLLHijackHunter versucht, sie zu validieren, sie mit bekannten Exploit-Intelligenzdaten abzugleichen und reale Ausführungspfade zu bestätigen, wo dies möglich ist.
flowchart TB
subgraph Phase1["Phase 1: Erkennung"]
SE["Statische Engine<br/>Dienste, Aufgaben, Autostart,<br/>COM, Run-Keys"]
AE["AutoElevate-Engine<br/>Manifest + COM-UAC-Bypass"]
PE["PE-Analysator<br/>Import-Tabellen, verzögerte Ladungen,<br/>Manifeste, Exporte"]
ETW["ETW-Engine<br/>Echtzeit-DLL-Lade-<br/>Überwachung"]
SO["Suchreihenfolgen-<br/>Rechner"]
end
subgraph Phase2["Phase 2: Filter-Pipeline"]
direction LR
HG["Harte Gates<br/>(Binär-Kill)"]
SG["Weiche Gates<br/>(Konfidenz-Anpassung)"]
end
subgraph Phase3["Phase 3: Lade-Verifizierung (--verify-load)"]
LP["LoadProbe<br/>Kindprozess-Ladetest<br/>Probe-DLL platziert & entfernt"]
end
subgraph Phase4["Phase 4: Canary"]
CB["Canary-DLL-Builder"]
TE["Trigger-Ausführer"]
VF["Verifizierung"]
end
subgraph Phase5["Phase 5: Ausgabe"]
SC["Abgestufter Bewerter"]
RC["Konsolenbericht"]
RJ["JSON-Bericht"]
RH["HTML-Bericht"]
end
SE --> PE --> SO
AE --> PE
ETW --> SO
SO --> Phase2
HG --> SG
Phase2 --> Phase3
Phase3 --> Phase4
CB --> TE --> VF
Phase4 --> Phase5IFEO-Debugger-Einträge werden aufgelistet und die referenzierte Binärdatei wird auf DLL-Importe analysiert, aber es gibt keinen dedizierten IFEO/KnownDLL-Bypass-Hijack-Typ — diese werden nicht als eigenständige Erkennungen beworben.
DLLHijackHunter enthält eine dedizierte UAC-Bypass-Erkennung:
System32 und SysWOW64 nach EXEs mit <autoElevate>true</autoElevate> in eingebetteten ManifestenHKLM\SOFTWARE\Classes\CLSID nach COM-Objekten mit Elevation\Enabled=1SetDllDirectory noch SetDefaultDllDirectories aufrufen, wird der Angriffspfad „EXE in beschreibbaren Ordner kopieren + DLL ablegen“ simuliertResources/hijacklibs.json. Ein Treffer erhöht die Konfidenz und verlinkt den Befund auf seine HijackLibs-Referenzseite; das Fehlen eines Treffers bedeutet nichts. Der Datensatz ist datengetrieben — aktualisieren Sie ihn, indem Sie https://hijacklibs.net/api/hijacklibs.json über diese Ressource erneut herunterladen (keine Codeänderungen erforderlich). Datensatz © das HijackLibs-Projekt und seine Mitwirkenden.PATH-Ordner und generiert Hijack-Kandidaten für eine kuratierte Zuordnung nativer Windows-Dienste, die bekanntermaßen PATH nach fehlenden DLLs durchsuchenDie Pipeline reduziert Fehlalarme in zwei Stufen:
Harte Gates
api-ms-*, ext-ms-*)Users / Authenticated Users / Everyone, plus leckgeschützte Sub-Admin-Dienstkonten wie LOCAL SERVICE/NETWORK SERVICE) effektive Schreibrechte hat. Entscheidend ist, dass dies unabhängig vom Token berechnet wird, unter dem das Tool läuft, sodass ein erhöhter Lauf System32/Program Files nicht als beschreibbar erscheinen lässt. Genau das macht erhöhte Läufe für die LPE-Triage sinnvoll.Weiche Gates
LoadLibraryEx-MinderungsprüfungenStatt zu raten, versucht DLLHijackHunter zu beweisen, dass Hijacks funktionieren:
sequenceDiagram
participant H as DLLHijackHunter
participant B as Canary-DLL-Builder
participant T as Trigger-Ausführer
participant V as Opfer-Binärdatei
H->>B: Canary-DLL erstellen
B->>B: Vorkompilierte Canary extrahieren<br/>(oder Proxy mit MSVC kompilieren)
B-->>H: canary.dll + Bestätigungsdateipfad
H->>H: DLL am Hijack-Pfad platzieren
H->>T: Binärausführung auslösen
T->>V: Dienst starten / Aufgabe ausführen / COM aktivieren
V->>V: Lädt Canary-DLL
V-->>H: Schreibt Bestätigungsdatei<br/>PID, Privileg, Integritätsstufe
H->>H: Aufzeichnen: BESTÄTIGT
H->>H: Canary-DLL bereinigenDie Canary-DLL:
%ProgramData%\DLLHijackHunter\canary_<hash>.confirm), sodass eine Binärdatei für jeden Kandidaten dient. Der Scanner berechnet denselben Hash aus dem Bereitstellungspfad und pollt auf diese Datei.Die gebündelten Binärdateien werden aus der prüfbaren Quelle unter src/DLLHijackHunter/Resources/canary_src.c erstellt und können mit Resources/build_canary.bat neu generiert werden (erfordert die MSVC-C++-Toolchain; der Scanner nicht).
Funktions-Proxy-Ausnahme: Wenn ein Suchreihenfolgen-Hijack auf eine DLL abzielt, die existiert und Exporte bereitstellt, erfordert das Halten des Hosts nach der Bestätigung einen Export-Forwarding-Proxy, der pro DLL mit MSVC kompiliert wird (
cl.exe, lokalisiert übervswhere/vcvarsall). Wenn keine Toolchain vorhanden ist, wird stattdessen die vorkompilierte Canary verwendet — sie bestätigt den Ladevorgang weiterhin (DllMain feuert), leitet aber keine Exporte weiter, sodass der Hostprozess nach der Aufzeichnung der Bestätigung möglicherweise abstürzt. Phantom-DLL- und andere Kandidaten ohne Exporte benötigen überhaupt keinen Compiler.
Signierung: Die eingebetteten Canaries sind unsigniert. Das Codesignieren (damit sie unter strengeren Richtlinien laden und zurechenbar sind) erfordert ein Signierzertifikat und bleibt ein Schritt zur Release-Zeit für den Maintainer.
Proxy/Export-Forwarding-Canaries sind experimentell und Best-Effort. Einige Ziele laden möglicherweise nicht korrekt oder verhalten sich unerwartet, abhängig von:
Das bedeutet, dass eine fehlgeschlagene Proxy-Canary nicht immer bedeutet, dass der zugrunde liegende Hijack-Pfad unmöglich ist.
--verify-load)Eine optionale, Standard-Benutzer-Verifizierung, die zwischen der Filter-Pipeline und der Canary-Phase liegt. Für jeden anwendbaren Kandidaten schreibt sie kurzzeitig eine harmlose Probe-DLL an die beschreibbare Hijack-Position und fragt dann den echten Windows-Loader — in einem kurzlebigen Kindprozess — die DLL namentlich aufzulösen. Wo der Loader auflöst, bestimmt das Urteil:
.local/Suchreihenfolgen-„Befund“ für ntdll.dll, den KnownDLLs nicht ausnutzbar macht).Design- und Sicherheitshinweise:
LOAD_LIBRARY_SEARCH-Reihenfolge, sodass es nur auf Phantom-/Suchreihenfolgen-/Side-Load-Kandidaten angewendet wird. .local-, PATH- und AppInit/AppCert-Kandidaten verwenden andere Mechanismen und werden als Übersprungen gemeldet.# Standard-Benutzer-Triage mit loader-verifizierter Suchreihenfolge (keine Canary, kein ETW)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load
git clone https://github.com/ghostvectoracademy/DLLHijackHunter.git
cd DLLHijackHunter
# Build (eigenständige Einzeldatei)
dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj `
-c Release -r win-x64 --self-contained `
-p:PublishSingleFile=true -o ./publish
# Oder das Build-Skript verwenden
.\build.ps1
# Vollständiger aggressiver Scan (empfohlen, erfordert Admin)
.\DLLHijackHunter.exe --profile aggressive
# Sicherer Scan (keine Dateiablagen, keine Trigger)
.\DLLHijackHunter.exe --profile safe
# UAC-Bypass-fokussierter Scan
.\DLLHijackHunter.exe --profile uac-bypass
# Eine bestimmte Binärdatei anvisieren
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe"
# Nach Dateinamen anvisieren (Teilübereinstimmung)
.\DLLHijackHunter.exe --target notepad.exe
# Nur bestätigte Befunde
.\DLLHijackHunter.exe --profile redteam --format json -o report.json
DLLHijackHunter — Automatisierte DLL-Hijacking-Erkennung
Optionen:
-p, --profile <profile> Scan-Profil [Standard: aggressive]
aggressive | strict | safe | redteam | uac-bypass
-o, --output <pfad> Ausgabedateipfad (Format wird automatisch erkannt)
-f, --format <format> Ausgabeformat [Standard: console]
console | json | html
-t, --target <ziel> Bestimmte Binärdatei, Verzeichnis oder Dateiname anvisieren
--min-confidence <wert> Mindest-Konfidenzschwelle 0-100. Wenn weggelassen, gilt die
Schwelle des jeweiligen Profils; die Übergabe überschreibt sie.
--no-canary Canary-Bestätigung deaktivieren
--no-etw ETW-Laufzeiterkennung deaktivieren
--verify-load Suchreihenfolge mit dem echten Loader verifizieren (siehe unten).
Standard-Benutzer; schreibt transient eine harmlose Probe.
--confirmed-only Nur canary-bestätigte Befunde anzeigen
--lpe-only Strikte LPE-Suche: System32/Program Files ignorieren, nur
standard-benutzerbeschreibbare Schwachstellen anzeigen
--log-file <pfad> Diagnose-Scanprotokoll in Datei schreiben
-v, --verbose Ausführliche Ausgabe
Hinweis:
--min-confidencewird nur dann als Überschreibung behandelt, wenn Sie es explizit übergeben. Andernfalls wird die Schwelle des ausgewählten Profils verwendet (z. B.safe= 50 %,strict= 80 %).
Jeder Befund erhält Konfidenz- und Auswirkungssignale, die zu einer endgültigen Priorisierungsstufe kombiniert werden.
Typische Auswirkungsüberlegungen umfassen:
Bestätigte Canary-Ausführung sollte als das stärkste Validierungssignal behandelt werden.
Stufen-Gating: Die Hohe und Bestätigte Stufe sind Befunden vorbehalten, die durch ein Beweissignal gestützt werden — eine ausgelöste Canary, eine ETW-Laufzeit-Ladebeobachtung oder eine dokumentierte Wissensbasis-Übereinstimmung. Ein rein statischer Suchreihenfolgen-Treffer, so sauber er auch sein mag, ist an der Spitze der Mittleren Stufe gedeckelt und als Nur-statisch annotiert, sodass unverifizierte Heuristiken nie als hochkonfident erscheinen.
Da die Schreibbarkeit angreifer-relativ bewertet wird, sind sowohl erhöhte als auch Standard-Benutzer-Läufe aussagekräftig:
--lpe-only (und --no-canary, wenn kein Compiler verfügbar ist) — jeder überlebende Befund ist wirklich von einem unprivilegierten Prinzipal beschreibbar.DLLHijackHunter ist für defensive Sicherheitsforschung, Laborvalidierung, Audits und Red-Team-Simulationen in autorisierten Umgebungen konzipiert.
Verwenden Sie es nur auf Systemen und Netzwerken, die Sie besitzen oder für deren Bewertung Sie ausdrücklich autorisiert sind.
DLLHijackHunter unterstützt:
Empfohlener Arbeitsablauf:
MIT
Erstellt von ProjectMerai.
| Typ | Beschreibung | Tarnung | Status |
|---|
| Phantom | DLL existiert nirgendwo auf der Festplatte | Hoch | Implementiert |
| Suchreihenfolge | DLL früher in der Windows-Suchreihenfolge platzieren | Hoch | Implementiert |
| Side-Loading | Missbrauch legitimer Apps, die DLLs aus ihrem Verzeichnis laden | Hoch | Implementiert (AutoElevate-Kopieren-in-Temp-Pfad) |
| .local-Umleitung | Hijack über .local-Verzeichnisumleitung | Hoch | Implementiert |
| ENV-PATH | Bewaffnung beschreibbarer Verzeichnisse im System-PATH | Hoch | Implementiert (kuratierte Dienst-/DLL-Zuordnung) |
| AppInit-DLLs | AppInit_DLLs-Registry-Missbrauch | Niedrig | Implementiert |
| AppCert-DLLs | AppCertDLLs-Registry-Missbrauch (wird in jeden CreateProcess/WinExec-Aufrufer geladen) | Niedrig | Implementiert |
| CWD | Current-Working-Directory-Hijack | Niedrig | Geplant — wird derzeit von keinem Erkennungspfad erzeugt |
| Funktion | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|
| Automatisierte Erkennung | ✅ | ✅ | ✅ | ✅ | ❌ |
| Phantom-DLL-Erkennung | ✅ | ❌ | ✅ | ❌ | ✅ |
| Suchreihenfolgen-Analyse | ✅ | ❌ | ❌ | ❌ | ❌ |
| ACL-basierte Schreibbarkeitsprüfung | ✅ | Teilweise | ❌ | Basis | ❌ |
| ETW-Echtzeitüberwachung | ✅ | ❌ | ❌ | ❌ | ✅ |
| Canary-Bestätigung | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| Privilegien-Eskalationsprüfung | ✅ | ❌ | ❌ | ❌ | ❌ |
| UAC-Bypass-Erkennung | ✅ | ❌ | ❌ | ❌ | ❌ |
| Fehlalarm-Reduzierung | ✅² | Keine | Basis | Keine | Keine |
| Neustart-Persistenzprüfung | ✅³ | ❌ | ❌ | ❌ | ❌ |
| Proxy-DLL-Generierung | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| Konfidenz-Bewertung | ✅ | ❌ | ❌ | ❌ | ❌ |
| Auto-Trigger (Svc/Aufgabe/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| HTML/JSON-Berichterstattung | ✅ | ❌ | ❌ | TXT | ❌ |
| Threat-Intel-Korrelation | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| Automatisierte PATH-Exploits | ✅ | ❌ | ❌ | ❌ | ❌ |
| Zielgerichtetes Scannen | ✅ | ❌ | ❌ | ❌ | ✅ |
| Eigenständige Binärdatei | ✅ | ❌ | ❌ | ✅ | ❌ |
| Profil | Anwendungsfall | Canary | ETW | UAC-Bypass | Min. Konfidenz | Trigger |
|---|
| aggressive | Vollständiges Audit, Laborumgebungen | ✅ | ✅ | ✅ | 15 % | Dienste, Aufgaben, COM |
| strict | Nur hochkonfidente Befunde | ✅ | ✅ | ❌ | 80 % | Dienste, Aufgaben |
| safe | Produktionssysteme, schreibgeschützt | ❌ | ❌ | ❌ | 50 % | Keine |
| redteam | Nur bestätigt ausnutzbar | ✅ | ✅ | ❌ | 50 % | Dienste, Aufgaben, COM |
| uac-bypass | Nur UAC-Bypass-Vektoren | ❌ | ❌ | ✅ | 20 % | Nur AutoElevate |