保護客體虛擬機器不受 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 (IBRS、STIBP、IBPB) 的處理器功能。 一旦更新了虛擬主機的韌體,Hypervisor 就可以在執行下列步驟之後,將這些額外功能提供給客體虛擬機器使用。

確定已設定讓 Hyper-V 向客體虛擬機器公開新的處理器功能

確定 Hyper-V 已設定為將新的處理器功能公開至客體虛擬機器。 此設定是根據客體虛擬機器的 VM 版本所配置。

如果主機上所有的虛擬機器都是 VM 8.0 版或更高版本,就不需要任何設定。 這些虛擬機器將會冷開機之後看到新的處理器功能。

如果有任何虛擬機器使用 8.0 以下的 VM 版本,則必須在主機作業系統上設定特定登錄值。 這樣會設定讓 Hyper-V 將新的處理器功能公開給使用較低 VM 版本的客體虛擬機器。

該登錄在 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization 底下,其值為 MinVmVersionForCpuBasedMitigations。 此值應以 “Major.Minor” 的格式設定為存取更新韌體功能所需的最小 VM 版本。 若要將韌體公開給主機上所有的虛擬機器 (即 1.0 版和更新版本),請在主機執行下列命令:

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

VM 8.0 版是透過 Windows Server 2016 和 Windows 10 年度更新版引進。 執行 Windows Server 2012 R2 和以下主機必須設定登錄值*

在具有更新韌體和主機的主機之間,即時移轉將會失敗,而不會有更新的韌體。 啟動作業會從儲存的狀態失敗。 如需詳細資訊,請參閱本文底部的常見問題。

選擇性:設定 Skylake Intel 系統以使用 Retpoline

在 Retpoline 的 Skylake Intel 主機上設定 VM,將會封鎖即時移轉至較新的主機 (,也就是 Skylake 和更新版本) 。

根據預設,在 Skylake 系統前執行的虛擬機器無法使用 retpoline。 若要允許這些系統利用以重試程式為基礎的防護功能,請將 底下 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization 設定 RetsPredictedFromRsbOnly1

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

若要反轉此設定 (亦即防止虛擬機器利用重試程式) ,請將 設定 RetsPredictedFromRsbOnly0

更新客體作業系統

若要在這些虛擬機器中完成防護以抵禦 CVE-2017-5715,客體作業系統必須進行更新和設定,以便充分發揮這些新功能。 針對 Microsoft 作業系統進行更新時,請遵循這篇文章中的指引。

注意:更新客體作業系統可以隨時在此程序中進行。 這可能會在更新主機韌體之前,或在客體虛擬機器冷開機之後發生。

執行客體冷開機

完成前三個步驟之後,虛擬機器必須經過冷開機,才能看到新的處理器功能。 這表示必須先將執行中 VM 的電源完全關閉,然後再啟動一次。 從客體作業系統中重新開機不足以達到此目的。

常見問題集

這對即時移轉有何影響?

將具有新處理器功能的虛擬機器移至沒有更新韌體的 Hyper-V 主機時,即時移轉將會失敗。 若要讓移至無韌體更新之主機的即時移轉得以進行,請停止在該客體虛擬機器內公開更新的處理器功能。 若要這樣做,最簡單的方式就是將 MinVmVersionForCpuBasedMitigations 修改成高於所需移轉之虛擬機器版本的 VM 版本,然後對該虛擬機器執行冷開機。

將沒有新處理器功能的虛擬機器移至具有更新韌體的 Hyper-V 主機時,其移轉將會成功。 不過,這些客體必須進行冷開機,才能看到更新的韌體功能。

設定為在 Skylake Intel 系統上使用 Retpoline 的虛擬機器將無法移轉至較新的處理器系列 (,例如 Skylake 和較新的) 。

5.0 版虛擬機器在 Windows Server 2012R2 與 Windows Server 2016 之間的即時移轉又該怎麼辦?

為了確保此案例獲得成功,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 模組/指令碼。 如需詳細的指示,請參閱這個頁面

這如何影響 VM 上具有儲存狀態的啟動作業?

啟動作業將會失敗。 若要這樣做,最簡單的方式就是將 MinVmVersionForCpuBasedMitigations 修改成高於所需移轉之虛擬機器版本的 VM 版本,然後對該虛擬機器執行冷開機。