CVE-2017-5715 (分岐先インジェクション) からのゲスト仮想マシンの保護

このページでは、CVE-2017-5715 (分岐先インジェクション) から Hyper-V ホスト上の仮想マシンを保護する際の詳細について説明します。 Windows Server の一般的なガイダンスについては、このページを参照してください。

仮想マシンが保護されていることを確認するには、次の手順を実行する必要があります。

  1. ホスト オペレーティング システムを更新します。
  2. 仮想化ホストが CVE-2017-5715 に対応した更新プログラムを含むファームウェアに更新されていることを確認します。
  3. ゲスト仮想マシンに新しいプロセッサの機能を公開するように Hyper-V が構成されていることを確認します。
  4. 必要に応じて、ゲスト オペレーティング システムを更新します。
  5. ゲスト仮想マシンのコールド ブートを実行します。

ホスト オペレーティング システムを更新する

仮想化ホストに Windows オペレーティング システムの更新プログラムを適用します。 この更新プログラムを有効にする方法については、マイクロソフト サポート技術情報 4072699 を参照してください。

仮想化ホストが CVE-2017-5715 に対応した更新プログラムを含むファームウェアに更新されていることを確認する

OEM から提供されるファームウェアの更新プログラムに、CVE-2017-5715 (IBRS、STIBP、IBPB) からの保護に使用できる新しいプロセッサの機能が含まれている可能性があります。 仮想化ホストのファームウェアを更新した後、ハイパーバイザーで次の手順を実行すると、これらの追加機能をゲスト仮想マシンで利用できるようになります。

ゲスト仮想マシンに新しいプロセッサの機能を公開するように Hyper-V が構成されていることを確認する

Hyper-V が、新しいプロセッサ機能をゲスト仮想マシンに公開するように構成されていることを確認します。 この構成は、ゲスト仮想マシンの VM バージョンに基づいています。

ホスト上のすべての仮想マシンが VM バージョン 8.0 以降である場合、構成は必要ありません。 これらの仮想マシンでは、コールド ブート後に、プロセッサの新機能が認識されます。

VM バージョン 8.0 未満の仮想マシンがある場合は、ホスト オペレーティング システムで特定のレジストリ値を設定する必要があります。 これによって、以前の VM バージョンのゲスト仮想マシンに新しいプロセッサの機能を公開するように Hyper-V が構成されます。

このレジストリ値は、HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization の下にある MinVmVersionForCpuBasedMitigations です。 値は、最新のファームウェア機能にアクセスする必要がある最低限の 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 Anniversary Update で導入されました。 R2 以下Windows Server 2012実行しているホストは、レジストリ値を設定する必要があります*

ファームウェアが更新されたホストと、更新されたファームウェアのないホストの間でライブ マイグレーションが失敗します。 保存された状態から開始操作が失敗します。 詳細については、この記事の下部にある FAQ を参照してください。

省略可能: Retpoline を使用するように プレ Skylake Intel システムを構成する

Retpoline 用の Pre-Skylake Intel ホストに VM を構成すると、新しいホスト (つまり、Skylake 以降) へのライブ マイグレーションがブロックされます。

既定では、Skylake より前のシステムで実行されている仮想マシンでは、retpoline を使用できません。 これらのシステムがレトポリン ベースの軽減策を利用できるようにするには、 を HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization に設定RetsPredictedFromRsbOnlyします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 のオペレーティング システムの場合は、更新時にこの記事のガイダンスに従ってください。

注: ゲスト オペレーティング システムの更新は、このプロセス内でいつでも実行できます。 実行できるのは、ホストのファームウェアを更新する前またはゲスト仮想マシンをコールド ブートした後です。

ゲストのコールド ブートを実行する

最初の 3 つの手順を完了した後、新しいプロセッサ機能を参照するには仮想マシンのコールド ブートを実行する必要があります。 つまり、実行中の 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 Sever とクライアントの両方で実行される仮想マシンに同じ手順が適用されます。

仮想マシンのコールド ブートを実行する前に、ファームウェア更新プログラムをインストールする必要がありますか。

はい。仮想マシンのコールド ブートを実行する前に、ホスト オペレーティング システムとファームウェアを更新する必要があります。

まだ OEM が更新されたファームウェアを提供していない場合は、どうすればよいですか。

投機的実行のサイドチャネルの脆弱性から Windows Server 2016 Hyper-V ホストを保護するための代替手段」を参照してください。

仮想マシンの VM バージョンを確認する方法を教えてください。

Hyper-V ホスト上で次の PowerShell コマンドを実行します。

Get-VM * | Format-Table Name, Version  

"プロセッサ互換性モード" で実行されている仮想マシンを保護するために、何か異なる処理を行う必要がありますか。

いいえ。 このページで説明した手順に従うと、プロセッサ互換性モードで起動された仮想マシンにも新しいプロセッサ機能が公開されます。

クラスター内の半分のコンピューターにのみファームウェアの更新プログラムが適用されている場合はどうなりますか。

これは、クラスター内のライブ マイグレーションに影響します。 新しいプロセッサ機能を備えている仮想マシンは、ファームウェアが更新されていないホストへのライブ マイグレーションを実行できません。

ゲスト仮想マシンが新しいプロセッサ機能にアクセスできることを検証する方法を教えてください。

"投機実行の制御" に関連する PowerShell モジュール/スクリプトを使用します。 詳細な手順については、このページを参照してください。

これは、保存状態の VM での開始操作にどのような影響を与えますか?

開始操作は失敗します。 これを行う最も簡単な方法は、MinVmVersionForCpuBasedMitigations を、移行する必要がある仮想マシンの VM バージョンよりも大きい値に変更し、その仮想マシンのコールド ブートを実行することです。