
Anvil est un outil d'évaluation de la surface d'attaque axé sur le runtime (runtime-first) pour les applications clientes lourdes Windows, conçu pour les testeurs d'intrusion et les chercheurs en sécurité qui réalisent des évaluations ciblées de la sécurité des applications. Il couvre plusieurs classes d'attaque en une seule exécution ciblée.
Élévation de privilèges et évaluation de la surface d'attaque axées sur l'exécution pour les clients lourds Windows.
Anvil est un outil d'élévation de privilèges et d'évaluation de la surface d'attaque axé sur l'exécution pour les applications client lourdes Windows. Plutôt que d'analyser le système de fichiers à l'aveugle, il associe la capture Procmon à Windows AccessCheck pour signaler uniquement les chemins qui sont à la fois observés à l'exécution et confirmés inscriptibles par les utilisateurs standard, éliminant ainsi le bruit des faux positifs qui affecte les outils d'énumération génériques.
La plupart des outils d'évaluation des clients lourds couvrent une ou deux classes d'attaque. Anvil est conçu autour de l'idée que l'observation à l'exécution, l'exploitabilité vérifiée par ACL et une large surface d'attaque doivent toutes coexister dans une même exécution ciblée — avec un pipeline à plusieurs étages qui maintient les résultats exploitables.
Chaque candidat franchit quatre étapes séquentielles avant d'être signalé.
Étapes strictes
AccessCheckÉtapes logiques par module
Supersede, OverwriteIf, etc.) + vérification d'inscriptibilité inter-utilisateurs.sys du noyau exclusRésolution de la cible
L'outil résout la cible en un chemin d'exécutable (à partir de --exe, --service ou --pid). S'il s'agit d'un service, ServiceInfo est récupéré avec le PID et l'état actuels.
Capture Procmon
Le niveau d'intégrité du processus est lu immédiatement après le lancement (pendant que le processus est actif) et stocké dans le contexte.
Analyse filtrée par module
Chaque module demande une exportation CSV filtrée de Procmon en utilisant son propre filtre .pmc (stocké dans filters/). Le CSV est analysé et une série d'étapes sont appliquées :
Corrélation statique
Le module com effectue une passe statique supplémentaire — analyse du binaire cible à la recherche de CLSID intégrés et vérification de chacun contre HKLM et HKCU — pour détecter les opportunités de détournement non exercées pendant la fenêtre de capture. Celles-ci sont marquées d'une balise [Corrélation statique].
Rapport
Les résultats sont affichés dans le terminal (avec code couleur) et éventuellement écrits dans un rapport JSON ou HTML autonome.
flowchart TB
%% Phase 1
subgraph Phase1["Phase 1 : Cible et découverte à l'exécution"]
TR["Résolveur de cible<br/>--exe / --service / --pid"] -->
IL["Étape d'intégrité<br/>Lancement Medium-IL / Redémarrage de service"] -->
PM["Moteur Procmon<br/>Événements FS / Reg / Pipe à l'exécution"]
end
%% Phase 2
subgraph Phase2["Phase 2 : Réduction du signal"]
direction LR
PF["Filtres PMC par module<br/>Traces à signal élevé uniquement"] -->
CSV["Exportation CSV filtrée"]
end
%% Phase 3
subgraph Phase3["Phase 3 : Étapes d'exploitabilité"]
HG["Étapes strictes<br/>Cible High-Intégrité<br/>Chemin non protégé"] -->
ACL["Validation AccessChk<br/>Inscriptible par utilisateur standard"] -->
LG["Étapes logiques<br/>Règles spécifiques au module"]
end
%% Phase 4
subgraph Phase4["Phase 4 : Corrélation"]
RT["Résultats à l'exécution"]
ST["Corrélation statique<br/>COM : analyse binaire CLSID / registre"]
end
%% Phase 5
subgraph Phase5["Phase 5 : Rapport"]
SV["Moteur de sévérité<br/>P1–P5"] --> OUT["Sortie console"]
SV --> JSON["Rapport JSON"]
SV --> HTML["Rapport HTML"]
end
%% Flux inter-phases
PM --> PF
CSV --> HG
LG --> RT
ST -.-> RT
RT --> SV
%% Styles
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