Windows 11 Pro 23H2における仮想環境の構築におけるWHPを使用したパフォーマンスの低下について

コーヒーの支援お待ちしております☕

I look forward to your coffee support ☕

Buy Me a Coffee

この記事を読むのにかかる時間 3

Windows11 Pro 23H2における仮想環境の構築におけるWHPを使用したパフォーマンスの低下について

背景

Windows11 Pro 23H2 Japanese Editionにて仮想環境は通常、共存できないため、VMware Workstation Pro 17.5を使用するためには、VBS(virtualization-based security)を無効化する必要がありました。

VBSを無効化にするためにはWindowsが使用しているHyper-VをオフにしてDevice GuardとCredential Guard、Windows Defenderが使用しているCore Isorationをオフにする必要があるのはググればすぐ分かることですが、すべてをOFFにしているにも関わらず、Hyper-Vを使用した機能はすべてオフにしているが、一部の機能がHyper-Vを使用しているため、結果的にVBSをオフにできないため、仮想化ソフトウェアであるVMware Workstation Pro 17.5が正常に使用できないという問題が発生しました。

WHPを使用したHyper-Vとの共存について

VMware Workstation Pro 17.5がHyper-Vを使用していて共存できないというのは正確ではなく、WHP(Windows Hypervisor Platform)を使用してULMとして仮想環境を構築することが出来ます。

しかしながらそれはHyper-V上にネストされた仮想マシンを構築するため、すこぶるリソースを消費するが、すこぶるパフォーマンスの悪い仮想マシンが出来上がります。自分の仮想マシンが何で動いているかを確認するには仮想マシンを一度立ち上げ、vmware.logのmoniter modeを見れば分かります。

CPL0であればVMwareの仮想化機能を使用しているため、本来のパフォーマンスで動いています。

しかしながらそれがULMであった場合は、WHPを使用して仮想マシンを動かしているため、パフォーマンスに甚大な影響を及ぼします。

VBSについて

Windows Proが標準搭載しているWindowsハイパーバイザーを使用した防御機能です。この機能を使用すると、隔離された環境を使用して、ホストへの侵害を防ぐものです。

そのVBSの機能としての一例としてMemory integrity記載します。

トラブルシュートをする過程でVBSの全ての機能をDisabedにしなくてはならなかったため、Windowsの防御機構について調べる必要がありました。

VBSがOFFになっているかを確認するにはmsinfo32、またはコマンドプロンプトでsysteminfoを使用すると確認することが出来ます。

一般的なVBSをOFFにする方法について

一般的には次の作業をすることによってVBSがDisabledになるはずです。

  • Device GuardをDisabledにする
  • Credential GuardをDisabledにする
  • BIOSでSecure BootをDisabledにする
  • BIOSでVT-dのみを有効にする(CPUによって異なります。VT-dをDisabledにするとVBSが確かにDisabledになりますが仮想化機能すべてをDisabledにしているに等しいです。)
  • Windows SecurityのCore IsorationをDisabledにする

上記を行う手順はググればたくさん出てくるので簡単にだけ記載します。

Hyper-Vのアンインストール

Control Panel -> Programs and Features -> Turn Windows features on or off

  • uncheck Hyper-V
  • uncheck Virtual Machine Platform
  • uncheck Windows Hypervisor Platform

Core Isorationの無効化

Settings -> Windows Security -> Device Security -> Core isolation details

disable Memory integrity

Device Guardの無効化

  • Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard (changed to 0)
  • Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard (changed to 0)

Credential Guardの無効化

  • Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa (changed to 0)

以下のコードはMicrosoftのドキュメントを参考にして、理解した上で実行してください。責任は取れません。

mountvol X: /s
copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y
bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"
bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:
mountvol X: /d

BCDedit

C:\Windows\System32> bcdedit /set hypervisorlaunchtype off
C:\Windows\System32> bcdedit /set {current} hypervisorlaunchtype off

services.msc

Disabled everything including Hyper-V

Disable VBS with group policy

