エクスプロイト保護リファレンスExploit Protection Reference

適用対象:Applies to:

Microsoft Defender for Endpoint を体験してみませんか?Want to experience Microsoft Defender for Endpoint? 無料試用版にサインアップします。Sign up for a free trial.

エクスプロイト保護は、開発者がソフトウェアをコンパイルして配布した後に IT Pro が適用できるアプリケーションに高度な保護を提供します。Exploit protection provides advanced protections for applications that the IT Pro can apply after the developer has compiled and distributed the software.

この記事では、エクスプロイト保護ポリシーの構築と適用に役立つ、ポリシー レベルと個別の軽減レベルの両方で、エクスプロイト保護のしくみを理解するのに役立ちます。This article helps you understand how exploit protection works, both at the policy level and at the individual mitigation level, to help you successfully build and apply Exploit Protection policies.

軽減策の適用方法How mitigations are applied

Exploit Protection の軽減策は、アプリケーションごとに適用されます。Exploit Protection mitigations are applied per application.

軽減策は、保護を構成する各プログラムのレジストリ エントリを介して構成されます。Mitigations are configured via a registry entry for each program that you configure protections for. これらの設定は、各プログラムの MitigationOptions レジストリ エントリ (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options \ ImageFileName \ MitigationOptions) に格納されます。These settings are stored in the MitigationOptions registry entry for each program (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options \ ImageFileName \ MitigationOptions). これらは、プログラムを再起動すると有効になります。変更してプログラムを再起動するまで有効です。They take effect when you restart the program and remain effective until you change them and restart the program again.

重要

Image File Execution Options では、ファイル名またはパスのみを指定できます。バージョン番号、アーキテクチャ、その他の差別化要因は指定しません。Image File Execution Options only allows you to specify a file name or path, and not a version number, architecture, or any other differentiator. 一意の名前またはパスを持つアプリに軽減策を適用し、そのバージョンとアプリケーションのアーキテクチャをテストしたデバイスにのみ適用してください。Be careful to target mitigations to apps which have unique names or paths, applying them only on devices where you have tested that version and that architecture of the application.

PowerShell、グループ ポリシー、MDM を使用して XML 構成ファイルを使用して悪用防止の軽減策を構成すると、この XML 構成ファイルを処理するときに、個々のレジストリ設定が構成されます。If you configure exploit protection mitigations using an XML configuration file, either via PowerShell, Group Policy, or MDM, when processing this XML configuration file, individual registry settings will be configured for you.

XML ファイルを配布するポリシーが適用されなくなった場合、この XML 構成ファイルによって展開された設定は自動的に削除されません。When the policy distributing the XML file is no longer enforced, settings deployed by this XML configuration file will not be automatically removed. Exploit Protection の設定を削除するには、クリーンな Windows 10 デバイスから XML 構成をエクスポートし、この新しい XML ファイルを展開します。To remove Exploit Protection settings, export the XML configuration from a clean Windows 10 device, and deploy this new XML file. または、Microsoft は、エクスプロイト保護設定をリセットする Windows セキュリティ ベースラインの一部として XML ファイルを提供します。Alternately, Microsoft provides an XML file as part of the Windows Security Baselines for resetting Exploit Protection settings.

PowerShell を使用してエクスプロイト保護設定をリセットするには、次のコマンドを使用できます。To reset exploit protection settings using PowerShell, you could use the following command:

Set-ProcessMitigation -PolicyFilePath EP-reset.xml

次に、Windows セキュリティ EP-reset.xmlと一緒に配布する方法を示します。Following is the EP-reset.xml distributed with the Windows Security Baselines:

<?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>

軽減のリファレンスMitigation Reference

以下のセクションでは、各エクスプロイト保護の軽減策によって提供される保護、軽減策の互換性に関する考慮事項、および使用可能な構成オプションについて詳しく説明します。The following sections detail the protections provided by each exploit protection mitigation, the compatibility considerations for the mitigation, and the configuration options available.

任意のコード ガードArbitrary code guard

説明Description

任意のコード ガードは、メモリの安全性の脆弱性を通じて、任意のコードをメモリに読み込み、そのコードを実行できる悪意のある攻撃者から保護するのに役立ちます。Arbitrary code guard helps protect against a malicious attacker loading the code of their choice into memory through a memory safety vulnerability and being able to execute that code.

任意のコード ガードは、アプリケーションが動的に生成されたコード (たとえば、exe 自体または dll から読み込まれないコード) を実行から保護します。Arbitrary code guard protects an application from executing dynamically generated code (code that is not loaded, for example, from the exe itself or a dll). 任意のコード ガードは、メモリが実行可能ファイルとしてマークされるのを防ぐことによって機能します。Arbitrary code guard works by preventing memory from being marked as executable. アプリケーションがメモリを割り 当てしようとすると、保護フラグがチェックされます。When an application attempts to allocate memory, we check the protection flags. (メモリは、読み取り、書き込み、および/または実行保護フラグを使用して割り当てできます)。割り当てが実行保護フラグを含もうとすると、メモリ割り当ては失敗し、エラー コード (STATUS_DYNAMIC_CODE_BLOCKED) を返します。(Memory can be allocated with read, write, and/or execute protection flags.) If the allocation attempts to include the execute protection flag, then the memory allocation fails and returns an error code (STATUS_DYNAMIC_CODE_BLOCKED). 同様に、アプリケーションが既に割り当てられているメモリの保護フラグを変更し、実行保護フラグを含む場合、アクセス許可の変更は失敗し、エラー コード (STATUS_DYNAMIC_CODE_BLOCKED) を返します。Similarly, if an application attempts to change the protection flags of memory that has already been allocated and includes the execute protection flag, then the permission change fails and returns an error code (STATUS_DYNAMIC_CODE_BLOCKED).

実行フラグが 設定 されるのを防ぐことで、Windows 10 のデータ実行防止機能は、そのメモリに設定され、そのコードを実行している命令ポインターから保護できます。By preventing the execute flag from being set, the data execution prevention feature of Windows 10 can then protect against the instruction pointer being set to that memory and running that code.

互換性に関する考慮事項Compatibility considerations

任意のコード ガードを使用すると、メモリが実行可能ファイルとして割り当てられるのを防ぎ、Just-in-Time (JIT) コンパイラなどのアプローチとの互換性の問題が発生します。Arbitrary code guard prevents allocating any memory as executable, which presents a compatibility issue with approaches such as Just-in-Time (JIT) compilers. たとえば、最新のほとんどのブラウザーでは、パフォーマンスを最適化するために JavaScript をネイティブ コードにコンパイルします。Most modern browsers, for example, will compile JavaScript into native code in order to optimize performance. この軽減策をサポートするには、JIT コンパイルを保護されたプロセスの外部に移動するために、再検出する必要があります。In order to support this mitigation, they will need to be rearchitected to move the JIT compilation outside of the protected process. スクリプトまたは他の中間言語からコードを動的に生成する他のアプリケーションも、この軽減策と同様に互換性がありません。Other applications whose design dynamically generates code from scripts or other intermediate languages will be similarly incompatible with this mitigation.

