内存完整性和 VBS 启用
内存完整性是 Windows 10、Windows 11 和 Windows Server 2016 或更高版本中提供的启用基于虚拟化的安全性(VBS) 功能。 内存完整性和 VBS 改进了 Windows 的威胁模型,并针对试图利用 Windows 内核的恶意软件提供更强大的保护。 VBS 使用 Windows 虚拟机监控程序创建一个独立的虚拟环境,该环境成为假定内核遭到入侵的操作系统的信任根。 内存完整性是一个关键组件,它通过在 VBS 的独立虚拟环境中运行内核模式代码完整性来保护和强化 Windows。 内存完整性还限制可用于入侵系统的内核内存分配,确保在安全运行时环境中传递代码完整性检查后,内核内存页才会成为可执行文件,并且可执行文件页本身永远不会可写。
注意
内存完整性有时称为虚拟机监控程序保护的代码完整性(HVCI)或虚拟机监控程序强制代码完整性,最初作为 Device Guard 的一部分发布。 除了在组策略或 Windows 注册表中存在内存完整性和 VBS 设置外,不再使用 Device Guard。
有关这些保护的更多详细信息,请参阅基于虚拟化的安全系统资源保护。
默认启用
在 Windows 11 的全新安装中默认开启内存完整性,以前仅在本文所述的兼容硬件上以 S 模式全新安装 Windows 10 时启用内存完整性。 默认情况下,还在所有安全核心电脑上启用。 在其他不符合内存完整性自动启用要求的系统上,客户可以选择使用有关如何启用内存完整性中所述的任何方法。 IT 专业人员和最终用户始终拥有是否启用内存完整性的最终控制权。
支持自动启用的硬件功能
当电脑满足以下最低硬件功能时,默认情况下启用内存完整性:
组件 | 详细信息 |
---|---|
处理器 |
|
RAM | 最低 8GB(仅适用于 x64 处理器) |
存储 | 最小大小为 64GB 的 SSD |
驱动程序 | 必须安装与内存完整性兼容的驱动程序。 有关驱动程序的详细信息,请参阅驱动程序与内存完整性的兼容性。 |
BIOS | 必须启用虚拟化 |
如果生成的映像不会自动启用内存完整性,仍然可以配置映像,使其默认启用。
注意
自动启用仅适用于全新安装,而不适用于现有设备的升级。
注意
当前默认启用逻辑中不包含英特尔 11 代酷睿桌面处理器。 但是,它们是推荐的内存完整性平台,并且可以由 OEM 启用。
内存完整性和 VBS 控件
本部分列举设备制造商和最终用户如何与内存完整性和 VBS 进行交互。 若要了解如何以管理员身份控制内存完整性状态,请参阅如何启用内存完整性。
启用内存完整性
尽管大多数系统默认会打开 Windows 内存完整性,但有几种原因可能会阻止这种情况发生。 作为 OEM,可以通过在 OS 映像中配置注册表项,确保为设备启用内存完整性。
建议配置
在映像中设置以下两个注册表项,以确保启用内存完整性。
注册表项 | 值 |
---|---|
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | Enabled=1 |
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | WasEnabledBy=1 |
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | EnabledBootId=<Current BootId> |
BootId 是一个计数器,每次成功启动时都会递增,可在注册表项中找到:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\BootId WasEnabledBy 和 EnabledBootId 注册表项控制防止设备无法启动的设置。 设置后,如果系统在启动过程中崩溃,设备将自动关闭内存完整性,这可能是由于内存完整性阻止了不兼容的启动关键驱动程序所致。 此自动禁用功能仅在 BootId 小于 EnabledBootId + 3 时可用。 在某些版本的 Windows中,自动禁用功能被设计为,即使在内存完整性关闭后,如果启动失败仍在继续,也会恢复,这表明内存完整性不是失败的根本原因。
注意
对于高安全性系统,不应设置 WasEnabledBy 和 EnabledBootId。
故障排除
标识内存完整性状态
以下易失性注册键反映了内存完整性的状态:
注册表项 | 值 |
---|---|
HKLM\System\CurrentControlSet\Control\CI\State | HVCIEnabled |
检查内存完整性状态的其他方法是查看基于虚拟化的安全服务正在运行下的 MsInfo,或者参阅 Windows 安全应用中的核心隔离设置页面,以查看内存完整性的值。 还有一个 WMI 接口可用于使用管理工具进行检查,请参阅验证已启用 VBS 和内存完整性功能。
调试驱动程序问题
检查代码完整性日志,查看是否有任何驱动程序由于内存完整性而被阻止加载。 这些日志位于以下路径下的事件查看器中:
Applications and Service Logs\Microsoft\Windows\CodeIntegrity\Operational
通常,内存完整性兼容性事件的 EventID=3087
检查内存完整性默认启用的结果
若要查看有关内存完整性默认启用结果的详细信息,请检查 setupact.log 并搜索 HVCI
。 你应该会看到以下结果日志之一,以及导致启用决策的成功/失败检查:
已启用内存完整性:SYSPRP HVCI: Enabling HVCI
未启用内存完整性:SYSPRP HVCI: OS does not meet HVCI auto-enablement requirements. Exiting now.
如果设备通过前面详细介绍的 regkey 方法选择退出内存完整性启用,那么这将是内存完整性的 sysprep 中的唯一日志。 如果设备存在兼容性问题,则应在前面的日志中标识该问题,并显示以下错误消息:
SYSPRP HVCI: Compatibility did not pass. VBS_COMPAT_ISSUES 0xXXXXXXXX
下面列举了潜在的 VBS 或内存完整性兼容性问题。 每个问题均由位数组中的单个索引表示,并且错误消息输出由存在的每个错误位产生的十六进制值。
位索引 | 兼容性问题 | 十六进制值 | 体系结构 |
---|---|---|---|
0 | 不支持的体系结构(例如,x86) | 0x00000001 | |
1 | 需要 SLAT | 0x00000002 | x64 |
2 | 需要安全启动功能 | 0x00000004 | x64 |
3 | 需要 IOMMU | 0x00000008 | X64 |
4 | 需要 MBEC/GMET | 0x00000010 | x64 |
5 | 需要 UEFI | 0x00000020 | x64 |
6 | 需要 UEFI WX 内存属性表 | 0x00000040 | x64 |
7 | 需要 ACPI WSMT 表 | 0x00000080 | x64 |
8 | 需要 UEFI MOR 锁定 | 0x00000100 | x64 |
9 | 已放弃 | ||
10 | 需要硬件虚拟化 | 0x00000400 | x64 |
11 | 需要安全启动 | 0x00000800 | ARM64 |
12 | 已放弃 | ||
13 | 设备无法满足所需的最小卷大小 64GB | 0x00002000 | x64、ARM64 |
14 | 需要系统驱动器 SSD | 0x00004000 | x64、ARM64 |
15 | 需要 Intel CET(仅适用于 W11 21H2) | 0x00008000 | x64 |
16 | ARM SoC 与 VBS 不兼容 | 0x00010000 | ARM64 |
17 | 需要 8GB RAM | 0x00020000 | x64 |
错误代码和错误标识示例:VBS_COMPAT_ISSUES 0x000000C0
0x000000C0 -> 0x00000080 AND 0x00000040 ->需要 UEFI WX 内存属性表,需要 ACPI WSMT 表