Voltar às atualizações
New releaseSep 18, 2026

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.

Compartilhar

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

O DLLHijackHunter encontra oportunidades de DLL hijacking em um host Windows e trabalha para prová-las, não apenas listá-las. Ele:

  1. 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.
  2. 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.
  3. Verifica (opcional) com o carregador real do Windows, colocando uma DLL sonda benigna e verificando qual cópia vence a busca.
  4. 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.
  5. 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%\DLLHijackHunter para 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
FaseRequer adminModifica o sistema
Descoberta estática + filtrosNão (admin vê mais)Não
Descoberta em tempo de execução via ETWSimInicia 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ãoEscreve brevemente uma DLL de sonda benigna em cada posição candidata, depois remove-a e restaura qualquer original
Confirmação por canárioSimEscreve uma DLL canário, para/inicia serviços, executa tarefas, ativa objetos COM e depois limpa

O que deteta

Tipos de hijack

TipoO que significaNotas
PhantomA DLL não existe em nenhum ponto do caminho de pesquisaColoque-a em qualquer local onde o binário pesquise
Ordem de pesquisaUm diretório gravável é pesquisado antes da cópia legítimaInclui sobrescrever uma DLL num diretório gravável
ENV PATHUm diretório gravável em PATH é pesquisado para uma DLL em faltaOs 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 .localRedirecionamento <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 plantadaApenas 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 DLLsAppInit_DLLs aponta para uma DLL gravávelCarregada em todos os processos que carregam user32.dll
AppCert DLLsAppCertDLLs aponta para uma DLL gravávelCarregada 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:

Categorias