
DLLHijackHunter v2.5.0
Descoberta, Validação e Confirmação Automatizada de DLL Hijacking. Transformando configurações incorretas locais em caminhos de ataque armados e confirmados.
DLLHijackHunter
Por ProjectMerai
Descoberta, validação e confirmação automatizadas de DLL hijacking para Windows
De "esta DLL pode ser sequestrada" para "um usuário padrão pode fazer o SYSTEM carregar isto — aqui está a prova."
Conteúdo
- Visão geral
- Início rápido
- Como funciona
- O que ele detecta
- Reduzindo falsos positivos
- Verificação: sonda de carregamento e canário
- Pontuação, níveis e cadeias de ataque
- Referência de uso
- Segurança e impacto operacional
- Compilando a partir do código-fonte
- Laboratório de testes (HijackRange)
- Limitações conhecidas
- Comparação
Visão geral
O DLLHijackHunter encontra oportunidades de DLL hijacking em um host Windows e trabalha para prová-las, não apenas listá-las. Ele:
- Descobre cada local onde um binário é iniciado automaticamente — serviços, tarefas agendadas, chaves Run, pastas Startup, servidores COM, DLLs AppInit/AppCert, entradas IFEO e binários UAC com auto-elevação — e calcula onde cada DLL importada seria procurada.
- Filtra posições que um atacante não pode realmente usar: API sets, KnownDLLs, diretórios nos quais um usuário padrão não pode gravar, processos protegidos e mais.
- Verifica (opcional) com o carregador real do Windows, colocando uma DLL sonda benigna e verificando qual cópia vence a busca.
- Confirma (opcional) implantando uma DLL canário inofensiva, acionando o serviço/tarefa/objeto COM e registrando a identidade com a qual ele realmente foi executado.
- Pontua e reporta cada achado por confiança e impacto, e correlaciona achados em cadeias de ataque (por exemplo, usuário padrão → SYSTEM).
Todo julgamento é feito do ponto de vista do atacante — um usuário padrão sem privilégios — independentemente de o scanner em si ser executado elevado. Executar como Administrador dá à ferramenta mais visibilidade (ETW, canário, gatilhos de serviço); isso nunca faz diretórios protegidos parecerem graváveis nem infla o privilégio obtido.
Início rápido
Baixe ou compile DLLHijackHunter.exe (autocontido; não é necessário instalar o .NET), depois, a partir de um prompt 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
Antivírus: as DLLs canário e de sondagem não são assinadas e se comportam como payloads de sequestro, então o Microsoft Defender pode colocá-las em quarentena. A ferramenta detecta isso e reporta esses resultados como inconclusivos em vez de "não sequestrável". Em uma máquina de teste, exclua os diretórios de destino e
%ProgramData%\DLLHijackHunterpara obter resultados definitivos.
Como 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 | Requer admin | Modifica o sistema |
|---|---|---|
| Descoberta estática + filtros | Não (admin vê mais) | Não |
| Descoberta em tempo de execução via ETW | Sim | Inicia serviços de inicialização automática (até 100) e executa tarefas agendadas (até 30) para provocar carregamentos de DLL |
Sonda de carregamento (--verify-load) | Não | Escreve brevemente uma DLL de sonda benigna em cada posição candidata, depois remove-a e restaura qualquer original |
| Confirmação por canário | Sim | Escreve uma DLL canário, para/inicia serviços, executa tarefas, ativa objetos COM e depois limpa |
O que deteta
Tipos de hijack
| Tipo | O que significa | Notas |
|---|---|---|
| Phantom | A DLL não existe em nenhum ponto do caminho de pesquisa | Coloque-a em qualquer local onde o binário pesquise |
| Ordem de pesquisa | Um diretório gravável é pesquisado antes da cópia legítima | Inclui sobrescrever uma DLL num diretório gravável |
| ENV PATH | Um diretório gravável em PATH é pesquisado para uma DLL em falta | Os serviços são avaliados apenas contra o PATH da máquina — as entradas do PATH do próprio utilizador nunca são pesquisadas por um serviço |
| Redirecionamento .local | Redirecionamento <app>.exe.local\<dll> | Apenas reportado para executáveis sem manifesto (ou quando IFEO DevOverrideEnable=1); caso contrário, o loader ignora .local, e nunca redireciona KnownDLLs |
| Side-load (UAC) | Copiar um EXE com auto-elevação para junto de uma DLL plantada | Apenas para EXEs com <autoElevate>true</autoElevate> no seu manifesto. A auto-elevação requer uma localização fidedigna, pelo que a cópia tem de passar essa verificação (por exemplo, uma pasta simulada C:\Windows \System32\) |
| AppInit DLLs | AppInit_DLLs aponta para uma DLL gravável | Carregada em todos os processos que carregam user32.dll |
| AppCert DLLs | AppCertDLLs aponta para uma DLL gravável | Carregada em todos os chamadores de CreateProcess/WinExec |
Os binários IFEO Debugger e SilentProcessExit\MonitorProcess são enumerados e analisados como qualquer outro ponto de lançamento. Atualmente não são produzidos hijacks baseados em CWD.
Como o alvo é executado
A identidade correta determina tanto o veredicto de escalada de privilégios como a pontuação de impacto: