
Descoberta, Validação e Confirmação Automatizada de DLL Hijacking. Transformando configurações incorretas locais em caminhos de ataque armados e confirmados.
Descoberta, Validação e Confirmação Automatizada de DLL Hijacking
Transformando configurações incorretas locais em caminhos de ataque armados e confirmados.
DLLHijackHunter é uma ferramenta automatizada de detecção de sequestro de DLL no Windows que vai além da análise estática. Ela descobre, valida e confirma oportunidades de sequestro de DLL usando um pipeline de múltiplas fases:
A maioria das ferramentas de sequestro de DLL para em 'esta DLL pode ser sequestrável.' O DLLHijackHunter tenta validá-la, fazer referência cruzada com inteligência de exploração conhecida e confirmar caminhos reais de execução onde possível.
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
Entradas do depurador IFEO são enumeradas e o binário referenciado é analisado quanto a importações de DLL, mas não há um tipo de sequestro IFEO/desvio KnownDLL dedicado — eles não são anunciados como detecções independentes.
DLLHijackHunter inclui descoberta dedicada de bypass UAC:
System32 e SysWOW64 por EXEs com <autoElevate>true</autoElevate> em manifestos incorporadosHKLM\SOFTWARE\Classes\CLSID por objetos COM com Elevation\Enabled=1SetDllDirectory ou SetDefaultDllDirectories, simula o caminho de ataque 'copiar EXE para pasta gravável + soltar DLL'Resources/hijacklibs.json. Uma correspondência aumenta a confiança e vincula a descoberta à sua página de referência do HijackLibs; a ausência de correspondência não significa nada. O conjunto de dados é orientado a dados — atualize-o baixando novamente https://hijacklibs.net/api/hijacklibs.json sobre esse recurso (nenhuma alteração de código necessária). Conjunto de dados © o projeto e colaboradores do HijackLibs.PATH e gera candidatos a sequestro para um mapa curado de serviços nativos do Windows conhecidos por pesquisar PATH por DLLs ausentesO pipeline reduz falsos positivos por meio de dois estágios:
Portões Rígidos
api-ms-*, ext-ms-*)Usuários / Usuários Autenticados / Todos, além de contas de serviço sub-admin à prova de vazamento como LOCAL SERVICE/NETWORK SERVICE) tiver direitos de gravação efetivos. Crucialmente, isso é calculado independentemente do token sob o qual a ferramenta é executada, portanto, executar elevado não faz System32/Program Files parecerem graváveis. É isso que torna execuções elevadas significativas para triagem de LPE.Portões Flexíveis
LoadLibraryExEm vez de adivinhar, o DLLHijackHunter tenta provar que os sequestros funcionam:
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
A DLL canary:
%ProgramData%\DLLHijackHunter\canary_<hash>.confirm), então um binário serve a cada candidato. O scanner calcula o mesmo hash a partir do caminho de implantação e verifica se esse arquivo existe.Os binários fornecidos são construídos a partir da fonte auditável em src/DLLHijackHunter/Resources/canary_src.c e podem ser regenerados com Resources/build_canary.bat (requer o toolchain MSVC C++; o scanner não).
Exceção de proxy funcional: Quando um sequestro por ordem de busca tem como alvo uma DLL que existe e expõe exportações, manter o host ativo após a confirmação requer um proxy de encaminhamento de exportações, que é compilado por DLL com MSVC (
cl.exe, localizado viavswhere/vcvarsall). Se não houver toolchain presente, o canary pré-compilado é usado em vez disso — ele ainda confirma o carregamento (DllMain é acionado) mas não encaminha exportações, então o processo host pode falhar após a confirmação ser registrada. DLLs fantasma e outros candidatos sem exportações não precisam de compilador. Assinatura: Os canaries incorporados não são assinados. Assiná-los com código (para que carreguem sob políticas mais restritivas e sejam atribuíveis) requer um certificado de assinatura e é deixado como uma etapa de lançamento para o mantenedor.
Canaries de proxy/encaminhamento de exportações são experimentais e de melhor esforço. Alguns alvos podem falhar ao carregar corretamente ou podem se comportar inesperadamente dependendo de:
Isso significa que um canary de proxy com falha nem sempre significa que o caminho de sequestro subjacente é impossível.
--verify-load)Uma verificação opt-in, de usuário padrão, que fica entre o pipeline de filtragem e a fase canary. Para cada candidato aplicável, ele escreve brevemente uma DLL de sonda benigna na posição gravável de sequestro, então pergunta ao carregador real do Windows — em um processo filho de curta duração — para resolver a DLL pelo nome. Onde o carregador resolve determina o veredito:
.local/ordem de busca para ntdll.dll que KnownDLLs torna inexplotável).Notas de design e segurança:
LOAD_LIBRARY_SEARCH, portanto é aplicado apenas a candidatos Fantasma / Ordem de Busca / Side-Load. Candidatos .local, PATH e AppInit/AppCert usam mecânicas diferentes e são relatados como Pulados.# Standard-user triage with loader-verified search order (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 (self-contained single file)
dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj `
-c Release -r win-x64 --self-contained `
-p:PublishSingleFile=true -o ./publish
# Or use the build script
.\build.ps1
# Full aggressive scan (recommended, requires admin)
.\DLLHijackHunter.exe --profile aggressive
# Safe scan (no file drops, no triggers)
.\DLLHijackHunter.exe --profile safe
# UAC bypass focused scan
.\DLLHijackHunter.exe --profile uac-bypass
# Target a specific binary
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe"
# Target by filename (partial match)
.\DLLHijackHunter.exe --target notepad.exe
# Confirmed findings only
.\DLLHijackHunter.exe --profile redteam --format json -o report.json
DLLHijackHunter — Detecção Automatizada de DLL Hijacking
Options:
-p, --profile <profile> Perfil de varredura [padrão: aggressive]
aggressive | strict | safe | redteam | uac-bypass
-o, --output <path> Caminho do arquivo de saída (detecta formato automaticamente)
-f, --format <format> Formato de saída [padrão: console]
console | json | html
-t, --target <target> Alvo específico binário, diretório ou nome de arquivo
--min-confidence <value> Limite mínimo de confiança 0-100. Quando omitido, o limite
próprio de cada perfil se aplica; passar isso o substitui.
--no-canary Desabilitar confirmação com canary
--no-etw Desabilitar descoberta em tempo de execução ETW
--verify-load Verificar ordem de busca com o carregador real (veja abaixo).
Usuário padrão; escreve transitoriamente uma sonda benigna.
--confirmed-only Mostrar apenas descobertas confirmadas por canary
--lpe-only Caça LPE estrita: ignorar System32/Program Files, mostrar
apenas vulnerabilidades graváveis por usuário padrão
--log-file <path> Escrever um log de varredura de diagnóstico em arquivo
-v, --verbose Saída detalhada
Nota:
--min-confidenceé tratado apenas como uma substituição quando você o passa explicitamente. Caso contrário, o limite do perfil selecionado é usado (ex:safe= 50%,strict= 80%).
Cada descoberta recebe sinais de confiança e impacto que são combinados em um nível final de priorização.
Considerações típicas de impacto incluem:
Execução confirmada de canary deve ser tratada como o sinal de validação mais forte.
Controle de nível: os níveis Alto e Confirmado são reservados para descobertas apoiadas por um sinal de prova — um canary disparado, uma observação de carga em tempo de execução ETW ou uma correspondência documentada na base de conhecimento. Uma correspondência puramente estática de ordem de busca, por mais limpa que seja, é limitada ao topo do nível Médio e anotada como Apenas estático para que heurísticas não verificadas nunca se apresentem como alta confiança.
Como a gravabilidade é avaliada relativa ao atacante, execuções elevadas e de usuário padrão são significativas:
--lpe-only (e --no-canary se um compilador não estiver disponível) — toda descoberta sobrevivente é genuinamente gravável por um principal não privilegiado.DLLHijackHunter foi projetado para pesquisa defensiva de segurança, validação em laboratório, auditoria e simulação de red team em ambientes autorizados.
Use-o apenas em sistemas e redes que você possui ou está explicitamente autorizado a avaliar.
DLLHijackHunter suporta:
Fluxo de trabalho recomendado:
MIT
Construído por GhostVector Academy.
| Tipo | Descrição | Furtividade | Status |
|---|
| Fantasma | DLL não existe em nenhum lugar no disco | Alta | Implementado |
| Ordem de Busca | Colocar DLL antes na ordem de busca do Windows | Alta | Implementado |
| Side-Loading | Abusar de aplicativos legítimos carregando DLLs de seu diretório | Alta | Implementado (caminho de cópia para temp do AutoElevate) |
| Redirecionamento .local | Sequestro via redirecionamento de diretório .local | Alta | Implementado |
| ENV PATH | Weaponização de diretórios graváveis no PATH do sistema | Alta | Implementado (mapa curado de serviço/DLL) |
| AppInit DLLs | Abuso de registro AppInit_DLLs | Baixa | Implementado |
| AppCert DLLs | Abuso de registro AppCertDLLs (carrega em todo chamador CreateProcess/WinExec) | Baixa | Implementado |
| CWD | Sequestro do Diretório de Trabalho Atual | Baixa | Planejado — atualmente não produzido por nenhum caminho de descoberta |
| Recurso | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|
| Descoberta automatizada | ✅ | ✅ | ✅ | ✅ | ❌ |
| Detecção de DLL fantasma | ✅ | ❌ | ✅ | ❌ | ✅ |
| Análise de ordem de busca | ✅ | ❌ | ❌ | ❌ | ❌ |
| Verificação de gravabilidade baseada em ACL | ✅ | Parcial | ❌ | Básico | ❌ |
| Monitoramento em tempo real ETW | ✅ | ❌ | ❌ | ❌ | ✅ |
| Confirmação com canary | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| Verificação de escalada de privilégio | ✅ | ❌ | ❌ | ❌ | ❌ |
| Descoberta de bypass UAC | ✅ | ❌ | ❌ | ❌ | ❌ |
| Redução de falsos positivos | ✅² | Nenhum | Básico | Nenhum | Nenhum |
| Verificação de persistência após reinicialização | ✅³ | ❌ | ❌ | ❌ | ❌ |
| Geração de DLL proxy | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| Pontuação de confiança | ✅ | ❌ | ❌ | ❌ | ❌ |
| Acionamento automático (svc/task/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| Relatórios HTML/JSON | ✅ | ❌ | ❌ | ❌ | TXT |
| Correlação de inteligência de ameaças | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| Exploração automatizada de PATH | ✅ | ❌ | ❌ | ❌ | ❌ |
| Varredura específica de alvo | ✅ | ❌ | ❌ | ❌ | ✅ |
| Binário autossuficiente | ✅ | ❌ | ❌ | ✅ | ❌ |
| Perfil | Caso de Uso | Canary | ETW | Bypass UAC | Confiança Mínima | Acionamentos |
|---|
| aggressive | Auditoria completa, ambientes de laboratório | ✅ | ✅ | ✅ | 15% | Serviços, Tarefas, COM |
| strict | Apenas descobertas de alta confiança | ✅ | ✅ | ❌ | 80% | Serviços, Tarefas |
| safe | Sistemas de produção, somente leitura | ❌ | ❌ | ❌ | 50% | Nenhum |
| redteam | Apenas explorável confirmado | ✅ | ✅ | ❌ | 50% | Serviços, Tarefas, COM |
| uac-bypass | Apenas vetores de bypass UAC | ❌ | ❌ | ✅ | 20% | Apenas AutoElevate |