2019/07/11

メモ:Hyper-V の CPU スケジューラと CVE-2018-3646 緩和策

CPU の投機的実行のサイドチャネルの脆弱性に対する Hyepr-V ハイパーバイザーと Hyper-V 仮想マシンの脆弱性緩和(軽減)策については、なかなか難しい話なので以下のサポート情報を見て。

Windows guidance to protect against speculative execution side-channel vulnerabilities
https://support.microsoft.com/en-us/help/4457951/

これに関連したイベント ログと Hyper-V スケジューラ(仮想プロセッサのスケジュールと管理を行うもの)についてのメモ。


複数ある脆弱性の 1 つ CVE-2018-3646(L1TF VMM)の緩和策の状況は、イベントログのシステムログで、ソース「Hyper-V-Hypervisor」のイベント ID 「156」で確認できる。Hyper-V の仮想環境(Hyper-V ホスト、入れ子構造の仮想化を含む)や仮想化ベースのセキュリティ(Virtualization-based Security、VBS)を利用している場合は、一度、確認してみるといいと思う。
KB457951 にも書いてますが、ハイパースレッディング(HT)が有効になっていると、Hyper-V や VBS のセキュリティ境界が軟弱になるらしい。HT を無効化するとその分パフォーマンスは低下するし、HT 有効のままでも緩和策がパフォーマンスに影響する。

HT 有効のままでもパフォーマンスへの影響を最小化する技術として、Windows Server 2016/Windows 10 ver 1607 から Hyper-V Core スケジューラというものが利用できるらしい。Windows Server 2019/Windows 10 ver 1809 以降の既定のスケジューラ。それより前(Windows Server 2016 や Windows 10 ver 1803 以前)の既定は Classic スケジューラ。Windows Server 2019 Hyper-V の既定のスケジューラは Core スケジューラ(SMT 無効時は Classic が既定)、Windows Server 2016 Hyper-V(Server, version 1709 と 1803 の Hyper-V も)と Windows 10 ver 1607 ~ 1709 クライアント Hyper-V の既定は Classic スケジューラ、Windows 10 ver 1803 以降のクライアント Hyper-V の既定は Root スケジューラ。(訂正しました。私の適当なメモにコメントありがとうございました)

About Hyper-V hypervisor scheduler type selection
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/manage/about-hyper-v-scheduler-type-selection


Root スケジューラ以外で HT 有効だと、軽減策がパフォーマンスを低下させちゃうので、CVE-2018-3646 の仮想マシンのための軽減策が無効化されるらしい。そのことについては、ソース「Hyper-V-Hypervisor」のイベント ID 「157」でお知らせしてくれる。bcdedit /set hypervisorschedulertype core というコマンドを実行して、再起動しろって。対象の場合、イベント ID「156」のすぐ上にイベントが記録されていると思う。



現在のスケジューラは、ソース「Hyper-V-Hypervisor」のイベント ID 「2」の「Hypervisor scheduler type is 0x#.」で確認できる。Classic スケジューラは 0x1(SMT 無効)または 0x2、Core スケジューラは 0x3、Root スケジューラは 0x4 だと思う。


Hyper-V Core スケジューラーを使用する場合、仮想マシンごとにコアごとのスレッド数を設定してあげたほうがいいこともあるらしい。どうするかは自分で決める。推奨構成は
About Hyper-V hypervisor scheduler type selection を参考に。


Set-VMProcessor -VMName <仮想マシン名> -HwThreadCountPerCore 0または1または2
(※ 0 はホストから継承、1 は SMT 無効、2 (>1) は SMT スレッド数/コア、Windows Server 2016 では 0 はサポートされない)


投機的実行の脆弱性に対する対策はさまざまあって、どう対処するべきかケースバイケース。上の対策はその中の 1 つに過ぎない。このメモは適当に書いたもので、単に今回、1台の Windows Server 2016 Hyper-V ホストで見かけたイベント ID「157」のイベントが気になったので。ずいぶんと前からお知らせしてくれてたみたい。2019年2月以前のシステムログが上書きされちゃったのでわかりませんが、2月の時点で既にお知らせがありました。

投機的実行の脆弱性は難解だし、対策もその効果もよくわからんです。とりあえず、イベントログを確認してみて。ドキュメントはちゃんと見てないけど、場所だけブックマークっとく。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。