コードの整合性に対する仮想化ベースの保護を有効にする
Warning
一部のアプリケーションおよびハードウェア デバイス ドライバーは、メモリの整合性と互換性がない場合があります。 この非互換性により、デバイスまたはソフトウェアが誤動作する可能性があり、まれにブート エラー (ブルー スクリーン) が発生する可能性があります。 このような問題は、メモリの整合性がオンになった後、または有効化プロセス自体の間に発生する可能性があります。 互換性の問題が発生した場合は、「修復手順の トラブルシューティング 」を参照してください。
メモリ整合性 は、Windows で使用できる仮想化ベースのセキュリティ (VBS) 機能です。 メモリの整合性と VBS は、Windows の脅威モデルを改善し、Windows カーネルを悪用しようとするマルウェアに対してより強力な保護を提供します。 VBS は Windows ハイパーバイザーを使用して、カーネルが侵害される可能性があることを前提とする OS の信頼のルートとなる分離された仮想環境を作成します。 メモリ整合性は、VBS の分離された仮想環境内でカーネル モード のコード整合性を実行することで Windows を保護および強化する重要なコンポーネントです。 メモリ整合性により、システムの侵害に使用できるカーネル メモリ割り当ても制限されます。
注
- メモリ整合性は、 ハイパーバイザーで保護されたコード整合性 (HVCI) または ハイパーバイザーによって適用されるコード整合性と呼ばれる場合があり、もともと Device Guard の一部としてリリースされました。 Device Guard は、グループ ポリシーまたは Windows レジストリでメモリの整合性と VBS 設定を見つける以外は使用されなくなりました。
- メモリの整合性は、 モードベースの実行制御を備えた Intel Kabylake 以上のプロセッサ、 およびゲスト モード実行トラップ 機能を備えた AMD Zen 2 以降のプロセッサで、より優れた機能を発揮します。 古いプロセッサは、 制限付きユーザー モードと呼ばれるこれらの機能のエミュレーションに依存しており、パフォーマンスに大きな影響を与えます。 入れ子になった仮想化が有効になっている場合、VM がバージョン >= 9.3 の場合、メモリの整合性が向上します。
メモリ整合性機能
- カーネル モード ドライバーの制御フロー ガード (CFG) ビットマップの変更を保護します。
- 他の信頼されたカーネル プロセスに有効な証明書があることを確認するカーネル モード コード整合性プロセスを保護します。
メモリ整合性を有効にする方法
エンタープライズ全体でハードウェアをサポートする Windows デバイスでメモリ整合性を有効にするには、次のいずれかのオプションを使用します。
Windows セキュリティを使用してメモリ整合性を有効にする
メモリの整合性は、Windows セキュリティ設定でオンにすることができ、Windows セキュリティ>Device security>Core 分離の詳細>Memory integrity にあります。 詳細については、「Windows セキュリティのデバイス保護」を参照してください。
Windows 11 22H2 以降では、メモリの整合性がオフになっている場合、Windows セキュリティに警告が表示されます。 警告インジケーターは、Windows タスク バーと Windows 通知センターのWindows セキュリティ アイコンにも表示されます。 ユーザーは、Windows セキュリティ内から警告を無視できます。
有効な VBS とメモリ整合性機能を検証する
WMI クラスWin32_DeviceGuard使用する
Windows 10、Windows 11、およびWindows Server 2016以降には、VBS 関連のプロパティと機能 (Win32_DeviceGuard) の WMI クラスがあります。 このクラスは、管理者特権の Windows PowerShell セッションから照会することができます。そのためには、次のコマンドを実行します。
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard
注
Mode Based Execution Control プロパティは、Windows 10 バージョン 1803 および Windows 11 version 21H2 から使用可能と表示されます。 この値は、Intel の モード ベースの実行制御 と AMD の ゲスト モード実行トラップ 機能の両方について報告されます。
このコマンドの出力には、使用可能なハードウェア ベースのセキュリティ機能と、現在有効になっている機能の詳細が表示されます。
InstanceIdentifier: 特定のデバイスに固有で WMI によって設定される文字列。
バージョン: このフィールドには、この WMI クラスのバージョンが一覧表示されます。 現在有効な値は 1.0だけです。
AvailableSecurityProperties: このフィールドは、VBS とメモリの整合性に関連するセキュリティ プロパティの状態を列挙して報告するのに役立ちます。
値 説明 0 この値が設定されている場合は、デバイスには関連するプロパティがありません。 1 この値が設定されている場合は、ハイパーバイザーのサポートを利用できます。 2 この値が設定されている場合は、セキュア ブートを利用できます。 3 この値が設定されている場合は、DMA 保護を利用できます。 4 この値が設定されている場合は、セキュリティで保護されたメモリ上書きを利用できます。 5 この値が設定されている場合は、NX 保護を利用できます。 6 この値が設定されている場合は、SMM 移行を利用できます。 7 存在する場合は、MBEC/GMET を使用できます。 8 この値が設定されている場合、APIC 仮想化を使用できます。 CodeIntegrityPolicyEnforcementStatus: このフィールドは、コード整合性ポリシーの適用状態を示します。
値 説明 0 オフ 1 監査 2 適用。 RequiredSecurityProperties: このフィールドでは、VBS を有効にするために必要なセキュリティ プロパティについて説明します。
値 説明 0 セキュリティ プロパティは必要ありません。 1 この値が設定されている場合は、ハイパーバイザーのサポートが必要です。 2 この値が設定されている場合は、セキュア ブートが必要です。 3 この値が設定されている場合は、DMA 保護が必要です。 4 この値が設定されている場合は、セキュリティで保護されたメモリ上書きが必要です。 5 この値が設定されている場合は、NX 保護が必要です。 6 この値が設定されている場合は、SMM 移行が必要です。 7 存在する場合は、MBEC/GMET が必要です。 SecurityServicesConfigured: このフィールドは、Credential Guard またはメモリ整合性が構成されているかどうかを示します。
値 説明 0 サービスは構成されていません。 1 この値が設定されている場合は、Credential Guard が構成されています。 2 存在する場合は、メモリ整合性が構成されます。 3 この値が設定されている場合は、System Guard セキュア起動が構成されています。 4 この値が設定されている場合は、SMM Firmware Measurement が構成されます。 5 存在する場合は、カーネル モードのハードウェア適用スタック保護が構成されます。 6 存在する場合、カーネル モードのハードウェア適用スタック保護は監査モードで構成されます。 7 存在する場合は、ページング翻訳 Hypervisor-Enforced 構成されます。 SecurityServicesRunning: このフィールドは、Credential Guard またはメモリ整合性が実行されているかどうかを示します。
値 説明 0 実行中のサービスはありません。 1 この値が設定されている場合は、Credential Guard が実行されています。 2 存在する場合は、メモリ整合性が実行されています。 3 この値が設定されている場合は、System Guard セキュア起動が実行されています。 4 この値が設定されている場合は、SMM Firmware Measurement が実行されています。 5 存在する場合は、カーネル モードのハードウェア適用スタック保護が実行されています。 6 存在する場合、カーネル モードのハードウェア適用スタック保護は監査モードで実行されます。 7 存在する場合は、ページング翻訳 Hypervisor-Enforced 実行されています。 SmmIsolationLevel: このフィールドは、SMM 分離レベルを示します。
UsermodeCodeIntegrityPolicyEnforcementStatus: このフィールドは、ユーザー モード コード整合性ポリシーの適用状態を示します。
値 説明 0 オフ 1 監査 2 適用。 VirtualizationBasedSecurityStatus: このフィールドは、VBS が有効で実行されているかどうかを示します。
値 説明 0 VBS は有効になっていません。 1 VBS は有効になっていますが、実行されていません。 2 VBS は有効になっており、実行されています。 VirtualMachineIsolation: このフィールドは、仮想マシンの分離が有効かどうかを示します。
VirtualMachineIsolationProperties: このフィールドは、使用可能な仮想マシン分離プロパティのセットを示します。
値 説明 1 AMD SEV-SNP 2 仮想化ベースのセキュリティ 3 Intel TDX
msinfo32.exe を使用する
使用可能で有効な VBS 機能を判断するもう 1 つの方法は、管理者特権の PowerShell セッションから msinfo32.exe を実行することです。 このプログラムを実行すると、[ システムの概要 ] セクションの下部に VBS 機能が表示されます。
トラブルシューティング
- デバイス ドライバーが実行時に読み込みに失敗したりクラッシュしたりした場合は、デバイス マネージャーを使用してドライバーを更新できる可能性があります。
- 起動中に重大なエラーが発生した場合、またはメモリの整合性をオンにした後にシステムが不安定な場合は、Windows Recovery Environment (Windows RE) を使用して回復できます。
まず、VBS とメモリの整合性を有効にするために使用されるすべてのポリシー (たとえば、グループ ポリシー) を無効にします。
次に、影響を受けるコンピューターでWindows REを起動し、「テクニカル リファレンスWindows RE参照」を参照してください。
Windows REにログインした後、メモリ整合性レジストリ キーをオフに設定します。
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 0 /f
最後に、デバイスを再起動します。
注
UEFI ロックでメモリ整合性を有効にした場合は、セキュア ブートを無効にして、Windows RE回復手順を完了する必要があります。
仮想マシンでのメモリ整合性のデプロイ
メモリ整合性は、物理マシンと同様に Hyper-V 仮想マシンを保護できます。 メモリの整合性を有効にする手順は、仮想マシン内から同じです。
メモリ整合性は、ゲスト仮想マシンで実行されているマルウェアから保護します。 ホスト管理者からの追加の保護は提供されません。 ホストから、仮想マシンのメモリ整合性を無効にすることができます。
Set-VMSecurity -VMName <VMName> -VirtualizationBasedSecurityOptOut $true
Hyper-V 仮想マシンでメモリ整合性を実行するための要件
- Hyper-V ホストでは、Windows Server 2016 または Windows 10 Version 1607 以降を実行している必要があります。
- Hyper-V 仮想マシンは第 2 世代であることが必要です。また、Windows Server 2016 または Windows 10 以上を実行している必要があります。
- メモリ整合性と 入れ子になった仮想化 を同時に有効にすることができます。 仮想マシンで Hyper-V ロールを有効にするには、まず、Windows 入れ子になった仮想化環境に Hyper-V ロールをインストールする必要があります。
- 仮想ファイバー チャネル アダプターはメモリ整合性と互換性がありません。 仮想ファイバー チャネル アダプターを仮想マシンに接続する前に、まず、
Set-VMSecurity
を使用して仮想化ベースのセキュリティをオプトアウトする必要があります。 - パススルー ディスクの AllowFullSCSICommandSet オプションは、メモリ整合性と互換性がありません。 AllowFullSCSICommandSet を使用してパススルー ディスクを構成する前に、まず、
Set-VMSecurity
を使用して仮想化ベースのセキュリティをオプトアウトする必要があります。