基于虚拟化的安全 (VBS)

基于虚拟化的安全(简称 VBS)使用硬件虚拟化功能来创建内存的安全区域,并将其与常规操作系统隔离开来。 Windows 可以使用此“虚拟安全模式”来托管许多安全解决方案,为它们提供已大大增强的保护,防止它们受到操作系统中的漏洞的影响,并防止黑客通过恶意攻击来试图破坏这种保护。

虚拟机监控程序强制执行的代码完整性 (HVCI) 就是这样一种示例安全解决方案,它通常称为内存完整性,使用 VBS 显著增强代码完整性策略的强制执行。 内核模式代码完整性会在启动所有内核模式驱动程序和二进制文件之前检查它们,防止未签名的驱动程序或系统文件加载到系统内存中。

VBS 使用 Windows 虚拟机监控程序来创建此虚拟安全模式,并强制实施保护重要系统和操作系统资源的限制,或保护安全资产(如经过身份验证的用户凭据)。 随着 VBS 提供的保护增强,即使恶意软件获得对 OS 内核的访问权限,可能的攻击也受到很大限制和遏制,因为虚拟机监控程序可以阻止恶意软件执行代码或访问平台机密。

同样,用户模式可配置代码完整性策略会在加载应用程序之前检查应用程序,仅启动由已知的、经认可的签名者签名的可执行文件。 HVCI 利用 VBS 在安全环境中运行代码完整性服务,提供更强的保护来防范内核病毒和恶意软件。 虚拟机监控程序(最高特权级别的系统软件)在所有系统内存中设置并强制实施页面权限。 只有在安全区域内的代码完整性检查获得通过且可执行页不可写后,页面才会成为可执行文件。 这样一来,即使缓冲区溢出之类的漏洞允许恶意软件修改内存,该恶意软件也无法修改代码页,并且修改后的内存也不能成为可执行文件。

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 表的详细信息,该表可与支持 Windows 基于虚拟化的安全 (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 实现
    与虚拟机监控程序代码完整性 (HVCI) 兼容的驱动程序 确保所有系统驱动程序都经过测试和验证,与 HVCI 兼容。 Windows 驱动程序工具包驱动程序验证程序包含针对驱动程序 HVCI 兼容性的测试。 验证驱动程序兼容性的四个步骤如下:
    1. 使用启用了新代码完整性兼容性检查的驱动程序验证程序。
    2. 在 Windows HLK 中运行虚拟机监控程序代码完整性就绪情况测试
    3. 在启用了 VBS 和 HVCI 的系统中测试驱动程序。 若要验证驱动程序在与 HVCI 配合使用时的行为,必须执行此步骤,因为静态代码分析工具无法检测可能在运行时出现的所有 HVCI 冲突。
    4. 使用 DGReadiness 工具

    VBS 适用于具有嵌套虚拟化支持的 VM。 这包括所有第 2 代 VM,以及支持嵌套虚拟化的 Gen1 VM。 下表详细介绍了受支持的 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
    外汇 2
    Lsv2 1 和 2

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