
DLLHijackHunter v2.4.0
Automatisierte Entdeckung, Validierung und Bestätigung von DLL-Hijacking. Lokale Fehlkonfigurationen in bewaffnete, bestätigte Angriffspfade verwandeln.
DLLHijackHunter
Von ProjectMerai
Automatisierte Erkennung, Validierung und Bestätigung von DLL-Hijacking unter Windows
Von „diese DLL könnte hijackbar sein“ bis „ein Standardbenutzer kann SYSTEM dazu bringen, diese zu laden — hier ist der Beweis.“
Inhalt
- Überblick
- Schnellstart
- Funktionsweise
- Was erkannt wird
- Reduzierung von Fehlalarmen
- Verifikation: Load-Probe und Canary
- Bewertung, Stufen und Angriffsketten
- Verwendungsreferenz
- Sicherheit und betriebliche Auswirkungen
- Aus dem Quellcode bauen
- Testlabor (HijackRange)
- Bekannte Einschränkungen
- Vergleich
Überblick
DLLHijackHunter findet DLL-Hijacking-Möglichkeiten auf einem Windows-Host und arbeitet darauf hin, sie zu beweisen, statt sie nur aufzulisten. Es:
- Entdeckt jeden Ort, an dem eine Binärdatei automatisch gestartet wird — Dienste, geplante Aufgaben, Run-Schlüssel, Startup-Ordner, COM-Server, AppInit/AppCert-DLLs, IFEO-Einträge und auto-elevierende UAC-Binärdateien — und berechnet, wo nach jeder importierten DLL gesucht würde.
- Filtert Positionen heraus, die ein Angreifer tatsächlich nicht nutzen kann: API-Sets, KnownDLLs, Verzeichnisse, in die ein Standardbenutzer nicht schreiben kann, geschützte Prozesse und mehr.
- Verifiziert (optional) mit dem echten Windows-Loader, indem eine harmlose Probe-DLL platziert und geprüft wird, welche Kopie die Suche gewinnt.
- Bestätigt (optional) durch Bereitstellen einer harmlosen Canary-DLL, Auslösen des Dienstes/der Aufgabe/des COM-Objekts und Aufzeichnung der Identität, unter der er tatsächlich ausgeführt wurde.
- Bewertet und meldet jeden Fund nach Konfidenz und Auswirkung und korreliert Funde zu Angriffsketten (zum Beispiel Standardbenutzer → SYSTEM).
Jede Beurteilung erfolgt aus der Sicht des Angreifers — eines unprivilegierten Standardbenutzers — unabhängig davon, ob der Scanner selbst erhöht läuft. Das Ausführen als Administrator gibt dem Tool mehr Sichtbarkeit (ETW, Canary, Dienst-Trigger); es lässt geschützte Verzeichnisse niemals beschreibbar erscheinen und bläht die erlangten Privilegien nicht auf.
Schnellstart
Laden Sie DLLHijackHunter.exe herunter oder bauen Sie sie (eigenständig; keine .NET-Installation erforderlich), dann von einer erhöhten Eingabeaufforderung aus:
# Passive, read-only triage: no file drops, no service/task starts
.\DLLHijackHunter.exe --profile safe
# Full static analysis without touching the system, JSON report
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw -o report.json
# Static analysis + real-loader verification (writes probe DLLs transiently)
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw --verify-load -o report.html
# Everything, including ETW and canary confirmation — lab / authorised targets only
.\DLLHijackHunter.exe --profile aggressive -o report.html
# Focus on one application
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe" --no-canary
Antivirus: Die Canary- und Probe-DLLs sind nicht signiert und verhalten sich wie Hijack-Payloads, daher kann Microsoft Defender sie in Quarantäne verschieben. Das Tool erkennt dies und meldet solche Ergebnisse als nicht eindeutig statt als „nicht hijackbar". Auf einem Testrechner sollten die Zielverzeichnisse und
%ProgramData%\DLLHijackHunterausgeschlossen werden, um eindeutige Ergebnisse zu erhalten.
Funktionsweise
flowchart TB
subgraph S1["1 · Discovery"]
direction LR
EN["Launch points<br/>services · tasks · Run keys<br/>startup · COM · AutoElevate"] --> PE["PE analysis<br/>imports · delay loads<br/>manifest"] --> SO["Search order<br/>identity-aware PATH"]
ETW["ETW runtime trace<br/>optional, elevated"]
end
subgraph S2["2 · Filter pipeline"]
direction LR
HG["Hard gates<br/>API sets · KnownDLLs<br/>writability"] --> SG["Soft gates<br/>manifest · privilege<br/>PPL · LoadLibraryEx"] --> DD["Dedup and<br/>profile filters"]
end
subgraph S3["3 · Verification (optional)"]
direction LR
LP["Load probe<br/>real Windows loader"] --> CN["Canary<br/>deploy, trigger, confirm"]
end
subgraph S4["4 · Output"]
direction LR
SC["Scoring and tiers"] --> AC["Attack chains"] --> RP["Console · JSON · HTML"]
end
S1 --> S2 --> S3 --> S4
| Phase | Erfordert Administratorrechte | Verändert das System |
|---|---|---|
| Statische Erkennung + Filter | Nein (Administrator sieht mehr) | Nein |
| ETW-Laufzeit-Erkennung | Ja | Startet Auto-Start-Dienste (bis zu 100) und führt geplante Aufgaben (bis zu 30) aus, um DLL-Ladevorgänge zu provozieren |
Lastprobe (--verify-load) | Nein | Schreibt kurzzeitig eine harmlose Probe-DLL an jede Kandidatenposition, entfernt sie anschließend wieder und stellt etwaige Originale wieder her |
| Canary-Bestätigung | Ja | Schreibt eine Canary-DLL, stoppt/startet Dienste, führt Aufgaben aus, aktiviert COM-Objekte und räumt anschließend auf |
Was es erkennt
Hijack-Typen
| Typ | Bedeutung | Hinweise |
|---|---|---|
| Phantom | Die DLL existiert nirgendwo im Suchpfad | Platzieren Sie sie an einer beliebigen Stelle, die die Binärdatei durchsucht |
| Suchreihenfolge | Ein beschreibbares Verzeichnis wird vor der legitimen Kopie durchsucht | Umfasst das Überschreiben einer DLL in einem beschreibbaren Verzeichnis |
| ENV PATH | Ein beschreibbares Verzeichnis in PATH wird nach einer fehlenden DLL durchsucht | Dienste werden ausschließlich gegen den Maschinen-PATH ausgewertet — die eigenen PATH-Einträge des Benutzers werden von einem Dienst niemals durchsucht |
| .local-Umleitung | <app>.exe.local\<dll>-Umleitung | Wird nur für ausführbare Dateien ohne Manifest gemeldet (oder wenn IFEO DevOverrideEnable=1 gesetzt ist); andernfalls ignoriert der Loader .local, und KnownDLLs werden niemals umgeleitet |
| Side-Load (UAC) | Eine auto-elevierende EXE neben eine platzierte DLL kopieren | Nur für EXEs mit <autoElevate>true</autoElevate> in ihrem Manifest. Auto-Elevation erfordert einen vertrauenswürdigen Speicherort, daher muss die Kopie diese Prüfung bestehen (z. B. ein nachgebildeter Ordner C:\Windows \System32\) |
| AppInit DLLs | AppInit_DLLs verweist auf eine beschreibbare DLL | Wird in jeden Prozess geladen, der user32.dll lädt |
| AppCert DLLs | AppCertDLLs verweist auf eine beschreibbare DLL | Wird in jeden Aufrufer von CreateProcess/WinExec geladen |
IFEO-Debugger- und SilentProcessExit\MonitorProcess-Binärdateien werden wie jeder andere Startpunkt aufgezählt und analysiert. CWD-basierte Hijacks werden derzeit nicht erzeugt.
Unter welcher Identität das Ziel läuft
Die korrekte Identität bestimmt sowohl das Urteil zur Rechteausweitung als auch die Auswirkungsbewertung: