ghostvectoracademy/DLLHijackHunter

GitHub: ghostvectoracademy/DLLHijackHunter

一款 Windows 平台的自动化 DLL 劫持检测工具,通过 Canary DLL 实际验证劫持可行性,实现零误报的漏洞发现与分层评分。

Stars: 5 | Forks: 0

🔍 DLLHijackHunter

By GhostVector Academy

零误报的自动化 DLL 劫持检测
唯一能在报告前证明劫持确实有效的工具。

## 🏆 真实世界结果 | 发现 | DLL | 类型 | 评分 | 运行身份 | |---|---|---|---|---| | #1 | ntdll.dll | .local 重定向 | **9.3** | SYSTEM | | #2 | bcrypt.dll | .local 重定向 | **9.3** | SYSTEM | | #3 | advapi32.dll | .local 重定向 | **9.3** | SYSTEM | | #4 | kernel32.dll | .local 重定向 | **9.3** | SYSTEM | | #5 | rpcrt4.dll | .local 重定向 | **9.3** | SYSTEM | | ... | +26 个 DLL | .local + 搜索顺序 | **9.1-9.3** | SYSTEM | | #54-60 | 多种 | 中等置信度 | **5.1** | SYSTEM | 53 个高危发现通过**可经受重启**的自动启动服务实现了**提权至 SYSTEM** —— 这是可能实现的最高影响劫持场景。 ## 🎯 什么是 DLLHijackHunter? **DLLHijackHunter** 是一款自动化的 Windows DLL 劫持检测工具,它超越了静态分析的范畴。它使用多阶段流水线在目标系统上发现、验证并确认 DLL 劫持机会: 1. **发现 (Discovery)** → 查找每一个从可写位置加载 DLL 的二进制文件 2. **过滤 (Filtration)** → 通过 8 个智能过滤器消除误报 3. **Canary 确认** → 投放无害的 Canary DLL 并触发二进制文件以*证明*劫持有效 4. **评分与报告** → 通过分层置信度系统按可利用性对发现进行排名 ## 🏗️ 架构 ``` flowchart TB subgraph Phase1["🔎 Phase 1: Discovery"] SE["Static Engine
Services, Tasks, Startup,
COM, Run Keys"] PE["PE Analyzer
Import Tables, Delay Loads,
Manifests, Exports"] ETW["ETW Engine
Real-time DLL Load
Monitoring"] SO["Search Order
Calculator"] end subgraph Phase2["🔬 Phase 2: Filter Pipeline"] direction LR HG["Hard Gates
(Binary Kill)"] SG["Soft Gates
(Confidence Adj.)"] end subgraph Phase3["🐦 Phase 3: Canary"] CB["Canary DLL Builder"] TE["Trigger Executor"] VF["Verification"] end subgraph Phase4["📊 Phase 4: Output"] SC["Tiered Scorer"] RC["Console Report"] RJ["JSON Report"] RH["HTML Report"] end SE --> PE --> SO ETW --> SO SO --> Phase2 HG --> SG Phase2 --> Phase3 CB --> TE --> VF Phase3 --> Phase4 style Phase1 fill:#1a1a2e,stroke:#58a6ff,color:#c9d1d9 style Phase2 fill:#1a1a2e,stroke:#d29922,color:#c9d1d9 style Phase3 fill:#1a1a2e,stroke:#f85149,color:#c9d1d9 style Phase4 fill:#1a1a2e,stroke:#3fb950,color:#c9d1d9 ``` ## 📊 代码库统计 | 指标 | 值 | |---|---| | **总代码行数** | ~4,900 | | **C# 源文件** | 39 | | **Canary 模板 (C)** | 3 | | **检测到的劫持类型** | 10 | | **发现源** | 6 (Services, Tasks, Startup, COM, Run Keys, ETW) | | **过滤门槛** | 8 (3 个硬性 + 5 个软性) | | **扫描配置** | 4 (Aggressive, Strict, Safe, Red Team) | | **置信度层级** | 5 (Confirmed, High, Medium, Low, Info) | | **输出格式** | 3 (Console, JSON, HTML) | ### 模块细分 ``` src/DLLHijackHunter/ ├── Discovery/ 9 files │ 1,534 LOC │ Static + ETW engines, PE analysis ├── Filters/ 10 files │ 682 LOC │ 3 hard gates + 5 soft gates ├── Canary/ 3 files │ 790 LOC │ DLL builder, trigger, confirmation ├── Models/ 4 files │ 254 LOC │ Data models, profiles, enums ├── Scoring/ 1 file │ 101 LOC │ Tiered scoring algorithm ├── Reporting/ 2 files │ 270 LOC │ Console, JSON, HTML reports ├── Native/ 3 files │ 449 LOC │ P/Invoke, ACL checks, tokens └── Program.cs 1 file │ 381 LOC │ CLI entry point ``` ## 🔑 核心功能 ### 检测 10 种劫持类型 ``` pie title Hijack Types Coverage "Phantom DLL" : 20 "Search Order" : 18 "Side-Loading" : 14 "ENV PATH" : 12 ".local Redirect" : 10 "KnownDLL Bypass" : 8 "CWD Hijack" : 6 "AppInit DLLs" : 4 "IFEO" : 4 "AppCert DLLs" : 4 ``` | 类型 | 描述 | 隐蔽性 | |---|---|---| | **Phantom** | DLL 在任何地方都不存在 —— 最干净的劫持 | ⭐⭐⭐⭐⭐ | | **Search Order** | 将 DLL 放置在 Windows 搜索顺序的更靠前位置 | ⭐⭐⭐⭐ | | **Side-Loading** | 滥用合法应用程序从其目录加载 DLL | ⭐⭐⭐⭐ | | **.local Redirect** | 通过 `.local` 目录重定向进行劫持 | ⭐⭐⭐⭐⭐ | | **ENV PATH** | 系统 PATH 中的可写目录 | ⭐⭐ | | **KnownDLL Bypass** | 通过 .local 或 WoW64 绕过 KnownDLLs | ⭐⭐⭐ | | **CWD** | 当前工作目录劫持 | ⭐⭐ | | **AppInit DLLs** | AppInit_DLLs 注册表滥用 | ⭐⭐ | | **IFEO** | Image File Execution Options 调试器 | ⭐⭐⭐ | | **AppCert DLLs** | AppCertDLLs 注册表劫持 | ⭐⭐ | ### 8 道门槛过滤流水线 过滤流水线通过两个阶段消除误报: **硬性门槛**(二进制文件剔除): - **API Set Schema 过滤器** —— 移除虚拟 API set DLL(`api-ms-*`, `ext-ms-*`) - **Known DLLs 过滤器** —— 移除注册表中受 Windows 保护的 KnownDLLs - **可写性过滤器** —— 仅保留劫持路径实际可写的候选 **软性门槛**(置信度调整 -10% 到 -30% 不等): - **WinSxS Manifest 过滤器** —— 如果 DLL 被 Side-by-Side manifest 覆盖,则扣分 - **权限增量过滤器** —— 评估劫持是否提供有用的权限提升 - **LoadLibraryEx 标志过滤器** —— 检查 `LOAD_LIBRARY_SEARCH_*` 缓解措施 - **签名验证过滤器** —— 检查二进制文件是否验证 DLL 签名 - **错误处理加载过滤器** —— 检测加载失败是否被优雅处理 ### Canary 确认系统 DLLHijackHunter 不靠猜测,而是**证明**劫持有效: ``` sequenceDiagram participant H as DLLHijackHunter participant B as Canary DLL Builder participant T as Trigger Executor participant V as Victim Binary H->>B: Build canary DLL (exports proxied) B->>B: Compile with MSVC/MinGW B-->>H: canary.dll + confirmation pipe H->>H: Place DLL at hijack path H->>T: Trigger binary execution T->>V: Start service / Run task / COM activate V->>V: Loads canary DLL! V-->>H: Named pipe callback:
PID, privilege, integrity level H->>H: Record: CONFIRMED ✓ H->>H: Cleanup canary DLL ``` Canary DLL 会: - ✅ 代理导出所有原始函数(保持应用程序正常运行) - ✅ 通过 Named Pipe 回报:获得的权限、完整性级别、SeDebug - ✅ 确认后自动清理 - ✅ 从不运行恶意代码 —— 这是一个检测工具 ## ⚡ 与其他工具的对比 | 功能 | **DLLHijackHunter** | Robber | DLLSpy | WinPEAS | Procmon | |---|:---:|:---:|:---:|:---:|:---:| | **自动发现** | ✅ | ✅ | ✅ | ✅ | ❌ 手动 | | **Phantom DLL 检测** | ✅ | ❌ | ✅ | ❌ | ✅ | | **搜索顺序分析** | ✅ | ❌ | ❌ | ❌ | ❌ | | **可写路径验证** | ✅ 基于 ACL | 部分 | ❌ | 基础 | ❌ | | **ETW 实时监控** | ✅ | ❌ | ❌ | ❌ | ✅ | | **Canary 确认** | ✅ 已验证 | ❌ | ❌ | ❌ | ❌ | | **权限提升检查** | ✅ | ❌ | ❌ | ❌ | ❌ | | **误报消除** | 8 个过滤器 | 无 | 基础 | 无 | 无 | | **重启持久化检查** | ✅ | ❌ | ❌ | ❌ | ❌ | | **代理 DLL 生成** | ✅ 自动 | ❌ | ❌ | ❌ | ❌ | | **置信度评分** | ✅ 5 级 | ❌ | ❌ | ❌ | ❌ | | **服务/任务/COM 触发器** | ✅ 自动 | ❌ | ❌ | ❌ | ❌ | | **HTML/JSON 报告** | ✅ | ❌ | ❌ | TXT | ❌ | | **针对性扫描** | ✅ | ❌ | ❌ | ❌ | ✅ | | **独立二进制文件** | ✅ | ❌ | ❌ | ✅ | ❌ | ``` xychart-beta title "Feature Coverage Comparison" x-axis ["DLLHijackHunter", "Robber", "DLLSpy", "WinPEAS", "Procmon"] y-axis "Features Covered" 0 --> 14 bar [14, 2, 3, 3, 3] ``` ### 为什么 DLLHijackHunter 更好 | 现有工具的问题 | DLLHijackHunter 如何解决 | |---|---| | **海量误报** —— 报告每个缺失的 DLL | 8 道门槛过滤流水线 + Canary 证明 = 零误报 | | **无验证** —— “可能被劫持”没有可操作性 | Canary DLL 实际加载并回报获得的权限 | | **人工工作** —— 必须手动检查每个发现 | 从发现到确认的全自动化 | | **缺乏上下文** —— 没有触发器,没有权限信息 | 报告触发器类型、运行身份、重启持久性 | | **仅限静态** —— 无法捕获运行时加载的 DLL | ETW 引擎捕获实时 `LoadLibrary` 调用 | | **无优先级** —— 数百个结果的扁平列表 | 分层评分:Confirmed > High > Medium > Low | ## 🚀 用法 ### 前置条件 - **Windows 10/11** 或 **Windows Server 2016+** - **.NET 8.0 Runtime**(或使用独立构建版本) - 建议使用**管理员权限**(ETW、Canary 和服务触发器需要) ### 构建 ``` # 克隆 git clone https://github.com/ghostvectoracademy/DLLHijackingHunter.git cd DLLHijackingHunter # 构建(独立单文件) dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj ` -c Release -r win-x64 --self-contained ` -p:PublishSingleFile=true -o ./publish # 或使用构建脚本 .\build.ps1 ``` ### 快速开始 ``` # 完全激进扫描(推荐,需要管理员权限) .\DLLHijackHunter.exe --profile aggressive # 安全扫描(无文件释放,无触发器 —— 适用于生产环境) .\DLLHijackHunter.exe --profile safe # 针对特定二进制文件 .\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe" # 按文件名定位(部分匹配) .\DLLHijackHunter.exe --target notepad.exe # Red team 模式(仅限已确认、可利用的发现) .\DLLHijackHunter.exe --profile redteam --format json -o report.json ``` ### CLI 选项 ``` DLLHijackHunter — Automated DLL Hijacking Detection Options: -p, --profile Scan profile [default: aggressive] aggressive | strict | safe | redteam -o, --output Output file path (auto-detects format) -f, --format Output format [default: console] console | json | html -t, --target Target specific binary, directory, or filename --min-confidence Minimum confidence threshold 0-100 [default: 20] --no-canary Disable canary confirmation (safe for prod) --no-etw Disable ETW runtime discovery --confirmed-only Only show canary-confirmed findings -v, --verbose Verbose output ``` ### 扫描配置 | 配置文件 | 用例 | Canary | ETW | 最低置信度 | 触发器 | |---|---|:---:|:---:|:---:|---| | **aggressive** | 全面审计,实验室环境 | ✅ | ✅ | 15% | Services, Tasks, COM | | **strict** | 仅高置信度发现 | ✅ | ✅ | 80% | Services, Tasks | | **safe** | 生产系统,只读 | ❌ | ❌ | 50% | 无 | | **redteam** | 仅限已确认可利用 | ✅ | ✅ | 50% | Services, Tasks, COM | ### 示例输出 ``` Findings by Tier CONFIRMED 0 HIGH ██████████████████████████████████████████████ 53 MEDIUM ████ 7 LOW 0 ┌─#1 [HIGH] Score: 9.3 | Confidence: 85% | Impact: 9.8──────────────────────────────┐ │ Binary: C:\Program Files\ExampleApp\ExampleService.exe │ │ DLL: ntdll.dll (DotLocal) │ │ Path: C:\...\ExampleService.exe.local\ntdll.dll │ │ Trigger: Service "ExampleService" (AUTO_START) │ │ Runs As: NT AUTHORITY\SYSTEM │ │ Survives Reboot: √ Yes │ │ Use Cases: Privilege Escalation, Persistence │ │ │ │ ⚠ KnownDLL bypassed via .local redirection │ │ ⚠ Canary not tested - requires elevation │ └────────────────────────────────────────────────────────────────────────────────────┘ ... 59 more findings ... ``` ## 📋 评分系统 每个发现接收三个分数: ``` flowchart LR C["Confidence
0-100%"] --> F["Final Score"] I["Impact
0-10"] --> F F --> T["Tier Assignment"] T --> T1["🔴 CONFIRMED
Canary proven"] T --> T2["🟠 HIGH
≥80% confidence"] T --> T3["🟡 MEDIUM
50-79%"] T --> T4["⚪ LOW
20-49%"] style T1 fill:#f85149,color:white style T2 fill:#d29922,color:white style T3 fill:#e3b341,color:#1c1e21 style T4 fill:#8b949e,color:white ``` **影响分数** (0-10) 权重: - **获得的权限** (0-4): SYSTEM=4, Admin/LocalService=3, User=1 - **触发器可靠性** (0-3): 自动启动服务=3, 频繁任务=2.5, 启动项=2 - **隐蔽性** (0-2): Phantom=2, .local=1.8, 搜索顺序=1.5 - **持久化奖励** (+1): 可经受重启 **最终得分** = `(置信度 × 0.4 + 影响 × 0.6) × 10` ## 🔒 安全性 DLLHijackHunter 是一个**检测**工具,而不是漏洞利用框架: - 🛡️ Canary DLL **不包含恶意负载** —— 它们仅通过 Named Pipe 报告元数据 - 🧥 所有 Canary 文件在测试后**自动清理** - 🔄 代理导出保持目标应用程序**功能完整** - 📝 对生产系统请使用 `--profile safe`(无文件写入,无触发器) - ⚠️ 在扫描您不拥有的系统之前,请务必获得适当的授权 ## 📄 许可证 MIT License —— 详情请见 [LICENSE](LICENSE)。

GhostVector Academy 构建
零付费墙的精英网络安全。

标签:Canary令牌, Conpot, DLL劫持, Gophish, MIT ATT&CK, .NET 8.0, SYSTEM权限, Windows安全, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 企业安全, 协议分析, 安全意识培训, 权限提升, 端点可见性, 网络资产管理, 自动化安全工具, 逆向工程, 防御性安全, 防御框架, 零误报, 静态分析