内核 DMA 保护
适用范围
Windows 10
Windows 11
在 Windows 10 版本 1803 中,Microsoft 推出了一项名为“内核 DMA 保护”的新功能,用于保护电脑免受使用连接到外部可访问的 PCIe 端口 (例如 Thunderbolt™ 3 端口和 CFexpress) 的 PCI 热插设备的驱动器直接内存访问 (DMA) 攻击。 在 Windows 10 版本 1903 中,Microsoft 扩展了对内核 DMA 保护支持,以涵盖内部 PCIe 端口 (例如 M.2 槽)
路过式 DMA 攻击可能会导致泄露驻留在电脑上的敏感信息,甚至会注入恶意软件,从而允许攻击者绕过锁屏界面或远程控制电脑。
此功能无法通过 1394/FireWire、PCMCIA、CardBus、ExpressCard 等来防范 DMA 攻击。
一、Background
PCI设备具有DMA功能,这使得它们可以随意地读写系统内存,而无需让系统处理器参与这些操作。 DMA 功能使 PCI 设备成为目前可用的最高性能设备。 这些设备过去仅存在于电脑机箱内,可以作为卡连接或焊接在主板上。 访问这些设备需要用户关闭系统电源并拆解机箱。
如今,热插 PCIe 端口 (例如 Thunderbolt™ 和 CFexpress) 不再如此。
热插 PCIe 端口(如 Thunderbolt™ 技术)为新式电脑提供了以前不适用于电脑的扩展性。 它允许用户将外部外设的新类 (如显卡或其他 PCI 设备) 附加到具有与 USB 相同的热插体验的电脑上。 将 PCI 热插端口置于外部并易于访问会使电脑容易受到路过式 DMA 攻击。
路过式 DMA 攻击是在系统所有者不在场的情况下发生的攻击,通常需要不到 10 分钟,攻击工具从简单到中等 (价格低廉,现成的硬件和软件),而无需要拆卸电脑。 一个简单的示例是电脑所有者离开电脑去喝咖啡,而在休息的时候,攻击者走进来,插入类似 USB 的设备,然后带走了机器上的所有机密,或者注入恶意软件,使他们能够远程完全控制电脑。
二、Windows 如何防范 DMA 路过式攻击
Windows 利用系统输入/输出内存管理单元 (IOMMU) 阻止外部外围设备启动和执行 DMA,除非这些外围设备的驱动程序支持内存隔离 (如 DMA 重新映射)。 具有 DMA 重新映射兼容驱动程序 的外围设备将自动枚举、启动并允许对分配的内存区域执行 DMA。
默认情况下,将阻止启动和执行具有 DMA 重映射不兼容驱动程序的外设 DMA,直到授权用户登录系统或解锁屏幕。 IT 管理员可以使用 DmaGuard MDM 策略 修改应用于具有 DMA 重新映射不兼容驱动程序的设备默认行为。
三、用户体验

默认情况下,将自动枚举并启动具有 DMA 重新映射兼容设备驱动程序的外围设备。 如果在授权用户登录之前或屏幕锁定时插入了外围设备,则将阻止启用具有 DMA 重新映射不兼容驱动程序的外围设备。 解锁系统后,外围驱动程序将由 OS 启动,并且外围设备将继续正常运行,直到系统重新启动或外围设备拔出。 如果用户锁定屏幕或注销系统,则外围设备将继续正常工作。
四、系统兼容性
内核 DMA 保护需要新的 UEFI 固件支持。 预计该支持仅适用于新推出的、与 Windows 10 版本 1803 一起转运的、基于 Intel 的系统 (并非所有系统)。 无需基于虚拟化的安全性 (VBS)。
若要查看系统是否支持内核 DMA 保护,请检查系统信息桌面应用 (MSINFO32)。 Windows 10 版本 1803 之前发布的系统不支持内核 DMA 保护,但它们可以利用其他 DMA 攻击缓解措施,如 BitLocker 对策 中所述。
备注
内核 DMA 保护与其他 BitLocker DMA 攻击对策不兼容。 如果系统支持内核 DMA 保护,建议禁用 BitLocker DMA 攻击对策。 内核 DMA 保护为系统提供比 BitLocker DMA 攻击对策更高的安全标准,同时保持外部外围设备的可用性。
备注
使用 WDDM 3.0 驱动程序模型在 Windows 11 中添加了对图形设备的 DMA 重新映射支持;Windows 10不支持此功能。
五、如何检查内核 DMA 保护是否已启用
运行支持内核 DMA 保护的 Windows 10 版本 1803 的系统确实由 OS 自动启用这一安全功能,而无需用户或 IT 管理员配置。
1. 使用 Windows 安全中心应用
从 Windows 10 版本 1809 开始,可以使用 Windows 安全应用来检查是否启用了内核 DMA 保护。 单击“开始>设置更新>&安全性>Windows 安全中心>打开Windows 安全中心>设备安全>核心隔离详细信息>内存访问保护”。

2. 使用系统信息
在命令提示符或 Windows 搜索栏中启动 MSINFO32.exe。
检查 内核 DMA 保护 的值。

如果 内核 DMA 保护 的当前状态为关闭,并且 Hyper-V - 在固件中启用的虚拟化 为否:
备注
如果启用 Hyper-V Windows 功能,则将隐藏所有与 Hyper-V 相关的功能,并且已检测到虚拟机监控程序。将不会显示 Hyper-V 所需的功能实体将显示在列表底部。 这意味着将 Hyper-V - 在固件中启用虚拟化设置为“是”。
备注
即使固件在 适用于 OEM 的内核 DMA 保护 (内存访问保护) 中所述 具有“ACPI 内核 DMA 保护指示器”的标志,在固件 (IOMMU) 中启用 Hyper-V 虚拟化也需要启用 内核 DMA 保护。
重新启动到 BIOS 设置
启用 Intel 虚拟化技术。
启用适用于 I/O (VT-d) 的 Intel 虚拟化技术。 在 Windows 10 版本 1803 中,仅支持 Intel VT-d。 其他平台可以使用 BitLocker 对策 中所述的 DMA 攻击缓解措施。
重新启动系统进入 Windows。
如果 内核 DMA 保护 的状态保持为“关闭”,则系统不支持此功能。
对于不支持内核 DMA 保护的系统,请参阅 BitLocker 对策 或 Microsoft Windows® 10 操作系统上的 Thunderbolt™3 安全性 的其他 DMA 保护手段。