treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Hyper-VのイベントID「156」「157」の対策

7月に見掛けてちょっと気になっていたHyper-V関連のイベント。
脆弱性緩和にも関わる内容なので、気になって調べてみた内容をご報告します。

対象の環境

Windows10で実行しているクライアントHyper-V環境が今回の対象。
ざっくり言うと、クライアントHyper-Vを稼働させている環境で、ハイパースレッディングが有効になっているコンピュータ、というのが今回の対象になりそうです。

Hyper-V関連で記録されているイベント

今回の対象となるイベントは、システムイベントに記録されています。
ソース「Hyper-V-Hypervisor」で
イベントID「156」と「157」で記録されているイベント。
見やすくするために、「現在のログをフィルター」から、イベントソースとイベントIDをもとにしてフィルターを掛けるようにします。

f:id:treedown:20190722151924p:plain
フィルターすると、

f:id:treedown:20190722151945p:plain
こんな感じで、該当イベントだけが抽出されます。ここに表示されない場合、今回の件とは無関係といえそう。

で、早速フィルターで抽出されたログを確認。
まずはイベントID「156」

f:id:treedown:20190722152017p:plain
--------------------------------------------------------------
イベントID「156」の詳細
--------------------------------------------------------------
Hypervisor configured mitigations for CVE-2018-3646 for virtual machines.

Processor not affected: false
Processor family not affected: false
Processor supports cache flush: true
HyperThreading enabled: true
Parent hypervisor applies mitigations: false
Mitigations disabled by bcdedit: false
Mitigations enabled: true
Cache flush needed: false
--------------------------------------------------------------
ハイパーバイザーは、仮想マシン用にCVE-2018-3646の緩和策を構成しました。

影響を受けないプロセッサ:false
影響を受けないプロセッサファミリ:false
プロセッサはキャッシュフラッシュをサポートします。true
ハイパースレッディングが有効:true
親ハイパーバイザーは緩和策を適用します。false
bcdeditによって無効になっている緩和策:false
緩和策が有効:true
キャッシュフラッシュが必要です:false
--------------------------------------------------------------
つづいてイベントID「157」

f:id:treedown:20190722152045p:plain
--------------------------------------------------------------
イベントID「157」の詳細
--------------------------------------------------------------

The hypervisor did not enable mitigations for CVE-2018-3646 for virtual machines because HyperThreading is enabled and the hypervisor core scheduler is not enabled. To enable mitigations for CVE-2018-3646 for virtual machines, enable the core scheduler by running "bcdedit /set hypervisorschedulertype core" from an elevated command prompt and reboot.

--------------------------------------------------------------
ハイパースレッディングが有効になっていてハイパーバイザーコアスケジューラが有効になっていないため、ハイパーバイザーは仮想マシンのCVE-2018-3646の緩和策を有効にしませんでした。 仮想マシンでCVE-2018-3646の緩和策を有効にするには、昇格したコマンドプロンプトから「bcdedit / set hypervisorschedulertype core」を実行して再起動し、コアスケジューラを有効にします。
--------------------------------------------------------------

このイベントの最後に
"bcdedit /set hypervisorschedulertype core"
を実行すべし、という記載があります。

コマンド実行

コマンド実行は思っていたよりもあっさり完了。

f:id:treedown:20190722152111p:plain
「この操作を正しく終了しました」と表示されるだけで、特に画面表示もメッセージ表示もされませんでした。
イベントログ(157のほう)のメッセージに記載されていましたが、

  • このシステムでハイパースレッディングが有効になっている
  • 現在はハイパーバイザーコアスケジューラが有効になっていない
  • これ↑が要因で、「仮想マシンのCVE-2018-3646の緩和策」が有効ではない

という状態にある、といえます。
そのため、
CVE-2018-3646の緩和策を有効にするために
「bcdedit /set hypervisorschedulertype core」
を実行しなきゃいけない、ということで実行して、OSを再起動することになりました。

再起動後

再起動後、イベントID156&157は、イベントID「129」と「156」に変わりました。
--------------------------------------------------------------
※イベントID「129」

f:id:treedown:20190722152150p:plain
Hypervisor initialized I/O remapping.

Hardware present: false
Hardware enabled: false
Policy: 0x0
Enabled features: 0x0
Internal information: 0x0
Problems: 0x0
Additional information: 0x0
--------------------------------------------------------------
※イベントID「156」

f:id:treedown:20190722152208p:plain
Hypervisor configured mitigations for CVE-2018-3646 for virtual machines.

Processor not affected: false
Processor family not affected: false
Processor supports cache flush: true
HyperThreading enabled: true
Parent hypervisor applies mitigations: false
Mitigations disabled by bcdedit: false
Mitigations enabled: true
Cache flush needed: true
--------------------------------------------------------------

あと、イベントID「2」の表記が実行前と実行後で変化。

f:id:treedown:20190722152235p:plain
「Hypervisor scheduler type is 0x2.」となっていたのが、

f:id:treedown:20190722152300p:plain
「Hypervisor scheduler type is 0x3.」に変化しました。

まだ、ちゃんと理解できていないものの、 Core スケジューラとClassic スケジューラとRoot スケジューラの三種類あって、その状態を示しているよう。
まだ勉強中です。

このあとは…

単純にコマンド実行だけで終わり、というわけでもなく、後にはHyper-V Core スケジューラの種類や構成を設定することが推奨されています。

HYPER-V ハイパーバイザー スケジューラの種類の選択について

https://docs.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/manage/about-hyper-v-scheduler-type-selection

これって元を正せば投機的実行における脆弱性が発端。
ここも役立ちそうです。

Windows を投機的実行のサイドチャネルの脆弱性から保護するためのガイダンス

https://support.microsoft.com/ja-jp/help/4457951/windows-guidance-to-protect-against-speculative-execution-side-channel

うーん、単純にコマンド実行するところまでは完了したものの、もうちょっと考えないといけないことがありそうな感じがします。