
Scoperta, validazione e conferma automatizzata del DLL Hijacking. Trasformare le configurazioni errate locali in percorsi di attacco confermati e weaponizzati.
Scoperta, Validazione e Conferma Automatica del DLL Hijacking
Trasformare le misconfigurazioni locali in percorsi d'attacco confermati e weaponizzati.
DLLHijackHunter è uno strumento automatizzato di rilevamento del DLL hijacking su Windows che va oltre l'analisi statica. Scopre, valida e conferma le opportunità di DLL hijacking tramite una pipeline multi-fase:
La maggior parte degli strumenti di DLL hijacking si ferma a "questa DLL potrebbe essere hijackabile." DLLHijackHunter tenta di validarla, incrociarla con intelligence sulle vulnerabilità note e confermare i percorsi di esecuzione reali dove possibile.
flowchart TB
subgraph Phase1["Fase 1: Scoperta"]
SE["Motore Statico<br/>Servizi, Attività, Avvio,<br/>COM, Run Keys"]
AE["Motore AutoElevate<br/>Manifest + Bypass UAC COM"]
PE["Analizzatore PE<br/>Tabelle Import, Delay Loads,<br/>Manifest, Export"]
ETW["Motore ETW<br/>Monitoraggio Caricamento DLL<br/>in Tempo Reale"]
SO["Calcolatore Ordine<br/>di Ricerca"]
end
subgraph Phase2["Fase 2: Pipeline di Filtraggio"]
direction LR
HG["Gate Hard<br/>(Kill Binario)"]
SG["Gate Soft<br/>(Aggiustamento Confidenza)"]
end
subgraph Phase3["Fase 3: Verifica Caricamento (--verify-load)"]
LP["LoadProbe<br/>Test loader processo figlio<br/>Probe DLL posizionata & rimossa"]
end
subgraph Phase4["Fase 4: Canary"]
CB["Builder DLL Canary"]
TE["Esecutore Trigger"]
VF["Verifica"]
end
subgraph Phase5["Fase 5: Output"]
SC["Scorer a Livelli"]
RC["Report Console"]
RJ["Report JSON"]
RH["Report HTML"]
end
SE --> PE --> SO
AE --> PE
ETW --> SO
SO --> Phase2
HG --> SG
Phase2 --> Phase3
Phase3 --> Phase4
CB --> TE --> VF
Phase4 --> Phase5Le voci IFEO Debugger vengono enumerate e il binario referenziato viene analizzato per gli import DLL, ma non esiste un tipo di hijack IFEO/KnownDLL-bypass dedicato — questi non vengono pubblicizzati come rilevamenti autonomi.
DLLHijackHunter include una scoperta dedicata del bypass UAC:
System32 e SysWOW64 per EXE con <autoElevate>true</autoElevate> nei manifest incorporatiHKLM\SOFTWARE\Classes\CLSID per oggetti COM con Elevation\Enabled=1SetDllDirectory o SetDefaultDllDirectories, simula il percorso d'attacco "copia EXE in cartella scrivibile + rilascia DLL"Resources/hijacklibs.json. Una corrispondenza aumenta la confidenza e collega il risultato alla pagina di riferimento HijackLibs; l'assenza di corrispondenza non significa nulla. Il dataset è data-driven — aggiornalo riscaricando https://hijacklibs.net/api/hijacklibs.json su quella risorsa (nessuna modifica al codice richiesta). Dataset © il progetto HijackLibs e i suoi contributori.PATH scrivibili e genera candidati hijack per una mappa curata di servizi Windows nativi noti per cercare DLL mancanti nel PATHLa pipeline riduce i falsi positivi attraverso due fasi:
Gate Hard
api-ms-*, ext-ms-*)Users / Authenticated Users / Everyone, più account di servizio sub-admin a prova di leak come LOCAL SERVICE/NETWORK SERVICE) ha diritti di scrittura effettivi. Fondamentalmente, questo viene calcolato indipendentemente dal token con cui lo strumento viene eseguito, quindi l'esecuzione con privilegi elevati non rende System32/Program Files scrivibili. Questo è ciò che rende significative le esecuzioni elevate per il triage LPE.Gate Soft
LoadLibraryExInvece di indovinare, DLLHijackHunter tenta di dimostrare che gli hijack funzionano:
sequenceDiagram
participant H as DLLHijackHunter
participant B as Builder DLL Canary
participant T as Esecutore Trigger
participant V as Binario Vittima
H->>B: Costruisci DLL canary
B->>B: Estrai canary precompilata<br/>(o compila un proxy con MSVC)
B-->>H: canary.dll + percorso file conferma
H->>H: Posiziona DLL nel percorso hijack
H->>T: Attiva esecuzione binario
T->>V: Avvia servizio / esegui attività / attiva COM
V->>V: Carica DLL canary
V-->>H: Scrive file conferma<br/>PID, privilegio, livello integrità
H->>H: Registra: CONFERMATO
H->>H: Pulizia DLL canaryLa DLL canary:
%ProgramData%\DLLHijackHunter\canary_<hash>.confirm), quindi un singolo binario serve ogni candidato. Lo scanner calcola lo stesso hash dal percorso di distribuzione e interroga quel file.I binari inclusi sono costruiti dal sorgente verificabile in src/DLLHijackHunter/Resources/canary_src.c e possono essere rigenerati con Resources/build_canary.bat (richiede la toolchain C++ MSVC; lo scanner non la richiede).
Eccezione proxy funzionale: Quando un hijack di ordine di ricerca mira a una DLL che esiste ed espone export, mantenere vivo l'host dopo la conferma richiede un proxy di forwarding export, compilato per-DLL con MSVC (
cl.exe, localizzato tramitevswhere/vcvarsall). Se non è presente alcuna toolchain, viene utilizzata la canary precompilata — essa conferma comunque il caricamento (DllMain scatta) ma non inoltra gli export, quindi il processo host potrebbe crashare dopo che la conferma è stata registrata. I candidati Phantom-DLL e altri senza export non richiedono alcun compilatore.
Firma: Le canary incorporate non sono firmate. Firmarle con codice (così si caricano sotto policy più rigide e sono attribuibili) richiede un certificato di firma ed è lasciato come passaggio al momento del rilascio per il maintainer.
Le canary proxy/export-forwarding sono sperimentali e best-effort. Alcuni target potrebbero non caricarsi correttamente o comportarsi in modo inaspettato a seconda di:
Ciò significa che una canary proxy fallita non sempre implica che il percorso hijack sottostante sia impossibile.
--verify-load)Una verifica opt-in, per utente standard, che si colloca tra la pipeline di filtraggio e la fase canary. Per ogni candidato applicabile scrive brevemente una DLL probe benigna nella posizione hijack scrivibile, poi chiede al loader Windows reale — in un processo figlio di breve durata — di risolvere la DLL per nome. Dove il loader risolve determina il verdetto:
.local/ordine di ricerca per ntdll.dll che KnownDLLs rende inutilizzabile).Note di progettazione e sicurezza:
LOAD_LIBRARY_SEARCH, quindi viene applicato solo ai candidati Phantom / Ordine di Ricerca / Side-Load. I candidati .local, PATH e AppInit/AppCert usano meccaniche diverse e vengono riportati come Saltati.# Triage utente standard con ordine di ricerca verificato dal loader (no canary, no ETW)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load
git clone https://github.com/ghostvectoracademy/DLLHijackHunter.git
cd DLLHijackHunter
# Build (file singolo self-contained)
dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj `
-c Release -r win-x64 --self-contained `
-p:PublishSingleFile=true -o ./publish
# Oppure usa lo script di build
.\build.ps1
# Scansione aggressiva completa (consigliata, richiede admin)
.\DLLHijackHunter.exe --profile aggressive
# Scansione sicura (nessun rilascio file, nessun trigger)
.\DLLHijackHunter.exe --profile safe
# Scansione focalizzata sul bypass UAC
.\DLLHijackHunter.exe --profile uac-bypass
# Mira a un binario specifico
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe"
# Mira per nome file (corrispondenza parziale)
.\DLLHijackHunter.exe --target notepad.exe
# Solo risultati confermati
.\DLLHijackHunter.exe --profile redteam --format json -o report.json
DLLHijackHunter — Rilevamento Automatico DLL Hijacking
Opzioni:
-p, --profile <profile> Profilo di scansione [default: aggressive]
aggressive | strict | safe | redteam | uac-bypass
-o, --output <path> Percorso file di output (rileva automaticamente il formato)
-f, --format <format> Formato di output [default: console]
console | json | html
-t, --target <target> Mira a binario, directory o nome file specifico
--min-confidence <value> Soglia minima di confidenza 0-100. Se omesso, viene applicata
la soglia del profilo selezionato; passarlo lo sovrascrive.
--no-canary Disabilita la conferma canary
--no-etw Disabilita la scoperta runtime ETW
--verify-load Verifica l'ordine di ricerca con il loader reale (vedi sotto).
Utente standard; scrive transitoriamente un probe benigno.
--confirmed-only Mostra solo risultati confermati da canary
--lpe-only Caccia LPE rigorosa: ignora System32/Program Files, mostra
solo vulnerabilità scrivibili da utente standard
--log-file <path> Scrive un log diagnostico di scansione su file
-v, --verbose Output verboso
Nota:
--min-confidenceviene trattato come override solo quando lo passi esplicitamente. Altrimenti viene usata la soglia del profilo selezionato (es.safe= 50%,strict= 80%).
Ogni risultato riceve segnali di confidenza e impatto che vengono combinati in un livello di prioritizzazione finale.
Le considerazioni tipiche sull'impatto includono:
L'esecuzione canary confermata deve essere trattata come il segnale di validazione più forte.
Gating a livelli: i livelli Alto e Confermato sono riservati ai risultati supportati da un segnale di prova — una canary attivata, un'osservazione di caricamento runtime ETW o una corrispondenza documentata nella knowledge base. Una corrispondenza puramente statica di ordine di ricerca, per quanto pulita, è limitata alla parte superiore del livello Medio e annotata come Solo-statico così le euristiche non verificate non si presentano mai come ad alta confidenza.
Poiché la scrivibilità viene valutata relativa all'attaccante, sia le esecuzioni elevate che quelle da utente standard sono significative:
--lpe-only (e --no-canary se non è disponibile un compilatore) — ogni risultato sopravvissuto è genuinamente scrivibile da un principal non privilegiato.DLLHijackHunter è progettato per ricerca difensiva sulla sicurezza, validazione in laboratorio, audit e simulazione red-team in ambienti autorizzati.
Usalo solo su sistemi e reti che possiedi o per cui sei esplicitamente autorizzato a valutare.
DLLHijackHunter supporta:
Flusso di lavoro consigliato:
MIT
Costruito da ProjectMerai.
| Tipo | Descrizione | Stealth | Stato |
|---|
| Phantom | La DLL non esiste da nessuna parte su disco | Alta | Implementato |
| Ordine di Ricerca | Posizionare la DLL prima nell'ordine di ricerca di Windows | Alta | Implementato |
| Side-Loading | Abusare di app legittime che caricano DLL dalla propria directory | Alta | Implementato (percorso AutoElevate copy-to-temp) |
| Reindirizzamento .local | Hijack tramite reindirizzamento directory .local | Alta | Implementato |
| ENV PATH | Weaponizzazione di directory scrivibili nel PATH di sistema | Alta | Implementato (mappa curata servizi/DLL) |
| DLL AppInit | Abuso del registro AppInit_DLLs | Bassa | Implementato |
| DLL AppCert | Abuso del registro AppCertDLLs (caricate in ogni chiamante CreateProcess/WinExec) | Bassa | Implementato |
| CWD | Hijack della Directory di Lavoro Corrente | Bassa | Pianificato — attualmente non prodotto da alcun percorso di scoperta |
| Funzionalità | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|
| Scoperta automatizzata | ✅ | ✅ | ✅ | ✅ | ❌ |
| Rilevamento DLL Phantom | ✅ | ❌ | ✅ | ❌ | ✅ |
| Analisi ordine di ricerca | ✅ | ❌ | ❌ | ❌ | ❌ |
| Controllo scrivibilità basato su ACL | ✅ | Parziale | ❌ | Base | ❌ |
| Monitoraggio in tempo reale ETW | ✅ | ❌ | ❌ | ❌ | ✅ |
| Conferma canary | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| Controllo escalation privilegi | ✅ | ❌ | ❌ | ❌ | ❌ |
| Scoperta bypass UAC | ✅ | ❌ | ❌ | ❌ | ❌ |
| Riduzione falsi positivi | ✅² | Nessuna | Base | Nessuna | Nessuna |
| Controllo persistenza al riavvio | ✅³ | ❌ | ❌ | ❌ | ❌ |
| Generazione DLL proxy | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| Scoring di confidenza | ✅ | ❌ | ❌ | ❌ | ❌ |
| Trigger automatico (svc/task/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| Report HTML/JSON | ✅ | ❌ | ❌ | TXT | ❌ |
| Correlazione threat intel | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| Exploit PATH automatizzati | ✅ | ❌ | ❌ | ❌ | ❌ |
| Scansione target-specifica | ✅ | ❌ | ❌ | ❌ | ✅ |
| Binario autonomo | ✅ | ❌ | ❌ | ✅ | ❌ |
| Profilo | Caso d'Uso | Canary | ETW | Bypass UAC | Confidenza Min | Trigger |
|---|
| aggressive | Audit completo, ambienti lab | ✅ | ✅ | ✅ | 15% | Servizi, Attività, COM |
| strict | Solo risultati ad alta confidenza | ✅ | ✅ | ❌ | 80% | Servizi, Attività |
| safe | Sistemi di produzione, sola lettura | ❌ | ❌ | ❌ | 50% | Nessuno |
| redteam | Solo sfruttabili confermati | ✅ | ✅ | ❌ | 50% | Servizi, Attività, COM |
| uac-bypass | Solo vettori di bypass UAC | ❌ | ❌ | ✅ | 20% | Solo AutoElevate |