エクスプロイト保護をカスタマイズする

適用対象:

Defender for Endpoint を試す場合は、 無料試用版にサインアップしてください。

エクスプロイト保護は、オペレーティング システムのプロセスおよび個々のアプリに対して様々なエクスプロイト軽減策を自動的に適用します。

個々のデバイスで Windows セキュリティ アプリを使用して、これらの設定を構成します。 次に、他のデバイスに展開できるように、構成を XML ファイルとしてエクスポートします。 グループ ポリシーを使用して XML ファイルを一度に複数のデバイスに配布することができます。 PowerShell を使用して軽減策を構成することもできます。

この記事では、エクスプロイト保護で使用できる各軽減策の一覧を示します。 軽減策をシステム全体で適用できるか、個々のアプリに適用できるかを示し、軽減策のしくみの簡単な説明を提供します。

また、Windows セキュリティ、PowerShell、モバイル デバイス管理 (MDM) 構成サービスプロバイダー (CSP) を使用して軽減策を有効または構成する方法についても説明します。 これは、ネットワーク全体に展開できる構成を作成するための最初の手順です。 次の手順では、構成を生成、エクスポート、インポート、および複数のデバイスに展開します。

警告

一部のセキュリティ軽減テクノロジでは、一部のアプリケーションとの互換性の問題が発生する可能性があります。運用環境またはネットワークの残りの部分に構成をデプロイする前に、監査モードを使用して、すべてのターゲット使用シナリオで悪用防止をテストする必要があります。

エクスプロイト保護の軽減策

すべての軽減策は、個々のアプリに対して構成できます。 一部の軽減策は、オペレーティング システム レベルで適用することもできます。

各軽減策は、オン、オフ、または既定値に設定できます。 一部の軽減策には、表の説明に示されている追加のオプションがあります。

既定値は、常に各軽減策の 既定値を使用する オプションで角かっこで囲んで指定されます。 次の例では、データ実行防止の既定値は "オン" です。

軽減策の設定ごとに [既定の構成を使用する] は、ホーム ユーザーの日常的な使用に対する基本レベルの保護に関する推奨事項を示します。 エンタープライズ展開では、個々のニーズに必要な保護を考慮する必要があり、既定から離れた構成を変更する必要がある場合があります。

各軽減策に関連する PowerShell コマンドレットについては、この記事の下部にある PowerShell リファレンス テーブル を参照してください。

軽減策 説明 に適用できます。 監査モードを使用できます
制御フロー ガード (CFG) 間接的な呼び出しの制御フローの整合性を保証します。 必要に応じてエクスポートを抑制し、厳密な CFG を使用できます。 システムレベルとアプリレベル 不要
データ実行防止 (DEP) ヒープやスタックなどのデータ専用メモリ ページからコードを実行できないようにします。 32 ビット (x86) アプリに対してのみ構成可能で、他のすべてのアーキテクチャに対して永続的に有効になります。 ATL thunk 実行を有効にする。 システムレベルとアプリレベル いいえ
イメージのランダム化の強制 (必須 ASLR) /DYNAMICBASE を使ってコンパイルされていないイメージの再配置を強制する 。 必要に応じて、再配置情報がないイメージの読み込みを失敗させることができます。 システムレベルとアプリレベル 不要
メモリ割り当てのランダム化 (ボトムアップ ASLR) 仮想メモリの割り当ての場所をランダムにします。 これには、システム構造ヒープ、スタック、TEB、および PEB が含まれます。 必要に応じて、64 ビット プロセスに対してより広いランダム化分散を使用できます。 システムレベルとアプリレベル いいえ
例外チェーンの検証 (SEHOP) 例外ディスパッチ中の例外チェーンの整合性を確保します。 32 ビット (x86) アプリケーションでのみ構成できます。 システムレベルとアプリレベル 不要
ヒープの整合性の検証 ヒープの破損が検出されたときにプロセスを終了します。 システムレベルとアプリレベル いいえ
任意のコード ガード (ACG) イメージにバックアップされていない実行可能コードの導入を防止し、コード ページが変更されないようにします。 必要に応じて、スレッドのオプトアウトを許可し、リモート ダウングレードを許可できます (PowerShell でのみ構成できます)。 アプリレベルのみ はい
整合性が低いイメージのブロック 整合性が低いことが示されているイメージが読み込まれないようにします。 アプリレベルのみ はい
リモート イメージのブロック リモート デバイスからイメージが読み込まれないようにします。 アプリレベルのみ いいえ
信頼されていないフォントのブロック システム フォント ディレクトリにインストールされていない GDI ベースのフォント、特に Web からフォントを読み込むのを防ぎます。 アプリレベルのみ はい
コードの整合性ガード Microsoft、WHQL、またはそれ以降によって署名されたイメージの読み込みを制限します。 必要に応じて、Microsoft Store署名済みイメージを許可できます。 アプリレベルのみ はい
拡張ポイントの無効化 AppInit DLL、ウィンドウ フック、Winsock サービス プロバイダーなど、すべてのプロセスへの DLL インジェクションを許可するさまざまな拡張メカニズムを無効にします。 アプリレベルのみ 不要
Win32k システム コールの無効化 アプリが Win32k システム呼び出しテーブルを使用できないようにします。 アプリレベルのみ はい
子プロセスを許可しない アプリが子プロセスを作成できないようにします。 アプリレベルのみ はい
エクスポート アドレス フィルター (EAF) 悪意のあるコードによって解決されている危険な操作を検出します。 必要に応じて、悪用で一般的に使用されるモジュールによるアクセスを検証できます。 アプリレベルのみ はい
インポート アドレス フィルター (IAF) 悪意のあるコードによって解決されている危険な操作を検出します。 アプリレベルのみ はい
実行のシミュレート (SimExec) 機密性の高い API の呼び出しが正当な呼び出し元に返されるようにします。 32 ビット (x86) アプリケーションでのみ構成できます。 AGCとは互換性がありません。 アプリレベルのみ はい
API 呼び出しの検証 (CallerCheck) 機密性の高い API が正当な呼び出し元によって呼び出されるようにします。 32 ビット (x86) アプリケーションでのみ構成できます。 AGCとは互換性がありません。 アプリレベルのみ はい
ハンドルの使用状態の検証 無効なハンドル参照で例外が発生します。 アプリレベルのみ 不要
軽減策の依存関係の整合性の検証 Windows イメージの依存関係の読み込みにコード署名を強制します。 アプリレベルのみ いいえ
スタックの整合性の検証 (StackPivot) 機密 API に対してスタックがリダイレクトされていないことを確認します。 AGCとは互換性がありません。 アプリレベルのみ はい

