保护来宾虚拟机免受 CVE-2017-5715(分支目标注入)的攻击

本页提供有关保护 Hyper-V 主机上的虚拟机免受 CVE-2017-5715(分支目标注入)的其他详细信息。 有关 Windows Server 的一般指南,请参阅此页面

若要确保虚拟机受到保护,需要执行以下步骤:

  1. 更新主机操作系统。
  2. 确保虚拟化主机已更新到包含 CVE-2017-5715 更新的固件。
  3. 确保 Hyper-V 配置为向来宾虚拟机公开新的处理器功能。
  4. 请根据需要更新来宾操作系统。
  5. 执行来宾虚拟机冷启动。

更新主机操作系统

将 Windows 操作系统更新应用到虚拟化主机。 有关如何启用此更新的详细信息,请参阅 Microsoft知识库文章4072699

确保虚拟化主机已更新到包含 CVE-2017-5715 更新的固件

OEM 的固件更新可能包含可用于防范 CVE-2017-5715 的新处理器功能。 更新虚拟化主机的固件后,虚拟机监控程序可以在执行以下步骤后向来宾虚拟机提供这些附加功能。

确保 Hyper-V 配置为向来宾虚拟机公开新的处理器功能

确保将 Hyper-V 配置为向来宾虚拟机公开新的处理器功能。 此配置基于来宾虚拟机的 VM 版本

如果主机上的所有虚拟机都是 VM 8.0 或更高版本,则无需配置。 这些虚拟机在冷启动后会看到新的处理器功能。

如果有任何虚拟机的 VM 版本低于 8.0,则必须在主机操作系统上设置特定的注册表值。 这会将 Hyper-V 配置为将新的处理器功能公开到具有较低 VM 版本的来宾虚拟机中。

该注册表值为 MinVmVersionForCpuBasedMitigations 下的 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization。 该值应设置为需要访问更新的固件功能的最低 VM 版本,格式为“Major.Minor”。 若要向主机上的所有虚拟机(即版本 1.0 及更高版本)公开固件,请在主机上运行以下命令:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d "1.0" /f

Windows Server 2016 和 Windows 10 周年更新引入了 VM 版本 8.0。 运行 Windows Server 2012 R2 及更低版本主机必须设置注册表值*

在具有更新固件的主机与没有更新固件的主机之间,实时迁移将会失败。 从保存的状态开始启动操作失败。 有关详细信息,请参阅本文底部的常见问题解答。

可选:将 Skylake 之前的 Intel 系统配置为使用 Retpoline

在较旧的 Intel 主机(Skylake 之前)上为 Retpoline 配置虚拟机将阻止其实时迁移到更新的主机(如 Skylake 及更高版本)。

默认情况下,在 Skylake 以前的系统上运行的虚拟机无法使用 retpoline。 若要允许这些系统利用基于 Retpoline 的缓解措施,请将 RetsPredictedFromRsbOnly 下的 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization 设置为 1

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v RetsPredictedFromRsbOnly /t REG_DWORD /d 1 /f

若要反转此配置(即防止虚拟机利用 retpoline),请将 RetsPredictedFromRsbOnly 设置为 0

更新来宾操作系统

若要在这些虚拟机中完成对 CVE-2017-5715 的保护,必须更新来宾操作系统并将其配置为利用这些新功能。 对于 Microsoft 操作系统,请在更新时遵循 Windows Server 和 Azure Stack HCI 指南,以防止基于芯片的微架构和推理执行侧信道漏洞中的指导。

注意:在此过程中可以随时更新来宾操作系统。 在更新主机固件或冷启动来宾虚拟机之前,可能会出现此问题。

执行来宾冷启动

完成前三个步骤后,虚拟机必须经过冷启动才能查看新的处理器功能。 这意味着正在运行的 VM 必须完全关闭电源,然后才能再次启动。 从来宾操作系统内部重新启动是不够的。

常见问题

这如何影响实时迁移?

迁移到没有更新固件的 Hyper-V 主机时,具有新处理器功能的虚拟机的实时迁移将失败。 若要在不更新固件的情况下实时迁移到主机,请停止在该来宾虚拟机中公开更新的处理器功能。 执行此操作的最简单方法是将 MinVmVersionForCpuBasedMitigations 修改为需要迁移的虚拟机上方的 VM 版本,并执行该虚拟机的冷启动。

迁移到具有更新固件的 Hyper-V 主机时,没有新处理器功能的虚拟机迁移将成功。 但是,这些来宾需要冷启动才能查看更新的固件功能。

配置为在预 Skylake Intel 系统上使用 Retpoline 的虚拟机将无法迁移到较新的处理器系列(即 Skylake 和更新)。

Windows Server 2012R2 和 Windows Server 2016 之间版本 5.0 虚拟机的实时迁移怎么样?

若要确保在此方案中成功,必须在 Windows Server 2012R2 系统和 Windows Server 2016 系统上设置注册表值。 迁移到 Windows Server 2016 后,VM 版本将保持 5.0,因此需要注册表项才能向虚拟机公开新的处理器功能。

本指南是否适用于 VMWare 上运行的虚拟机?

否,本指南特定于 Hyper-V 主机上运行的虚拟机。

本指南是否适用于 Windows 10 上的 Hyper-V?

可以,相同的步骤适用于在 Windows Server 和客户端上运行的虚拟机。

在执行虚拟机的冷启动之前,是否需要安装固件更新?

是的,需要先更新主机操作系统和固件,然后再冷启动虚拟机。

如果我的 OEM 尚未提供更新的固件,该怎么办?

查看 Windows Server 2016 Hyper-V 主机针对推理执行侧信道漏洞的替代保护措施

如何检查虚拟机的 VM 版本?

在 Hyper-V 主机上运行以下 PowerShell:

Get-VM * | Format-Table Name, Version  

是否需要执行其他操作来保护在“处理器兼容性模式”下运行的虚拟机?

不。 按照本页中的说明操作后,新的处理器功能也会向在处理器兼容模式下启动的虚拟机公开。

如果群集中只有一半的计算机收到固件更新,该怎么办?

这会影响群集中的实时迁移。 具有新处理器功能的虚拟机在未更新固件的情况下无法实时迁移到主机。

如何验证来宾虚拟机是否有权访问新的处理器功能?

使用“推理控制”PowerShell 模块/脚本。 有关详细说明,请参阅 Windows Server 和 Azure Stack HCI 指南,以防止基于芯片的微架构和推理执行侧信道漏洞

这如何影响具有保存状态的 VM 上的启动操作?

启动操作将失败。 执行此操作的最简单方法是将 MinVmVersionForCpuBasedMitigations 修改为需要迁移的虚拟机上方的 VM 版本,并执行该虚拟机的冷启动。