メモリ整合性は、Windows 10、Windows 11、およびWindows Server 2016以降で使用できる仮想化ベースのセキュリティ (VBS) 機能です。 メモリ整合性とVBSは、Windowsの脅威モデルを改善し、Windowsカーネルを悪用しようとするマルウェアに対する保護を強化します。 VBSは、Windowsハイパーバイザーを使用して、カーネルが侵害される可能性があると想定するOSの信頼のルートとなる分離された仮想環境を作成します。 メモリ整合性は、VBSの分離された仮想環境内でカーネルモードのコード整合性を実行することによってWindowsを保護および強化する重要なコンポーネントです。 また、メモリの整合性は、システムの侵害に使用される可能性のあるカーネルメモリの割り当てを制限し、カーネルメモリページが安全なランタイム環境内でコードの整合性チェックに合格した後にのみ実行可能になり、実行可能ページ自体が書き込み可能になることはありません。
Note
メモリの整合性は、ハイパーバイザーで保護されたコードの整合性 (HVCI) またはハイパーバイザーによって適用されるコードの整合性と呼ばれることがあり、当初はDevice Guardの一部としてリリースされました。 Device Guardは、グループポリシーまたはWindowsレジストリでメモリの整合性とVBS設定を検索する場合を除き、使用されなくなりました。
これらの保護の詳細については、「仮想化ベースのセキュリティ システム リソース保護」を参照してください。
既定の有効化
メモリ整合性は、この記事で説明されているように、互換性のあるハードウェアで、Windows 11のクリーンインストールでは既定で有効になっています。以前は、SモードのWindows 10のクリーンインストールでのみ有効でした。 また、セキュリティで保護されたすべてのコアPcでも既定で有効になっています。 メモリ整合性の自動有効化要件を満たしていない他のシステムでは、メモリ整合性を有効にする方法で説明されているいずれかの方法を使用してオプトインできます。 IT担当者とエンドユーザーは、メモリ整合性が有効になっているかどうかを常に最終的に制御できます。
この機能が自動的に有効化されるハードウェア機能
PCが次の最小ハードウェア機能を満たしている場合、メモリ整合性は既定で有効になります。
| コンポーネント | Detail |
|---|---|
| プロセッサ |
|
| RAM | 最小8GB (x64プロセッサにのみ適用可能) |
| Storage | 64 GB 以上の SSD |
| ドライバー | メモリ整合性互換ドライバーがインストールされている必要があります。 ドライバーの詳細については、 「ドライバーの互換性とメモリ整合性」を参照してください。 |
| BIOS | 仮想化を有効にする必要があります。 |
メモリ整合性を自動的に有効にしないイメージを作成している場合でも、既定で有効になるようにイメージを構成できます。
Note
自動有効化は、既存のデバイスのアップグレードではなく、クリーン インストールにのみ関連します。
Note
Intel 第 11 世代 Core デスクトップ プロセッサは、現在の既定の有効化ロジックには含まれていません。 ただし、これらはメモリ整合性のために推奨されるプラットフォームであり、OEMによって有効にすることができます。
メモリ整合性とVBSコントロール
このセクションでは、デバイスの製造元とエンドユーザーがメモリ整合性とVBSを操作する方法について説明します。 管理者としてメモリの整合性の状態を制御する方法については、 「メモリの整合性を有効にする方法」を参照してください。
メモリの整合性を有効にします
Windowsでは、ほとんどのシステムでメモリの整合性が既定で有効になりますが、いくつかの理由により、これを防ぐことができます。 OEMは、OSイメージでレジストリキーを構成することによって、デバイスのメモリの整合性が有効になっていることを確認できます。
推奨される構成
イメージに次の2つのレジストリキーを設定して、メモリの整合性が有効になっていることを確認します。
| レジストリ キー | 値 |
|---|---|
| HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | Enabled=1 |
| HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | WasEnabledBy=1 |
| HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | EnabledBootId=<現在のBootId> |
BootIdは、正常に起動するたびに増加するカウンターであり、レジストリキーにあります。HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\BootId WasEnabledByとEnabledBootIdのレジストリキーは、起動できないデバイスに対して保護する設定を制御します。 設定すると、ブート中にシステムがクラッシュした場合、互換性のない起動に不可欠なドライバーがメモリの整合性によってブロックされる可能性がある場合、デバイスは自動的にメモリの整合性をオフにします。 この自動無効化機能は、BootIdがEnabledBootId+3未満の場合にのみ使用できます。 Windowsの一部のバージョンでは、自動無効化機能は、メモリの整合性がオフになった後も起動エラーが続く場合に元に戻すように設計されています。これは、メモリの整合性がエラーの根本原因ではなかったことを示します。
Note
高セキュリティシステムでは、WasEnabledByとEnabledBootIdを設定しないでください。
トラブルシューティング
SkTool を使用してハイパーバイザーと VBS の状態を確認する
最新の Windows SDK には、SkTool が含まれています。これは、Virtualization-Based セキュリティ (VBS) とハイパーバイザーに関連するあらゆる種類の問題をトラブルシューティングしたり、現在の状態を調べたりするための便利なユーティリティです。 SkTool.exe バイナリは、Windows SDK の bin フォルダーにあります。 一般的なパスは次のとおりです。
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\<Arch>
ここでは、(x64、arm64 など) のシステム アーキテクチャに対応しています。
コマンド ライン スイッチなしで実行すると、SkTool はハイパーバイザーと VBS の現在の状態を表示し、VBS が開始された理由と開始 されていない 理由を示します。 
このツールは、他の異なるコマンド ライン スイッチもサポートしています。最も重要なのは、次の点です。
- /status - ハイパーバイザーとセキュリティで保護されたカーネル情報を表示します (既定のコマンド ライン スイッチ)。
- /lkey - VSM マスター キー (LKey) プロビジョニングの状態を表示します。
- /mitigations - NT と Secure Kernel の軽減策の情報を表示します。
特に、"/lkey" スイッチを使用すると、Windows Hello などの拡張 Sign-In セキュリティ (ESS) に関する問題を、現在のユーザーの PIN または Face ID の受け入れを拒否する状況でトラブルシューティングを行うことができます。
たとえば、システム全体のセキュリティ体制 (TPM によって測定) の何かが変更されたために VSM マスター キーがアンシールに失敗した場合にツールが報告する内容を次に示します (この場合、セキュア ブートは無効になっています)。
C:\Tools>sktool.exe /lkey
Hypervisor / Secure Kernel / Secure Mitigations Parser Tool 1.4
VBS Master Key Provisioning information
Found UEFI Master Key provisioning information.
The system has tried to unseal the VBS master key with Status 0xC0000225.
A New VSM Master key has been generated (status 0x0) and stored in a UEFI variable (in plaintext).
メモリの整合性の状態を識別しています
次の揮発性レジストリキーは、メモリの整合性の状態を反映しています。
| レジストリ キー | 値 |
|---|---|
| HKLM\System\CurrentControlSet\Control\CI\State | HVCIEnabled |
メモリの整合性の状態を確認する他の方法として、 [実行中の仮想化ベースのセキュリティサービス]のMsInfo32を参照するか、Windowsセキュリティアプリのコア分離設定ページを参照して、メモリの整合性の値を確認します。 管理ツールを使用して確認するためのWMIインターフェイスもあります。 「有効なVBSとメモリの整合性機能を検証する」を参照してください。
ドライバーの問題のデバッグ
コードの整合性ログを確認して、メモリの整合性の結果として読み込みがブロックされたドライバーがないかどうかを確認します。 これらのログは、イベント ビューアーで次のパスの下に表示されます。
Applications and Service Logs\Microsoft\Windows\CodeIntegrity\Operational
一般に、メモリ整合性の互換性イベントにはEventID=3087があります。
メモリ整合性のデフォルトの有効化の結果を確認します
メモリ整合性のデフォルトの有効化の結果の詳細を表示するには、setupact.logを確認し、HVCIを検索します。 次のいずれかの結果ログと、有効化に関する決定につながったチェックの成功/失敗が表示されます。
メモリ整合性が有効になっています。 SYSPRP HVCI: Enabling HVCI
メモリ整合性が有効になっていません: SYSPRP HVCI: OS does not meet HVCI auto-enablement requirements. Exiting now.
デバイスが前に説明したregkeyメソッドを使用してメモリ整合性の有効化を無効にした場合、これはメモリ整合性のsysprepからの唯一のログになります。 デバイスに互換性の問題があった場合は、上記のログで次のエラー メッセージによって識別されます。
SYSPRP HVCI: Compatibility did not pass. VBS_COMPAT_ISSUES 0xXXXXXXXX
次に、潜在的なVBSまたはメモリ整合性の互換性の問題を列挙します。 各問題はビット配列内の 1 つのインデックスによって表され、エラー メッセージでは、存在する各エラー ビットを合わせて得られた 16 進値が出力されます。
| ビット インデックス | 互換性の問題 | 16 進値 | Architecture |
|---|---|---|---|
| 0 | サポートされていないアーキテクチャ(例。x86) | 0x00000001 | |
| 1 | SLAT が必要 | 0x00000002 | x64 |
| 2 | 0 x 00000004 | 0x00000004 | x64 |
| 3 | IOMMU が必要 | 0x00000008 | x64 |
| 4 | MBEC/GMET が必要 | 0x00000010 | x64 |
| 5 | UEFI が必要 | 0x00000020 | x64 |
| 6 | UEFI WX メモリ属性テーブルが必要 | 0x00000040 | x64 |
| 7 | ACPI WSMT テーブルが必要 | 0x00000080 | x64 |
| 8 | UEFI MOR ロックが必要 | 0x00000100 | x64 |
| 9 | 非推奨 | ||
| 10 | ハードウェア仮想化が必要 | 0x00000400 | x64 |
| 11 | Secure Launch が必要 | 0x00000800 | ARM64 |
| 12 | 非推奨 | ||
| 13 | デバイスのボリュームが必要なサイズ (64 GB 以上) を満たしていない | 0x00002000 | x64、ARM64 |
| 14 | システム ドライブ SSD が必要 | 0x00004000 | x64、ARM64 |
| 15 | Intel CETが必要 (W11 21H2にのみ該当) | 0x00008000 | x64 |
| 16 | ARM SoCはVBSと互換性がありません | 0x00010000 | ARM64 |
| 17 | 8 GB RAM が必要 | 0x00020000 | x64 |
エラー コードとエラー識別の例: VBS_COMPAT_ISSUES 0x000000C0
0x000000C 0-0x00000080 AND 0x00000040-UEFI WXメモリ属性テーブルが必要です、ACPI WSMTテーブルが必要です