
Anvil é uma ferramenta de avaliação de superfície de ataque com foco em runtime para aplicações thick client do Windows, desenvolvida para testadores de penetração e pesquisadores de segurança que conduzem avaliações direcionadas de segurança de aplicações. Ela cobre múltiplas classes de ataque em uma única execução direcionada.
Avaliação de escalada de privilégios e superfície de ataque baseada em tempo de execução para thick clients Windows.
Anvil é uma ferramenta de avaliação de escalada de privilégios e superfície de ataque baseada em tempo de execução para aplicações thick client Windows. Em vez de escanear o sistema de arquivos às cegas, ela combina captura Procmon com Windows AccessCheck para reportar apenas caminhos que são observados em tempo de execução e confirmados como graváveis por usuários padrão, eliminando o ruído de falsos positivos que aflige ferramentas genéricas de enumeração.
A maioria das ferramentas de avaliação de thick clients cobre uma ou duas classes de ataque. Anvil foi construída em torno da ideia de que observação em tempo de execução, explorabilidade verificada por ACL e uma ampla superfície de ataque devem coexistir na mesma execução direcionada — com um pipeline de portões que mantém a saída acionável.
Cada candidato passa por quatro portões sequenciais antes de ser reportado.
Portões Rígidos
AccessCheck do WindowsPortões Lógicos de Módulo
Supersede, OverwriteIf, etc.) + proteção de gravabilidade entre usuários.sys excluídosResolução do Alvo
A ferramenta resolve o alvo para um caminho executável (a partir de --exe, --service ou --pid). Se for um serviço, ServiceInfo é recuperado com PID e estado atuais.
Captura Procmon
O nível de integridade do processo é lido imediatamente após a inicialização (enquanto o processo está ativo) e armazenado no contexto.
Análise Filtrada por Módulo
Cada módulo solicita uma exportação CSV filtrada do Procmon usando seu próprio filtro .pmc (armazenado em filters/). O CSV é analisado e uma série de portões são aplicados:
Correlação Estática
O módulo com realiza uma passagem estática adicional — escaneando o binário alvo em busca de CLSIDs embutidos e verificando cada um contra HKLM e HKCU — para revelar oportunidades de sequestro não exercitadas durante a janela de captura. Estes são sinalizados com uma tag .
flowchart TB
%% Phase 1
subgraph Phase1["Phase 1: Target & Runtime Discovery"]
TR["Target Resolver<br/>--exe / --service / --pid"] -->
IL["Integrity Gate<br/>Medium-IL launch / Service restart"] -->
PM["Procmon Engine<br/>Runtime FS / Reg / Pipe events"]
end
%% Phase 2
subgraph Phase2["Phase 2: Signal Reduction"]
direction LR
PF["Per-Module PMC Filters<br/>High-signal traces only"] -->
CSV["Filtered CSV Export"]
end
%% Phase 3
subgraph Phase3["Phase 3: Exploitability Gates"]
HG["Hard Gates<br/>High-Integrity target<br/>Not protected path"] -->
ACL["AccessChk Validation<br/>Writable by standard user"] -->
LG["Logic Gates<br/>Module-specific rules"]
end
%% Phase 4
subgraph Phase4["Phase 4: Correlation"]
RT["Runtime Findings"]
ST["Static Correlation<br/>COM: CLSID binary scan / registry"]
end
%% Phase 5
subgraph Phase5["Phase 5: Reporting"]
SV["Severity Engine<br/>P1–P5"] --> OUT["Console Output"]
SV --> JSON["JSON Report"]
SV --> HTML["HTML Report"]
end
%% Cross-phase flow
PM --> PF
CSV --> HG
LG --> RT
ST -.-> RT
RT --> SV
%% Styling
classDef p1 fill:#0f2a44,stroke:#4cc9f0,color:#e6f1ff
classDef p2 fill:#2b193d,stroke:#f72585,color:#fde8f3
classDef p3 fill:#1f2d1c,stroke:#7ae582,color:#eaf7ea
classDef p4 fill:#3a1f1f,stroke:#ffb703,color:#fff3d6
classDef p5 fill:#0b2e2a,stroke:#00f5d4,color:#e6fffb
class Phase1 p1
class Phase2 p2
class Phase3 p3
class Phase4 p4
class Phase5 p5
linkStyle default stroke:#9aa4b2,stroke-width:2pxTodos os módulos baseados em Procmon exigem um arquivo de filtro .pmc correspondente no diretório filters/ (veja Filtros).
Anvil instala automaticamente suas duas dependências na primeira execução. Você também pode instalá-las manualmente:
pip install rich pefile
pip install rich>=13.0 pefile>=2023.2.7
Anvil utiliza três binários Sysinternals.
Em cada execução, Anvil resolve cada ferramenta usando a seguinte prioridade:
--procmon, --handle ou --accesschk (veja abaixo)HKCU\Software\Anvil (gravado na primeira resolução bem-sucedida)wherelive.sysinternals.com e armazenado em %LOCALAPPDATA%\Anvil\sysinternals\Uma vez que uma ferramenta é resolvida por qualquer rota, seu caminho é gravado no cache do registro. Execuções subsequentes ignoram completamente as etapas 1–3 e vão direto ao caminho em cache.
Se uma ferramenta não puder ser baixada (sem internet, firewall ou proxy), Anvil imprime um erro estruturado e sai imediatamente. Uma mensagem de erro é exibida listando a(s) ferramenta(s) ausente(s) e a flag a ser usada.
Forneça o caminho para qualquer binário via sua flag. Anvil irá copiá-lo para %LOCALAPPDATA%\Anvil\sysinternals\ e gravar o caminho no cache do registro — a flag nunca mais precisará ser usada após a primeira execução.
python anvil.py --exe "C:\App\target.exe" --procmon "D:\Tools\Procmon64.exe" --handle "D:\Tools\handle.exe" --accesschk "D:\Tools\accesschk.exe"
# Clone o repositório
git clone https://github.com/shellkraft/Anvil.git
cd Anvil
# Execute — as dependências são instaladas automaticamente na primeira varredura
python.exe anvil.py
Dica: Sempre inicie seu terminal com Executar como Administrador antes de executar o Anvil.
Requer PyInstaller (pip install pyinstaller):
python -m PyInstaller --onefile --console --add-data "filters;filters" --add-data "modules/logo.png;." --icon .\modules\logo.ico --name Anvil anvil.py
O binário de saída estará em dist\Anvil.exe. Nenhuma instalação do Python é necessária na máquina alvo.
Nota: O Windows SmartScreen pode bloquear o executável compilado na primeira execução, pois ele não está assinado.
Um Anvil.exe pré-compilado está disponível na página de Releases — se confiar em binários aleatórios da internet está no seu modelo de ameaça.
| Versão | SHA-256 | VirusTotal |
|---|---|---|
| V1.0.0 | 0ecf5a62... | 4/72 |
O SHA-256 pode ser verificado com
certutil -hashfile Anvil.exe SHA256(Windows) ousha256sum Anvil.exe(Linux).
python anvil.py [--exe CAMINHO | --service NOME | --pid PID] [opções]
| Flag | Descrição |
|---|---|
--exe CAMINHO | Executável alvo. Iniciado com IL Medium para captura Procmon. |
--service NOME | Nome do serviço Windows. Executável resolvido do registro; serviço reiniciado para capturar a inicialização. |
--pid PID | Anexar a um processo já em execução. Procmon captura atividade em andamento. |
| Flag | Padrão | Descrição |
|---|---|---|
--modules LISTA | all | Lista separada por vírgulas de módulos a executar. |
Nomes dos módulos: dll, com, registry, binary, configs, installdir, memory, symlink, unquoted, pesec, pipes
| Flag | Padrão | Descrição |
|---|---|---|
--procmon-runtime SEG | 30 | Janela de captura Procmon em segundos. Aumente para aplicativos de inicialização lenta. |
Varredura básica de uma aplicação desktop:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --report report.html
Janela de captura mais longa para um aplicativo de inicialização lenta:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --procmon-runtime 60 --scan-install-dir
Alvo como serviço Windows:
python anvil.py --service MyAppSvc --modules dll,binary,unquoted,registry
Anexar a um processo já em execução:
python anvil.py --pid 4872 --report report.html --verbose
Executar apenas módulos específicos:
python anvil.py --exe "C:\App\app.exe" --modules dll,symlink,unquoted
Varrer memória do processo por strings personalizadas adicionais:
python anvil.py --exe "C:\App\app.exe" --modules memory --memory-strings "InternalSecret,DevPassword"
Máquina com ar desconectado — forneça Sysinternals manualmente (copiado uma vez):
python anvil.py --exe "C:\App\app.exe" --procmon "E:\Sysint\Procmon64.exe" --handle "E:\Sysint\handle.exe" --accesschk "E:\Sysint\accesschk.exe"
Cores por severidade com blocos de detalhes opcionais --verbose. Requer o pacote rich (instalado automaticamente).
--report findings.json)Array legível por máquina de objetos de achado:
[
{
"severity": "P1",
"module": "DLL Hijacking",
"message": "[System→User] Phantom DLL: version.dll",
"detail": "DLL name : version.dll\nAttempted : C:\\ProgramData\\MyApp\\version.dll\n..."
}
]
--report report.html) [Recomendado]Relatório autocontido em um único arquivo com:
Todos os arquivos de filtro .pmc estão incluídos no diretório filters/ do repositório — nenhuma configuração necessária. Módulos baseados em Procmon os detectarão automaticamente.
Se um arquivo de filtro for perdido ou corrompido, recrie-o no Procmon usando as regras acima: Filter → Filter… para configurar as condições, depois File → Export Configuration… e salve em filters/<nome>.pmc.
Anvil detectará automaticamente o arquivo .pmc na próxima execução para aquele módulo.
Anvil é projetada para pesquisa de segurança, caça a bugs (bug bounty) e testes de penetração autorizados. Use-a apenas em sistemas que você possui ou para os quais possui permissão explícita por escrito para avaliar.
Notas operacionais
[Correlação Estática]Relatório
Os achados são exibidos no terminal (com código de cores) e opcionalmente escritos em JSON ou em um relatório HTML independente.
| Funcionalidade | AnviL | Spartacus | Robber | winPEAS | Procmon |
|---|
| Descoberta automatizada | ✅ | ✅ | ✅ | ✅ | ❌ |
| Descoberta verificada em tempo de execução | ✅ | ❌ | ❌ | ❌ | ✅ |
| Detecção de DLL fantasma | ✅ | ✅ | ❌ | ❌ | ◐ |
| Análise ciente da ordem de busca | ✅ | ❌ | ❌ | ❌ | ❌ |
| Validação de gravabilidade baseada em ACL | ✅ (AccessChk) | ◐ | ◐ | Básico | ❌ |
| Filtragem de sinal por módulo | ✅ (filtros .pmc) | ❌ | ❌ | ❌ | ❌ |
| Eliminação de falsos positivos (pipeline com portões) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Reinicialização de serviço e recaptura de PID | ✅ | ❌ | ❌ | ❌ | ❌ |
| Simulação de usuário Medium-IL | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sequestro de DLL (ciente de thick client) | ✅ | ❌ | ❌ | ◐ | ❌ |
| Correlação de sequestro COM | ✅ | ❌ | ❌ | ❌ | ❌ |
| Análise de ACL de pipe nomeado / impersonação | ✅ | ❌ | ❌ | ❌ | ❌ |
| Detecção de abuso de symlink / junção | ✅ | ❌ | ◐ | ◐ | ❌ |
| Segredos em memória (varredura de processo ativo) | ✅ | ❌ | ❌ | ◐ | ❌ |
| Análise de segurança/mitigação PE | ✅ | ❌ | ❌ | ◐ | ❌ |
| Avaliação de escalada de privilégio (não exploit) | ✅ | ✅ | ✅ | ❌ | ❌ |
| Exploração automatizada | ❌ | ✅ | ✅ | ❌ | ❌ |
| Pontuação de confiança / severidade | ✅ (P1–P5) | ❌ | ❌ | ❌ | ❌ |
| Análise específica para alvo (exe / svc / pid) | ✅ | ❌ | ❌ | ❌ | ✅ |
| Relatórios estruturados (JSON / HTML) | ✅ | ❌ | ❌ | TXT | ❌ |
| Distribuição binária autocontida | ✅ | ✅ | ✅ | ✅ | ✅ |
| Módulo | Flag | O Que Verifica |
|---|
| Sequestro de DLL | dll | Eventos CreateFile para .dll — DLLs fantasmas e DLLs carregadas em diretórios graváveis |
| Sequestro COM | com | Chaves de registro do servidor COM graváveis por usuários padrão; varredura binária por ProgIDs |
| Sequestro Binário | binary | Eventos CreateFile para .exe — plantio de EXE fantasma e diretórios de EXE graváveis |
| Configurações Inseguras | configs | Acesso a arquivos de configuração (.ini, .xml, .json, .yaml, etc.) a partir de diretórios graváveis |
| Diretório de Instalação | installdir | ACL raiz, EXEs com manifesto de elevação e subdiretórios graváveis |
| Strings em Memória | memory | Varredura de memória de processo ativo por credenciais, tokens, chaves de API, JWTs, strings de conexão |
| Ataques Symlink | symlink | Vetores de junção e symlink em caminhos temporários / appdata graváveis por usuário |
| Caminho de Serviço Sem Aspas | unquoted | Serviços com ImagePaths sem aspas onde diretórios fantasmas intermediários são graváveis |
| Escalada de Privilégio via Registro | registry | Chaves de registro graváveis por usuários padrão que controlam comportamento de serviço/aplicação |
| Flags de Segurança PE | pesec | Ausência de ASLR, DEP, CFG, SafeSEH e Authenticode em binários alvo |
| ACL de Pipe Nomeado | pipes | Pipes nomeados com DACLs permissivas ou ACEs capazes de impersonação |
| Binário | Usado Por | Download |
|---|
Procmon64.exe | Todos os módulos baseados em Procmon | ProcessMonitor.zip |
handle.exe | Módulo de ACL de Pipe Nomeado | Handle.zip |
accesschk.exe | Módulo de ACL de Pipe Nomeado — enumeração de DACL de pipe | AccessChk.zip |
| Flag | Descrição |
|---|
--procmon CAMINHO | Caminho para Procmon64.exe. Copiado para %LOCALAPPDATA%\Anvil\sysinternals\ |
--handle CAMINHO | Caminho para handle.exe. Copiado para %LOCALAPPDATA%\Anvil\sysinternals\ |
--accesschk CAMINHO | Caminho para accesschk.exe. Copiado para %LOCALAPPDATA%\Anvil\sysinternals\ |
| Flag | Padrão | Descrição |
|---|
--report ARQUIVO | — | Gerar um relatório — a extensão determina o formato: .json para JSON, .html (ou qualquer outro) para um relatório HTML autocontido. |
--verbose | desligado | Imprimir blocos de detalhes completos de achados no terminal. |
--no-color | desligado | Desabilitar saída de cores ANSI. |
--skip-authenticode | desligado | Pular verificações de assinatura Authenticode (mais rápido para diretórios de instalação grandes). |
--scan-install-dir | desligado | Incluir todas as DLLs no diretório de instalação nas verificações de segurança PE. |
--memory-strings STR,... | — | Strings adicionais separadas por vírgulas para pesquisar na memória do processo. |
| Nível | Rótulo | CVSS Típico | Significado |
|---|
| P1 | Crítico | 8.0 – 8.8 | Escalada de privilégio acionada automaticamente (sem interação do usuário) |
| P2 | Alto | 7.0 – 7.9 | Explorável com interação do usuário ou gatilho mais fraco |
| P3 | Configuração Incorreta | 4.0 – 6.9 | Caminhos sem aspas, mitigações ausentes — não diretamente explorável |
| P4 | Baixo Impacto | 0.1 – 3.9 | Vetores informativos com impacto limitado no mundo real |
| P5 | Informativo | N/A | Contexto e observações, não vulnerabilidades |
| Arquivo | Módulo | Regras de Filtro Principais |
|---|
filters/dll.pmc | Sequestro de DLL | Operation is CreateFile, Path ends with .dll |
filters/binary.pmc | Sequestro Binário | Operation is CreateFile, Path ends with .exe |
filters/config.pmc | Configurações Inseguras | Operation is CreateFile (filtro de extensão no código) |
filters/com.pmc | Sequestro COM | Operation is RegQueryKey, Path contains HKLM |
filters/symlink.pmc | Ataques Symlink | Operation is CreateFile |