dwgx@blog:~$dwgx
> cd ../posts

driver-vuln-research: 内核驱动漏洞与 BYOVD 武器库

// created

driver-vuln-research 是我做的一套 BYOVD(Bring Your Own Vulnerable Driver) 研究笔记和工具库:挑的是带有效签名、但 IOCTL 暴露过物理内存 / MSR / PortIO 的合法驱动,把能力矩阵、可复现攻击链、以及一个 Rust 写的提取器管线放在一起。用途写清楚:独立安全研究与教育,不是给现网乱打的脚本包。

为什么做这个

现代 Windows 上,用户态直接摸物理内存基本走不通。BYOVD 的套路是:加载(或复用系统里已经在跑的)已知漏洞签名驱动,用它的「厂商调试口」读物理页、改 EPROCESS、清 PPL、再回用户态扫密钥或提权。研究面大、文档散、偏移和 CVE 编号又容易对不上——所以我把能复现的都收成一份 arsenal。

仓库里驱动都是公开可查的签名二进制(SIVX64、AsIO3、ASTRA64、LnvMSRIO、ArgusMonitor、ThrottleStop 相关路径等),附 SHA256 校验。没有「自制 rootkit.sys」。

能力分层(简版)

按实际能干什么分 tier,而不是按名声:

  • Tier 0:完整物理读写 + MSR,优先用经过实机验证的。LnvMSRIO(读/写物理 + MSR,EAC 环境有 72h 观察样本)、CorsairLLAccess64(WHQL,且在 HVCI/内存完整性开着时仍有加载路径)属于这一档。
  • Tier 1:完整物理内存窗口。Portwell(多 IOCTL)、SIVX64(多模式)、IOMap64(滑动窗口)、Dell WDT 相关等。
  • Tier 2:特化能力。SparkIO 偏只读;AsIO3 常在华硕机子上 boot 就已加载,配合公开 CVE 可以做成「零额外加载」路径;MSI WinIo 一类大窗口映射也在这一层。

矩阵里还会标 WHQL、HVCI、EAC 兼容性的实测/未测状态。██ 全开、░░ 部分、-- 无、?? 未测——细节以仓库 CAPABILITY_MATRIX.md 为准。

几条主攻击链(研究向)

Chain A — 隐秘提取(主路径)
加载 LnvMSRIO → 从 KPCR 链定位 EPROCESS → 单字节清 PPL → 用户态 ReadProcessMemory + AES 密钥扩展校验扫堆。IOCTL 次数和耗时都按阶段记过:加载约 0.5s,定位约 0.3s,PPL 几乎瞬时,堆扫 2–5s 量级。

Chain B — HVCI 加固机
走 CorsairLLAccess64:MSR 读 KPCR → 物理读 EPROCESS 链 → 物理写做 token 相关操作。目标是在内存完整性开着的环境里仍能走到 SYSTEM 语义(以仓库当前验证状态为准)。

Chain C — 零额外加载
目标机若已有 AsIO3/Asusgio 在跑,可直接叠公开 CVE 链(文档里记过 CVE-2025-3464 类 TOCTOU、以及后续编号的权限/白名单问题)。不新装驱动、足迹更小,但也更吃目标机型与补丁级别。

蓝屏风险写进了风险表:偏移对了几乎为零;偏移错或踩 MMIO 空洞是 FATAL。物理地址读写前会做范围校验。

提取器(Rust)

extractor/ 是约三千行、零外部 crate 依赖 的管线:SCM 建服务/启停删、PhysicalMemoryDriver trait、LnvMSRIO backend、EPROCESS 走链 + PPL bypass、AES-128 密钥扩展与校验、堆页扫描。示例里有 Superfetch 可用性、内核偏移核对、全量 AES 扫描。

cd extractor && cargo build --release
cargo run --example test_offsets   # 需管理员,偏安全核对
cargo test                         # 当前 10/10

跑完整链路前先对偏移,别拿错 build 的内核直接上物理写。

文档与边界

仓库里还有能力矩阵、操作手册、WHQL+HVCI 候选驱动清单、端到端管线设计、对抗审查笔记等,比博客这篇全得多。博客只交代定位和主路径;要对着真机复现,以 GitHub 文档和本机补丁状态为准。

再次强调:这是对 已知漏洞的合法签名驱动 的研究整理。拿去未授权环境做破坏、外挂、数据窃取,不在项目意图里,后果自负。