Computer Configuration\Administrative Templates\System\Device Guard\Turn on Virtualization Based Security

テクニカルサポートとの戦い

書き洩らしているものも多いかもしれませんが、上記の全ての手順を行い、UI上からDisabledにする、またはレジストリを直接いじる、さらにはコマンド上からもすべてDisabledにしましたがHyper-Vが有効であり、VBSをDisabledにすることが出来ませんでした。

VMwareのコミュニティーなどで議論されてるのは上記の手順のいずれかであって、10時間ぐらいググり続けて、すべての解決策を試した結果、OFFにすることが出来なかったため、まずVMwareの有料サポートのチケットを切りました。

vs VMware Support

それは全く予想していませんでした。

サポート内容を記載するときに日程、つまり月曜日から金曜日までの9時-18時を指定するチェックがありました。金曜日の22時頃その他、問い合わせ内容を記載してチケットを送信しました。

月曜日の13時頃、私の携帯電話が鳴りました。それはVMwareからでした。サポートの電話でしたが、とても早いインド英語を使用していたため、私は戦わなければなりませんでした。

別で記事にしますが、私は2つのチケットを切っていて1つの問題に対してはVMwareが解決策を持っていました。

結果的には、VMwareのパフォーマンスについての問題はVMware SupportはWHPを使用しないでCPL0を使用して仮想マシンを使用すればいいというのはわかっていましたが、Device GuardなどのVBSをDisabledにする手順やBIOSの設定など画面共有をしながら彼らと5時間を2日間挑戦しましたが、解決できませんでした。

出来る限りすべての解決策を試したが解決できず、これ以上はWindowsの問題でVMwareがサポートしているものではないとのことでした。

ちなみに、ULMで動いていた仮想マシンをWHPをアンインストールしたらどうなるのかを訪ねたところ、何もしなくてもCPL0で動くそうです。しかしWHPのモジュールをインストールするのは簡単ですが、削除するのはとても大変です。手順を教えてもらいましたが、感想としては、クリーンインストールしたほうが早そう。と思いました。

有料のチケットを切ると、ポリシー上、一年間は解決するまでサポートを続けなくてはならないそうです。

vs Lenovo Support

最初、このPCはThinkpad P1 Gen6で、LenovoでプリインストールされたWindows 11 Proを使用していました。

幸いにもLenovo1年間のサポートに入っていたため、サポートを受けることが出来ました。

プリインストールしているものにHyper-Vを使用した防御機能などのソフトウェアをプリインストールしていないか尋ねました。

調査の結果、Lenovoはそのようなソフトウェアをインストールしていないとのことでした。

Lenovoのコミュニティーでたくさんの議論を見ることはできますが、はっきり言ってしまえばLenovoのせいではありません。

万が一のこともあってLenovo Supportとの相談の結果、クリーンイメージを使用した再インストールを試してみることになりました。

Microsoftが提供しているクリーンイメージを使用しても同様にVBSがOFFに出来ませんでした。

そのためLenovoがプリインストールして提供しているすべてのソフトウェアやドライバーに問題がないことがわかりました。

vs Kaspersky Support

一応セキュリティソフトとしてカスペルスキーをインストールしていたのでダメ元で聞いてみました。

もしかしたら実質的にCore Isorationのような機能があるのではないかと思いましたが、Kaspersky Supportとしてはカスペルスキーをタスクから終了して、VBSがDisabledにならないか確認してください。Disabledにならなければカスペルスキーの問題ではありません。とのことです。

私的にはOSの問題だからカスペルスキーをアンインストールしてOSを再起動しなきゃわからないんじゃないかと思いましたが、上記のLenovo Supportに問い合わせた結果と合わせてクリーンイメージを使用してOSの再インストールをしました。

結果は、解決しなかったので、カスペルスキーも問題ないことが分かりました。

vs Microsoft Support

VMwareも強敵でしたが、Microsoft Supportもある意味で強敵でした。

