
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 Tool zur Erkennung von Windows-DLL-Hijacking, das über die statische Analyse hinausgeht. Es entdeckt, validiert und bestätigt DLL-Hijacking-Möglichkeiten mittels einer mehrphasigen Pipeline:
Die meisten DLL-Hijacking-Tools bleiben bei „Diese DLL könnte kaperbar sein“ stehen. DLLHijackHunter versucht, dies zu validieren, mit bekannten Exploit-Informationen abzugleichen und, wo möglich, echte Ausführungspfade zu bestätigen.
flowchart TB
subgraph Phase1["Phase 1: Discovery"]
SE["Static Engine<br/>Services, Tasks, Startup,<br/>COM, Run Keys"]
AE["AutoElevate Engine<br/>Manifest + COM UAC Bypass"]
PE["PE Analyzer<br/>Import Tables, Delay Loads,<br/>Manifests, Exports"]
ETW["ETW Engine<br/>Real-time DLL Load<br/>Monitoring"]
SO["Search Order<br/>Calculator"]
end
subgraph Phase2["Phase 2: Filter Pipeline"]
direction LR
HG["Hard Gates<br/>(Binary Kill)"]
SG["Soft Gates<br/>(Confidence Adj.)"]
end
subgraph Phase3["Phase 3: Canary"]
CB["Canary DLL Builder"]
TE["Trigger Executor"]
VF["Verification"]
end
subgraph Phase4["Phase 4: Output"]
SC["Tiered Scorer"]
RC["Console Report"]
RJ["JSON Report"]
RH["HTML Report"]
end
SE --> PE --> SO
AE --> PE
ETW --> SO
SO --> Phase2
HG --> SG
Phase2 --> Phase3
CB --> TE --> VF
Phase3 --> Phase4
IFEO-Debugger-Einträge werden aufgelistet und die referenzierte Binärdatei 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:
<autoElevate>true</autoElevate> in eingebetteten ManifestenElevation\Enabled=1SetDllDirectory noch SetDefaultDllDirectories aufrufen, wird der Angriffspfad „EXE in beschreibbaren Ordner kopieren + DLL ablegen“ simuliertResources/hijacklibs.json. Eine Übereinstimmung erhöht die Konfidenz und verknüpft den Fund mit seiner HijackLibs-Referenzseite; das Fehlen einer Übereinstimmung bedeutet nichts. Der Datensatz ist datengesteuert – Aktualisierung durch erneutes Herunterladen von https://hijacklibs.net/api/hijacklibs.json über diese Ressource (keine Codeänderungen erforderlich). Datensatz © das HijackLibs-Projekt und dessen Mitwirkende.Die Pipeline reduziert Fehlalarme in zwei Stufen:
Harte Filter
api-ms-*, ext-ms-*)Benutzer / Authentifizierte Benutzer / Jeder, plus leaksichere Sub-Admin-Dienstkonten wie LOKALER DIENST/NETZWERKDIENST) effektive Schreibrechte hat. Entscheidend ist, dass dies unabhängig von dem Token berechnet wird, unter dem das Tool läuft; ein elevated Run lässt daher System32/Programme nicht als beschreibbar erscheinen. Dies macht elevated Runs für die LPE-Triage sinnvoll.Weiche Filter
Anstatt zu raten, versucht DLLHijackHunter zu beweisen, dass Hijacks funktionieren:
sequenceDiagram
participant H as DLLHijackHunter
participant B as Canary DLL Builder
participant T as Trigger Executor
participant V as Victim Binary
H->>B: Build canary DLL
B->>B: Extract precompiled canary<br/>(or compile a proxy with MSVC)
B-->>H: canary.dll + confirmation file path
H->>H: Place DLL at hijack path
H->>T: Trigger binary execution
T->>V: Start service / run task / COM activate
V->>V: Loads canary DLL
V-->>H: Writes confirmation file<br/>PID, privilege, integrity level
H->>H: Record: CONFIRMED
H->>H: Cleanup canary DLL
Die 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 fragt nach dieser Datei.Die gebündelten Binärdateien werden aus der auditierbaren 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 tut dies nicht).
Ausnahme Funktionsproxy: Wenn ein Suchreihenfolgen-Hijack auf eine DLL abzielt, die existiert und Exporte bereitstellt, erfordert das Aufrechterhalten des Hosts nach der Bestätigung einen Export-Forwarding Proxy, der pro DLL mit MSVC (
cl.exe, gefunden übervswhere/vcvarsall) kompiliert wird. Wenn keine Toolchain vorhanden ist, wird stattdessen der vorkompilierte Canary verwendet – er bestätigt das Laden dennoch (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 Signaturzertifikat und bleibt ein Schritt zur Freigabezeit für den Betreuer.
Proxy/Export-Forwarding-Canaries sind experimentell und nach bestem Wissen und Gewissen. Einige Ziele können möglicherweise nicht korrekt geladen werden oder sich unerwartet verhalten, abhängig von:
Das bedeutet, dass ein fehlgeschlagener Proxy-Canary nicht immer bedeutet, dass der zugrunde liegende Hijack-Pfad unmöglich ist.
--verify-load)Eine optional, als Standardbenutzer ausführbare Verifizierung, die zwischen der Filter-Pipeline und der Canary-Phase angesiedelt ist. Für jeden geeigneten Kandidaten schreibt sie kurz eine harmlose Sonden-DLL an die beschreibbare Hijack-Position und fragt dann den echten Windows-Loader – in einem kurzlebigen Kindprozess –, die DLL nach Namen aufzulösen. Wo der Loader auflöst, bestimmt das Urteil:
.local/Search-Order-„Fund“ für ntdll.dll, den KnownDLLs nicht ausnutzbar macht).Entwurfs- und Sicherheitshinweise:
LOAD_LIBRARY_SEARCH-Reihenfolge, daher wird es nur auf Phantom-/Suchreihenfolgen-/Seitenlade-Kandidaten angewendet. .local, PATH und AppInit/AppCert-Kandidaten verwenden andere Mechanismen und werden als Übersprungen gemeldet.# Standardbenutzer-Triage mit loader-verifizierter Suchreihenfolge (kein 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 einzelne Datei)
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 Administrator)
.\DLLHijackHunter.exe --profile aggressive
# Sicherer Scan (keine Dateiablagen, keine Auslöser)
.\DLLHijackHunter.exe --profile safe
# Auf 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 Funde
.\DLLHijackHunter.exe --profile redteam --format json -o report.json
DLLHijackHunter — Automatisierte DLL-Hijacking-Erkennung
Optionen:
-p, --profile <Profil> 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> Minimaler Konfidenzschwellwert 0–100. Wenn weggelassen, gilt
der eigene Schwellwert des Profils; eine Übergabe überschreibt ihn.
--no-canary Canary-Bestätigung deaktivieren
--no-etw ETW-Laufzeiterkennung deaktivieren
--verify-load Suchreihenfolge mit dem echten Loader verifizieren (siehe unten).
Standardbenutzer; schreibt vorübergehend eine harmlose Sonde.
--confirmed-only Nur Canary-bestätigte Funde anzeigen
--lpe-only Strenges LPE-Jagen: System32/Programme ignorieren, nur
standardbenutzer-beschreibbare Schwachstellen anzeigen
--log-file <Pfad> Eine Diagnose-Scan-Protokolldatei schreiben
-v, --verbose Ausführliche Ausgabe
Hinweis:
--min-confidencewird nur als Überschreibung behandelt, wenn Sie es explizit übergeben. Andernfalls wird der Schwellwert des ausgewählten Profils verwendet (z. B.safe= 50 %,strict= 80 %).
Jeder Fund erhält Konfidenz- und Auswirkungssignale, die zu einer endgültigen Priorisierungsstufe kombiniert werden.
Typische Auswirkungsüberlegungen umfassen:
Die bestätigte Canary-Ausführung sollte als das stärkste Validierungssignal betrachtet werden.
Stufengrenzen: Die Stufen Hoch und Bestätigt sind Funden vorbehalten, die durch ein Nachweissignal gestützt werden – einen gefeuerten Canary, eine ETW-Laufzeit-Ladebeobachtung oder eine dokumentierte Wissensdatenbank-Übereinstimmung. Ein rein statischer Suchreihenfolgen-Treffer, so sauber er auch sein mag, ist am oberen Ende der Stufe Mittel gedeckelt und als Nur statisch gekennzeichnet, sodass unverifizierte Heuristiken niemals als hochsicher präsentiert werden.
Da die Beschreibbarkeit angreifer-bezogen ausgewertet wird, sind sowohl elevated als auch Standardbenutzer-Läufe sinnvoll:
--lpe-only (und --no-canary, wenn kein Compiler verfügbar ist) – jeder verbleibende Fund ist wirklich von einem unprivilegierten Prinzipal beschreibbar.DLLHijackHunter ist für defensive Sicherheitsforschung, Laborvalidierung, Auditierung und Red-Team-Simulation in autorisierten Umgebungen konzipiert.
Verwenden Sie es nur auf Systemen und Netzwerken, die Ihnen gehören oder für deren Bewertung Sie ausdrücklich autorisiert sind.
DLLHijackHunter unterstützt:
Empfohlener Arbeitsablauf:
MIT
Erstellt von GhostVector Academy.
| Typ | Beschreibung | Tarnung | Status |
|---|
| Phantom | DLL existiert nirgendwo auf der Festplatte | Hoch | Implementiert |
| Suchreihenfolge | DLL früher in der Windows-Suchreihenfolge platzieren | Hoch | Implementiert |
| Seitenladen | Missbrauch legitimer Apps, die DLLs aus ihrem Verzeichnis laden | Hoch | Implementiert (AutoElevate-Kopie-in-Temp-Pfad) |
| .local-Umleitung | Hijack via .local-Verzeichnisumleitung | Hoch | Implementiert |
| Umgebungs-PATH | Bewaffnung von beschreibbaren Verzeichnissen im systemweiten PATH | Hoch | Implementiert (kuratierte Dienst-/DLL-Zuordnung) |
| AppInit-DLLs | Missbrauch des AppInit_DLLs-Registrierungsschlüssels | Niedrig | Implementiert |
| AppCert-DLLs | Missbrauch des AppCertDLLs-Registrierungsschlüssels (wird in jeden CreateProcess-/WinExec-Aufrufer geladen) | Niedrig | Implementiert |
| Aktuelles Arbeitsverzeichnis | Hijack über das aktuelle Arbeitsverzeichnis | Niedrig | Geplant — wird derzeit von keinem Erkennungspfad erzeugt |
| Funktion | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|
| Automatisierte Erkennung | ✅ | ✅ | ✅ | ✅ | ❌ |
| Phantom-DLL-Erkennung | ✅ | ❌ | ✅ | ❌ | ✅ |
| Suchreihenfolgen-Analyse | ✅ | ❌ | ❌ | ❌ | ❌ |
| ACL-basierte Beschreibbarkeitsprüfung | ✅ | Teilweise | ❌ | Basis | ❌ |
| ETW-Echtzeitüberwachung | ✅ | ❌ | ❌ | ❌ | ✅ |
| Canary-Bestätigung | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| Privilegienausweitungsprüfung | ✅ | ❌ | ❌ | ❌ | ❌ |
| UAC-Bypass-Erkennung | ✅ | ❌ | ❌ | ❌ | ❌ |
| Fehlalarmreduzierung | ✅² | Keine | Basis | Keine | Keine |
| Neustart-Persistenz-Prüfung | ✅³ | ❌ | ❌ | ❌ | ❌ |
| Proxy-DLL-Generierung | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| Konfidenz-Bewertung | ✅ | ❌ | ❌ | ❌ | ❌ |
| Automatischer Auslöser (Dienst/Aufgabe/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| HTML/JSON-Berichte | ✅ | ❌ | ❌ | ❌ | ❌ |
| Threat-Intelligence-Korrelation | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| Automatisierte PATH-Exploits | ✅ | ❌ | ❌ | ❌ | ❌ |
| Zielgerichtetes Scannen | ✅ | ❌ | ❌ | ❌ | ✅ |
| Eigenständige Binärdatei | ✅ | ❌ | ❌ | ✅ | ❌ |
| Profil | Anwendungsfall | Canary | ETW | UAC-Bypass | Min. Konfidenz | Auslöser |
|---|
| aggressive | Vollständiges Audit, Laborumgebungen | ✅ | ✅ | ✅ | 15% | Dienste, Aufgaben, COM |
| strict | Nur hochsichere Funde | ✅ | ✅ | ❌ | 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 |