适用于 OEM 的内核 DMA 保护(内存访问保护)

内核 DMA 保护(也称为内存访问保护)是 Windows 10 安全核心 PC 的一种功能,从 Windows 10 版本 1803 和 Windows 10 版本 1809 开始,在 Intel 和 AMD 平台支持该功能。

借助此功能,操作系统和系统固件可在以下情形中保护系统,以防范针对所有支持 DMA 的设备的恶意和非预期直接内存访问 (DMA) 攻击:

  • 在启动过程中。
  • 在操作系统运行时,防范连接到可轻松访问且支持 DMA 功能的内部/外部端口(例如,M.2 PCIe 插槽和 Thunderbolt™3)的设备进行的恶意 DMA。
平台要求 详细信息
64 位 CPU 内核 DMA 保护仅在具有虚拟化扩展(包括 Intel VT-X 和 AMD-v)的 64 位 IA 处理器上受支持。
IOMMU(Intel VT-D、AMD-Vi) 能够使用 DMA 的所有 I/O 设备都必须在已启用(默认情况下)的 IOMMU 后面。 IOMMU 用于基于 DMAGuard 设备枚举策略来阻止/取消阻止设备,并为具有兼容驱动程序的设备执行 DMA 重新映射
PCI Express 原生控制支持 内核 DMA 保护支持需要使用 _OSC ACPI 方法启用 PCI Express 原生控制
预启动 DMA 保护
  • 系统固件必须通过实现所有支持 DMA 的设备的 IO 缓冲区 pre-ExitBootServices() 的 DMA 隔离,来防范预启动 DMA 攻击。
  • 对于没有在 ExitBootServices() 与操作系统启动的设备驱动程序之间执行 DMA 所需的子设备的所有 PCI 根端口,系统固件必须禁用总线主控启用 (BME) 位。
  • 在 ExitBootServices() 中,IOMMU 必须由系统固件还原为开机状态。
  • 在执行 ExitBootServices() 之后,设备不能在 RMRR 区域 (Intel) 或 IVMD 块 (AMD) 外部执行 DMA,直到 PnP 加载并启动设备的相应操作系统驱动程序。
    • 在执行 ExitBootServices() 之后以及在操作系统启动设备驱动程序之前,在 RMRR 区域或 IVMD 块外部执行 DMA 会导致 IOMMU 故障,并可能会导致系统 bug 检查 (0xE6)。
ACPI 内核 DMA 保护指示器
可信平台模块 (TPM) 2.0 不管是离散 TPM 还是固件 TPM,都足以满足需求。 有关详细信息,请参阅受信任的平台模块 (TPM) 2.0
  • 在 IOMMU(VT-D 或 AMD-Vi)或内核 DMA 保护已禁用、将禁用或配置为较低安全状态的每次启动中,平台都必须先将 EV_EFI_ACTION 事件扩展到 PCR[7],然后才能启用 DMA。
  • 事件字符串应该为“DMA 保护已禁用”。 平台固件必须对事件数据使用字符串“DMA 保护已禁用”,将此度量记录在事件日志中。

验证 Windows 10 系统上的内核 DMA 保护状态

可以使用以下任一方法在给定系统上验证内核 DMA 保护的状态

  1. 使用系统信息应用程序:

    • 启动 MSINFO32.exe。
    • 在“系统摘要”页中检查“内核 DMA 保护”字段。
  2. 使用 Windows 安全中心应用程序:

    • 从 Windows“开始”菜单启动 Windows 安全中心应用程序。

    • 单击“设备安全”图标。

    • 单击“核心隔离详细信息”。

    • “内存访问保护”会作为可用安全功能列出(如果已启用)。

      • 如果“内存访问保护”未列出,则该功能未在系统上启用。

内核 DMA 保护概述

为设备驱动程序启用 DMA 重新映射

DMAGuard 策略