基于虚拟化的安全 (VBS)

基于虚拟化的安全功能(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,请遵循以下准则:
    1. 整个 EFI 运行时必须由此表进行描述。
    2. 必须标记 EfiRuntimeServicesData 和 EfiRuntimeServicesCode 页的所有相应属性。
    3. 这些范围必须在页面边界 (4KB) 上对齐,并且不能重叠。
  • EFI 页面保护 - 所有项都必须包含属性 EFI_MEMORY_RO 和/或 EFI_MEMORY_XP。 标记为可执行的全部 UEFI 内存都必须为只读。 标记为可写的内存不能是可执行文件。 不得保留这两项属性均未设置的项(两项属性均未设置表明内存既可执行,又可写入)。
  • 安全内存覆盖请求 (MOR) 修订版 2 安全 MOR v2 已增强,以使用 UEFI 安全变量保护 MOR 锁设置。 这有助于防范高级内存攻击。 有关详细信息,请参阅安全 MOR 实现
    与内存完整性兼容的驱动程序 确保所有的系统驱动程序都经过测试并验证与内存完整性兼容。 Windows 驱动程序工具包驱动程序验证程序包含驱动程序兼容性与内存完整性的测试。 验证驱动程序兼容性有三个步骤:
    1. 在启用代码完整性兼容性检查的情况下使用驱动程序验证程序。
    2. 在 Windows HLK 中运行虚拟机监控程序代码完整性就绪情况测试
    3. 在启用 VBS 和内存完整性的系统上测试驱动程序。 这一步骤对于验证具有内存完整性的驱动程序行为至关重要,因为静态代码分析工具根本无法在运行时检测到所有可能的内存完整性冲突。

    VBS 适用于具有嵌套虚拟化支持的 VM。 这包括所有支持嵌套虚拟化的 Gen2 虚拟机和 Gen1 虚拟机。 下表详细介绍了支持的 VM 系列列表。

    VM 系列名称 嵌套虚拟化 VM Gen
    Av2 1(某些内部大小支持第 2 代)
    B 1 和 2
    Dsv2/Dv2/Dv3/Ev3 1
    Dsv3/Ddsv3 1 和 2
    Dsv4/Ddsv4 1 和 2
    Esv3/Edsv3 1 和 2
    Esv4/Edsv4 1 和 2
    Ev4/Edv4 Ev4 - 仅 1
    Edv4 -1 和 2
    Dv4/Ddv4 1 和 2
    Dv5/Ddv5/Dsv5/Ddsv5 1 和 2
    Ev5/Edv5/Esv5/Edsv5 1 和 2
    Dasv5/Dadsv5/Easv5/ Eadsv5 1 和 2
    Ebsv5/Edbsv5 1 和 2
    Fsv2 1 和 2
    Fx 2
    Lsv2 1 和 2

    有关 Hyper-V 的详细信息,请参阅 Windows Server 2016 上的 Hyper-VWindows 10 上的 Hyper-V 简介。 有关虚拟机监控程序的详细信息,请参阅虚拟机监控程序规范