了解 Windows SMM 安全缓解表 (WSMT)

Windows SMM 安全缓解表 (WSMT) 是 Microsoft 定义的 ACPI 表,它允许系统固件向操作系统确认已在系统管理模式 (SMM) 软件中实施了某些安全最佳实践。 Windows SMM 安全缓解表 (WMST) 规范中介绍了 WSMT 表定义。

背景

WSMT 被定义为更好地支持基于 Windows 虚拟化的安全功能。 有关 VBS 的更多背景知识,请参阅基于虚拟化的安全性 (VBS)。 由于 SMM 在操作系统不知情或无法控制的情况下运行,因此 SMM 代表了一个重要的攻击面,恶意代码可以利用它来破坏或规避通过 VBS 实现的操作系统保护。 提供强大且安全的 VBS 平台需要 OEM 仔细审查并可能更新 SMM 代码,以消除可能被利用的常见漏洞。 WSMT 包含一些标志,固件可以通过设置这些标志来向操作系统指示已实施哪些特定的安全最佳实践。

WSMT 对 Windows VBS 支持的影响

“WSMT 保护标志”字段指示系统固件中存在这些特定的 SMM 安全缓解措施。 受支持的 Windows 操作系统版本在初始化期间,在虚拟机管理程序和 VBS 启动之前,会提前读取 WSMT 保护标志,并且可以根据这些 SMM 保护标志的存在选择启用、禁用或取消某些安全功能。

实现说明

要正确实施由 WSMT 保护标志 FIXED_COMM_BUFFERS 和 COMM_BUFFER_NESTED_PTR_PROTECTION 表示的安全缓解措施,要求固件供应商仔细评估并可能重新设计系统管理中断 (SMI) 处理程序。 所有 SMI 处理程序必须仅限于访问(读取或写入)允许的包含 MMIO 和 EFI 分配的内存的内存区域。 仅仅检查 SMM 中的指针完全没有引用 SMM 之外的内存并不足够。 相反,必须验证所有 SMM 指针都在这些安全内存区域内。 这可以防止 SMM 在“混淆代理”攻击中被利用,然后可以利用该攻击来破坏 Windows VBS 功能。 上述保护标志仅涉及输入验证和指针检查,目前不需要通过 SMM 页面保护强制执行。 例如,SMM 不应读取或写入被固件描述为 EfiConventionalMemory 的内存,因为它可能包含机密或导致软件行为不可预测。

验证 WSMT 保护

由于 SMM 对操作系统是不透明的,因此不可能生成在 Windows 中运行的测试来验证 WSMT 规范中规定的保护措施是否在 SMM 中实际实现。 从操作系统的角度来看,唯一可能的检查是寻找 WSMT 的存在,并检查所有定义的保护标志的状态。

因此,OEM 有责任仔细检查每个系统的 SMM 代码,并确保固件符合 WSMT 规范和本文中概述的指南。 在 OEM 确认与每个保护标志值对应的缓解措施已正确实施之前,不应将保护标志设置为“true”。 不遵守这一最佳实践将使平台容易受到攻击,并导致依赖 VBS 来维护强大安全边界的多种操作系统保护和 Windows 安全功能失效。

支持的 Windows 版本

以下版本的 Windows 中包含对 WSMT 的支持:

  • Windows Server Technical Preview 2016
  • Windows 10 版本 1607
  • Windows 10 版本 1703
  • Windows 10 版本 1709