エクスプロイト保護のリファレンス
適用対象:
- Microsoft Defender for Endpoint Plan 1
- Microsoft Defender for Endpoint Plan 2
- Microsoft Defender XDR
Microsoft Defender ATP を試してみたいですか? 無料試用版にサインアップしてください。
Exploit Protection は、開発者がソフトウェアをコンパイルして配布した後に、エンタープライズ管理者と IT 担当者が適用できるアプリケーションに高度な保護を提供します。
この記事は、エクスプロイト保護ポリシーを正常に構築して適用するのに役立つ、エクスプロイト保護のしくみを、ポリシー レベルと個々の軽減レベルの両方で理解するのに役立ちます。
軽減策の適用方法
エクスプロイト保護の軽減策は、アプリケーションごとに適用されます。
軽減策は、保護を構成するプログラムごとにレジストリ エントリを使用して構成されます。 これらの設定は、プログラム (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\*ImageFileName*\MitigationOptions
) ごとに MitigationOptions レジストリ エントリに格納されます。 これらは、プログラムを再起動したときに有効になり、変更してプログラムをもう一度再起動するまで有効なままになります。
重要
イメージ ファイルの実行オプションでは、ファイル名またはパスのみを指定でき、バージョン番号、アーキテクチャ、またはその他の差別化要因は指定できません。 一意の名前またはパスを持つアプリに対する軽減策を対象とするように注意してください。そのバージョンをテストしたデバイスとそのアプリケーションのアーキテクチャにのみ適用します。
PowerShell、グループ ポリシー、または MDM を使用して XML 構成ファイルを使用して悪用保護の軽減策を構成する場合、この XML 構成ファイルを処理するときに、個々のレジストリ設定が自動的に構成されます。
エクスプロイト保護のリセット
重要
XML ファイルを配布するポリシーが強制されなくなった場合、この XML 構成ファイルによって展開された設定が自動的に削除されることはありません。
エクスプロイト保護設定を削除するには、クリーン Windows 10またはWindows 11 デバイスから XML 構成をエクスポートし、この新しい XML ファイルをデプロイします。 または、Microsoft は、エクスプロイト保護設定をリセットするためのWindows セキュリティベースラインの一部として XML ファイルを提供します。
PowerShell を使用してエクスプロイト保護設定をリセットするには、次のコマンドを使用します。
Set-ProcessMitigation -PolicyFilePath EP-reset.xml
Windows セキュリティ ベースラインと共に配布される EP-reset.xml を次に示します:
<?xml version="1.0" encoding="UTF-8"?>
<MitigationPolicy>
<AppConfig Executable="ONEDRIVE.EXE">
<DEP OverrideDEP="false" />
<ASLR OverrideRelocateImages="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
</AppConfig>
<AppConfig Executable="firefox.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
</AppConfig>
<AppConfig Executable="fltldr.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="GROOVE.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="Acrobat.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="AcroRd32.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="chrome.exe">
<DEP OverrideDEP="false" />
</AppConfig>
<AppConfig Executable="EXCEL.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="iexplore.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="INFOPATH.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="java.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaw.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaws.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="LYNC.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSACCESS.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSPUB.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OIS.EXE">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OUTLOOK.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="plugin-container.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="POWERPNT.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="PPTVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VISIO.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VPREVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="WINWORD.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wmplayer.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wordpad.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
</MitigationPolicy>
軽減策リファレンス
次のセクションでは、Exploit Protection の各軽減策によって提供される保護、軽減策の互換性に関する考慮事項、および使用可能な構成オプションについて詳しく説明します。
任意のコード ガード
説明
任意のコード ガードは、悪意のある攻撃者がメモリの安全性に関する脆弱性を通じて任意のコードをメモリに読み込み、そのコードを実行するのを防ぐのに役立ちます。
任意のコード ガードは、動的に生成されたコード (たとえば、exe 自体や dll から読み込まれないコード) を実行しないようにアプリケーションを保護します。 任意のコード ガードは、メモリが実行可能ファイルとしてマークされないようにすることで機能します。 アプリケーションが メモリを割り当てようとすると、保護フラグがチェックされます。 (メモリは、読み取り、書き込み、または実行保護フラグを使用して割り当てられます)。割り当てに 実行保護フラグを含めようとすると、メモリ割り当てが失敗し、エラー コード (STATUS_DYNAMIC_CODE_BLOCKED) が返されます。 同様に、アプリケーションが既に割り当てられている メモリの保護フラグを変更しようとして、且つ実行保護フラグが含まれている場合、アクセス許可の変更は失敗し、エラー コード (STATUS_DYNAMIC_CODE_BLOCKED) が返されます。
実行フラグが設定されないようにすることで、Windows 10 と Windows 11 のデータ実行防止機能は、そのメモリに設定され、命令ポインターがそのメモリーに設定され、コードが実行されるのを防ぎます。
互換性に関する考慮事項
任意のコード ガードにより、実行可能ファイルとしてメモリを割り当てることができなくなります。これにより、Just-In-Time (JIT) コンパイラなどの方法との互換性の問題が発生します。 たとえば、ほとんどの最新のブラウザーは、パフォーマンスを最適化するために JavaScript をネイティブ コードにコンパイルしています。 この軽減策をサポートするには、JIT コンパイルを保護されたプロセスの外部に移動するために、再設計する必要があります。 スクリプトやその他の中間言語からコードを動的に生成する設計の他のアプリケーションも、同様にこの軽減策と互換性がありません。
構成オプション
スレッドのオプトアウトを許可 - 個々のスレッドがこの保護をオプトアウトできるように軽減策を構成できます。 開発者は、この軽減策を認識してアプリケーションを記述し、このスレッドで動的コードを実行できるようにするには、ThreadInformation パラメーターを ThreadDynamicCodePolicy に設定して SetThreadInformation API を呼び出す必要があります。
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Defender for Endpoint の高度な追求を使用して表示することもできます。
整合性が低いイメージのブロック
説明
整合性の低いイメージをブロックすると、信頼できないファイル (通常はサンドボックス化されたブラウザーからインターネットにダウンロードされたもの) をアプリケーションが読み込むのを防ぐことができます。
この軽減策では、イメージに低 IL プロセスへのアクセスを許可するアクセス制御エントリ (ACE) があり、信頼ラベル ACE がない場合、イメージの読み込みをブロックします。 これはメモリ マネージャーによって実装され、ファイルがメモリにマップされるのをブロックします。 アプリケーションが整合性の低いイメージをマップしようとすると、STATUS_ACCESS_DENIED エラーがトリガーされます。 整合性レベルのしくみの詳細については、「必須の整合性コントロール」を参照してください。
互換性に関する考慮事項
整合性の低いイメージをブロックすると、インターネットからダウンロードされたファイルをアプリケーションが読み込むのを防ぐことができます。 アプリケーション ワークフローでダウンロードされたイメージの読み込みが必要な場合は、信頼度の高いプロセスからダウンロードされているか、この軽減策を適用するために明示的にラベルが付け直されていることを確認する必要があります。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
リモート イメージのブロック
説明
リモート イメージをブロックすると、アプリケーションが UNC 共有などのリモート デバイスでホストされているファイルを読み込むのを防ぐことができます。 リモート イメージをブロックすると、攻撃者が制御する外部デバイス上のバイナリをメモリ読み込むのを防ぐことができます。
この軽減策は、イメージがリモート デバイス上にあると判断された場合に、イメージの読み込みをブロックします。 これはメモリ マネージャーによって実装され、ファイルがメモリにマップされるのをブロックします。 アプリケーションがリモート ファイルをマップしようとすると、STATUS_ACCESS_DENIED エラーがトリガーされます。
互換性に関する考慮事項
リモート イメージをブロックすると、リモート デバイスからアプリケーションがイメージを読み込むのを防ぐことができます。 アプリケーションがリモート デバイスからファイルまたはプラグインを読み込む場合、この軽減策とは互換性がありません。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
信頼されていないフォントのブロック
説明
信頼されていないフォントをブロックすると、フォント解析の欠陥が軽減され、攻撃者がデバイスでコードを実行できるようになります。 windows\fonts ディレクトリにインストールされているフォントのみが GDI によって処理されるように読み込まれます。
この軽減策は GDI 内に実装され、ファイルの場所が検証されます。 そのファイルがシステム フォント ディレクトリにない場合、フォントは解析用に読み込まれず、その呼び出しは失敗します。
この軽減策は、Windows 10 1607 以降で提供される組み込みの軽減策と、フォント解析をカーネルからユーザー モード アプリ コンテナーに移動させる Windows 11 に加えて行われます。 その結果、フォント解析に基づくエクスプロイトは、サンドボックス化され分離されたコンテキストで発生するため、リスクが大幅に軽減されます。 この軽減策の詳細については、「ゼロ デイ エクスプロイトの軽減策で Windows 10 のセキュリティを強化」のブログを参照してください。
互換性に関する考慮事項
システム フォント ディレクトリ以外でのフォントの最も一般的な用途は、 Web フォントです。 Microsoft Edge などの最新のブラウザーでは、GDI ではなく DirectWrite を使用しますが、影響を受けることはありません。 ただし、Internet Explorer 11 (および新しい Microsoft Edge の IE モード) などの従来のブラウザーは影響を受ける可能性があります。特に、フォント グリフを使用して UI を表示する Office 365 などのアプリケーションでは影響を受ける可能性があります。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
コードの整合性ガード
説明
コード整合性ガードを使用すると、プロセスに読み込まれるすべてのバイナリが Microsoft によってデジタル署名されます。 コード整合性ガードには WHQL (Windows Hardware Quality Labs) 署名が含まれており、WHQL で承認されたドライバーをプロセス内で実行できます。
この軽減策はメモリ マネージャー内に実装され、バイナリがメモリにマップされるのをブロックします。 Microsoft によって署名されていないバイナリを読み込もうとすると、メモリ マネージャーはエラー STATUS_INVALID_IMAGE_HASH を返します。 メモリ マネージャー レベルでブロックすることで、プロセスによって読み込まれるバイナリと、プロセスに挿入されたバイナリの両方を防ぐことができます。
互換性に関する考慮事項
この軽減策は、特に Microsoft によって署名されていないバイナリをブロックします。 そのため、そのソフトウェアが Microsoft Store によって配布 (およびデジタル署名) され、Microsoft Store によって署名されたイメージの読み込みを許可するオプションが選択されていない限り、ほとんどの Microsoft 以外のソフトウェアと互換性がありません。
構成オプション
また、Microsoft Store によって署名されたイメージの読み込みを許可 する - Microsoft Store によって配布されるアプリケーションは Microsoft Store によってデジタル署名され、この構成を追加すると、ストア認定プロセスを通過するバイナリがアプリケーションによって読み込まれます。
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
制御フロー ガード (CFG)
説明
制御フロー ガード (CFG) は、間接関数呼び出しを保護することで、メモリ破損の脆弱性を使用する攻撃者のリスクを軽減します。 たとえば、攻撃者はバッファー オーバーフローの脆弱性を使用して、関数ポインターを含むメモリを上書きし、その関数ポインターを任意の実行可能コードへのポインター (プログラムに挿入される可能性もあります) に置き換える可能性があります。
この軽減策は、コンパイル時に別のチェックを挿入することによって提供されます。 各間接関数呼び出しの前に、ターゲットが呼び出される前に有効な呼び出し先であることを確認する別の命令が追加されます。 ターゲットが有効な呼び出し先でない場合、アプリケーションは終了します。 そのため、この軽減策のメリットを得ることができるのは、CFG サポートでコンパイルされたアプリケーションのみです。
有効なターゲットのチェックは、Windows カーネルによって提供されます。 実行可能ファイルが読み込まれると、間接呼び出しターゲットのメタデータが読み込み時に抽出され、有効な呼び出し先としてマークされます。 さらに、メモリが割り当てられ、実行可能ファイルとしてマークされている場合 (生成されたコード用など)、これらのメモリの場所は、JIT コンパイルなどのメカニズムをサポートするために、有効な呼び出しターゲットとしてもマークされます。
互換性に関する考慮事項
アプリケーションは CFG をサポートするようにコンパイルする必要があるため、アプリケーションとの互換性を暗黙的に宣言します。 そのため、ほとんどのアプリケーションは、この軽減策を有効にした状態で動作する必要があります。 これらのチェックはバイナリにコンパイルされるため、適用できる構成は、単に Windows カーネル内のチェックを無効にすることです。 つまり、軽減策は既定でオンになっていますが、アプリケーション開発者によってテストで検出されなかった互換性の問題があることが、後で判明した場合には、常に "はい" を返すように Windows カーネルを構成できます。これはまれなケースのはずです。
構成オプション
strict CFG の使用 - 厳密モードでは、プロセスに読み込まれるすべてのバイナリを読み込むには、制御フロー ガード用にコンパイルする必要があります (または、リソース dll などの実行可能コードがありません)。
注:
制御フロー ガード には監査モードがありません。 バイナリは、この軽減策を有効にした状態でコンパイルされます。
データ実行防止 (DEP)
説明
データ実行防止 (DEP) では、実行可能ファイルとして明示的に割り当てられなかったメモリが実行されないようにします。 DEP は、バッファー オーバーフローなどのプロセスに悪意のあるコードを挿入し、そのコードを実行する攻撃者から保護するのに役立ちます。
実行可能としてマークされていないメモリ アドレスに命令ポインターを設定しようとすると、プロセッサによって例外 (一般的な保護違反) がスローされ、アプリケーションがクラッシュします。
互換性に関する考慮事項
x64、ARM、ARM-64 の実行可能ファイルはすべて既定で DEP が有効になっており、無効にすることはできません。 アプリケーションは DEP なしで実行されないため、互換性が想定されます。
すべての x86 (32 ビット) バイナリでは既定で DEP が有効になっていますが、DEP はプロセスごとに無効にすることができます。 一部の古いレガシ アプリケーション (通常は Windows XP SP2 より前に開発されたアプリケーション) は DEP と互換性がない可能性があります。 このようなアプリケーションは通常、コードを動的に生成するか (JIT コンパイルなど)、またはコードを動的に生成する古いライブラリ (古いバージョンの ATL など) にリンクします。
構成オプション
ATL サンク エミュレーションを有効にする - この構成オプションは、ATL サンク エミュレーションを無効にします。 ActiveX テンプレート ライブラリ (ATL) は、できるだけ小さく高速に設計されています。 バイナリ サイズを小さくするために、 サンキングと呼ばれる手法を使用します。 サンキングは通常、32 ビットアプリケーションと 16 ビット アプリケーションの間で対話することを考えますが、ここでは ATL への 16 ビット コンポーネントはありません。 代わりに、バイナリ サイズを最適化するために、ATL は、ワード アラインされていないメモリにマシン コードを格納 (より小さいバイナリを作成) して、そのコードを直接呼び出します。 Visual Studio 7.1 以前 (Visual Studio 2003) でコンパイルされた ATL コンポーネントは、実行可能ファイルとしてこのメモリを割り当てません。サンク エミュレーションが、その互換性の問題を解決します。 バイナリ拡張モデル (Internet Explorer 11 など) を持つアプリケーションでは、多くの場合、ATL サンク エミュレーションを有効にする必要があります。
拡張ポイントの無効化
説明
この軽減策は、アプリケーションのさまざまな拡張ポイントを無効にします。これは、悪意のあるコンテンツの永続化の確立や特権の昇格に使用される可能性があります。
保持されるデータには以下が含まれます。
- AppInit DLL - プロセスが開始されるたびに、エントリ ポイント関数を呼び出す前に、指定した DLL が新しく開始されたプロセスのコンテキストに読み込まれます。 AppInit DLL の詳細については、こちらを参照してください。 この軽減策を適用すると、AppInit DLL は読み込まれません。 Windows 7 以降では、 ここで説明するように、AppInit DLL をデジタル署名する必要があります。 さらに、Windows 8 以降では、ここで説明するように SecureBoot が有効になっている場合、AppInit DLL は読み込まれません。
- 従来の IME - 入力方式エディター (IME) を使用すると、ユーザーはキーボードで表現しきれないほどの数の文字を使う言語で、テキストを入力することができます。 サードパーティが IME を作れます。 悪意のある IME は、この入力キャプチャから資格情報やその他の機密情報を取得する可能性があります。 従来の IME と呼ばれる一部の IME は、Windows デスクトップ アプリでのみ動作し、UWP アプリでは機能しません。 この軽減策により、この従来の IME が、指定された Windows デスクトップ アプリに読み込まれるのも防止されます。
- Windows イベント フック - アプリケーションは SetWinEventHook API を呼び出して、発生したイベントに関心を登録できます。 DLL が指定されており、プロセスに挿入できます。 この軽減策では、挿入された DLL を介してプロセス内で実行するのではなく、フックを登録プロセスに強制的にポストします。
互換性に関する考慮事項
これらの拡張ポイントのほとんどは使用される頻度が比較的に低いので、互換性への影響は通常、特に個々のアプリケーション レベルで小さくなります。 1 つの考慮事項は、保護されたアプリケーションで動作しないサード パーティのレガシ IME をユーザーが使用している場合です。
構成オプション
この軽減策の構成オプションはありません。
注:
拡張ポイントの無効化 には監査モードはありません。
Win32k システム コールの無効化
説明
Win32k.sys は、攻撃者に広範な攻撃面を提供します。 これは、カーネル モード コンポーネントであり、サンドボックス化されたアプリケーションのエスケープ ベクトルとして頻繁にターゲットにされます。 この軽減策は、スレッドが GUI スレッドに変換され、Win32k 関数を呼び出すことができるようになるのをブロックすることで、Win32k.sysへの呼び出しを防止します。 スレッドは、作成時は非 GUI ですが、win32k.sys への最初の呼び出し、または IsGuiThread への API 呼び出しによって変換されます。
互換性に関する考慮事項
この軽減策は、専用の非 UI プロセスであるプロセス向けに設計されています。 たとえば、多くの最新のブラウザーでは、プロセス分離が使用され、UI 以外のプロセスが組み込まれています。 1 つのプロセスを使用して GUI を表示するすべてのアプリケーションは、この軽減策の影響を受けます。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
子プロセスを許可しない
説明
この軽減策により、アプリケーションが新しい子アプリケーションを作成できなくなります。 攻撃者が使用する一般的な手法は、悪意のある入力 ("地外に住んでいる" 攻撃) を使用してデバイス上で信頼されたプロセスを開始することです。多くの場合、デバイスで別のアプリケーションの起動が必要になります。 アプリケーションに子プロセスを起動する正当な理由がない場合、この軽減策は潜在的な攻撃ベクトルを軽減します。 軽減策は、プロセス トークンにプロパティを設定することによって適用されます。これにより、子プロセスのトークンの作成がエラー メッセージ STATUS_CHILD_PROCESS_BLOCKED でブロックされます。
互換性に関する考慮事項
ブラウザーや外部ブラウザーを起動するハイパーリンクや、コンピューター上の他のユーティリティを起動するハイパーリンクのサポートなど、何らかの理由でアプリケーションが子アプリケーションを起動した場合、この機能はこの軽減策が適用された状態で壊れます。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
エクスポート アドレス フィルター (EAF)
説明
エクスポート アドレス フィルター (EAF) は、読み込まれたすべてのモジュールのエクスポート アドレス テーブルを調べて、攻撃に役立つ API を含むモジュールを見つける悪意のあるコードのリスクを軽減します。 これはシェルコードで使用される一般的な戦術です。 このような攻撃のリスクを軽減するために、この軽減策は、一般的に攻撃される 3 つのモジュールを保護します:
- ntdll.dll
- kernelbase.dll
- kernel32.dll
軽減策は、[エクスポート アドレス テーブルをポイントするエクスポート ディレクトリ] のメモリ ページを保護します。 このメモリ ページには、 PAGE_GUARD 保護が適用されています。 誰かがこのメモリにアクセスしようとすると、STATUS_GUARD_PAGE_VIOLATION が生成されます。 軽減策によってこの例外が処理され、アクセス命令が検証に合格しない場合、プロセスは終了します。
互換性に関する考慮事項
この軽減策は、主に、デバッガー、サンドボックス化されたアプリケーション、DRM を使用するアプリケーション、またはデバッグ対策テクノロジを実装するアプリケーションなどのアプリケーションにとって問題となります。
構成オプション
エクスプロイトによって一般的に悪用されるモジュールのアクセスを検証する - このオプション (EAF+ とも呼ばれます) は、他の一般的に攻撃されるモジュールの保護を追加します:
mshtml.dll
flash*.ocx
jscript*.ocx
vbscript.dll
vgx.dll
mozjs.dll
xul.dll
acrord32.dll
acrofx32.dll
acroform.api
さらに、EAF+ を有効にすることで、この軽減策により、"MZ" ヘッダー (PE ファイル内の DOS ヘッダーの最初の 2 バイト) を含むページに PAGE_GUARD 保護が追加されます。これは、シェルコードがメモリに関心を持つ可能性のあるモジュールを識別するために検索できる既知のメモリ コンテンツのもう 1 つの側面です。
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
イメージのランダム化の強制 (必須 ASLR)
説明
アドレス空間レイアウト ランダム化 (ASLR) は、プロセス メモリに既に存在し、既に実行可能としてマークされているコードを実行するために、システムのメモリ レイアウトに関する知識を使用して攻撃者のリスクを軽減します。 これにより、攻撃者が return-to-libc 攻撃などの手法を使用して、攻撃者のリスクを軽減できます。攻撃者はコンテキストを設定し、戻りアドレスを変更して、攻撃者の目的に合ったコンテキストで既存のコードを実行します。
必須 ASLR は、プロセス内のすべての DLL のリベースを強制します。 開発者は /DYNAMICBASE リンカー オプションを使用して ASLR を有効にすることができ、この軽減策にも同じ効果があります。
メモリ マネージャーがイメージ内でプロセスにマッピングされている場合、必須 ASLR は、ASLR にオプトインしていない DLL と EXE を強制的にリベースします。 ただし、この再調整にはエントロピがないため、メモリ内の予測可能な場所に配置できることに注意してください。 バイナリのリベースとランダム化された場所の場合、この軽減策は ランダム化メモリ割り当て (Bottom-up ASLR) と組み合わせて使用する必要があります。
互換性に関する考慮事項
ASLR のこの互換性への影響は、通常、バイナリ ファイルのベース アドレスに関する想定を行ったコンパイラを使用して構築された古いアプリケーション、またはベース再配置情報を削除した古いアプリケーションに制限されます。 これにより、実行フローがメモリ内の実際の場所ではなく、予期された場所にジャンプしようとするので、予期しないエラーが発生する可能性があります。
構成オプション
削除されたイメージを許可しない - このオプションは、再配置情報が削除されたイメージの読み込みをブロックします。 Windows PE ファイル形式には絶対アドレスが含まれており、コンパイラはベース再配置テーブルも生成します。このテーブルは、ローダーがすべての相対メモリ参照とそのオフセットを検索するために使用できるため、バイナリが優先ベース アドレスで読み込まれない場合に更新できます。 一部の古いアプリケーションでは、運用環境のビルドでこの情報が取り除かれるため、これらのバイナリをリベースすることはできません。 この軽減策により、このようなバイナリの読み込みがブロックされます (優先ベース アドレスで読み込むことが許可されるのではなく)。
注:
イメージの強制的なランダム化 (必須 ASLR) には監査モードがありません。
ハードウェアによるスタック保護
説明
ハードウェアによって強制されたスタック保護は、プログラムの意図された実行フローの記録を保持するため、ROP の悪用に対する堅牢な保護を提供します。 スムーズなエコシステムの導入とアプリケーションの互換性を確保するために、Windows はオプトイン モデルとしてこの保護を提供しているため、開発者は自分のペースでこの保護を受けることができます。
互換性に関する考慮事項
ハードウェアによるスタック保護は、ハードウェア シャドウ スタック、Intel の制御フロー強制テクノロジ (CET) または AMD シャドウ スタックをサポートするチップセットでのみ機能します。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Defender for Endpoint の高度な追求を使用して表示することもできます。
互換性のあるモジュールではなく、すべてのモジュール に適用する - この軽減策を有効にして、互換性のあるモジュールではなく、すべてのモジュールに適用できます。
インポート アドレス フィルター (IAF)
説明
インポート アドレス フィルター (IAF) の軽減策は、インポート アドレス テーブル (IAT) を変更し、その関数が呼び出されたときに攻撃者が選択した任意のコードにリダイレクトすることで、攻撃者がアプリケーションの制御フローを変更するリスクを軽減するのに役立ちます。 攻撃者は、このアプローチで制御をハイジャックしたり、機密性の高い API の呼び出しを傍受、検査、ブロックしたりする可能性があります。
保護されているすべての API のメモリ ページには、PAGE_GUARD 保護が適用されます。 誰かがこのメモリにアクセスしようとすると、STATUS_GUARD_PAGE_VIOLATION が生成されます。 軽減策によってこの例外が処理され、アクセス命令が検証に合格しない場合、プロセスは終了します。
この軽減策は、次の Windows API を保護します:
GetProcAddress
GetProcAddressForCaller
LoadLibraryA
LoadLibraryExA
LoadLibraryW
LoadLibraryExW
LdrGetProcedureAddress
LdrGetProcedureAddressEx
LdrGetProcedureAddressForCaller
LdrLoadDll
VirtualProtect
VirtualProtectEx
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
NtProtectVirtualMemory
CreateProcessA
CreateProcessW
WinExec
CreateProcessAsUserA
CreateProcessAsUserW
GetModuleHandleA
GetModuleHandleW
RtlDecodePointer
DecodePointer
互換性に関する考慮事項
API インターセプトを実行する正当なアプリケーションは、この軽減策によって検出され、一部のアプリケーションがクラッシュする可能性があります。 たとえば、セキュリティ ソフトウェアとアプリケーションの互換性の shim があります。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
仮想メモリの割り当てをランダム化する (ボトムアップ ASLR)
説明
メモリ割り当てをランダム化 (Bottom-up ASLR) すると、再配置にエントロピが追加されるため、その場所はランダム化されるため、予測不可能になります。 この軽減策を有効にするには、必須の ASLR が必要です。
32 ビット アドレス空間のサイズは、追加できるエントロピに実用的な制約があるため、64 ビット アプリケーションでは、攻撃者がメモリ内の場所を推測することがより困難になります。
互換性に関する考慮事項
必須 ASLR (リベース) と互換性のあるほとんどのアプリケーションは、Bottom-up ASLR の他のエントロピとも互換性があります。 一部のアプリケーションでは、ローカル ポインターを 32 ビット変数 (4 GB 未満のベース アドレスを想定) に保存する場合、ポインター切り捨ての問題が発生する可能性があるため、高エントロピ オプション (無効にできる) と互換性がありません。
構成オプション
高エントロピを使用しない - このオプションでは、64 ビット アプリケーションの下位割り当てに 24 ビットのエントロピ (1 TB の分散) を追加する高エントロピ ASLR の使用が無効になります。
注:
メモリ割り当てのランダム化 (ボトムアップ ASLR)には監査モードはありません。
実行のシミュレート (SimExec)
説明
実行のシミュレーション (SimExec) は、32 ビット アプリケーションのみの軽減策です。 これにより、機密性の高い API の呼び出しが正当な呼び出し元関数に返されることを検証できます。 これは、機密性の高い API の呼び出しを傍受し、エンコードされたアセンブリ言語命令を走査して呼び出し元に戻るべき RET 命令を探すことで、これらの API の実行をシミュレートします。 次に、その関数を検査し、メモリ内を後方に移動して、前の CALL 命令を見つけて、関数と CALL 命令が一致するかどうか、および RET が傍受されていないことを判断します。
この軽減策によってインターセプトされる API は次のとおりです。
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
ROP ガジェットが検出されると、プロセスは終了します。
互換性に関する考慮事項
API インターセプト (特にセキュリティ ソフトウェア) を実行するアプリケーションは、この軽減策との互換性の問題を引き起こす可能性があります。
この軽減策は、任意のコード カード軽減策と互換性がありません。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
API 呼び出しの検証 (CallerCheck)
説明
API 検証呼び出し (CallerCheck) は、有効な呼び出し元から機密性の高い API が呼び出されたことを検証するリターン指向プログラミング (ROP) 手法の軽減策です。 この軽減策は、渡されたリターン アドレスを検査し、ヒューリスティックに逆アセンブルして戻りアドレスの上の呼び出しを検索し、呼び出しターゲットが関数に渡されたパラメーターと一致するかどうかを判断します。
この軽減策によってインターセプトされる API は次のとおりです。
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
ROP ガジェットが検出されると、プロセスは終了します。
互換性に関する考慮事項
API インターセプト (特にセキュリティ ソフトウェア) を実行するアプリケーションは、この軽減策との互換性の問題を引き起こす可能性があります。
この軽減策は、任意のコード カード軽減策と互換性がありません。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
例外チェーンの検証 (SEHOP)
説明
例外チェーンの検証 (SEHOP) は、構造化例外ハンドラー (SEH) 上書き悪用手法に対する軽減策です。 構造化例外処理 は、アプリケーションが特定の例外の処理を要求できるプロセスです。 例外ハンドラーは連結されるため、1 つの例外ハンドラーが特定の例外を処理しないことを選択した場合は、処理が決定されるまで、チェーン内の次の例外ハンドラーに渡すことができます。 ハンドラーのリストは動的であるため、スタックに格納されます。 攻撃者はスタック オーバーフローの脆弱性を使用して、攻撃者が選択したコードへのポインターで例外ハンドラーを上書きできます。
この軽減策は、SEH の設計に依存しており、各 SEH エントリには、例外ハンドラーへのポインターと、例外チェーン内の次のハンドラーへのポインターの両方が含まれます。 この軽減策は例外ディスパッチャーによって呼び出され、例外が呼び出されたときに SEH チェーンが検証されます。 次のことを確認します:
- すべての例外チェーン レコードがスタック境界内にある
- すべての例外レコードがアラインされている
- スタックを指している例外ハンドラー ポインターがない
- 後方ポインターがない
- 例外チェーンは既知の最終例外ハンドラーで終了する
これらの検証が失敗した場合、例外処理は中止され、例外は処理されません。
互換性に関する考慮事項
SEHOP との互換性の問題は比較的まれです。 アプリケーションが例外チェーンの破損に依存することは珍しいことではありません。 ただし、一部のアプリケーションはタイミングの微妙な変更の影響を受けます。これは、アプリケーションで潜在的なマルチスレッドバグを明らかにする競合状態として現れる可能性があります。
構成オプション
注:
例外チェーンの検証 (SEHOP) には監査モードはありません。
ハンドルの使用状態の検証
説明
ハンドルの使用の検証 は、既存のハンドルを使用して保護されたオブジェクトにアクセスする攻撃者に対する保護に役立つ軽減策です。 ハンドルは、保護されたオブジェクトへの参照です。 アプリケーション コードが無効なハンドルを参照している場合、敵対者が以前に記録したハンドルを使用しようとしていることを示している可能性があります (ただし、どのアプリケーション参照カウントが認識されません)。 アプリケーションが無効なオブジェクトを使用しようとすると、アプリケーションは単に null 値を返すのではなく、例外 (STATUS_INVALID_HANDLE) を発生させます。
この軽減策は、Windows Store アプリケーションに自動的に適用されます。
互換性に関する考慮事項
ハンドル参照を正確に追跡しておらず、例外ハンドラーでこれらの操作をラップしていないアプリケーションは、この軽減策の影響を受ける可能性があります。
構成オプション
注:
ハンドルの使用の検証には監査モードはありません。
ヒープの整合性の検証
説明
ヒープ整合性の検証の軽減策では、ヒープの破損が検出された場合にアプリケーションを終了させることで、Windows でのヒープ軽減策の保護レベルが向上します。 軽減策には次のものが含まれます:
- HEAP ハンドルが解放されないようにする
- ヒープ割り当ての拡張ブロック ヘッダーに対して別の検証を実行する
- ヒープ割り当てに、使用中のフラグがまだ設定されていないことを確認する
- 大きな割り当て、ヒープ セグメント、最小サイズ以上のサブセグメントへのガード ページへの追加
互換性に関する考慮事項
この軽減策は、64 ビット アプリケーションと、Windows Vista 以降を対象とする 32 ビット アプリケーションに対して、既定で既に適用されています。 Windows XP 以前のレガシ アプリケーションは最も危険にさらされますが、互換性の問題はまれです。
構成オプション
注:
ヒープ整合性の検証 には監査モードがありません。
軽減策の依存関係の整合性の検証
説明
イメージの依存関係の検証の軽減策は、Windows バイナリによって静的にリンクされている dll のコードを置き換えようとする攻撃から保護するのに役立ちます。 DLL 植え付けの手法は、ローダーの検索メカニズムを悪用して悪意のあるコードを注入し、昇格したコンテキストで悪意のあるコードを実行させるために使用される可能性があります。 ローダーが Windows 署名済みバイナリを読み込み、バイナリが依存するすべての dll を読み込むと、これらのバイナリも Windows バイナリとしてデジタル署名されていることを確認するために検証されます。 署名チェックに失敗した場合、dll は読み込まれず、例外がスローされ、STATUS_INVALID_IMAGE_HASH 状態が返されます。
互換性に関する考慮事項
互換性の問題は一般的ではありません。 Windows バイナリをローカル プライベート バージョンに置き換えることに依存しているアプリケーションが影響を受けます。また、マルチスレッド アプリケーションで微妙なタイミング バグが明らかになるリスクもわずかに存在します。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
スタックの整合性の検証 (StackPivot)
説明
スタック整合性の検証 (StackPivot) 軽減策は、スタック ピボット攻撃から保護するのに役立ちます。これは、攻撃者がヒープ メモリに偽のスタックを作成し、実行のフローを制御する偽のスタックに戻るようにアプリケーションを誘導する ROP 攻撃です。
この軽減策は、多くの Windows API を傍受し、スタック ポインターの値を検査します。 スタック ポインターのアドレスがスタックの一番下と上部の間に収まらない場合はイベントが記録され、監査モードでない場合はプロセスが終了します。
この軽減策によってインターセプトされる API は次のとおりです。
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
互換性に関する考慮事項
偽のスタックを使用しているアプリケーションが影響を受けます。また、マルチスレッド アプリケーションで微妙なタイミングバグが明らかになるリスクもわずかに存在します。 API インターセプト (特にセキュリティ ソフトウェア) を実行するアプリケーションは、この軽減策との互換性の問題を引き起こす可能性があります。
この軽減策は、任意のコード カード軽減策と互換性がありません。
構成オプション
監査のみ - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にすることができます。 監査イベントは、イベント ビューアーで表示することも、 Microsoft Defender for Endpoint の高度な追求を使用して表示することもできます。
ヒント
さらに多くの情報を得るには、 Tech Community 内の Microsoft Security コミュニティ (Microsoft Defender for Endpoint Tech Community) にご参加ください。