Microsoftのテクニカルサポートに連絡をしました。しかしながら数十時間Windowsの仮想化防御機構について調べた私のほうが、テクニカルサポートのWindows担当より詳しく、逆にWindowsの仮想化防御機構の機能について説明する結果となりました。

一応、Hyper-VはデフォルトでDisabledになっていると言っていましたが、事実Enabledになっていました。

都合上、3回問い合わせましたが、全てのサポートエンジニアが分かりかねます。テクニカルすぎてこの窓口(テクニカルサポート)のサポート範囲外といいました。

結果として、個人向けのテクニカルサポートでは対応できない問題で、Microsoftの最上位Suppoprt窓口であるMicrosoft Unifiedを紹介されました。

大企業向けに主に、AD, Azureを使用した大規模ネットワーク構築の際のサポートをするようなサポート窓口です。この窓口を紹介したMicrosoft Supportは最低でも5万円のチケット、および問題によってはそれ以上の可能性があると言っていました。

個人的な使用にもかかわらず大企業向けのサポートを受けなくてはいけないのかと思いました。

救世主現る。

それは数日後の話・・Kaspersky Supportがカスペルスキーの提供している仮想化防御機構を使用したいのではないかと解釈してくれて、本来の目的とは違いましたが、仮想化防御機能担当の専門チームに聞いてくれて、VBSをDisabledにする方法についての手順を案内してくれました。その中に、見たことのない解決策がありました。

もし、「利用可能な場合はハードウェア仮想化を使用する」を希望の場合は
対処するための手順が沢山あるため、下記の操作お試しください。

※下記はOS側の操作となるため、ご不明点がある場合、ご利用中のPCメーカー様、
 または、Microsoft社へご相談をお願いいたします。

【1】
スマートアプリコントロールをオフにします。
1.[スタート]ボタンをクリックし、Windows セキュリティを入力して、
 Enterを押します。
2.左側の「アプリとブラウザーコントロール」をクリックし、右側の
 「スマートアプリコントロールの設定」をクリックします。
3.「オフ」をクリックします。
4.PC再起動して、改善あるかを確認します。

上記で改善がない場合、「オペレーティングシステムでコードの整合性
コントロールが有効になっています~」を修正します。

【2】
1.[スタート]ボタンをクリックし、検索欄にPower Shellを入力後、
 Power shellを右クリックして管理者として実行を選択します。
2.Power Shellで以下のコマンドを実行します。

Disable-WindowsOptionalFeature -online -FeatureName Windows-Defender-ApplicationGuard
Dism /online /Disable-Feature /FeatureName:"Windows-Defender-ApplicationGuard"

3.PC再起動します。改善あるかを確認します。

改善がない場合、引き続き下記をお試しください。

【3】
1.下記を参考にして、Credential Guardを無効にします
https://docs.microsoft.com/ja-jp/windows/security/identity-protection/credential-guard/credential-guard-manage

2.Windows 設定→更新とセキュリティ→Windows セキュリティ→デバイス
 セキュリティ→コア分離の詳細を開きます。メモリ整合性オプションが
 有効かどうかを確認します。有効になっている場合は、無効にし、
 PCを再起動して問題を再確認します。

3.無効になっている場合、以下を参考にし、Device Guardを無効にします。
https://www.tenforums.com/tutorials/68913-enable-disable-device-guard-windows-10-a.html?__cf_chl_jschl_tk__=pmd_MVkFc1zFk.4JPVB2z_JdGtutIrCP4pds4z2v298d6kI-1634732029-0-gqNtZGzNAjujcnBszRIl
※英文となります。ご了承ください。

4.PC再起動します。 改善あるかを確認します。

5.上記操作で改善がない場合、コマンドプロンプトを開き、管理者として
 以下のコマンドを 1 つずつ実行します。

bcdedit /set hypervisorlaunchtype off

6.PC再起動します。改善あるかを確認します。

7.改善がない場合、下記URLにアクセスします。
https://www.microsoft.com/en-us/download/details.aspx?id=53337

8.ツールをCドライブにダウンロードし、解凍します。