構成オプションConfiguration options

[スレッドのオプトアウトを許可 する] - 個々のスレッドがこの保護をオプトアウトすることを許可する軽減策を構成できます。Allow thread opt-out - You can configure the mitigation to allow an individual thread to opt-out of this protection. 開発者は、この軽減策を認識してアプリケーションを記述し、このスレッドで動的コードを実行するために ThreadInformation パラメーターを ThreadDynamicCodePolicy に設定した SetThreadInformation API を呼び出している必要があります。The developer must have written the application with awareness of this mitigation, and have called the SetThreadInformation API with the ThreadInformation parameter set to ThreadDynamicCodePolicy in order to be allowed to execute dynamic code on this thread.

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Defender for Endpoint.

低整合性イメージをブロックするBlock low integrity images

説明Description

低整合性イメージをブロックすると、アプリケーションは、通常、セキュリティで保護されたブラウザーからインターネットからダウンロードされたため、信頼されていないファイルを読み込むのを防ぐ。Block low integrity images prevents the application from loading files that are untrusted, typically because they have been downloaded from the internet from a sandboxed browser.

この軽減策は、イメージに低 IL プロセスへのアクセスを許可するアクセス制御エントリ (ACE) を持ち、信頼ラベル ACE を持つイメージの読み込みをブロックします。This mitigation will block image loads if the image has an Access Control Entry (ACE) which grants access to Low IL processes and which does not have a trust label ACE. メモリ マネージャーによって実装され、ファイルがメモリにマップされるのをブロックします。It is implemented by the memory manager, which blocks the file from being mapped into memory. アプリケーションが低整合性イメージをマップしようとすると、エラーが発生STATUS_ACCESS_DENIEDされます。If an application attempts to map a low integrity image, it will trigger a STATUS_ACCESS_DENIED error. 整合性レベルの動作の詳細については 、「Mandatory Integrity Control」を参照してくださいFor details on how integrity levels work, see Mandatory Integrity Control.

互換性に関する考慮事項Compatibility considerations

低整合性イメージをブロックすると、アプリケーションはインターネットからダウンロードされたファイルを読み込むのを防ぐ。Block low integrity images will prevent the application from loading files that were downloaded from the internet. アプリケーション ワークフローでダウンロードされたイメージの読み込みが必要な場合は、高信頼プロセスからダウンロードするか、この軽減策を適用するために明示的に再ラベルが付けられている必要があります。If your application workflow requires loading images that are downloaded, you will want to ensure that they are downloaded from a higher-trust process, or are explicitly relabeled in order to apply this mitigation.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

リモート イメージをブロックするBlock remote images

説明Description

リモート イメージをブロックすると、アプリケーションが UNC 共有などのリモート デバイスでホストされているファイルを読み込むのを防ぐのに役立ちます。Blocking remote images helps to prevent the application from loading files that are hosted on a remote device, such as a UNC share. リモート イメージをブロックすると、攻撃者が制御する外部デバイス上のメモリにバイナリを読み込むのを防止できます。Blocking remote images helps protect against loading binaries into memory that are on an external device controlled by the attacker.

この軽減策は、イメージがリモート デバイス上に含まれると判断された場合、イメージの読み込みをブロックします。This mitigation will block image loads if the image is determined to be on a remote device. メモリ マネージャーによって実装され、ファイルがメモリにマップされるのをブロックします。It is implemented by the memory manager, which blocks the file from being mapped into memory. アプリケーションがリモート ファイルをマップしようとすると、エラーが発生STATUS_ACCESS_DENIEDされます。If an application attempts to map a remote file, it will trigger a STATUS_ACCESS_DENIED error.

互換性に関する考慮事項Compatibility considerations

リモート イメージをブロックすると、アプリケーションはリモート デバイスからイメージを読み込むのを防ぐ。Block remote images will prevent the application from loading images from remote devices. アプリケーションがリモート デバイスからファイルまたはプラグインを読み込む場合、この軽減策と互換性がありません。If your application loads files or plug-ins from remote devices, then it will not be compatible with this mitigation.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

信頼されていないフォントをブロックするBlock untrusted fonts

説明Description

信頼されていないフォントをブロックすると、デバイス上でコードを実行できる攻撃者につながるフォント解析の欠陥のリスクが軽減されます。Block untrusted fonts mitigates the risk of a flaw in font parsing leading to the attacker being able to run code on the device. Windows\fonts ディレクトリにインストールされているフォントだけが、GDI による処理のために読み込まれます。Only fonts that are installed into the windows\fonts directory will be loaded for processing by GDI.

この軽減策は、ファイルの場所を検証する GDI 内で実装されます。This mitigation is implemented within GDI, which validates the location of the file. ファイルがシステム フォント ディレクトリに存在しない場合、フォントは解析用に読み込まれなく、その呼び出しは失敗します。If the file is not in the system fonts directory, the font will not be loaded for parsing and that call will fail.

この軽減策は、Windows 10 1607 以降で提供される組み込みの軽減策に加えて、フォント解析をカーネルからユーザー モードのアプリ コンテナーに移動します。This mitigation is in addition to the built-in mitigation provided in Windows 10 1607 and later, which moves font parsing out of the kernel and into a user-mode app container. その結果、フォント解析に基づくエクスプロイトは、サンドボックスで分離されたコンテキストで発生し、リスクを大幅に軽減します。Any exploit based on font parsing, as a result, happens in a sandboxed and isolated context, which reduces the risk significantly. この軽減策の詳細については、ブログ 「Windows 10 をゼロデイエクスプロイトの軽減策で強化する」を参照してください。For details on this mitigation, see the blog Hardening Windows 10 with zero-day exploit mitigations.

互換性に関する考慮事項Compatibility considerations

システム フォント ディレクトリ外のフォントの最も一般的な使用は 、Webフォントです。The most common use of fonts outside of the system fonts directory is with web fonts. Microsoft Edge などの最新のブラウザーでは、GDI ではなく DirectWrite を使用し、影響を受け取る必要はありません。Modern browsers, such as Microsoft Edge, use DirectWrite instead of GDI, and are not impacted. ただし、Internet Explorer 11 (および新しい Microsoft Edge の IE モード) などの従来のブラウザーは、特にフォント グリフを使用して UI を表示する Office 365 などのアプリケーションに影響を与える可能性があります。However, legacy browsers, such as Internet Explorer 11 (and IE mode in the new Microsoft Edge) can be impacted, particularly with applications such as Office 365, which use font glyphs to display UI.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

コード整合性ガードCode integrity guard

説明Description