重要

[プログラムの設定] セクションにアプリを追加し、そこで個別の軽減策設定を構成した場合は、[システム設定] セクションで指定したのと同じ軽減策の構成の上に適用されます。 既定の動作を理解するのに次のマトリックスと例が役立ちます:

[プログラム設定] で有効 [システム設定] で無効 動作
はい 不要 [プログラム設定] で定義されているとおり
はい はい [プログラム設定] で定義されているとおり
不要 はい [システム設定] で定義されているとおり
不要 不要 [既定のオプションを使用する] で定義されている既定値
  • 例 1 Mikael は、[システム設定] セクションの [データ実行防止 (DEP)] を [既定でオフ] に設定します。 次にMikael はアプリの test.exe を [プログラム設定] セクションに追加します。 そのアプリのオプションで、Mikaelは [データ実行防止 (DEP)] の [システム設定のオーバーライド] オプションを有効にして、スイッチを [オン] に設定します。 [プログラム設定] セクションには他にアプリがありません。 結果として、 DEP は test.exe に対してのみ有効になります。 他のすべてのアプリには DEP が適用されません。

  • 例 2 Josie は、[システム設定] セクションの [データ実行防止 (DEP)] を [既定でオフ] に設定します。 その後、Josie はアプリの test.exe を [プログラム設定] セクションに追加します。 そのアプリのオプションで、Josie は [データ実行防止 (DEP)] の [システム設定のオーバーライド] オプションを有効にして、スイッチを [オン] に設定します。 Josie は、[プログラム設定] セクションにアプリの miles.exe を追加し、[制御フロー ガード (CFG)] を [オン] に設定します。 Josie は、DEP またはそのアプリのその他の軽減策の [システム設定のオーバーライド] オプションは有効にしません。 結果として、DEP は test.exe に対して有効になります。 DEP は、miles.exe を含む他のアプリでは有効になりません。 CFG は miles.exe に対して有効になります。

注意

この記事で問題が見つかった場合は、Windows Server/Windows クライアント パートナーに直接報告するか、お住まいの国の Microsoft テクニカル サポート番号を使用できます。