9.PowerShellを管理者として開き、以下のコマンドを実行します

set-executionpolicy remotesigned
C:\DG_Readiness_Tool_v3.6\DG_Readiness.ps1 -Disable

ファイルが見つからずコマンドが失敗する場合は、次のコマンドを試してください。
C:\DG_Readiness_Tool_v3.6\DG_Readiness_Tool_v3.6\DG_Readiness.ps1 -Disable

10.PC再起動します。改善あるかを確認します。

11.上記操作で改善がない場合、regedit を起動し下記パスに移動します。
HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> DeviceGuard

12.このレジストリ ブランチをエクスポートします。
13.続いて右側に新しいキーを書き込みます
 右クリック→新規→DWORD (32 ビット) 値「EnableVirtualizationBasedSecurity」と
 いう名前を付けます。デフォルトでは 0 になっているはずです。ダブルクリックし
 値を確認します。

14.PC再起動します。改善あるかを確認します。

一連の操作を行っても改善がない場合は、下記操作を行っていただきますよう
お願いいたします。

【4】
1.設定→アプリ→オプション機能→windowsのその他の機能→[Windowsの
 機能の有効化または無効化]をクリックし、ダイアログの[Microsoft
 Defender Application Guard]を選択します。

※「Microsoft Defender Application Guard」の設定状態を確認してください。
 チェックが入っている場合は、チェックを外します。また、ウィンドウを
 拡張してすべての設定のスクリーンショットを作成してください。

【参考:スクリーンショットを作成する方法】
https://support.kaspersky.co.jp/common/diagnostics/492#block1

2.その後 [OK] を押します。
※再起動を要求された場合、まだ再起動を行わないようご注意ください。

3.再度、regedit を起動し下記パスに移動します。
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows

4.DeviceGuard サブフォルダー (左側) があるかどうかを確認します。
 存在する場合は、右クリックして「削除」を選択します。

5.PC再起動します。改善あるかを確認します。

6.BIOS でセキュア ブートが有効になっている場合は、無効にします。
※手順は、ビデオをご参照ください。
https://www.youtube.com/watch?v=HMdq6W9ZyVs

この手順をすべて実施しました。

おそらくVBSをDisabledにすることに成功した手順は次の内容です。

このツールをMicrosoftがリリースしていることをMicrosoft Supportは知りませんでした。

Use this tool to see if your hardware is ready for Device Guard and Credential Guard. You can also use this to enable Device Guard or Credential Guard.
This tool is a Windows PowerShell script that needs to run with elevated permissions. It will work with Windows 10 (beginning with version 1607) and Windows Server 2016.
You can use this tool in the following ways:

  1. Check if the device can run Device Guard or Credential Guard
  2. Check if the device is compatible with the Hardware Lab Kit tests that are ran by partners
  3. Enable and disable Device Guard or Credential Guard
  4. Check the status of Device Guard or Credential Guard on the device
  5. Integrate with System Center Configuration Manager or any other deployment mechanism to configure registry settings that reflect the device capabilities
  6. Use an embedded ConfigCI policy in audit mode that can be used by default to enable Device Guard when a custom policy is not provided

Usage:
DG_Readiness.ps1 –[Enable/Disable/Capable/Ready] –[DG/CG/HVCI/HLK] -Path <ConfigCI policy> -AutoReboot

このツールをダウンロードして以下のコマンドを管理者でPowerShellを使って実行します。

PS C:\Windows\system32> set-executionpolicy remotesigned
PS C:\Windows\system32> C:\DG_Readiness_Tool_v3.6\DG_Readiness.ps1 -Disable

再起動をかけるとCredential GuardとVBSをDisabledにするけどいい?って警告が出ますが、警告にしたがって、F3とかのキーを押すとVBSがDisabledになりました。

結論

Windowsマジでわからん。

コーヒーの支援お待ちしております☕

I look forward to your coffee support ☕

Buy Me a Coffee

シェアする

  • このエントリーをはてなブックマークに追加

フォローする