
Anvil es una herramienta de evaluación de superficies de ataque que prioriza el tiempo de ejecución para aplicaciones de cliente grueso de Windows, creada para probadores de penetración e investigadores de seguridad que realizan evaluaciones de seguridad de aplicaciones específicas. Cubre múltiples clases de ataque en una única ejecución focalizada.
Escalada de privilegios y evaluación de superficie de ataque en tiempo de ejecución para clientes pesados de Windows.
Anvil es una herramienta de escalada de privilegios y evaluación de superficie de ataque basada en tiempo de ejecución para aplicaciones cliente pesadas de Windows. En lugar de escanear el sistema de archivos a ciegas, combina la captura de Procmon con Windows AccessCheck para informar solo aquellas rutas que son observadas en tiempo de ejecución y confirmadas como escribibles por usuarios estándar, eliminando el ruido de falsos positivos que afecta a las herramientas de enumeración genéricas.
La mayoría de las herramientas de evaluación de clientes pesados cubren una o dos clases de ataque. Anvil está construido en torno a la idea de que la observación en tiempo de ejecución, la explotabilidad verificada por ACL y una amplia superficie de ataque deberían coexistir en una misma ejecución dirigida, con un pipeline de compuertas que mantenga la salida procesable.
Cada candidato pasa por cuatro compuertas secuenciales antes de ser reportado.
Compuertas Duras
AccessCheck de WindowsCompuertas de Lógica de Módulo
Supersede, OverwriteIf, etc.) + guarda de escritura entre usuarios.sys excluidasResolución del Objetivo
La herramienta resuelve el objetivo a una ruta de ejecutable (desde --exe, --service o --pid). Si es un servicio, se recupera ServiceInfo con el PID y estado actuales.
Captura con Procmon
El nivel de integridad del proceso se lee inmediatamente después del lanzamiento (mientras el proceso está vivo) y se almacena en el contexto.
Análisis Filtrado por Módulo
Cada módulo solicita una exportación CSV filtrada de Procmon usando su propio filtro .pmc (almacenado en filters/). El CSV se analiza y se aplican varias compuertas:
Correlación Estática
El módulo com realiza una pasada estática adicional: escanea el binario objetivo en busca de CLSID incrustados y verifica cada uno contra HKLM y HKCU para descubrir oportunidades de secuestro no ejercidas durante la ventana de captura. Estas se marcan con una etiqueta .
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:2px
Todos los módulos basados en Procmon requieren un archivo de filtro .pmc correspondiente en el directorio filters/ (ver Filtros).
Anvil instala automáticamente sus dos dependencias en la primera ejecución. También puedes instalarlas manualmente:
pip install rich pefile
pip install rich>=13.0 pefile>=2023.2.7
Anvil utiliza tres binarios de Sysinternals.
En cada ejecución, Anvil resuelve cada herramienta usando la siguiente prioridad:
--procmon, --handle o --accesschk (ver más abajo)HKCU\Software\Anvil (escrita en la primera resolución exitosa)wherelive.sysinternals.com y almacenada en %LOCALAPPDATA%\Anvil\sysinternals\Una vez que una herramienta se resuelve por cualquier vía, su ruta se escribe en la caché de registro. Las ejecuciones posteriores omiten los pasos 1–3 por completo y van directamente a la ruta en caché.
Si una herramienta no se puede descargar (sin internet, cortafuegos o proxy), Anvil imprime un error estructurado y sale inmediatamente. Se muestra un mensaje de error listando las herramientas faltantes y la bandera a utilizar.
Proporciona la ruta a cualquier binario mediante su bandera. Anvil lo copiará en %LOCALAPPDATA%\Anvil\sysinternals\ y escribirá la ruta en la caché de registro — la bandera nunca necesitará usarse de nuevo después de la primera ejecución.
python anvil.py --exe "C:\App\target.exe" --procmon "D:\Tools\Procmon64.exe" --handle "D:\Tools\handle.exe" --accesschk "D:\Tools\accesschk.exe"
# Clonar el repositorio
git clone https://github.com/shellkraft/Anvil.git
cd Anvil
# Ejecutar — las dependencias se instalan automáticamente en el primer análisis
python.exe anvil.py
Consejo: Inicie siempre su terminal con Ejecutar como Administrador antes de ejecutar Anvil.
Requiere 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
El binario de salida estará en dist\Anvil.exe. No se requiere instalación de Python en la máquina objetivo.
Nota: Windows SmartScreen puede bloquear el ejecutable compilado en la primera ejecución porque no está firmado.
Un binario precompilado Anvil.exe está disponible en la página de Lanzamientos — si confiar en binarios aleatorios de internet está dentro de su modelo de amenazas.
| Versión | SHA-256 | VirusTotal |
|---|---|---|
| V1.0.0 | 0ecf5a62... | 4/72 |
SHA-256 se puede verificar con
certutil -hashfile Anvil.exe SHA256(Windows) osha256sum Anvil.exe(Linux).
python anvil.py [--exe RUTA | --service NOMBRE | --pid PID] [opciones]
| Bandera | Descripción |
|---|---|
--exe RUTA | Ejecutable objetivo. Se lanza con integridad Media para la captura de Procmon. |
--service NOMBRE | Nombre del servicio de Windows. El ejecutable se resuelve desde el registro; el servicio se reinicia para capturar el inicio. |
--pid PID | Adjuntarse a un proceso ya en ejecución. Procmon captura la actividad en curso. |
| Bandera | Por Defecto | Descripción |
|---|---|---|
--modules LISTA | all | Lista separada por comas de los módulos a ejecutar. |
Nombres de módulos: dll, com, registry, binary, configs, installdir, memory, symlink, unquoted, pesec, pipes
| Bandera | Por Defecto | Descripción |
|---|---|---|
--procmon-runtime SEG | 30 | Ventana de captura de Procmon en segundos. Aumentar para aplicaciones de arranque lento. |
Análisis básico de una aplicación de escritorio:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --report report.html
Ventana de captura más larga para una aplicación de arranque lento:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --procmon-runtime 60 --scan-install-dir
Apuntar a un servicio de Windows:
python anvil.py --service MyAppSvc --modules dll,binary,unquoted,registry
Adjuntarse a un proceso ya en ejecución:
python anvil.py --pid 4872 --report report.html --verbose
Ejecutar solo módulos específicos:
python anvil.py --exe "C:\App\app.exe" --modules dll,symlink,unquoted
Escanear memoria del proceso en busca de cadenas personalizadas adicionales:
python anvil.py --exe "C:\App\app.exe" --modules memory --memory-strings "InternalSecret,DevPassword"
Máquina aislada — proporcionar Sysinternals manualmente (copiado una vez):
python anvil.py --exe "C:\App\app.exe" --procmon "E:\Sysint\Procmon64.exe" --handle "E:\Sysint\handle.exe" --accesschk "E:\Sysint\accesschk.exe"
Código de colores por severidad con bloques opcionales de detalle --verbose. Requiere el paquete rich (auto-instalado).
--report findings.json)Matriz legible por máquina de objetos de hallazgo:
[
{
"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]Reporte autocontenido de un solo archivo con:
Todos los archivos de filtro .pmc están incluidos en el directorio filters/ del repositorio — no se requiere configuración. Los módulos basados en Procmon los recogerán automáticamente.
Si un archivo de filtro se pierde o corrompe, recréelo en Procmon usando las reglas anteriores: Filter → Filter… para configurar las condiciones, luego File → Export Configuration… y guarde en filters/<nombre>.pmc.
Anvil recogerá automáticamente el archivo .pmc en la próxima ejecución para ese módulo.
Anvil está diseñado para investigación de seguridad, caza de bugs y pruebas de penetración autorizadas. Úselo solo en sistemas que posea o para los que tenga permiso explícito por escrito para evaluar.
Notas operativas
[Correlación Estática]Reporte
Los hallazgos se imprimen en la terminal (con código de colores) y opcionalmente se escriben en JSON o un reporte HTML independiente.
| Característica | AnviL | Spartacus | Robber | winPEAS | Procmon |
|---|
| Descubrimiento automatizado | ✅ | ✅ | ✅ | ✅ | ❌ |
| Descubrimiento verificado en tiempo de ejecución | ✅ | ❌ | ❌ | ❌ | ✅ |
| Detección de DLL fantasma | ✅ | ✅ | ❌ | ❌ | ◐ |
| Análisis consciente del orden de búsqueda | ✅ | ❌ | ❌ | ❌ | ❌ |
| Validación de escritura basada en ACL | ✅ (AccessChk) | ◐ | ◐ | Básico | ❌ |
| Filtrado de señal por módulo | ✅ (filtros .pmc) | ❌ | ❌ | ❌ | ❌ |
| Eliminación de falsos positivos (pipeline con compuertas) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Reinicio de servicio y recaptura de PID | ✅ | ❌ | ❌ | ❌ | ❌ |
| Simulación de usuario con integridad Media | ✅ | ❌ | ❌ | ❌ | ❌ |
| Secuestro de DLL (consciente de cliente pesado) | ✅ | ❌ | ❌ | ◐ | ❌ |
| Correlación de secuestro COM | ✅ | ❌ | ❌ | ❌ | ❌ |
| Análisis de ACL de tuberías con nombre / suplantación | ✅ | ❌ | ❌ | ❌ | ❌ |
| Detección de abuso de enlaces simbólicos / uniones | ✅ | ❌ | ◐ | ◐ | ❌ |
| Secretos en memoria (escaneo de proceso vivo) | ✅ | ❌ | ❌ | ◐ | ❌ |
| Análisis de seguridad / mitigaciones de PE | ✅ | ❌ | ❌ | ◐ | ❌ |
| Evaluación de escalada de privilegios (no explotación) | ✅ | ✅ | ✅ | ❌ | ❌ |
| Explotación automatizada | ❌ | ✅ | ✅ | ❌ | ❌ |
| Puntuación de confianza / severidad | ✅ (P1–P5) | ❌ | ❌ | ❌ | ❌ |
| Análisis específico del objetivo (exe / svc / pid) | ✅ | ❌ | ❌ | ❌ | ✅ |
| Reportes estructurados (JSON / HTML) | ✅ | ❌ | ❌ | TXT | ❌ |
| Distribución binaria autocontenida | ✅ | ✅ | ✅ | ✅ | ✅ |
| Módulo | Bandera | Qué Verifica |
|---|
| Secuestro de DLL | dll | Eventos CreateFile para .dll — DLL fantasma y DLLs cargadas en directorios escribibles |
| Secuestro COM | com | Claves de registro de servidores COM escribibles por usuarios estándar; escaneo binario de ProgIDs |
| Secuestro Binario | binary | Eventos CreateFile para .exe — plantación de EXE fantasma y directorios EXE escribibles |
| Configuraciones Inseguras | configs | Acceso a archivos de configuración (.ini, .xml, .json, .yaml, etc.) desde directorios escribibles |
| Directorio de Instalación | installdir | ACL raíz, EXEs con manifiesto de elevación y subdirectorios escribibles |
| Cadenas en Memoria | memory | Escaneo de memoria de proceso vivo en busca de credenciales, tokens, claves API, JWT, cadenas de conexión |
| Ataques de Enlace Simbólico | symlink | Vectores de unión y enlace simbólico en rutas temporales / appdata escribibles por el usuario |
| Ruta de Servicio Sin Comillas | unquoted | Servicios con ImagePaths sin comillas donde los directorios fantasma intermedios son escribibles |
| Escalada de Privilegios por Registro | registry | Claves de registro escribibles por usuarios estándar que controlan el comportamiento del servicio/aplicación |
| Indicadores de Seguridad PE | pesec | Falta de ASLR, DEP, CFG, SafeSEH y Authenticode en binarios objetivo |
| ACL de Tubería con Nombre | pipes | Tuberías con nombre con DACL permisivos o ACEs capaces de suplantación |
| Binario | Usado por | Descarga |
|---|
Procmon64.exe | Todos los módulos basados en Procmon | ProcessMonitor.zip |
handle.exe | Módulo de ACL de tubería con nombre | Handle.zip |
accesschk.exe | Módulo de ACL de tubería con nombre — enumeración DACL de tuberías | AccessChk.zip |
| Bandera | Descripción |
|---|
--procmon RUTA | Ruta a Procmon64.exe. Copiado a %LOCALAPPDATA%\Anvil\sysinternals\ |
--handle RUTA | Ruta a handle.exe. Copiado a %LOCALAPPDATA%\Anvil\sysinternals\ |
--accesschk RUTA | Ruta a accesschk.exe. Copiado a %LOCALAPPDATA%\Anvil\sysinternals\ |
| Bandera | Por Defecto | Descripción |
|---|
--report ARCHIVO | — | Generar un reporte — la extensión determina el formato: .json para JSON, .html (o cualquier otra) para un reporte HTML autocontenido. |
--verbose | off | Imprimir bloques de detalle completos de los hallazgos en la terminal. |
--no-color | off | Deshabilitar la salida de color ANSI. |
--skip-authenticode | off | Omitir las comprobaciones de firma Authenticode (más rápido para directorios de instalación grandes). |
--scan-install-dir | off | Incluir todas las DLLs en el directorio de instalación en las comprobaciones de seguridad PE. |
--memory-strings STR,... | — | Cadenas adicionales separadas por comas para buscar en la memoria del proceso. |
| Nivel | Etiqueta | CVSS Típico | Significado |
|---|
| P1 | Crítico | 8.0 – 8.8 | Escalada de privilegios activada automáticamente (sin interacción del usuario) |
| P2 | Alto | 7.0 – 7.9 | Explotable con interacción del usuario o activador más débil |
| P3 | Mala Configuración | 4.0 – 6.9 | Rutas sin comillas, mitigaciones faltantes — no explotable directamente |
| P4 | Bajo Impacto | 0.1 – 3.9 | Vectores informativos con impacto limitado en el mundo real |
| P5 | Informativo | N/A | Contexto y observaciones, no vulnerabilidades |
| Archivo | Módulo | Reglas Clave del Filtro |
|---|
filters/dll.pmc | Secuestro de DLL | Operation is CreateFile, Path ends with .dll |
filters/binary.pmc | Secuestro Binario | Operation is CreateFile, Path ends with .exe |
filters/config.pmc | Configuraciones Inseguras | Operation is CreateFile (filtro de extensión en código) |
filters/com.pmc | Secuestro COM | Operation is RegQueryKey, Path contains HKLM |
filters/symlink.pmc | Ataques de Enlace Simbólico | Operation is CreateFile |