Windows セキュリティ アプリを使用してシステム レベルの軽減策を構成する

  1. タスク バーで盾のアイコンを選択するか、スタート メニューで "Windows セキュリティ" を検索して、Windows セキュリティ アプリを開きます。

  2. [アプリとブラウザーの制御] タイル (または左側のメニュー バーのアプリ アイコン) を選択し、[エクスプロイト保護] を選択します。

  3. [システム設定] セクションで、構成する軽減策を見つけて、次のいずれかの設定を指定します。 [プログラムの設定] セクションで個別に構成されていないアプリでは、ここで構成されている設定が使用されます。

    • 既定でオン - この軽減策がアプリ固有の [プログラム設定] セクションで設定されていないアプリに対して軽減策が 有効 になります
    • 既定ではオフ - この軽減策がアプリ固有の [プログラム設定] セクションで設定されていないアプリに対して軽減策が 無効 になります
    • 既定値を使用 - Windows 10 または Windows 11 のインストールによって設定されている既定の構成に応じて、軽減策が有効または無効になります。既定値 (オン または オフ) は、常に軽減策ごとに [既定値を使用する] ラベルの横で指定されます

    注意

    一部の設定を変更すると、[ユーザー アカウント制御] ウィンドウが表示されることがあります。 管理者の資格情報を入力して設定を適用します。

    一部の設定を変更するには、再起動が必要になる場合があります。

  4. 構成するすべてのシステムレベルの軽減策について、この手順を繰り返します。

  5. [プログラムの設定] に移動し、軽減策を適用するアプリを選択します。

    1. 構成するアプリが既に一覧表示されている場合は、それを選択し、[編集] を選択します。
    2. アプリが一覧にない場合は、一覧の上部にある [カスタマイズするプログラムの追加] を選択し、アプリを追加する方法を選択します。
      • [プログラム名で追加] を使用して、その名前を持つ実行中のプロセスに軽減策を適用します。 拡張子を持つファイルを指定する必要があります。 完全なパスを入力して、その場所でその名前を持つアプリのみに軽減策を制限できます。
      • 標準のエクスプローラー ファイル ピッカー ウィンドウを使用して目的のファイルを検索して選択するには、[正確なファイル パスの選択] を使用します。
  6. アプリを選択すると、適用できるすべての軽減策の一覧が表示されます。 軽減策を有効にするには、チェック ボックスを選択し、スライダーを [オン] に変更します。 追加のオプションを選択します。 [監査] を選択すると、監査モードでのみ軽減策が適用されます。 プロセスまたはアプリを再起動する必要がある場合、または Windows を再起動する必要がある場合は、通知されます。

  7. 構成するすべてのアプリと軽減策について、これらの手順を繰り返します。 構成の設定が完了したら、[適用] を選択します。

こうしてこれらの設定を XML ファイルとしてエクスポートすることも、引き続きアプリ固有の軽減策を構成することもできます。

構成を XML ファイルとしてエクスポートすると、あるデバイスから他のデバイスに構成をコピーできます。

PowerShell リファレンス

Windows セキュリティ アプリを使用して Exploit Protection を構成することも、PowerShell コマンドレットを使用することもできます。

PowerShell と Windows セキュリティのどちらを使用するかに関係なく、最近変更された構成設定は常に適用されます。 つまり、アプリを使用して軽減策を構成し、PowerShell を使用して同じ軽減策を構成すると、アプリが更新され、PowerShell で行った変更が表示されます。 その後、アプリを使用して軽減策をもう一度変更する場合は、その変更が適用されます。

重要

グループ ポリシーを使用してデバイスに展開された変更は、ローカル構成をオーバーライドします。 初期構成を設定するときは、グループ ポリシー構成が適用されていないデバイスを使用して、変更がオーバーライドされないようにします。

コマンドレット ProcessMitigationを使用して、PowerShell 動詞 Get または Set を使用できます。 Get を使用すると、デバイスで有効になっている軽減策の現在の構成状態が一覧表示されます。-Name コマンドレットとアプリ exe を追加して、そのアプリのみに対する軽減策を確認します:

Get-ProcessMitigation -Name processName.exe

重要

構成されていないシステムレベルの軽減策については NOTSET の状態が表示されます。

システムレベルの設定の場合、NOTSET は、その軽減策の既定の設定が適用されたことを示します。

アプリレベルの設定の場合、NOTSET は、その軽減策のシステムレベルの設定が適用されたことを示します。

各システムレベルの軽減策の既定の設定は、Windows セキュリティで確認できます。

Set を使用して、次の形式で各軽減策を構成します:

Set-ProcessMitigation -<scope> <app executable> -<action> <mitigation or options>,<mitigation or options>,<mitigation or options>

ここで、

  • <Scope>:
    • 特定のアプリに軽減策を適用する必要があることを示す -Name。 このフラグの後にアプリの実行可能ファイルを指定します。
    • システムレベルで軽減策を適用する必要があることを示す -System
  • <Action>:
    • 軽減策を有効にする -Enable
    • 軽減策を無効にする -Disable
  • <Mitigation>:

たとえば、ATL サンク エミュレーションを使用してデータ実行防止 (DEP) 軽減策を有効にし、C:\Apps\LOB\tests フォルダー内の testing.exe という実行可能ファイルに対して有効にし、その実行可能ファイルが子プロセスを作成できないようにするには、次のコマンドを使用します:

Set-ProcessMitigation -Name c:\apps\lob\tests\testing.exe -Enable DEP, EmulateAtlThunks, DisallowChildProcessCreation

重要

各軽減策オプションは、コンマで区切ります。

システムレベルで DEP を適用する場合は、次のコマンドを使用します:

Set-Processmitigation -System -Enable DEP

軽減策を無効にするには、-Enable-Disable に置き換えることができます。 ただし、アプリレベルの軽減策の場合は、そのアプリに対してのみ軽減策が強制的に無効になります。

軽減策をシステムの既定値に戻す必要がある場合は、次の例に示すように、-Remove コマンドレットも含める必要があります:

Set-Processmitigation -Name test.exe -Remove -Disable DEP

軽減策を 監査モードに設定することもできます。 軽減策に PowerShell コマンドレットを使用する代わりに、次の軽減策コマンドレットの表で指定されている 監査モードコマンドレットを 使用します。

たとえば、以前に使用した testing.exe の監査モードで任意の Code Guard (ACG) を有効にするには、次のコマンドを実行します。

Set-ProcessMitigation -Name c:\apps\lob\tests\testing.exe -Enable AuditDynamicCode

監査モードを無効にするには、同じコマンドを使用しますが、 -Enable-Disableに置き換えます。

PowerShell リファレンス表

次の表に、各軽減策の構成に使用できる PowerShell コマンドレット (および関連する監査モード コマンドレット) を示します。

軽減策 適用対象 PowerShell コマンドレット 監査モードのコマンドレット
制御フロー ガード (CFG) システムレベルとアプリレベル CFG、StrictCFG、SuppressExports 監査は使用できません
データ実行防止 (DEP) システムレベルとアプリレベル DEP、EmulateAtlThunks 監査は使用できません
イメージのランダム化の強制 (必須 ASLR) システムレベルとアプリレベル ForceRelocateImages 監査は使用できません
メモリ割り当てのランダム化 (ボトムアップ ASLR) システムレベルとアプリレベル BottomUp、HighEntropy 監査は使用できません
例外チェーンの検証 (SEHOP) システムレベルとアプリレベル SEHOP、SEHOPTelemetry 監査は使用できません
ヒープの整合性の検証 システムレベルとアプリレベル TerminateOnError 監査は使用できません
任意のコード ガード (ACG) アプリレベルのみ DynamicCode AuditDynamicCode
整合性が低いイメージのブロック アプリレベルのみ BlockLowLabel AuditImageLoad
リモート イメージのブロック アプリレベルのみ BlockRemoteImages 監査は使用できません
信頼されていないフォントのブロック アプリレベルのみ DisableNonSystemFonts AuditFont、FontAuditOnly
コードの整合性ガード アプリレベルのみ BlockNonMicrosoftSigned、AllowStoreSigned AuditMicrosoftSigned, AuditStoreSigned
拡張ポイントの無効化 アプリレベルのみ ExtensionPoint 監査は使用できません
Win32k システム コールの無効化 アプリレベルのみ DisableWin32kSystemCalls AuditSystemCall
子プロセスを許可しない アプリレベルのみ DisallowChildProcessCreation AuditChildProcess
エクスポート アドレス フィルター (EAF) アプリレベルのみ EnableExportAddressFilterPlus, EnableExportAddressFilter [1] 監査は使用できません [2]
インポート アドレス フィルター (IAF) アプリレベルのみ EnableImportAddressFilter 監査は使用できません [2]
実行のシミュレート (SimExec) アプリレベルのみ EnableRopSimExec 監査は使用できません [2]
API 呼び出しの検証 (CallerCheck) アプリレベルのみ EnableRopCallerCheck 監査は使用できません [2]
ハンドルの使用状態の検証 アプリレベルのみ StrictHandle 監査は使用できません
軽減策の依存関係の整合性の検証 アプリレベルのみ EnforceModuleDepencySigning 監査は使用できません
スタックの整合性の検証 (StackPivot) アプリレベルのみ EnableRopStackPivot 監査は使用できません [2]

[1]: 次の形式を使用して、プロセスの DLL に対して EAF モジュールを有効にします。

Set-ProcessMitigation -Name processName.exe -Enable EnableExportAddressFilterPlus -EAFModules dllName1.dll,dllName2.dll

[2]: この軽減策の監査は、PowerShell コマンドレットでは使用できません。

通知のカスタマイズ

ルールがトリガーされ、アプリまたはファイルがブロックされたときの通知をカスタマイズする方法については、「Windows セキュリティ」を参照してください。

関連項目