コード整合性ガードを使用すると、プロセスに読み込まれるすべてのバイナリが Microsoft によってデジタル署名されます。Code integrity guard ensures that all binaries loaded into a process are digitally signed by Microsoft. コード整合性ガードには 、WHQL (Windows ハードウェア品質ラボ) 署名が含まれています。この署名を使用すると、WHQL で承認されたドライバーをプロセス内で実行できます。Code integrity guard includes WHQL (Windows Hardware Quality Labs) signatures, which will allow WHQL-approved drivers to run within the process.

この軽減策はメモリ マネージャー内で実装され、バイナリがメモリにマップされるのをブロックします。This mitigation is implemented within the memory manager, which blocks the binary from being mapped into memory. Microsoft によって署名されていないバイナリを読み込む場合、メモリ管理はエラー メッセージをSTATUS_INVALID_IMAGE_HASH。If you attempt to load a binary that is not signed by Microsoft, the memory manger will return the error STATUS_INVALID_IMAGE_HASH. メモリ マネージャー レベルでブロックすると、プロセスによって読み込まれるバイナリと、プロセスに挿入されたバイナリの両方が防止されます。By blocking at the memory manager level, this prevents both binaries loaded by the process and binaries injected into the process.

互換性に関する考慮事項Compatibility considerations

この軽減策は、特に Microsoft によって署名されていないバイナリをブロックします。This mitigation specifically blocks any binary that is not signed by Microsoft. そのため、そのソフトウェアが Microsoft Store によって配布 (およびデジタル署名) され、Microsoft Store によって署名されたイメージの読み込みを許可するオプションが選択されていない限り、ほとんどのサードパーティソフトウェアと互換性がありません。As such, it will be incompatible with most third-party software, unless that software is distributed by (and digitally signed by) the Microsoft Store, and the option to allow loading of images signed by the Microsoft Store is selected.

構成オプションConfiguration options

また、Microsoft Store によって署名されたイメージの読み込みを許可する - Microsoft Store によって配布されるアプリケーションは Microsoft Store によってデジタル署名され、この構成を追加すると、ストア認定プロセスを通過したバイナリがアプリケーションによって読み込まれます。Also allow loading of images signed by Microsoft Store - Applications that are distributed by the Microsoft Store will be digitally signed by the Microsoft Store, and adding this configuration will allow binaries that have gone through the store certification process to be loaded by the application.

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

制御フロー ガード (CFG)Control flow guard (CFG)

説明Description

コントロール フロー ガード (CFG) は、間接的な関数呼び出しを保護することで、メモリ破損の脆弱性を使用する攻撃者のリスクを軽減します。Control flow guard (CFG) mitigates the risk of attackers using memory corruption vulnerabilities by protecting indirect function calls. たとえば、攻撃者はバッファー オーバーフローの脆弱性を利用して、関数ポインターを含むメモリを上書きし、その関数ポインターを任意の実行可能コード (プログラムに挿入されている可能性があります) へのポインターに置き換える可能性があります。For example, an attacker may user a buffer overflow vulnerability to overwrite memory containing a function pointer, and replace that function pointer with a pointer to executable code of their choice (which may also have been injected into the program).

この軽減策は、コンパイル時に別のチェックを挿入することで提供されます。This mitigation is provided by injecting another check at compile time. 各間接関数呼び出しの前に、ターゲットが呼び出される前に有効な呼び出し先を確認する別の命令が追加されます。Before each indirect function call, another instructions are added which verify that the target is a valid call target before it is called. ターゲットが有効な呼び出し先でない場合、アプリケーションは終了します。If the target is not a valid call target, then the application is terminated. そのため、この軽減策を利用できるのは、CFG サポートを使用してコンパイルされたアプリケーションのみです。As such, only applications that are compiled with CFG support can benefit from this mitigation.

有効なターゲットのチェックは、Windows カーネルによって提供されます。The check for a valid target is provided by the Windows kernel. 実行可能ファイルが読み込まれると、間接呼び出しターゲットのメタデータが読み込み時に抽出され、有効な呼び出し先としてマークされます。When executable files are loaded, the metadata for indirect call targets is extracted at load time and marked as valid call targets. さらに、メモリを割り当て、実行可能ファイル (生成されたコードなど) としてマークすると、これらのメモリの場所も有効な呼び出し先としてマークされ、JIT コンパイルなどのメカニズムをサポートします。Additionally, when memory is allocated and marked as executable (such as for generated code), these memory locations are also marked as valid call targets, to support mechanisms such as JIT compilation.

互換性に関する考慮事項Compatibility considerations

アプリケーションは CFG をサポートするためにコンパイルする必要があるから、アプリケーションとの互換性を暗黙的に宣言します。Since applications must be compiled to support CFG, they implicitly declare their compatibility with it. したがって、ほとんどのアプリケーションは、この軽減策を有効にした場合に動作する必要があります。Most applications, therefore, should work with this mitigation enabled. これらのチェックはバイナリにコンパイルされますので、適用できる構成は、Windows カーネル内のチェックを無効にすることです。Because these checks are compiled into the binary, the configuration you can apply is merely to disable checks within the Windows kernel. つまり、軽減策は既定でオンになっていますが、後でアプリケーション開発者がテストで検出しなかった互換性の問題が発生したと判断した場合は、Windows カーネルが常に "はい" を返す構成を行えます。これはまれなはずです。In other words, the mitigation is on by default, but you can configure the Windows kernel to always return "yes" if you later determine that there is a compatibility issue that the application developer did not discover in their testing, which should be rare.

構成オプションConfiguration options

厳密な CFG を使用する - 厳密なモードでは、プロセスに読み込まれるすべてのバイナリを Control Flow Guard 用にコンパイルする必要があります (または、リソース dll などの実行可能コードがない) 必要があります。Use strict CFG - In strict mode, all binaries loaded into the process must be compiled for Control Flow Guard (or have no executable code in them - such as resource dlls) in order to be loaded.

注意

コントロール フロー ガードには 監査モードはありません。Control flow guard has no audit mode. バイナリは、この軽減策が有効になっているとコンパイルされます。Binaries are compiled with this mitigation enabled.

データ実行防止 (DEP)Data Execution Prevention (DEP)

説明Description

データ実行防止 (DEP) は、実行可能ファイルとして明示的に割り当てられていないメモリが実行されるのを防ぐ。Data execution prevention (DEP) prevents memory that was not explicitly allocated as executable from being executed. DEP は、バッファー オーバーフローなどの悪意のあるコードをプロセスに挿入し、そのコードを実行する攻撃者から保護するのに役立ちます。DEP helps protect against an attacker injecting malicious code into the process, such as through a buffer overflow, and then executing that code.

命令ポインターを実行可能ファイルとしてマークされていないメモリ アドレスに設定しようとすると、プロセッサは例外 (一般保護違反) をスローし、アプリケーションがクラッシュします。If you attempt to set the instruction pointer to a memory address not marked as executable, the processor will throw an exception (general-protection violation), causing the application to crash.

