0xDbgMan/DrvEye

GitHub: 0xDbgMan/DrvEye

Windows 内核驱动静态分析与漏洞分诊工具包,可快速判定驱动在各安全策略下的加载合规性、自动发现 IOCTL 攻击面并生成可利用的 PoC 代码。

Stars: 78 | Forks: 13

DrvEye Logo

# drivertool **一个用于 Windows 内核驱动程序的静态分析与漏洞分诊工具包。** 回答关于任何 `.sys` 文件的以下两个问题: 1. **该驱动程序是否确实能在 Windows 上加载?**完整的 Authenticode + WDAC + HVCI 策略建模。 2. **它能做什么,以及我该如何利用它?**IOCTL 发现、污点分析、漏洞原语分类、PoC 生成。 专为 BYOVD 猎手、驱动程序分诊人员、内核逆向工程师,以及希望能在几秒钟内获得驱动程序深度静态报告的安全研究人员而构建。 ## 它能告诉你什么 对于你指定的每个驱动程序: ### 加载判定 提供一个基于各 Windows 配置的矩阵,而不是简单的“是/否”: ``` ─── LOAD VERDICT ─── Default Win10/11 : WILL LOAD Secure Boot + DSE : WILL LOAD HVCI / Memory Integrity : WILL NOT LOAD • FORCE_INTEGRITY flag not set (HVCI requires it) • W+X section present (HVCI forbids RWX) Test-signing mode : WILL LOAD S Mode : WILL NOT LOAD • No WHQL attestation EKU ``` 由完整的 **Authenticode** 验证驱动: - PKCS#7 签名加密验证 (RSA-PKCS1v15 / ECDSA) - Authenticode PE 哈希重新计算(捕获签名后的篡改) - 嵌套签名解析(SHA-1 + SHA-256 双重签名) - 反签名 & RFC 3161 时间戳绑定检查 - 实时 Microsoft 信任列表(`authroot.stl`、`disallowedcert.stl`、WDAC 易受攻击驱动程序阻止列表) - 针对内核受信根的链锚定分类 - 祖父条款:SHA-1 截止日期 (2015-07-29)、交叉签名截止日期 (2021-07-01)、传统 TSA 接受度、带时间戳的过期处理 - EKU 传播、内核签名 EKU(WHQL 证明、MS System Component、WSVT) - 针对 OS 内置驱动程序的目录签名推断 - HVCI 前置条件检查(页哈希、EV 证书、WHQL EKU) ### IOCTL 攻击面 ``` [*] Detected IOCTL codes (32): 0x7299C008 @0x140004320 (BUFFERED, FILE_READ_WRITE) → callback removal [!!CB REMOVE] [!!DSE RESOLVE] [!!PPL BYPASS] [!!TOKEN STEAL] bugs=arbitrary-rw,callback-tamper,toctou-attach,token-theft [UNGATED-sink] [shares process-kill-site with 0x7299C00C] ``` 每个 IOCTL 包含:处理程序 VA、解码后的方法/访问权限、用途、漏洞原语、缺陷类别、门控状态、共享站点收敛、哈希分派逆转、FSCTL 槽标记。 通过**三条独立路径**发现:分发表遍历、WDF 模拟器、暴力扫描。外加针对反 RE (逆向工程) 驱动程序的基于哈希的分派逆转(FNV/djb2/CRC32/sdbm)。 ### 漏洞原语 + 缺陷类别 对于每个处理程序: - **原语**:`process-kill`、`token-steal`、`ppl-bypass`、`dse-disable`、`arb-write`、`arb-read`、`physical-rw`、`msr-rw`、`callback-removal`、`etw-disable`、`process-attach`、`thread-inject`、`process-control` - **缺陷类别**:`arbitrary-rw`、`missing-probe`、`int-overflow-alloc`、`double-fetch`、`toctou-attach`、`dse-bypass`、`callback-tamper`、`token-theft`、`process-kill`、`length-bounded`、`length-unbounded` 分类由真实的分析栈进行门控: - **每处理程序污点分析**(前向、内存、通过缓存函数摘要的过程间分析) - 在每个危险调用点进行**后向切片** → 参数来源(`imm` / `mem_input_buffer+offset` / `api_return` 等) - **常量传播** + 边界检查推断 - **基本块 CFG** + 路径敏感的门控检测(`每条路径都通过 SeAccessCheck 吗?`) - **共享调用点去重** + 薄包装器检测(一个原语,多个入口点) - **EPROCESS 语义字段映射** 跨 Win8.1..Win11 的 Token / Protection / SignatureLevel / ImageFilePointer 写入分类 - **强化的二次获取检测器**(4门控:相同偏移量 + 两者之间有检查 + 无捕获 API + 流向汇聚点) ### 设备名称恢复 通过 13 种以上的独立策略恢复名称,*外加*一个 Unicorn 模拟的 `DriverEntry` 沙箱用于提取运行时构建的名称: - IAT 反汇编跟踪 · XOR 解码的 UNICODE_STRINGs · XMM 栈溢出模拟器 · 栈压缩立即数 · `.data` 初始化器 · `RtlStringCbPrintfW` 格式模板 · 注册表服务路径 · `wcscat` 组合 · GUID 结构 · `POBJECT_ATTRIBUTES.ObjectName` · 动态前缀模板 · 符号链接对推断 · Unicorn DriverEntry 模拟 附加微筛选器端口检测(`FltCreateCommunicationPort`)。 ### 生成的产物 | 标志 | 你将获得的内容 | |---|---| | `--save-pocs` | 每个 IOCTL 的可编译 C `DeviceIoControl` PoC | | `--compile` | 自动将 PoC 编译为 `.exe`(需要 MinGW-w64) | | `--fuzzer` | Python + C IOCTL 模糊测试工具 | | `--tracer` | 运行时 IOCTL 行为跟踪器(在活动系统上探测每个 IOCTL) | | `--check-script` | PowerShell 驱动程序状态检查器(加载/卸载/事件日志检查) | | `--ida FILE` | IDAPython 注释脚本(带严重性前缀的处理程序名称、结构定义、原语调用点注释、参数来源) | | `--json FILE` | 完整的结构化分析输出 | ## 快速开始 ``` # 分析驱动程序 python3 DrvEye.py path/to/driver.sys # 详细模式 + 保存 PoCs python3 DrvEye.py driver.sys -v --save-pocs # 生成 IDAPython 注释脚本以加速逆向工程 python3 DrvEye.py driver.sys --ida driver_annotations.py # 扫描前刷新 Microsoft 策略数据 + LOLDrivers 情报 python3 DrvEye.py --live-check --loldrivers driver.sys # 在单次调用中批量处理多个驱动程序 python3 DrvEye.py *.sys # 全功率运行:实时数据 + IDA 脚本 + JSON + PoCs + fuzzer python3 DrvEye.py driver.sys --live-check --loldrivers \ --json report.json --ida driver.idapy --save-pocs --fuzzer ``` ## 安装说明 ### 前置条件 - **Python 3.9+** - **pefile** PE 解析 - **capstone** x86-64 反汇编 - **cryptography** Authenticode RSA/ECDSA 验证 - **unicorn** *(可选)* 用于强化设备名称提取的全 CPU 模拟 - **yara-python** *(可选)* 用于 `--save-pocs` / `--check-script` 的丰富化 ``` pip install pefile capstone cryptography unicorn yara-python ``` ### 快速安装 ``` git clone https://github.com/0xDbgMan/DrvEye.git cd drivertool pip install -r requirements.txt # if a requirements.txt is provided python3 DrvEye.py --help ``` ## CLI 参考 ``` usage: DrvEye.py [-h] [--source SOURCE [SOURCE ...]] [--output-dir DIR] [--save-pocs] [--verbose] [--no-color] [--compile] [--device NAME] [--json FILE] [--output FILE] [--fuzzer] [--check-script] [--tracer] [--ida FILE] [--live-check] [--loldrivers] [--no-live-policy] [drivers ...] ``` | 标志 | 描述 | |---|---| | `drivers` | 要分析的一个或多个 `.sys` 路径。 | | `--source FILES` | 与二进制文件一起扫描的可选 C/C++ 源文件。 | | `--output-dir DIR` | 生成产物的目录(默认:`pocs_output`)。 | | `--save-pocs` | 将生成的 PoC 脚本写入磁盘。 | | `--verbose, -v` | 显示所有发现 + 入口点反汇编 + 额外详细信息。 | | `--no-color` | 禁用 ANSI 颜色(在通过管道传输时很有用)。 | | `--compile` | 通过 MinGW-w64 自动编译生成的 PoC `.c` 文件。 | | `--device NAME` | 覆盖 PoC 的设备名称(`MyDriver` → 打开 `\\.\MyDriver`)。 | | `--json FILE` | 将完整的分析结果写入结构化的 JSON。 | | `--output FILE, -o` | 将人类可读的报告重定向到文件(自动禁用颜色)。 | | `--fuzzer` | 生成 Python + C IOCTL 模糊测试工具。 | | `--check-script` | 生成用于在 Windows 上加载/卸载/检查驱动程序的 PowerShell 脚本。 | | `--tracer` | 生成运行时 IOCTL 跟踪器(在活跃目标上探测每个 IOCTL)。 | | `--ida FILE` | 输出可在 IDA Pro 中注释驱动程序的 IDAPython 脚本。 | | `--live-check` | 从 Windows Update 同步 MS 内核信任 + 证书吊销 + WDAC 易受攻击驱动程序列表(`authroot.stl`、`disallowedcert.stl`、`SiPolicy_Enforced.p7b`)。 | | `--loldrivers` | 使用来自 LOLDrivers、Microsoft、MalwareBazaar、Hybrid Analysis 和 HEVD 的订阅源扩展本地已知易受攻击驱动程序数据库。 | | `--no-live-policy` | 忽略缓存的实时策略数据(仅使用内置的 `KERNEL_TRUSTED_ROOTS` 快照)。 | ## 实时策略数据 默认情况下,该工具会回退到约 20 个硬编码的 Microsoft 根 CA 指纹。使用 `--live-check`,它会拉取 Windows 使用的实际当前数据: - **`authroot.stl`** ~988 个受信任的根 CA 指纹 - **`disallowedcert.stl`** 显式不信任的证书指纹 - **`SiPolicy_Enforced.p7b`** Microsoft 的 WDAC 易受攻击驱动程序阻止列表(~889 个 SHA-1 + ~870 个 SHA-256 哈希) `--loldrivers` 将外部社区/研究订阅源(LOLDrivers、MalwareBazaar、Hybrid Analysis、HEVD)添加到统一的本地索引中。 缓存存储在 `~/.cache/drivertool/` 下,并在多次运行之间持久化。建议每周运行一次以保持最新。 ``` # 单次刷新约 3-5 秒,总共下载约 350 KB python3 DrvEye.py --live-check --loldrivers driver.sys ``` 在刷新之后,随后的每次运行都会自动使用缓存的数据,无需重新传递标志。 ## 输出部分 1. **PE 摘要** SHA-256、imphash、架构、缓解措施、版本信息 2. **Authenticode 签名** 状态、主要 + 嵌套摘要、时间戳、锚点、HVCI 前置条件、完整链 3. **加载判定** 每配置矩阵 + 阻碍因素 + 通过因素 + 置信度 4. **导入** 驱动程序调用的危险函数 5. **IOCTL 代码** 每个恢复的 IOCTL 及其处理程序 VA、用途、原语、缺陷类别、收敛筹码 6. **漏洞原语** 每个 IOCTL 的原语列表及共享站点 VA 7. **设备访问安全性** IoCreateDeviceSecure 状态、SDDL、排他性、符号链接可达性、问题 8. **设备名称和符号链接** 所有恢复的设备路径 9. **微筛选器端口** `FltCreateCommunicationPort` 条目(当存在时) 10. **注册表引用** 驱动程序读取的键/值 11. **ROP gadgets、漏洞利用链、污点路径、Z3 解决方案** 使用 `-v` 查看额外细节 使用 `--verbose` 时,你还将获得 IRP 处理程序行为分解、每个 IOCTL 恢复的输入结构、入口点反汇编以及缺陷类别分类学解释。 ## 免责声明与负责任的使用 此工具专为以下用途构建: - 合法的安全研究、红队 / 蓝队行动 - 驱动程序开发和发布前审计 - 防御语境下的 BYOVD 调查 - 逆向工程教育和 CTF 挑战 它**不是**恶意软件制作套件。它生成的 PoC / 模糊测试器 / 跟踪器产物是 C/PowerShell 存根工具,它们需要目标系统上存在易受攻击的驱动程序,并且旨在供分析师在自己拥有或获得明确授权进行测试的系统上确认可复现性。 你有责任确保已获得授权来分析任何驱动程序、运行任何生成的 PoC,或将任何二进制文件加载到任何系统上。作者对滥用行为不承担任何责任。 如果你在供应商驱动程序中发现漏洞,请遵循负责任的披露原则——本项目作者积极支持该做法。 ## 许可证 MIT - 请参阅 [LICENSE](LICENSE)。
标签:Authenticode, BYOVD, HVCI, IOCTL, PE文件分析, PoC生成, WDAC, Web报告查看器, Windows内核, 云安全监控, 云资产清单, 代码签名验证, 安全启动, 漏洞分类, 白帽子, 符号链接, 逆向工具, 逆向工程, 静态分析, 驱动程序安全