基于虚拟化的安全性(VBS)使用硬件虚拟化和 Windows 虚拟机监控程序来创建隔离的虚拟环境,该环境成为假定内核可能受到威胁的 OS 的信任根。 Windows 使用此独立环境来托管许多安全解决方案,为它们提供大幅增强的操作系统漏洞防护,并防止使用试图破坏保护的恶意攻击。 VBS 强制实施限制来保护重要的系统和操作系统资源,或保护安全资产(例如经过身份验证的用户凭据)。
其中一个示例安全解决方案是
内存完整性
,它通过在 VBS 的隔离虚拟环境中运行内核模式代码完整性来保护和强化 Windows。 内核模式代码完整性是 Windows 进程,用于在启动之前检查所有内核模式驱动程序和二进制文件,并防止将未签名或不受信任的驱动程序或系统文件加载到系统内存中。 内存完整性还限制可用于危害系统的内核内存分配,确保内核内存页仅在安全运行时环境中传递代码完整性检查后才成为可执行文件,并且可执行页本身永远不会可写。 这样,即使存在缓冲区溢出等漏洞(允许恶意软件尝试修改内存),也将无法修改可执行代码页,并且无法使修改的内存成为可执行文件。
内存完整性有时称为
虚拟机监控程序保护的代码完整性 (HVCI)
或
虚拟机监控程序强制实施的代码完整性
,最初作为
Device Guard
的一部分发布。 除了在 组策略 或 Windows 注册表中查找内存完整性和 VBS 设置外,不再使用 Device Guard。
VBS 要求以下组件存在并得到正确配置。
请注意,TPM 不是必须满足的要求,但我们强烈建议你实现 TPM。
64 位 CPU
基于虚拟化的安全 (VBS) 需要 Windows 虚拟机监控程序,该虚拟机监控程序仅在具有虚拟化扩展(包括 Intel VT-X 和 AMD-v)的 64 位 IA 处理器上受支持。
二级地址转换 (SLAT)
VBS 还要求处理器的虚拟化支持包括二级地址转换 (SLAT),不管是具有扩展页表 (EPT) 的 Intel VT-X2,还是具有快速虚拟化索引 (RVI) 的 AMD-v。
IOMMU 或 SMMU (Intel VT-D、AMD-Vi、Arm64 SMMU)
能够使用 DMA 的所有 I/O 设备都必须在 IOMMU 或 SMMU 后面。 IOMMU 可以用于增强抵御内存攻击的系统复原能力。
可信平台模块 (TPM) 2.0
不管是离散 TPM 还是固件 TPM,都足以满足需求。 有关详细信息,请参阅
受信任的平台模块 (TPM) 2.0
。
SMM 保护的固件支持
系统固件必须遵循有关强化 SMM 准则的建议,如
Windows SMM 安全缓解表 (WMST) 规范
所述。 WSMT 规范包含 ACPI 表的详细信息,该表是为支持 VBS 功能的 Windows 操作系统而创建的。 固件必须实施 WSMT 规范中所述的保护,并设置规范中所述的相应保护标志,以向操作系统报告是否符合这些要求。
统一可扩展固件接口 (UEFI) 内存报告
UEFI 固件必须遵循以下内存映射报告格式和内存分配准则,这样固件才能确保与 VBS 兼容。
UEFI v2.6 内存属性表 (MAT) -
为了确保与 VBS 兼容,固件必须将代码和数据的 EFI 运行时内存范围完全分开,并向操作系统报告此情况。 通过对 EFI 运行时内存范围进行正确分隔和报告,VBS 可以将必要的页面保护应用于 VBS 安全区域内的 EFI 运行时服务代码页。 将此信息传达给 OS 是使用 EFI_MEMORY_ATTRIBUTES_TABLE 完成的。 若要实现 UEFI MAT,请遵循以下准则:
-
整个 EFI 运行时必须由此表进行描述。
-
必须标记 EfiRuntimeServicesData 和 EfiRuntimeServicesCode 页的所有相应属性。
-
这些范围必须在页面边界 (4KB) 上对齐,并且不能重叠。
EFI 页面保护 -
所有项都必须包含属性 EFI_MEMORY_RO 和/或 EFI_MEMORY_XP。 标记为可执行的全部 UEFI 内存都必须为只读。 标记为可写入的内存不能是可执行。 不得保留这两项属性均未设置的项(两项属性均未设置表明内存既可执行,又可写入)。
安全内存覆盖请求 (MOR) 修订版 2
安全 MOR v2 已增强,以使用 UEFI 安全变量保护 MOR 锁设置。 这有助于防范高级内存攻击。 有关详细信息,请参阅
安全 MOR 实现
。
内存完整性兼容驱动程序
确保所有系统驱动程序都已经过测试并验证是否与内存完整性兼容。
Windows 驱动程序工具包
和
驱动程序验证程序
包含驱动程序兼容性与内存完整性的测试。 验证驱动程序兼容性有三个步骤:
-
使用启用了
代码完整性兼容性
检查的驱动程序验证程序。
-
在 Windows HLK 中运行
虚拟机监控程序代码完整性就绪情况测试
。
-
在启用了 VBS 和内存完整性的系统上测试驱动程序。 此步骤对于使用内存完整性验证驱动程序的行为是必需的,因为静态代码分析工具根本无法检测运行时可能出现的所有内存完整性冲突。
VBS 适用于支持嵌套虚拟化的 VM。 这包括支持嵌套虚拟化的所有 Gen2 VM 和 Gen1 VM。 下表详细介绍了支持的 VM 系列列表。
VM 系列名称
嵌套虚拟化
VM Gen