
DLLHijackHunter v2.4.0
Descubrimiento automatizado de DLL Hijacking, validación y confirmación. Convirtiendo configuraciones locales incorrectas en rutas de ataque armadas y confirmadas.
DLLHijackHunter
Por ProjectMerai
Descubrimiento, validación y confirmación automatizados de DLL hijacking para Windows
Desde "esta DLL podría ser secuestrable" hasta "un usuario estándar puede hacer que SYSTEM cargue esto — aquí está la prueba."
Contenido
- Descripción general
- Inicio rápido
- Cómo funciona
- Qué detecta
- Reducción de falsos positivos
- Verificación: sonda de carga y canary
- Puntuación, niveles y cadenas de ataque
- Referencia de uso
- Seguridad e impacto operativo
- Compilación desde el código fuente
- Laboratorio de pruebas (HijackRange)
- Limitaciones conocidas
- Comparación
Descripción general
DLLHijackHunter encuentra oportunidades de DLL hijacking en un host Windows y se esfuerza por demostrarlas, no solo listarlas. El tool:
- Descubre cada lugar donde un binario se lanza automáticamente — servicios, tareas programadas, claves Run, carpetas de Inicio, servidores COM, DLLs AppInit/AppCert, entradas IFEO y binarios UAC con auto-elevación — y calcula dónde se buscaría cada DLL importada.
- Filtra las posiciones que un atacante no puede usar realmente: API sets, KnownDLLs, directorios en los que un usuario estándar no puede escribir, procesos protegidos y más.
- Verifica (opcional) con el cargador real de Windows, colocando una DLL sonda benigna y comprobando qué copia gana la búsqueda.
- Confirma (opcional) desplegando una DLL canary inofensiva, activando el servicio/tarea/objeto COM y registrando la identidad con la que realmente se ejecutó.
- Puntúa y reporta cada hallazgo por confianza e impacto, y correlaciona los hallazgos en cadenas de ataque (por ejemplo, usuario estándar → SYSTEM).
Cada juicio se realiza desde el punto de vista del atacante — un usuario estándar sin privilegios — independientemente de si el propio escáner se ejecuta con privilegios elevados. Ejecutarse como Administrador da al tool más visibilidad (ETW, canary, activadores de servicios); nunca hace que los directorios protegidos parezcan escribibles ni infla el privilegio obtenido.
Inicio rápido
Descarga o compila DLLHijackHunter.exe (autocontenido; no requiere instalar .NET), luego desde un símbolo del sistema elevado:
# 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: los DLL canary y probe no están firmados y se comportan como payloads de secuestro, por lo que Microsoft Defender puede ponerlos en cuarentena. La herramienta detecta esto y reporta esos resultados como no concluyentes en lugar de "no secuestrable". En una máquina de prueba, excluya los directorios objetivo y
%ProgramData%\DLLHijackHunterpara obtener resultados definitivos.
Cómo funciona
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 | Requiere admin | Modifica el sistema |
|---|---|---|
| Descubrimiento estático + filtros | No (el admin ve más) | No |
| Descubrimiento en tiempo de ejecución mediante ETW | Sí | Inicia servicios de inicio automático (hasta 100) y ejecuta tareas programadas (hasta 30) para provocar cargas de DLL |
Sonda de carga (--verify-load) | No | Escribe brevemente una DLL de sonda benigna en cada posición candidata, luego la elimina y restaura cualquier original |
| Confirmación mediante canary | Sí | Escribe una DLL canary, detiene/inicia servicios, ejecuta tareas, activa objetos COM y luego limpia |
Qué detecta
Tipos de secuestro
| Tipo | Qué significa | Notas |
|---|---|---|
| Phantom | La DLL no existe en ninguna parte de la ruta de búsqueda | Colócala en cualquier lugar donde el binario busque |
| Orden de búsqueda | Se busca en un directorio escribible antes que en la copia legítima | Incluye sobrescribir una DLL en un directorio escribible |
| ENV PATH | Se busca una DLL faltante en un directorio escribible de PATH | Los servicios se evalúan solo contra el PATH de máquina — las entradas del PATH del propio usuario nunca son buscadas por un servicio |
| Redirección .local | Redirección <app>.exe.local\<dll> | Solo se reporta para ejecutables sin manifiesto (o cuando IFEO DevOverrideEnable=1); el cargador ignora .local en caso contrario, y nunca redirige KnownDLLs |
| Side-load (UAC) | Copiar un EXE con auto-elevación junto a una DLL plantada | Solo para EXEs con <autoElevate>true</autoElevate> en su manifiesto. La auto-elevación requiere una ubicación de confianza, por lo que la copia debe superar esa comprobación (p. ej., una carpeta simulada C:\Windows \System32\) |
| AppInit DLLs | AppInit_DLLs apunta a una DLL escribible | Se carga en cada proceso que carga user32.dll |
| AppCert DLLs | AppCertDLLs apunta a una DLL escribible | Se carga en cada llamador de CreateProcess/WinExec |
Los binarios de IFEO Debugger y SilentProcessExit\MonitorProcess se enumeran y analizan como cualquier otro punto de lanzamiento. Actualmente no se generan secuestros basados en CWD.
Con qué identidad se ejecuta el objetivo
La identidad correcta determina tanto el veredicto de escalada de privilegios como la puntuación de impacto: