コードの整合性に対する仮想化ベースの保護を有効にする
メモリ整合性 は、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 の場合、メモリの整合性が向上します。
Warning
一部のアプリケーションおよびハードウェア デバイス ドライバーは、メモリの整合性と互換性がない場合があります。 この非互換性により、デバイスまたはソフトウェアが誤動作する可能性があり、まれにブート エラー (ブルー スクリーン) が発生する可能性があります。 このような問題は、メモリの整合性がオンになった後、または有効化プロセス自体の間に発生する可能性があります。 互換性の問題が発生した場合は、「修復手順の トラブルシューティング 」を参照してください。
メモリ整合性機能
- カーネル モード ドライバーの制御フロー ガード (CFG) ビットマップの変更を保護します。
- 他の信頼されたカーネル プロセスに有効な証明書があることを確認するカーネル モード コード整合性プロセスを保護します。
メモリ整合性を有効にする方法
エンタープライズ全体でハードウェアをサポートする Windows デバイスでメモリ整合性を有効にするには、次のいずれかのオプションを使用します。
- Windows セキュリティ設定
- Microsoft Intune (または別の MDM プロバイダー)
- グループ ポリシー
- Microsoft Configuration Manager
- レジストリ
Windows セキュリティ
メモリの整合性は、Windows セキュリティ設定でオンにすることができ、Windows セキュリティ>Device security>Core 分離の詳細>Memory integrity にあります。 詳細については、「Windows セキュリティのデバイス保護」を参照してください。
Windows 11 22H2 以降では、メモリの整合性がオフになっている場合、Windows セキュリティに警告が表示されます。 警告インジケーターは、Windows タスク バーと Windows 通知センターのWindows セキュリティ アイコンにも表示されます。 ユーザーは、Windows セキュリティ内から警告を無視できます。
Intuneを使用してメモリ整合性を有効にする
設定カタログを使用して、仮想化ベースのテクノロジ>Hypervisor 強制コード整合性設定を使用して、メモリの整合性を有効にします。 VirtualizationBasedTechnology CSP で HypervisorEnforcedCodeIntegrity ノードを使用することもできます。
グループ ポリシーを使用してメモリ整合性を有効にする
グループ ポリシー エディター (gpedit.msc) を使用して、既存の GPO を編集するか、新しい GPO を作成します。
[コンピューターの構成]>[管理用テンプレート]>[システム]>[Device Guard] の順に移動します。
仮想化ベースのセキュリティを有効にする] をダブルクリックします。
[ 有効] を選択し、[ コード整合性の仮想化ベースの保護] で [ UEFI ロックなしで有効] を選択します。 メモリの整合性がリモートまたはポリシーの更新によって無効にならないようにする場合にのみ、[ UEFI ロックで有効にする ] を選択します。 UEFI ロックを有効にしたら、メモリの整合性をオフにする場合は、セキュア ブートをオフにするには、UEFI BIOS メニューにアクセスできる必要があります。
[ OK] を選択 してエディターを閉じます。
ドメインに参加しているコンピューターに新しいポリシーを適用するには、再起動するか、管理者特権のコマンド プロンプトで gpupdate /force
を実行します。
レジストリ キーを使用してメモリの整合性を有効にする
メモリの整合性を有効にするには、次のレジストリ キーを設定します。 これらのキーは、グループ ポリシーによって提供される構成オプションの同様のセットを提供します
重要
以下のコマンドでは、[セキュア ブート] と [セキュア ブートと DMA 保護] の設定を選ぶことができます。 ほとんどの状況で、[セキュア ブート] の選択をお勧めします。 このオプションは、特定のコンピューターのハードウェアでサポートされているのと同じくらいの保護をセキュア ブートに提供します。 IOMMU (input/output memory management unit) が装備されているコンピューターでは、DMA 保護を適用したセキュア ブートを使用できます。 IOMMU が装備されていないコンピューターでは、セキュア ブートが有効になります。
[DMA を使用したセキュア ブート] を選択した場合、メモリの整合性と他の VBS 機能は、DMA をサポートするコンピューターに対してのみ有効になります。 つまり、IOMMU を持つコンピューターの場合のみです。 IOMMU のないコンピューターには、VBS またはメモリ整合性保護はありません。
システム上のすべてのドライバーは、コード整合性での仮想化ベースの保護に対応している必要があります。対応していない場合は、システムでエラーが発生する可能性があります。 これらの機能は、ユーザーのコンピューターで有効にする前に、テスト コンピューターのグループで有効にして試すことをお勧めします。
推奨設定 (UEFI ロックなしでメモリ整合性を有効にするには):
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "EnableVirtualizationBasedSecurity" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "Locked" /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Locked" /t REG_DWORD /d 0 /f
上記の推奨設定をカスタマイズする場合は、次のレジストリ キーを使用します。
VBS のみを有効にするには (メモリ整合性なし)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "EnableVirtualizationBasedSecurity" /t REG_DWORD /d 1 /f
VBS を有効にし、セキュア ブートのみを要求するには (値 1)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 1 /f
セキュア ブートと DMA 保護を使用して VBS を有効にするには (値 3)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 3 /f
UEFI ロックを使用せずに VBS を有効にするには (値 0)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "Locked" /t REG_DWORD /d 0 /f
UEFI ロックで VBS を有効にするには (値 1)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "Locked" /t REG_DWORD /d 1 /f
メモリ整合性を有効にするには
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f
UEFI ロックなしでメモリ整合性を有効にするには (値 0)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Locked" /t REG_DWORD /d 0 /f
UEFI ロックでメモリ整合性を有効にするには (値 1)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Locked" /t REG_DWORD /d 1 /f
必須モードで VBS (およびメモリ整合性) を有効にするには
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "Mandatory" /t REG_DWORD /d 1 /f
必須設定では、ハイパーバイザー、セキュア カーネル、またはその依存モジュールの 1 つが読み込みに失敗した場合に、OS ローダーの起動を続行できなくなります。
重要
仮想化モジュールの障害が発生した場合、システムは起動を拒否するため、このモードを有効にする前に特別な注意を払う必要があります。
メモリ整合性 UI を淡色表示し、"この設定は管理者によって管理されています" というメッセージを表示するには
reg delete HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity /v "WasEnabledBy" /f
メモリ整合性 UI を正常に動作させるために (淡色表示なし)
reg add HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity /v "WasEnabledBy" /t REG_DWORD /d 2 /f
App Control for Business を使用してメモリ整合性を有効にする
次のいずれかの手法を使用して、アプリ制御ポリシーを使用してメモリの整合性を有効にすることができます。
- アプリ制御ウィザードを使用して、アプリ制御ポリシーを作成または編集し、ウィザードの [ポリシー規則] ページで [ハイパーバイザーで保護されたコードの整合性] オプションを選択します。
- Set-HVCIOptions PowerShell コマンドレットを使用します。
- アプリ制御ポリシー XML を編集し、
<HVCIOptions>
要素の値セットを変更します。
注
アプリ制御ポリシーがメモリの整合性をオンにするように設定されている場合、ポリシーが監査モードの場合でも有効になります。
有効な 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 の ゲスト モード実行トラップ 機能の両方について報告されます。
このコマンドの出力には、使用可能なハードウェア ベースのセキュリティ機能と、現在有効になっている機能の詳細が表示されます。
AvailableSecurityProperties
このフィールドは、VBS とメモリの整合性に関連するセキュリティ プロパティの状態を列挙して報告するのに役立ちます。
値 | 説明 |
---|---|
0 | この値が設定されている場合は、デバイスには関連するプロパティがありません。 |
1 | この値が設定されている場合は、ハイパーバイザーのサポートを利用できます。 |
2 | この値が設定されている場合は、セキュア ブートを利用できます。 |
3 | この値が設定されている場合は、DMA 保護を利用できます。 |
4 | この値が設定されている場合は、セキュリティで保護されたメモリ上書きを利用できます。 |
5 | この値が設定されている場合は、NX 保護を利用できます。 |
6 | この値が設定されている場合は、SMM 移行を利用できます。 |
7 | 存在する場合は、MBEC/GMET を使用できます。 |
8 | この値が設定されている場合、APIC 仮想化を使用できます。 |
InstanceIdentifier
特定のデバイスに固有で、WMI によって設定される文字列。
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 が構成されます。 |
SecurityServicesRunning
このフィールドは、Credential Guard またはメモリ整合性が実行されているかどうかを示します。
値 | 説明 |
---|---|
0 | 実行中のサービスはありません。 |
1 | この値が設定されている場合は、Credential Guard が実行されています。 |
2 | 存在する場合は、メモリ整合性が実行されています。 |
3 | この値が設定されている場合は、System Guard セキュア起動が実行されています。 |
4 | この値が設定されている場合は、SMM Firmware Measurement が実行されています。 |
バージョン
このフィールドには、WMI クラスのバージョンが示されます。 現在有効な値は 1.0だけです。
VirtualizationBasedSecurityStatus
このフィールドには、VBS が有効になっているかどうか、また実行中であるかどうかが示されます。
設定値 | 説明 |
---|---|
0 | VBS は有効になっていません。 |
1 | VBS は有効になっていますが、実行されていません。 |
2 | VBS は有効になっており、実行されています。 |
PSComputerName
このフィールドには、コンピューター名が示されます。 コンピューター名として有効なすべての値。
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
を使用して仮想化ベースのセキュリティをオプトアウトする必要があります。