互換性に関する考慮事項Compatibility considerations

すべての x64、ARM、ARM-64 の実行可能ファイルには既定で DEP が有効になっているので、無効にすることはできません。All x64, ARM, and ARM-64 executables have DEP enabled by default, and it cannot be disabled. アプリケーションは DEP なしで実行されたことがないので、互換性が前提となります。Since an application will have never been executed without DEP, compatibility is assumed.

すべての x86 (32 ビット) バイナリでは、既定で DEP が有効になっていますが、プロセスごとに DEP を無効にできます。All x86 (32-bit) binaries have DEP enabled by default, but DEP can be disabled per process. 一部の古い従来のアプリケーション (通常は Windows XP SP2 より前に開発されたアプリケーション) は、DEP と互換性がない場合があります。Some old legacy applications, typically applications developed prior to Windows XP SP2, might not be compatible with DEP. このようなアプリケーションは、通常、コードを動的に生成する (JIT コンパイルなど)、またはコードを動的に生成する古いライブラリ (ATL の古いバージョンなど) へのリンクを生成します。Such applications typically generate code dynamically (for example, JIT compiling) or link to older libraries (such as older versions of ATL) which dynamically generate code.

構成オプションConfiguration options

ATL Thunk エミュレーションを有効 にする - この構成オプションは、ATL Thunk エミュレーションを無効にします。Enable ATL Thunk emulation - This configuration option disables ATL Thunk emulation. ATL (ActiveX テンプレート ライブラリ) は、可能な限り小さく、高速に設計されています。ATL, the ActiveX Template Library, is designed to be as small and fast as possible. バイナリ サイズを小さくするには、サンクと呼ばれる手法 を使用しますIn order to reduce binary size, it would use a technique called thunking. サンクは通常、32 ビットと 16 ビットの間のアプリケーションを操作するために考え出されますが、ここでは ATL に 16 ビット コンポーネントはありません。Thunking is typically thought of for interacting between 32-bit and 16-bit applications, but there are no 16-bit components to ATL here. 代わりに、バイナリ サイズを最適化するために、ATL は、ワードアラインされていない (小さいバイナリを作成する) コンピューター コードをメモリに格納し、そのコードを直接呼び出します。Rather, in order to optimize for binary size, ATL will store machine code in memory that is not word-aligned (creating a smaller binary), and then invoke that code directly. Visual Studio 7.1 以前 (Visual Studio 2003) でコンパイルされた ATL コンポーネントは、このメモリを実行可能ファイルとして割り当てない - サンク エミュレーションは、その互換性の問題を解決します。ATL components compiled with Visual Studio 7.1 or earlier (Visual Studio 2003) do not allocate this memory as executable - thunk emulation resolves that compatibility issue. バイナリ拡張モデル (Internet Explorer 11 など) を持つアプリケーションでは、ATL Thunk エミュレーションを有効にする必要があります。Applications that have a binary extension model (such as Internet Explorer 11) will often need to have ATL Thunk emulation enabled.

拡張ポイントを無効にするDisable extension points

説明Description

この軽減策は、アプリケーションのさまざまな拡張ポイントを無効にします。これは、悪意のあるコンテンツの永続性を確立したり、特権を昇格したりするために使用される可能性があります。This mitigation disables various extension points for an application, which might be used to establish persistence or elevate privileges of malicious content.

これには、次の内容が含まれます。This includes:

  • AppInit DLL - プロセスが開始されるたびに、システムは指定した DLL を新しく開始したプロセスのコンテキストに読み込んでから、そのエントリ ポイント関数を呼び出します。AppInit DLLs - Whenever a process starts, the system will load the specified DLL into to context of the newly started process before calling its entry point function. AppInit DLL の詳細については、こちらを参照してくださいDetails on AppInit DLLs can be found here. この軽減策が適用されると、AppInit DLL は読み込まれません。With this mitigation applied, AppInit DLLs are not loaded. Windows 7 から始まる AppInit DLL は、ここで説明するようにデジタル署名 する必要がありますBeginning with Windows 7, AppInit DLLs need to be digitally signed, as described here. さらに、ここで説明Windows 8、SecureBoot が有効になっている場合、AppInit DLL は読み込 まれませんAdditionally, beginning with Windows 8, AppInit DLLs will not be loaded if SecureBoot is enabled, as described here.
  • 従来の IMEs - 入力メソッド エディター (IME) を使用すると、ユーザーはキーボードで表す文字よりも多くの文字を持つ言語でテキストを入力できます。Legacy IMEs - An Input Method Editor (IME) allows a user to type text in a language that has more characters than can be represented on a keyboard. サード パーティは IMEs を作成できます。Third parties are able to create IMEs. 悪意のある IME は、この入力キャプチャから資格情報や他の機密情報を取得する可能性があります。A malicious IME might obtain credentials or other sensitive information from this input capture. 従来の IME と呼ばれる一部の IME は、Windows デスクトップ アプリでのみ動作し、UWP アプリでは動作しません。Some IMEs, referred to as Legacy IMEs, will only work on Windows Desktop apps, and not UWP apps. また、この軽減策により、この従来の IME が指定した Windows デスクトップ アプリに読み込まれるのを防ぐことも可能です。This mitigation will also prevent this legacy IME from loading into the specified Windows Desktop app.
  • Windows イベント フック - アプリケーションは SetWinEventHook API を呼び出して、発生するイベントに関心を登録できます。Windows Event Hooks - An application can call the SetWinEventHook API to register interest in an event taking place. DLL が指定され、プロセスに挿入できます。A DLL is specified and can be injected into the process. この軽減策は、挿入された DLL を介してインプロセスを実行するのではなく、登録プロセスにフックを強制的に投稿します。This mitigation forces the hook to be posted to the registering process rather than running in-process through an injected DLL.

互換性に関する考慮事項Compatibility considerations

これらの拡張ポイントの大部分は比較的頻繁に使用されないので、互換性への影響は通常、特に個々のアプリケーション レベルで小さくても問題はありません。Most of these extension points are relatively infrequently used, so compatibility impact is typically small, particularly at an individual application level. 1 つの考慮事項は、ユーザーが保護されたアプリケーションで動作しないサードパーティの従来の IMEs を使用している場合です。The one consideration is if users are using third-party Legacy IMEs that will not work with the protected application.

構成オプションConfiguration options

この軽減策の構成オプションはありません。There are no configuration options for this mitigation.

注意

拡張機能ポイントを無効に した場合、監査モードはありません。Disable extension points has no audit mode.

Win32k システム呼び出しを無効にするDisable Win32k system calls

説明Description

