PN-Tester/DMAReaper
GitHub: PN-Tester/DMAReaper
通过预启动 DMA 攻击覆写 DMAR ACPI 表来禁用 Windows 内核 DMA 保护的安全研究工具。
Stars: 80 | Forks: 13
# 从预启动中禁用 Kernel DMA Protection
该程序用于控制运行 [PCILeech firmware](https://github.com/ufrisk/pcileech) 的 FPGA 板。DMAReaper 会通过对 UEFI 发起预启动 DMA 攻击,在目标计算机上自动搜寻并销毁 DMAR ACPI 表。操作成功后,将阻止 IOMMU 的使用以及 Windows 启动时后续对 Kernel DMA Protection 的初始化。该程序适用于在 Windows 10 或 Windows 11 上禁用 Kernel DMA Protection,即使目标固件启用了 Secure Boot、VT-d、VT-x、Sure Start、基于虚拟化的 BIOS Security 以及增强型固件运行时入侵检测和防护(Enhanced firmware runtime intrusion detection and prevention)。对于使用 TPM BitLocker 密钥保护器的自动启动 Windows,该方法不会触发 BitLocker 恢复。如果你需要禁用预启动 DMA 保护才能使用此工具,但又无法访问 UEFI GUI,请考虑借助 [NVRAMap](https://github.com/PN-Tester/NVRAMap) 直接修补固件中的设置。
# 用法
```
usage: DMAReaper.py [-h] [-v] [-i INTENSITY] [-min MIN_ADDR] [-max MAX_ADDR]
DMAReaper — Disable Kernel DMA Protection via DMAR overwrite
options:
-h, --help show this help message and exit
-v, --verbose Enable verbose debug output
-i INTENSITY, --intensity INTENSITY
Number of times each memory segment is read during scan. Lower is faster but less reliable. (default: 3)
-min MIN_ADDR, --min-addr MIN_ADDR
Minimum scan address (default: 0x10000000)
-max MAX_ADDR, --max-addr MAX_ADDR
Maximum scan address (default: 0xFFFFFFFF)
```
开箱即用时,你唯一可能需要更改的值是 MIN_ADDR。
# 演示

# 准备工作
1. 通过适当的 PCI Express 端口(M.2 / ExpressCard / Mini PCIe)将 FPGA 板连接到目标计算机
2. 通过数据端口(USB-C)将 FPGA 板连接到攻击计算机
3. 开启目标计算机电源
4. 迅速给开发板通电以确保正确初始化
5. 在目标计算机上进入 UEFI
6. 在获得有效的 PCIe Link 之前,你可能需要多次重复步骤 3-5。时机的把握是关键。
7. 一旦建立有效的 PCIe Link,从攻击计算机运行 DMAReaper.py 程序并等待成功提示。
8. 完成后,在目标计算机上选择“Continue Boot”或同等选项,即可在禁用 Kernel DMA Protection 的情况下启动进入 Windows。
# 说明
如需了解更多信息,请阅读我的[详细博客文章](https://pn-tester.github.io/posts/Neutralizing-Kernel-DMA-Protection/)。
该程序使用 [LeechCore python API](https://github.com/ufrisk/LeechCore) 在 UEFI 期间控制 FPGA 并扫描目标计算机的内存。DMAReaper 将识别 EFI System Table,利用它找到 Configuration table 并分离出 ACPI 2.0 VendorTable 指针。随后,程序将识别 ACPI 2.0 Root System Description Table 以查找所有已安装的 ACPI 表,并对它们进行解析以识别 DMAR ACPI 条目。一旦定位到 DMAR ACPI 表,就会用 null 字节覆盖它,从而将其有效销毁。Windows 使用 DMAR 表来报告 IOMMU 重映射,当该表缺失时,便无法利用内核 DMA 保护功能。因此,该保护会被禁用,Windows 将在没有它的情况下启动。请注意,这不会影响基于虚拟化的安全(VBS)功能,例如 HVCI 和 Secure System。
# 致谢
特别感谢出色的 [PCILeech framework](https://github.com/ufrisk/pcileech) 和 [LeechCore Library](https://github.com/ufrisk/LeechCore) 的创建者 Ulf Frisk。
标签:DMA攻击, PCILeech, Web报告查看器, 内核保护绕过, 硬件安全, 逆向工具