启用基于虚拟化的代码完整性保护
警告
某些应用程序和硬件设备驱动程序可能与内存完整性不兼容。 这种不兼容可能会导致设备或软件出现故障,在极少数情况下,可能会导致启动失败 (蓝屏) 。 在启用内存完整性后或启用过程本身期间,可能会出现此类问题。 如果出现兼容性问题,请参阅 故障排除 以获取修正步骤。
内存完整性 是 Windows 中提供的基于虚拟化的安全 (VBS) 功能。 内存完整性和 VBS 改进了 Windows 的威胁模型,并针对试图利用 Windows 内核的恶意软件提供更强大的保护。 VBS 使用 Windows 虚拟机监控程序创建独立的虚拟环境,该环境成为假定内核可能遭到入侵的 OS 的信任根。 内存完整性是一个关键组件,它通过在 VBS 的独立虚拟环境中运行内核模式代码完整性来保护和强化 Windows。 内存完整性还限制可用于破坏系统的内核内存分配。
注意
- 内存完整性有时称为 虚拟机监控程序保护的代码完整性 (HVCI) 或 虚拟机监控程序强制实施的代码完整性,最初作为 Device Guard 的一部分发布。 除了在 组策略 或 Windows 注册表中查找内存完整性和 VBS 设置外,不再使用 Device Guard。
- 内存完整性更好地适用于 Intel Kabylake 和具有 基于模式的执行控制的更高处理器,以及具有 来宾模式执行陷阱 功能的 AMD Zen 2 及更高处理器。 较旧的处理器依赖于这些功能(称为 受限用户模式)的仿真,并且将对性能产生更大的影响。 启用嵌套虚拟化后,当 VM 版本 >= 9.3 时,内存完整性会更好。
内存完整性功能
- 保护内核模式驱动程序的控制流防护 (CFG) 位图的修改。
- 保护内核模式代码完整性进程,确保其他受信任的内核进程具有有效的证书。
如何打开内存完整性
若要在整个企业中使用支持硬件在 Windows 设备上启用内存完整性,请使用以下任一选项:
使用 Windows 安全中心 启用内存完整性
可以在Windows 安全中心设置中打开内存完整性,可在 Windows 安全中心>设备安全>核心隔离详细信息>中找到内存完整性。 有关详细信息,请参阅 Windows 安全中心 中的设备保护。
从 Windows 11 22H2 开始,如果关闭内存完整性,Windows 安全中心会显示警告。 警告指示器也显示在 Windows 任务栏和 Windows 通知中心的Windows 安全中心图标上。 用户可以在Windows 安全中心内消除警告。
验证已启用的 VBS 和内存完整性功能
使用 Win32_DeviceGuard WMI 类
Windows 10、Windows 11、Windows Server 2016及更高版本具有适用于 VBS 相关属性和功能的 WMI 类:Win32_DeviceGuard。 此类可使用以下命令从提升的 Windows PowerShell 会话查询:
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard
注意
从 Windows 10 版本 1803 和版本 21H2 开始,基于模式的执行控件属性将仅列为可用Windows 11。 对于 Intel 的 基于模式的执行控制和 AMD 的 来宾模式执行陷阱 功能,将报告此值。
此命令的输出提供了基于硬件的可用安全功能以及当前启用的功能的详细信息。
InstanceIdentifier:特定设备唯一且由 WMI 设置的字符串。
版本:此字段列出此 WMI 类的版本。 现在,唯一有效的值是 1.0。
AvailableSecurityProperties:此字段有助于枚举和报告 VBS 和内存完整性的相关安全属性的状态。
值 描述 0 如果存在,则设备上不存在相关属性。 1 如果存在,则虚拟机监控程序可用。 2 如果存在,则安全启动可用。 3 如果存在,则 DMA 保护可用。 4 如果存在,则安全内存覆盖可用。 5 如果存在,则 NX 保护可用。 6 如果存在,则 SMM 缓解可用。 7 如果存在,则 MBEC/GMET 可用。 8 如果存在,则 APIC 虚拟化可用。 CodeIntegrityPolicyEnforcementStatus:此字段指示代码完整性策略强制实施状态。
值 描述 0 关闭 1 审核。 2 执行。 RequiredSecurityProperties:此字段描述启用 VBS 所需的安全属性。
值 描述 0 无需任何项。 1 如果存在,则需要虚拟机监控程序支持。 2 如果存在,则需要安全启动。 3 如果存在,则需要 DMA 保护。 4 如果存在,则需要安全内存覆盖。 5 如果存在,则需要 NX 保护。 6 如果存在,则需要 SMM 缓解。 7 如果存在,则需要 MBEC/GMET。 SecurityServicesConfigured:此字段指示是否配置了 Credential Guard 或内存完整性。
值 描述 0 未配置任何服务。 1 如果存在,则配置凭据保护。 2 如果存在,则配置内存完整性。 3 如果存在,System Guard配置安全启动。 4 如果存在,则配置 SMM 固件度量。 5 如果存在,则配置内核模式硬件强制实施堆栈保护。 6 如果存在,则会在审核模式下配置内核模式硬件强制实施堆栈保护。 7 如果存在,Hypervisor-Enforced 配置分页转换。 SecurityServicesRunning:此字段指示 Credential Guard 还是内存完整性正在运行。
值 描述 0 没有运行任何服务。 1 如果存在,则运行凭据保护。 2 如果存在,则内存完整性正在运行。 3 如果存在,System Guard安全启动正在运行。 4 如果存在,则 SMM 固件度量正在运行。 5 如果存在,则正在运行内核模式硬件强制实施堆栈保护。 6 如果存在,则内核模式硬件强制堆栈保护在审核模式下运行。 7 如果存在,Hypervisor-Enforced 分页翻译正在运行。 SmmIsolationLevel:此字段指示 SMM 隔离级别。
UsermodeCodeIntegrityPolicyEnforcementStatus:此字段指示用户模式代码完整性策略强制实施状态。
值 描述 0 关闭 1 审核。 2 执行。 VirtualizationBasedSecurityStatus:此字段指示是否启用并运行 VBS。
值 描述 0 VBS 未启用。 1 VBS 已启用但尚未运行。 2 VBS 已启用且正在运行。 VirtualMachineIsolation:此字段指示是否启用了虚拟机隔离。
VirtualMachineIsolationProperties:此字段指示可用的虚拟机隔离属性集。
值 描述 1 AMD SEV-SNP 2 基于虚拟化的安全性 3 Intel TDX
使用 msinfo32.exe
确定可用且已启用的 VBS 功能的另一种方法是从提升的 PowerShell 会话运行 msinfo32.exe。 运行此程序时,VBS 功能将显示在 “系统摘要” 部分的底部。
疑难解答
- 如果设备驱动程序在运行时加载失败或崩溃,则可以使用 设备管理器 更新驱动程序。
- 如果在启动过程中遇到严重错误,或者打开内存完整性后系统不稳定,可以使用 Windows 恢复环境 (Windows RE) 进行恢复。
首先,禁用用于启用 VBS 和内存完整性的任何策略,例如组策略。
然后,在受影响的计算机上启动到Windows RE,请参阅Windows RE技术参考。
登录到 Windows RE 后,将内存完整性注册表项设置为 off:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 0 /f
最后,重启设备。
注意
如果使用 UEFI 锁打开了内存完整性,则需要禁用安全启动才能完成Windows RE恢复步骤。
虚拟机中的内存完整性部署
内存完整性可以保护 Hyper-V 虚拟机,就像保护物理计算机一样。 从虚拟机中启用内存完整性的步骤相同。
内存完整性可防止在来宾虚拟机中运行的恶意软件。 它不会向主机管理员提供额外的保护。 在主机中,可以禁用虚拟机的内存完整性:
Set-VMSecurity -VMName <VMName> -VirtualizationBasedSecurityOptOut $true
在 Hyper-V 虚拟机中运行内存完整性的要求
- Hyper-V 主机必须至少运行 Windows Server 2016 或 Windows 10 版本 1607。
- Hyper-V 虚拟机必须是第 2 代并且至少运行 Windows Server 2016 或 Windows 10。
- 可以同时启用内存完整性和 嵌套虚拟化 。 若要在虚拟机上启用 Hyper-V 角色,必须先在 Windows 嵌套虚拟化环境中安装 Hyper-V 角色。
- 虚拟光纤通道适配器与内存完整性不兼容。 在将虚拟光纤通道适配器附加到虚拟机之前,必须先使用
Set-VMSecurity
选择退出基于虚拟化的安全性。 - 传递磁盘的 AllowFullSCSICommandSet 选项与内存完整性不兼容。 在使用 AllowFullSCSICommandSet 配置传递磁盘之前,必须先使用
Set-VMSecurity
选择退出基于虚拟化的安全性。