Win32k.sysは、攻撃者に広範な攻撃の表面を提供します。Win32k.sys provides a broad attack surface for an attacker. カーネル モード コンポーネントとして、サンドボックス化されたアプリケーションのエスケープ ベクトルとして頻繁に対象とされます。As a kernel-mode component, it is frequently targeted as an escape vector for applications that are sandboxed. この軽減策は、スレッドwin32k.sys自体を GUI スレッドに変換し、Win32k 関数を呼び出すアクセス権を与えられるのをブロックすることで、ユーザーに対する呼び出しを防止します。This mitigation prevents calls into win32k.sys by blocking a thread from converting itself into a GUI thread, which is then given access to invoke Win32k functions. スレッドは、作成時には GUI 以外ですが、最初の呼び出しで win32k.sys または IsGuiThreadへの API 呼び出しで変換されます。A thread is non-GUI when created, but converted on first call to win32k.sys, or through an API call to IsGuiThread.

互換性に関する考慮事項Compatibility considerations

この軽減策は、専用の非 UI プロセスであるプロセス用に設計されています。This mitigation is designed for processes that are dedicated non-UI processes. たとえば、多くの最新のブラウザーでは、プロセス分離を使用し、UI 以外のプロセスを組み込む必要があります。For example, many modern browsers will use process isolation and incorporate non-UI processes. 1 つのプロセスを使用して GUI を表示するアプリケーションは、この軽減策の影響を受け取る可能性があります。Any application that displays a GUI using a single process will be impacted by this mitigation.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

子プロセスを許可しないDo not allow child processes

説明Description

この軽減策により、アプリケーションは新しい子アプリケーションを作成できます。This mitigation prevents an application from creating new child applications. 敵対者が使用する一般的な手法は、悪意のある入力 ("土地から離れ" 攻撃) を使用してデバイス上で信頼できるプロセスを開始する方法です。多くの場合、デバイス上で別のアプリケーションを起動する必要があります。A common technique used by adversaries is to initiate a trusted process on the device with malicious input (a "living off the land" attack), which often requires launching another application on the device. アプリケーションが子プロセスを起動する正当な理由がない場合、この軽減策は、その潜在的な攻撃ベクトルを軽減します。If there are no legitimate reasons why an application would launch a child process, this mitigation mitigates that potential attack vector. この軽減策は、プロセス トークンにプロパティを設定することで適用されます。これは、エラー メッセージが表示された子プロセスのトークンを作成STATUS_CHILD_PROCESS_BLOCKED。The mitigation is applied by setting a property on the process token, which blocks creating a token for the child process with the error message STATUS_CHILD_PROCESS_BLOCKED.

互換性に関する考慮事項Compatibility considerations

ブラウザーや外部ブラウザーを起動するハイパーリンクのサポート、コンピューター上で他のユーティリティを起動するハイパーリンクなど、何らかの理由でアプリケーションが子アプリケーションを起動した場合、この機能は、この軽減策が適用された時点で壊れます。If your application launches child applications for any reason, such as supporting hyperlinks that launch a browser or an external browser, or which launch other utilities on the computer, this functionality will be broken with this mitigation applied.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

アドレス フィルターのエクスポートExport address filtering

説明Description

エクスポート アドレス フィルター (EAF) は、読み込まれたすべてのモジュールのエクスポート アドレス テーブルを見て、攻撃に役立つ API を含むモジュールを検索する悪意のあるコードのリスクを軽減します。Export address filtering (EAF) mitigates the risk of malicious code looking at the export address table of all loaded modules to find modules that contain useful APIs for their attack. これは、シェルコードで使用される一般的な方法です。This is a common tactic used by shellcode. このような攻撃のリスクを軽減するために、この軽減策は一般的に攻撃される 3 つのモジュールを保護します。In order to mitigate the risk of such an attack, this mitigation protects three commonly attacked modules:

  • ntdll.dllntdll.dll
  • kernelbase.dllkernelbase.dll
  • kernel32.dllkernel32.dll

この軽減策は、[エクスポート アドレス テーブルをポイントするエクスポート ディレクトリ内のメモリ ページ を保護しますThe mitigation protects the memory page in the [export directory that points to the export address table. このメモリ ページには 、PAGE_GUARD保護 が適用されます。This memory page will have the PAGE_GUARD protection applied to it. 他のユーザーがこのメモリにアクセスしようとすると、そのメモリがSTATUS_GUARD_PAGE_VIOLATION。When someone tries to access this memory, it will generate a STATUS_GUARD_PAGE_VIOLATION. この軽減策は、この例外を処理し、アクセス命令が検証に合格しない場合、プロセスは終了します。The mitigation handles this exception, and if the accessing instruction doesn't pass validation, the process will be terminated.

互換性に関する考慮事項Compatibility considerations

この軽減策は、デバッガー、サンドボックス アプリケーション、DRM を使用するアプリケーション、デバッグ対策テクノロジを実装するアプリケーションなどのアプリケーションの主な問題です。This mitigation is primarily an issue for applications such as debuggers, sandboxed applications, applications using DRM, or applications that implement anti-debugging technology.

構成オプションConfiguration options

悪用によって一般的に 悪用されるモジュールのアクセスを検証する - このオプションは、EAF+とも呼ばれる、他の一般的に攻撃されるモジュールの保護を追加します。Validate access for modules that are commonly abused by exploits - This option, also known as EAF+, adds protections for other commonly attacked modules:

  • mshtml.dll
  • flash*.ocx
  • jscript*.ocx
  • vbscript.dll
  • vgx.dll
  • mozjs.dll
  • xul.dll
  • acrord32.dll
  • acrofx32.dll
  • acroform.api

さらに、EAF+ を有効にすると、この軽減策は、PE ファイル内の DOSヘッダーの最初の 2 バイトである "MZ" ヘッダーを含むページに PAGE_GUARD 保護を追加します。これは、シェルコードがメモリに関心を持つ可能性のあるモジュールを識別するために検索できる既知のメモリ コンテンツのもう 1 つの側面です。Additionally, by enabling EAF+, this mitigation adds the PAGE_GUARD protection to the page containing the "MZ" header, the first two bytes of the DOS header in a PE file, which is another aspect of known memory content which shellcode can look for to identify modules potentially of interest in memory.

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

イメージのランダム化を強制する (必須 ASLR)Force randomization for images (Mandatory ASLR)

説明Description

アドレス空間レイアウトランダム化 (ASLR) は、プロセス メモリに既に存在し、既に実行可能としてマークされているコードを実行するために、システムのメモリ レイアウトに関する知識を使用する攻撃者のリスクを軽減します。Address Space Layout Randomization (ASLR) mitigates the risk of an attacker using their knowledge of the memory layout of the system in order to execute code that is already present in process memory and already marked as executable. これにより、攻撃者が return-to-libc 攻撃などの手法を使用して、攻撃者がコンテキストを設定し、戻りアドレスを変更して、敵の目的に合ったコンテキストで既存のコードを実行するリスクを軽減できます。This can mitigate the risk of an attacker using techniques such as return-to-libc attacks, where the adversary sets the context and then modifies the return address to execute existing code with context that suits the adversary's purpose.

必須の ASLR では、プロセス内のすべての DLL の再ベースが強制されます。Mandatory ASLR forces a rebase of all DLLs within the process. 開発者は 、/DYNAMICBASE リンカー オプションを使用して ASLR を有効にできます。この軽減効果も同じです。A developer can enable ASLR using the /DYNAMICBASE linker option, and this mitigation has the same effect.

メモリ マネージャーがイメージ内でプロセスにマッピングしている場合、必須 ASLR は ASLR にオプトインしていない DLL と EXEs を強制的にリベースします。When the memory manager is mapping in the image into the process, Mandatory ASLR will forcibly rebase DLLs and EXEs that have not opted in to ASLR. ただし、このリバスはエントロピーを持たず、メモリ内の予測可能な場所に配置できます。Note, however, that this rebasing has no entropy, and can therefore be placed at a predictable location in memory. バイナリの再ベースおよびランダム化された場所の場合、この軽減策は、ランダム化メモリ割り当 て (ボトムアップ ASLR)とペアにする必要があります。For rebased and randomized location of binaries, this mitigation should be paired with Randomize memory allocations (Bottom-up ASLR).

互換性に関する考慮事項Compatibility considerations

ASLR のこの互換性への影響は、通常、バイナリ ファイルの基本アドレスを前提にしたコンパイラを使用して構築された古いアプリケーションや、基本再配置情報を削除した古いアプリケーションに制限されます。This compatibility impact of ASLR is typically constrained to older applications that were built using compilers that made assumptions about the base address of a binary file or have stripped out base relocation information. これにより、実行フローがメモリ内の実際の場所ではなく、予想される場所にジャンプしようとすると、予測できないエラーが発生する可能性があります。This can lead to unpredictable errors as the execution flow attempts to jump to the expected, rather than the actual, location in memory.

構成オプションConfiguration options

削除された画像を許可しない - このオプションは、再配置情報が削除されたイメージの読み込みをブロックします。Do not allow stripped images - This option blocks the loading of images that have had relocation information stripped. Windows PE ファイル形式には絶対アドレスが含まれます。また、コンパイラは [基本再配置テーブルを生成し、ローダーは、すべての相対メモリ参照とそのオフセットを検索するために使用できます。バイナリが優先ベース アドレスで読み込めない場合は更新できます。The Windows PE file format contains absolute addresses, and the compiler also generates a [base relocation table that the loader can use to find all relative memory references and their offset, so they can be updated if the binary does not load at its preferred base address. 一部の古いアプリケーションでは、実稼働ビルドでこの情報を削除するため、これらのバイナリを再ベース化することはできません。Some older applications strip out this information in production builds, and therefore these binaries cannot be rebased. この軽減策は、このようなバイナリが読み込まれるのをブロックします (優先する基本アドレスで読み込む代わりに)。This mitigation blocks such binaries from being loaded (instead of allowing them to load at their preferred base address).

注意

イメージの強制的なランダム化 (必須 ASLR) には 監査モードはありません。Force randomization for images (Mandatory ASLR) has no audit mode.

アドレス フィルターのインポート (IAF)Import address filtering (IAF)

説明Description

インポート アドレス フィルター (IAF) の軽減は、インポート アドレス テーブル (IAT) を変更して、その関数が呼び出された際に攻撃者が選択した任意のコードにリダイレクトすることで、アプリケーションの制御フローを変更する敵のリスクを軽減するのに役立ちます。The import address filtering (IAF) mitigation helps mitigate the risk of an adversary changing the control flow of an application by modifying the import address table (IAT) to redirect to arbitrary code of the attacker's choice when that function is called. 攻撃者は、このアプローチを使用して制御をハイジャックしたり、機密性の高い API への呼び出しを傍受、検査、ブロックしたりする可能性があります。An attacker could use this approach to hijack control, or to intercept, inspect, and potentially block calls to sensitive APIs.

すべての保護された API のメモリ ページには、PAGE_GUARD 保護が 適用されます。The memory pages for all protected APIs will have the PAGE_GUARD protection applied to them. 他のユーザーがこのメモリにアクセスしようとすると、そのメモリがSTATUS_GUARD_PAGE_VIOLATION。When someone tries to access this memory, it will generate a STATUS_GUARD_PAGE_VIOLATION. この軽減策は、この例外を処理し、アクセス命令が検証に合格しない場合、プロセスは終了します。The mitigation handles this exception, and if the accessing instruction doesn't pass validation, the process will be terminated.

この軽減策は、次の Windows API を保護します。This mitigation protects the following Windows APIs:

  • 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

互換性に関する考慮事項Compatibility considerations

API インターセプトを実行する正当なアプリケーションは、この軽減策によって検出され、一部のアプリケーションがクラッシュする可能性があります。Legitimate applications that perform API interception may be detected by this mitigation and cause some applications to crash. たとえば、セキュリティ ソフトウェアとアプリケーションの互換性 shim が含まれます。Examples include security software and application compatibility shims.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

メモリ割り当てをランダム化する (ボトムアップ ASLR)Randomize memory allocations (Bottom-up ASLR)

説明Description

メモリ割り当てをランダム化 (ボトムアップ ASLR) を使用すると、再配置にエントロピーが追加されるため、場所はランダム化されるため、予測が難しになります。Randomize memory allocations (Bottom-up ASLR) adds entropy to relocations, so their location is randomized and therefore less predictable. この軽減策を有効にするためには、必須の ASLR が必要です。This mitigation requires Mandatory ASLR to take effect.

32 ビット アドレス空間のサイズは、追加できるエントロピーに実用的な制約を与えるので、64 ビット アプリケーションでは、攻撃者がメモリ内の場所を推測するのが難しくなります。The size of the 32-bit address space places practical constraints on the entropy that can be added, and therefore 64-bit applications make it more difficult for an attacker to guess a location in memory.

互換性に関する考慮事項Compatibility considerations

必須 ASLR (リベース) と互換性のあるほとんどのアプリケーションは、ボトムアップ ASLR の他のエントロピーにも対応しています。Most applications that are compatible with Mandatory ASLR (rebasing) are also compatible with the other entropy of Bottom-up ASLR. 一部のアプリケーションでは、ローカル ポインターを 32 ビット変数 (4 GB 以下のベース アドレスを必要とします) に保存する場合にポインター切り捨ての問題が発生する可能性があります。そのため、高エントロピー オプション (無効にできる) と互換性がありません。Some applications may have pointer-truncation issues if they are saving local pointers in 32-bit variables (expecting a base address below 4 GB), and thus will be incompatible with the high entropy option (which can be disabled).

構成オプションConfiguration options

高エントロピーを使用しない - このオプションは、64 ビット アプリケーションのボトムアップ割り当てに 24 ビットのエントロピー (分散 1 TB) を追加する、高エントロピー ASLR の使用を無効にします。Don't use high entropy - this option disables the use of high-entropy ASLR, which adds 24 bits of entropy (1 TB of variance) into the bottom-up allocation for 64-bit applications.

注意

メモリ割り当てのランダム化 (ボトムアップ ASLR) には 監査モードはありません。Randomize memory allocations (Bottom-up ASLR) has no audit mode.

実行のシミュレーション (SimExec)Simulate execution (SimExec)

説明Description

シミュレーション実行 (SimExec) は、32 ビット アプリケーションの軽減策です。Simulate execution (SimExec) is a mitigation for 32-bit applications only. これにより、機密性の高い API への呼び出しが正当な呼び出し元関数に戻る検証に役立ちます。This helps validate that calls to sensitive APIs will return to legitimate caller functions. これは、機密性の高い API への呼び出しを傍受し、呼び出し元に返す RET 命令を探すエンコードされたアセンブリ言語命令を実行して、それらの API の実行をシミュレートすることで行います。It does this by intercepting calls into sensitive APIs, and then simulating the execution of those APIs by walking through the encoded assembly language instructions looking for the RET instruction, which should return to the caller. 次に、その関数を検査し、メモリ内を後方に移動して、前の CALL 命令を見つけて、関数と CALL 命令が一致するかどうか、および RET が傍受されていないかどうかを判断します。It then inspects that function and walks backwards in memory to find the preceding CALL instruction to determine whether the function and CALL instruction match, and that the RET hasn't been intercepted.

この軽減策によって傍受される API は次のとおりです。The APIs intercepted by this mitigation are:

  • 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 ガジェットが検出されると、プロセスは終了します。If a ROP gadget is detected, the process is terminated.

互換性に関する考慮事項Compatibility considerations

API 傍受、特にセキュリティ ソフトウェアを実行するアプリケーションは、この軽減策との互換性の問題を引き起こす可能性があります。Applications that perform API interception, particularly security software, can cause compatibility problems with this mitigation.

この軽減策は、任意のコード ガードの軽減策と互換性がありません。This mitigation is incompatible with the Arbitrary Code Guard mitigation.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

API 呼び出しの検証 (CallerCheck)Validate API invocation (CallerCheck)

説明Description

検証 API 呼び出し (CallerCheck) は、有効な呼び出し元から機密性の高い API が呼び出されたのを検証する、戻り値指向プログラミング (ROP) 手法の軽減策です。Validate API invocation (CallerCheck) is a mitigation for return-oriented programming (ROP) techniques that validates that sensitive APIs were called from a valid caller. この軽減策は、渡された戻りアドレスを検査し、ヒューリスティックに逆アセンブルして、戻り値アドレスの上に呼び出しを見つけて、呼び出し先が関数に渡されたパラメーターと一致するかどうかを判断します。This mitigation inspects the passed return address, and then heuristically disassembles backwards to find a call above the return address to determine if the call target matches the parameter passed into the function.

この軽減策によって傍受される API は次のとおりです。The APIs intercepted by this mitigation are:

  • 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 ガジェットが検出されると、プロセスは終了します。If a ROP gadget is detected, the process is terminated.

互換性に関する考慮事項Compatibility considerations

API 傍受、特にセキュリティ ソフトウェアを実行するアプリケーションは、この軽減策との互換性の問題を引き起こす可能性があります。Applications that perform API interception, particularly security software, can cause compatibility problems with this mitigation.

この軽減策は、任意のコード ガードの軽減策と互換性がありません。This mitigation is incompatible with the Arbitrary Code Guard mitigation.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

例外チェーンの検証 (SEHOP)Validate exception chains (SEHOP)

説明Description

例外チェーン (SEHOP) の検証は、構造化例外ハンドラー (SEH) 上書き悪用手法に対する軽減策です。Validate exception chains (SEHOP) is a mitigation against the Structured Exception Handler (SEH) overwrite exploitation technique. 構造化例外処理とは 、アプリケーションが特定の例外の処理を要求できるプロセスです。Structured exception handling is the process by which an application can ask to handle a particular exception. 例外ハンドラーは一緒にチェーン処理され、ある例外ハンドラーが特定の例外を処理しない場合は、処理を決定するまでチェーン内の次の例外ハンドラーに渡されます。Exception handlers are chained together, so that if one exception handler chooses not to handle a particular exception, it can be passed on to the next exception handler in the chain until one decides to handle it. ハンドラーの一覧は動的なので、スタックに格納されます。Because the list of handler is dynamic, it is stored on the stack. 攻撃者はスタック オーバーフローの脆弱性を使用して、例外ハンドラーを攻撃者が選択したコードへのポインターで上書きできます。An attacker can use a stack overflow vulnerability to then overwrite the exception handler with a pointer to the code of the attacker's choice.

この軽減策は、各 SEH エントリに例外ハンドラーへのポインターと、例外チェーン内の次のハンドラーへのポインターの両方が含まれる SEH の設計に依存します。This mitigation relies on the design of SEH, where each SEH entry contains both a pointer to the exception handler, as well as a pointer to the next handler in the exception chain. この軽減策は、例外ディスパッチャーによって呼び出され、例外が呼び出されると SEH チェーンが検証されます。This mitigation is called by the exception dispatcher, which validates the SEH chain when an exception is invoked. 次の情報が確認されます。It verifies that:

  • すべての例外チェーン レコードがスタック境界内にあるAll exception chain records are within the stack boundaries
  • すべての例外レコードが揃っていますAll exception records are aligned
  • スタックを指している例外ハンドラー ポインターはありませんNo exception handler pointers are pointing to the stack
  • 下位ポインターはありませんThere are no backward pointers
  • 例外チェーンは、既知の最終的な例外ハンドラーで終了します。The exception chain ends at a known final exception handler

これらの検証が失敗した場合、例外処理は中止され、例外は処理されません。If these validations fail, then exception handling is aborted, and the exception will not be handled.

互換性に関する考慮事項Compatibility considerations

SEHOP との互換性の問題は比較的まれです。Compatibility issues with SEHOP are relatively rare. アプリケーションが例外チェーンの破損に依存する場合はまれです。It's uncommon for an application to take a dependency on corrupting the exception chain. ただし、一部のアプリケーションはタイミングの微妙な変化の影響を受け、アプリケーションの潜在的なマルチスレッド バグを明らかにする競争状態として現れる可能性があります。However, some applications are impacted by the subtle changes in timing, which may manifest as a race condition that reveals a latent multi-threading bug in the application.

構成オプションConfiguration options

注意

例外チェーン (SEHOP) に 監査モードがないのを検証します。Validate exception chains (SEHOP) has no audit mode.

ハンドルの使用状況を検証するValidate handle usage

説明Description

ハンドルの使用状況の検証 は、既存のハンドルを使用して保護されたオブジェクトにアクセスする攻撃者から保護するのに役立つ軽減策です。Validate handle usage is a mitigation that helps protect against an attacker using an existing handle to access a protected object. ハンドル 、保護されたオブジェクトへの参照です。A handle is a reference to a protected object. アプリケーション コードが無効なハンドルを参照している場合、攻撃者が以前に記録したハンドルを使用しようとしている可能性があります (ただし、どのアプリケーション参照カウントが認識されません)。If application code is referencing an invalid handle, that could indicate that an adversary is attempting to use a handle it has previously recorded (but which application reference counting wouldn't be aware of). アプリケーションが null を返すのではなく、無効なオブジェクトを使用しようとすると、アプリケーションは例外を発生します (STATUS_INVALID_HANDLE)。If the application attempts to use an invalid object, instead of simply returning null, the application will raise an exception (STATUS_INVALID_HANDLE).

この軽減策は、Windows ストア アプリケーションに自動的に適用されます。This mitigation is automatically applied to Windows Store applications.

互換性に関する考慮事項Compatibility considerations

ハンドル参照を正確に追跡していないアプリケーション、および例外ハンドラーでこれらの操作をラップしていないアプリケーションは、この軽減策の影響を受け得る可能性があります。Applications that were not accurately tracking handle references, and which were not wrapping these operations in exception handlers, will potentially be impacted by this mitigation.

構成オプションConfiguration options

注意

ハンドルの使用状況を検証 する監査モードはありません。Validate handle usage has no audit mode.

ヒープ整合性の検証Validate heap integrity

説明Description

ヒープ 整合性の検証の軽減 は、ヒープの破損が検出された場合にアプリケーションを終了することで、Windows のヒープ軽減の保護レベルを向上します。The validate heap integrity mitigation increases the protection level of heap mitigations in Windows, by causing the application to terminate if a heap corruption is detected. 軽減策には、次のものが含まれます。The mitigations include:

  • HEAP ハンドルが解放されるのを防ぐPreventing a HEAP handle from being freed
  • ヒープ割り当ての拡張ブロック ヘッダーに対して別の検証を実行するPerforming another validation on extended block headers for heap allocations
  • ヒープ割り当てが既に使用済みとしてフラグが設定されていないか確認するVerifying that heap allocations are not already flagged as in-use
  • 最小サイズを超えて大きな割り当て、ヒープ セグメント、およびサブセグメントにガード ページを追加するAdding guard pages to large allocations, heap segments, and subsegments above a minimum size

互換性に関する考慮事項Compatibility considerations

この軽減策は、Windows Vista 以降を対象とする 64 ビット アプリケーションおよび 32 ビット アプリケーションに対して既定で既に適用されています。This mitigation is already applied by default for 64-bit applications and for 32-bit applications targeting Windows Vista or later. 互換性の問題はまれですが、Windows XP 以前のレガシ アプリケーションは最も危険にさらされています。Legacy applications from Windows XP or earlier are most at-risk, though compatibility issues are rare.

構成オプションConfiguration options

注意

ヒープ整合性の検証には監査 モードはありません。Validate heap integrity has no audit mode.

イメージの依存関係の整合性を検証するValidate image dependency integrity

説明Description

検証 イメージの依存関係の軽減 は、Windows バイナリによって静的にリンクされている dll のコードを置き換える攻撃から保護するのに役立ちます。The validate image dependency mitigation helps protect against attacks that attempt to substitute code for dlls that are statically linked by Windows binaries. DLL の植え付け手法は、ローダーの検索メカニズムを悪用して悪意のあるコードを挿入します。これは、悪意のあるコードを昇格されたコンテキストで実行するために使用できます。The technique of DLL planting abuses the loader's search mechanism to inject malicious code, which can be used to get malicious code running in an elevated context. ローダーが Windows 署名バイナリを読み込み、バイナリに依存する dll を読み込む場合、これらのバイナリは、Windows バイナリとしてデジタル署名も行なうかどうか確認されます。When the loader is loading a Windows signed binary, and then loads up any dlls that the binary depends on, these binaries will be verified to ensure that they are also digitally signed as a Windows binary. 署名チェックに失敗した場合、dll は読み込まれないため、例外がスローされ、エラーの状態がSTATUS_INVALID_IMAGE_HASH。If they fail the signature check, the dll will not be loaded, and will throw an exception, returning a status of STATUS_INVALID_IMAGE_HASH.

互換性に関する考慮事項Compatibility considerations

互換性の問題は一般的ではありません。Compatibility issues are uncommon. Windows バイナリをローカルのプライベート バージョンに置き換えるのに依存するアプリケーションは影響を受け、マルチスレッド アプリケーションで微妙なタイミング バグが発生するリスクも少なからない。Applications that depend on replacing Windows binaries with local private versions will be impacted, and there is also a small risk of revealing subtle timing bugs in multi-threaded applications.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.

スタック整合性の検証 (StackPivot)Validate stack integrity (StackPivot)

説明Description

スタック整合性の検証 (StackPivot) の軽減は、スタック ピボット攻撃(攻撃者がヒープ メモリ内に偽のスタックを作成する ROP 攻撃)から保護し、実行のフローを制御する偽のスタックにアプリケーションを戻すのに役立ちます。The validate stack integrity (StackPivot) mitigation helps protect against the Stack Pivot attack, a ROP attack where an attacker creates a fake stack in heap memory, and then tricks the application into returning into the fake stack that controls the flow of execution.

この軽減策は、多くの Windows API を傍受し、スタック ポインターの値を検査します。This mitigation intercepts many Windows APIs, and inspects the value of the stack pointer. スタック ポインターのアドレスがスタックの下部と上の間に入らない場合は、イベントが記録され、監査モードではない場合、プロセスは終了します。If the address of the stack pointer does not fall between the bottom and the top of the stack, then an event is recorded and, if not in audit mode, the process will be terminated.

この軽減策によって傍受される API は次のとおりです。The APIs intercepted by this mitigation are:

  • 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

互換性に関する考慮事項Compatibility considerations

偽のスタックを使用しているアプリケーションは影響を受け、マルチスレッド アプリケーションで微妙なタイミング バグを明らかにするリスクも小さい。Applications that are using fake stacks will be impacted, and there is also a small risk of revealing subtle timing bugs in multi-threaded applications. API 傍受、特にセキュリティ ソフトウェアを実行するアプリケーションは、この軽減策との互換性の問題を引き起こす可能性があります。Applications that perform API interception, particularly security software, can cause compatibility problems with this mitigation.

この軽減策は、任意のコード ガードの軽減策と互換性がありません。This mitigation is incompatible with the Arbitrary Code Guard mitigation.

構成オプションConfiguration options

[監査のみ ] - アプリケーションに対する潜在的な互換性への影響を測定するために、監査モードでこの軽減策を有効にできます。Audit Only - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. 監査イベントは、イベント ビューアーで表示するか、Microsoft Defender for Endpoint の Advanced Hunting を 使用して表示できますAudit events can then be viewed either in the event viewer or using Advanced Hunting in Microsoft Defender for Endpoint.