面向 Windows 胖客户端的运行时优先权限提升与攻击面评估工具。
Anvil 是一款面向 Windows 胖客户端应用程序的运行时优先权限提升与攻击面评估工具。它并非盲目扫描文件系统,而是将 Procmon 捕获与 Windows AccessCheck 相结合,仅报告运行时实际观察到 并且 经确认可由标准用户写入的路径,从而消除了通用枚举工具中普遍存在的误报噪音。
大多数胖客户端评估工具仅覆盖一两种攻击类别。Anvil 的设计理念是:运行时观察、ACL 验证的可利用性以及广泛的攻击面应整合在同一目标运行中,并采用分级管道确保输出结果具备可操作性。
每个候选路径在报告前需依次通过四道关卡。
硬性关卡
AccessCheck API 验证模块逻辑关卡
Supersede、OverwriteIf 等)+ 跨用户可写入保护.sys 路径目标解析
工具将目标解析为可执行文件路径(通过 --exe、--service 或 --pid)。如果是服务,则获取 ServiceInfo 并记录当前 PID 和状态。
Procmon 捕获
进程完整性等级在启动后立即(进程存活时)读取并存储在上下文中。
按模块过滤分析
每个模块使用自己的 .pmc 过滤器(存储在 filters/ 中)请求 Procmon 导出一个经过滤的 CSV。解析 CSV 后,应用一系列关卡:
静态关联
com 模块执行额外的静态扫描——扫描目标二进制中嵌入的 CLSID,并逐一检查 HKLM 和 HKCU——以发现捕获窗口期间未触发的劫持机会。这些结果带有 [静态关联] 标签。
报告
结果打印到终端(带颜色编码),并可选择输出为 JSON 或独立的 HTML 报告。
flowchart TB
%% Phase 1
subgraph Phase1["阶段 1:目标与运行时发现"]
TR["目标解析器<br/>--exe / --service / --pid"] -->
IL["完整性关卡<br/>Medium-IL 启动 / 服务重启"] -->
PM["Procmon 引擎<br/>运行时 FS / Reg / Pipe 事件"]
end
%% Phase 2
subgraph Phase2["阶段 2:信号缩减"]
direction LR
PF["按模块 PMC 过滤器<br/>仅高信号轨迹"] -->
CSV["过滤后的 CSV 导出"]
end
%% Phase 3
subgraph Phase3["阶段 3:可利用性关卡"]
HG["硬性关卡<br/>高完整性目标<br/>非受保护路径"] -->
ACL["AccessChk 验证<br/>标准用户可写入"] -->
LG["逻辑关卡<br/>模块特定规则"]
end
%% Phase 4
subgraph Phase4["阶段 4:关联"]
RT["运行时发现"]
ST["静态关联<br/>COM:CLSID 二进制扫描 / 注册表"]
end
%% Phase 5
subgraph Phase5["阶段 5:报告"]
SV["严重等级引擎<br/>P1–P5"] --> OUT["控制台输出"]
SV --> JSON["JSON 报告"]
SV --> HTML["HTML 报告"]
end
%% 跨阶段流程
PM --> PF
CSV --> HG
LG --> RT
ST -.-> RT
RT --> SV
%% 样式
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
| 特性 | AnviL | Spartacus | Robber | winPEAS | Procmon |
|---|---|---|---|---|---|
| 自动化发现 | ✅ | ✅ | ✅ | ✅ | ❌ |
| 运行时验证的发现 | ✅ | ❌ | ❌ | ❌ | ✅ |
| 幻影 DLL 检测 | ✅ | ✅ | ❌ | ❌ | ◐ |
| 搜索顺序感知分析 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 基于 ACL 的可写性验证 | ✅ (AccessChk) | ◐ | ◐ | 基本 | ❌ |
| 按模块信号过滤 | ✅ (.pmc filters) | ❌ | ❌ | ❌ | ❌ |
| 误报消除(分级管道) | ✅ | ❌ | ❌ | ❌ | ❌ |
| 服务重启与 PID 重新捕获 | ✅ | ❌ | ❌ | ❌ | ❌ |
| Medium-IL 用户模拟 | ✅ | ❌ | ❌ | ❌ | ❌ |
| DLL 劫持(胖客户端感知) | ✅ | ❌ | ❌ | ◐ | ❌ |
| COM 劫持关联 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 命名管道 ACL / 模拟分析 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 符号链接 / 接合点滥用检测 | ✅ | ❌ | ◐ | ◐ | ❌ |
| 内存机密(实时进程扫描) | ✅ | ❌ | ❌ | ◐ | ❌ |
| PE 安全 / 缓解分析 | ✅ | ❌ | ❌ | ◐ | ❌ |
| 权限提升评估(非利用) | ✅ | ✅ | ✅ | ❌ | ❌ |
| 自动利用 | ❌ | ✅ | ✅ | ❌ | ❌ |
| 置信度 / 严重等级评分 | ✅ (P1–P5) | ❌ | ❌ | ❌ | ❌ |
| 目标特定分析 (exe / svc / pid) | ✅ | ❌ | ❌ | ❌ | ✅ |
| 结构化报告 (JSON / HTML) | ✅ | ❌ | ❌ | TXT | ❌ |
| 自包含二进制分发 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 模块 | 标志 | 检查内容 |
|---|---|---|
| DLL 劫持 | dll | .dll 的 CreateFile 事件——幻影 DLL 以及可写目录中加载的 DLL |
| COM 劫持 | com | 标准用户可写入的 COM 服务器注册表键;二进制扫描 ProgID |
| 二进制劫持 | binary | .exe 的 CreateFile 事件——幻影 EXE 植入以及可写 EXE 目录 |
| 不安全配置 | configs | 来自可写目录的配置文件访问(.ini、.xml、.json、.yaml 等) |
| 安装目录 | installdir | 根 ACL、存在提权清单的 EXE 以及可写子目录 |
| 内存字符串 | memory | 实时进程内存扫描,寻找凭据、令牌、API 密钥、JWT、连接字符串 |
| 符号链接攻击 | symlink | 用户可写的临时 / appdata 路径中的接合点和符号链接向量 |
| 未加引号服务路径 | unquoted | 具有未加引号 ImagePath 的服务,其中中间幻影目录可写入 |
| 注册表提权 | registry | 标准用户可写入、控制服务/应用程序行为的注册表键 |
| PE 安全标志 | pesec | 目标二进制缺少 ASLR、DEP、CFG、SafeSEH 和 Authenticode |
| 命名管道 ACL | pipes | 具有宽松 DACL 或支持模拟的 ACE 的命名管道 |
所有基于 Procmon 的模块需要在 filters/ 目录中有对应的 .pmc 过滤器文件(参见过滤器)。
Anvil 在首次运行时自动安装其两个依赖项。您也可以手动安装:
pip install rich pefile
pip install rich>=13.0 pefile>=2023.2.7
Anvil 使用三个 Sysinternals 二进制文件。
| 二进制文件 | 使用模块 | 下载地址 |
|---|---|---|
Procmon64.exe | 所有基于 Procmon 的模块 | ProcessMonitor.zip |
handle.exe | 命名管道 ACL 模块 | Handle.zip |
accesschk.exe | 命名管道 ACL 模块——管道 DACL 枚举 | AccessChk.zip |