
Descubrimiento automatizado de DLL Hijacking, validación y confirmación. Convirtiendo configuraciones locales incorrectas en rutas de ataque armadas y confirmadas.
Descubrimiento, Validación y Confirmación Automatizados de Secuestro de DLL
Convirtiendo configuraciones incorrectas locales en rutas de ataque armadas y confirmadas.
DLLHijackHunter es una herramienta automatizada de detección de secuestro de DLL en Windows que va más allá del análisis estático. Descubre, valida y confirma oportunidades de secuestro de DLL mediante un pipeline de múltiples fases:
La mayoría de herramientas de secuestro de DLL se detienen en "esta DLL podría ser secuestrable". DLLHijackHunter intenta validarlo, cruzarlo con inteligencia de explotación conocida y confirmar rutas de ejecución reales cuando sea posible.
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
Las entradas IFEO Debugger se enumeran y el binario referenciado se analiza en busca de importaciones de DLL, pero no hay un tipo de secuestro dedicado a IFEO/KnownDLL-bypass — no se publicitan como detecciones independientes.
DLLHijackHunter incluye descubrimiento dedicado de derivación UAC:
System32 y SysWOW64 en busca de EXEs con <autoElevate>true</autoElevate> en manifiestos incrustadosHKLM\SOFTWARE\Classes\CLSID en busca de objetos COM con Elevation\Enabled=1SetDllDirectory o SetDefaultDllDirectories, simula la ruta de ataque "copiar EXE a carpeta escribible + soltar DLL"Resources/hijacklibs.json. Una coincidencia aumenta la confianza y vincula el hallazgo a su página de referencia HijackLibs; la ausencia de coincidencia no significa nada. El conjunto de datos está basado en datos reales; actualícelo descargando nuevamente https://hijacklibs.net/api/hijacklibs.json sobre ese recurso (no se requieren cambios de código). Conjunto de datos © el proyecto HijackLibs y sus colaboradores.PATH escribibles y genera candidatos de secuestro para un mapa curado de servicios nativos de Windows que se sabe que buscan en PATH DLLs faltantesEl pipeline reduce falsos positivos mediante dos etapas:
Puertas Estrictas
api-ms-*, ext-ms-*)Usuarios / Usuarios Autenticados / Everyone, más cuentas de servicio sub-administrador sin fugas como LOCAL SERVICE/NETWORK SERVICE) tiene derechos de escritura efectivos. Fundamentalmente, esto se calcula independientemente del token bajo el que se ejecuta la herramienta, por lo que ejecutarse como elevado no hace que System32/Program Files parezcan escribibles. Esto es lo que hace que las ejecuciones elevadas sean significativas para el triaje de LPE.Puertas Suaves
LoadLibraryExEn lugar de adivinar, DLLHijackHunter intenta demostrar que los secuestros funcionan:
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
La DLL canary:
%ProgramData%\DLLHijackHunter\canary_<hash>.confirm), por lo que un binario sirve para cada candidato. El escáner calcula el mismo hash desde la ruta de implementación y sondea ese archivo.Los binarios empaquetados se construyen a partir del código fuente auditable en src/DLLHijackHunter/Resources/canary_src.c y se pueden regenerar con Resources/build_canary.bat (requiere el conjunto de herramientas MSVC C++; el escáner no lo requiere).
Excepción de proxy funcional: Cuando un secuestro de orden de búsqueda apunta a una DLL que existe y expone exportaciones, mantener el host vivo después de la confirmación requiere un proxy de reenvío de exportaciones, que se compila por DLL con MSVC (
cl.exe, localizado a través devswhere/vcvarsall). Si no hay un conjunto de herramientas presente, se utiliza la canary precompilada — aún confirma la carga (se dispara DllMain) pero no reenvía exportaciones, por lo que el proceso host puede fallar después de que se registre la confirmación. Los candidatos de DLL fantasma y otros sin exportaciones no necesitan compilador en absoluto.
Firma: Las canarys incrustadas no están firmadas. Firmarlas con código (para que se carguen bajo políticas más estrictas y sean atribuibles) requiere un certificado de firma y se deja como un paso en el momento del lanzamiento para el mantenedor.
Las canarys de proxy/reenvío de exportaciones son experimentales y de mejor esfuerzo. Algunos objetivos pueden fallar al cargarse correctamente o comportarse de manera inesperada dependiendo de:
Esto significa que una canary proxy fallida no siempre implica que la ruta de secuestro subyacente sea imposible.
--verify-load)Una verificación optativa, de usuario estándar, que se sitúa entre el pipeline de filtrado y la fase canary. Para cada candidato aplicable, escribe brevemente una DLL de sonda benigna en la posición de secuestro escribible, luego pregunta al cargador real de Windows — en un proceso hijo de corta duración — que resuelva la DLL por nombre. Donde el cargador la resuelva determina el veredicto:
ntdll.dll que KnownDLLs hace inexplotable).Notas de diseño y seguridad:
LOAD_LIBRARY_SEARCH moderno, por lo que solo se aplica a candidatos Fantasma / Orden de Búsqueda / Side-Load. Los candidatos .local, PATH y AppInit/AppCert utilizan mecanismos diferentes y se informan como Saltados.# Triaje de usuario estándar con orden de búsqueda verificado por cargador (sin canary, sin ETW)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load
git clone https://github.com/ghostvectoracademy/DLLHijackHunter.git
cd DLLHijackHunter
# Compilar (archivo único autónomo)
dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj `
-c Release -r win-x64 --self-contained `
-p:PublishSingleFile=true -o ./publish
# O usar el script de compilación
.\build.ps1
# Escaneo agresivo completo (recomendado, requiere admin)
.\DLLHijackHunter.exe --profile aggressive
# Escaneo seguro (sin descargas de archivos, sin disparadores)
.\DLLHijackHunter.exe --profile safe
# Escaneo centrado en derivación UAC
.\DLLHijackHunter.exe --profile uac-bypass
# Apuntar a un binario específico
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe"
# Apuntar por nombre de archivo (coincidencia parcial)
.\DLLHijackHunter.exe --target notepad.exe
# Solo hallazgos confirmados
.\DLLHijackHunter.exe --profile redteam --format json -o report.json
DLLHijackHunter — Detección Automatizada de Secuestro de DLL
Opciones:
-p, --profile <perfil> Perfil de escaneo [predeterminado: aggressive]
aggressive | strict | safe | redteam | uac-bypass
-o, --output <ruta> Ruta de archivo de salida (detecta formato automáticamente)
-f, --format <formato> Formato de salida [predeterminado: console]
console | json | html
-t, --target <objetivo> Apuntar a un binario, directorio o nombre de archivo específico
--min-confidence <valor> Umbral mínimo de confianza 0-100. Cuando se omite, se aplica
el umbral de cada perfil; pasarlo lo anula.
--no-canary Deshabilitar confirmación canary
--no-etw Deshabilitar descubrimiento en tiempo de ejecución ETW
--verify-load Verificar orden de búsqueda con el cargador real (ver abajo).
Usuario estándar; escribe transitoriamente una sonda benigna.
--confirmed-only Mostrar solo hallazgos confirmados por canary
--lpe-only Caza estricta de LPE: ignorar System32/Program Files, mostrar
solo vulnerabilidades escribibles por usuario estándar
--log-file <ruta> Escribir un registro de escaneo de diagnóstico a un archivo
-v, --verbose Salida detallada
Nota:
--min-confidencesolo se trata como anulación cuando se pasa explícitamente. De lo contrario, se utiliza el umbral del perfil seleccionado (por ejemplo,safe= 50%,strict= 80%).
Cada hallazgo recibe señales de confianza e impacto que se combinan en un nivel de priorización final.
Las consideraciones típicas de impacto incluyen:
La ejecución canary confirmada debe tratarse como la señal de validación más fuerte.
Bloqueo de nivel: los niveles Alto y Confirmado están reservados para hallazgos respaldados por una señal de prueba — una canary disparada, una observación de carga en tiempo de ejecución ETW o una coincidencia documentada en la base de conocimiento. Una coincidencia puramente estática de orden de búsqueda, por limpia que sea, está limitada al nivel superior del nivel Medio y anotada como Solo estático para que las heurísticas no verificadas nunca se presenten como de alta confianza.
Dado que la capacidad de escritura se evalúa relativa al atacante, tanto las ejecuciones elevadas como las de usuario estándar son significativas:
--lpe-only (y --no-canary si no hay compilador disponible) — cada hallazgo superviviente es genuinamente escribible por un principal no privilegiado.DLLHijackHunter está diseñado para investigación de seguridad defensiva, validación en laboratorio, auditoría y simulación de equipos rojos en entornos autorizados.
Úselo solo en sistemas y redes de su propiedad o para los que tenga autorización explícita para evaluar.
DLLHijackHunter admite:
Flujo de trabajo recomendado:
MIT
Construido por GhostVector Academy.
| Tipo | Descripción | Sigilo | Estado |
|---|
| Fantasma | La DLL no existe en ningún lugar del disco | Alto | Implementado |
| Orden de Búsqueda | Colocar la DLL antes en el orden de búsqueda de Windows | Alto | Implementado |
| Side-Loading | Abusar de una aplicación legítima que carga DLLs desde su directorio | Alto | Implementado (ruta de copia a temp de AutoElevate) |
| Redirección .local | Secuestro mediante redirección de directorio .local | Alto | Implementado |
| PATH ENV | Armado de directorios con permisos de escritura en PATH del sistema | Alto | Implementado (mapa curado de servicios/DLL) |
| DLLs AppInit | Abuso de registro AppInit_DLLs | Bajo | Implementado |
| DLLs AppCert | Abuso de registro AppCertDLLs (se carga en cada llamador de CreateProcess/WinExec) | Bajo | Implementado |
| CWD | Secuestro del Directorio de Trabajo Actual | Bajo | Planificado — actualmente no producido por ninguna ruta de descubrimiento |
| Característica | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|
| Descubrimiento automatizado | ✅ | ✅ | ✅ | ✅ | ❌ |
| Detección de DLL fantasma | ✅ | ❌ | ✅ | ❌ | ✅ |
| Análisis de orden de búsqueda | ✅ | ❌ | ❌ | ❌ | ❌ |
| Verificación de permisos de escritura basada en ACL | ✅ | Parcial | ❌ | Básica | ❌ |
| Monitoreo en tiempo real ETW | ✅ | ❌ | ❌ | ❌ | ✅ |
| Confirmación canary | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| Verificación de escalada de privilegios | ✅ | ❌ | ❌ | ❌ | ❌ |
| Descubrimiento de derivación UAC | ✅ | ❌ | ❌ | ❌ | ❌ |
| Reducción de falsos positivos | ✅² | Ninguna | Básica | Ninguna | Ninguna |
| Verificación de persistencia tras reinicio | ✅³ | ❌ | ❌ | ❌ | ❌ |
| Generación de DLL proxy | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| Puntuación de confianza | ✅ | ❌ | ❌ | ❌ | ❌ |
| Disparador automático (svc/task/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| Informes HTML/JSON | ✅ | ❌ | ❌ | ❌ | ❌ |
| Correlación con inteligencia de amenazas | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| Explotación automatizada de PATH | ✅ | ❌ | ❌ | ❌ | ❌ |
| Escaneo específico de objetivo | ✅ | ❌ | ❌ | ❌ | ✅ |
| Binario autónomo | ✅ | ❌ | ❌ | ✅ | ❌ |
| Perfil | Caso de Uso | Canary | ETW | Derivación UAC | Confianza Mínima | Disparadores |
|---|
| aggressive | Auditoría completa, entornos de laboratorio | ✅ | ✅ | ✅ | 15% | Servicios, Tareas, COM |
| strict | Solo hallazgos de alta confianza | ✅ | ✅ | ❌ | 80% | Servicios, Tareas |
| safe | Sistemas de producción, solo lectura | ❌ | ❌ | ❌ | 50% | Ninguno |
| redteam | Solo explotable confirmado | ✅ | ✅ | ❌ | 50% | Servicios, Tareas, COM |
| uac-bypass | Solo vectores de derivación UAC | ❌ | ❌ | ✅ | 20% | Solo AutoElevate |