
DLLHijackHunter v2.4.0
Scoperta, validazione e conferma automatizzata del DLL Hijacking. Trasformare le configurazioni errate locali in percorsi di attacco confermati e weaponizzati.
DLLHijackHunter
Di ProjectMerai
Scoperta, validazione e conferma automatizzate del DLL hijacking su Windows
Da "questa DLL potrebbe essere dirottabile" a "un utente standard può far caricare questa DLL a SYSTEM — eccone la prova."
Indice
- Panoramica
- Avvio rapido
- Come funziona
- Cosa rileva
- Ridurre i falsi positivi
- Verifica: sonda di caricamento e canary
- Punteggio, livelli e catene di attacco
- Riferimento all'utilizzo
- Sicurezza e impatto operativo
- Compilazione dal sorgente
- Laboratorio di test (HijackRange)
- Limitazioni note
- Confronto
Panoramica
DLLHijackHunter individua le opportunità di DLL hijacking su un host Windows e si adopera per dimostrarle, non solo elencarle. Esso:
- Scopre ogni punto in cui un binario viene avviato automaticamente — servizi, attività pianificate, chiavi Run, cartelle Startup, server COM, DLL AppInit/AppCert, voci IFEO e binari UAC ad auto-elevazione — e calcola dove verrebbe cercata ciascuna DLL importata.
- Filtra le posizioni che un attaccante non può effettivamente sfruttare: API set, KnownDLL, directory in cui un utente standard non può scrivere, processi protetti e altro ancora.
- Verifica (opzionale) con il vero loader di Windows, posizionando una DLL sonda benigna e controllando quale copia vince la ricerca.
- Conferma (opzionale) distribuendo una DLL canary innocua, attivando il servizio/attività/oggetto COM e registrando l'identità con cui è effettivamente stato eseguito.
- Assegna un punteggio e riporta ogni risultato in base a confidenza e impatto, e correla i risultati in catene di attacco (ad esempio utente standard → SYSTEM).
Ogni giudizio è formulato dal punto di vista dell'attaccante — un utente standard non privilegiato — indipendentemente dal fatto che lo scanner stesso venga eseguito con privilegi elevati. L'esecuzione come Amministratore offre allo strumento maggiore visibilità (ETW, canary, trigger dei servizi); non rende mai le directory protette scrivibili né gonfia il privilegio ottenuto.
Avvio rapido
Scarica o compila DLLHijackHunter.exe (autonomo; non richiede l'installazione di .NET), quindi da un prompt con privilegi elevati:
# 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: le DLL canary e probe non sono firmate e si comportano come payload di hijack, quindi Microsoft Defender potrebbe metterle in quarantena. Lo strumento rileva questa situazione e riporta tali risultati come inconclusivi anziché "non hijackable". Su una macchina di test, escludere le directory di destinazione e
%ProgramData%\DLLHijackHunterper ottenere risultati definitivi.
Come funziona
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
| Fase | Richiede admin | Modifica il sistema |
|---|---|---|
| Scoperta statica + filtri | No (l'admin vede di più) | No |
| Scoperta runtime ETW | Sì | Avvia servizi ad avvio automatico (fino a 100) ed esegue attività pianificate (fino a 30) per provocare il caricamento di DLL |
Sonda di caricamento (--verify-load) | No | Scrive brevemente una DLL sonda benigna in ogni posizione candidata, poi la rimuove e ripristina l'originale, se presente |
| Conferma canary | Sì | Scrive una DLL canary, arresta/avvia servizi, esegue attività, attiva oggetti COM, poi esegue la pulizia |
Cosa rileva
Tipi di hijack
| Tipo | Cosa significa | Note |
|---|---|---|
| Phantom | La DLL non esiste in nessun punto del percorso di ricerca | Collocala ovunque il binario effettui la ricerca |
| Search order | Una directory scrivibile viene cercata prima della copia legittima | Include la sovrascrittura di una DLL in una directory scrivibile |
| ENV PATH | Una directory scrivibile in PATH viene cercata per una DLL mancante | I servizi vengono valutati solo rispetto al PATH macchina — le voci PATH dell'utente non vengono mai cercate da un servizio |
| Reindirizzamento .local | Reindirizzamento <app>.exe.local\<dll> | Segnalato solo per eseguibili senza manifest (o quando IFEO DevOverrideEnable=1); il loader ignora .local in caso contrario, e non reindirizza mai le KnownDLLs |
| Side-load (UAC) | Copia un EXE ad auto-elevazione accanto a una DLL collocata | Solo per EXE con <autoElevate>true</autoElevate> nel loro manifest. L'auto-elevazione richiede una posizione attendibile, quindi la copia deve superare tale controllo (ad es. una cartella fittizia C:\Windows \System32\) |
| AppInit DLLs | AppInit_DLLs punta a una DLL scrivibile | Caricata in ogni processo che carica user32.dll |
| AppCert DLLs | AppCertDLLs punta a una DLL scrivibile | Caricata in ogni chiamante di CreateProcess/WinExec |
I binari IFEO Debugger e SilentProcessExit\MonitorProcess vengono enumerati e analizzati come qualsiasi altro punto di avvio. Gli hijack basati su CWD non vengono attualmente prodotti.
Con quale identità viene eseguito il target
L'identità corretta determina sia il verdetto di escalation dei privilegi sia il punteggio di impatto: