Exploit Protection Reference
In brief
The page clarifies per-program registry settings, XML deployment through PowerShell, Group Policy, and MDM, policy-removal behavior, and resetting settings with the Windows Security Baselines XML. It also adds links and mitigation-specific introductory sections.
What Defender admins need to know
Administrators can more easily determine how exploit protection settings are targeted and reset. Settings deployed by XML are not automatically removed when the related Group Policy or MDM policy is no longer enforced.
Summaries are generated from the documentation change itself.
Documentation change
The comparison below shows only the changed extract. Use the full-page view for complete context.
author: limwainstein
ms.author: lwainstein
ms.reviewer: cjacks
ms.custom: asr, msecd-doc-authoring-10141016
ms.subservice: asr
ms.topic: how-to
ms.collection:
- m365-security
- tier3
- mde-asr
ms.date:
06/16/07/03/2026 appliesto:- Microsoft Defender for Endpoint Plan 1
- Microsoft Defender for Endpoint Plan 2
Exploit protection mitigations are applied per application.
Mitigations are configured via aEach program has its own registry entry for each program that you configure protections for.controls which mitigations apply. 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). TheyThese mitigation settings take effect when you restart the program, andprogram. They remain effectiveactive until you change them and restart the program again.program.
You can configure mitigations through an XML file by using PowerShell, Group Policy, or MDM. When you use an XML file, the system sets the registry entries for you.
Resetting exploit protection
To remove exploit protection settings, export the XML configuration from a clean Windows 10 or Windows 11 device, and deploy this new XML file. Alternately, Microsoft provides an XML file as part of the Windows Security Baselines for resetting exploit protection settings.
To reset exploit protection settings using PowerShell, run the following command to apply the reset policy from the XML file and restore mitigation settings to their defaults:
Set-ProcessMitigation -PolicyFilePath EP-reset.xml
The following XML file is the EP-reset.xml distributed with the Windows Security Baselines. This file defines per-application mitigation overrides that reset exploit protection settings to their defaults for common applications such as Microsoft Office, web browsers, and media players:
<?xml version="1.0" encoding="UTF-8"?>
<MitigationPolicy>
## Mitigation Reference
The following exploit protection mitigations each include a description, compatibility considerations, and configuration options.
## Arbitrary code guard
The following sections describe how arbitrary code guard works, its compatibility impact, and its configuration options.
### 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.
## Block low integrity images
The following sections describe how block low integrity images works, its compatibility impact, and its configuration options.
### Description
Block low integrity images prevents the application from loading files that are untrusted, typically because they've been downloaded from the internet from a sandboxed browser.
## Block remote images
The following sections describe how block remote images works, its compatibility impact, and its configuration options.
### Description
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.
## Block untrusted fonts
The following sections describe how block untrusted fonts works, its compatibility impact, and its configuration options.
### 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. Only fonts that are installed into the windows\fonts directory will be loaded for processing by GDI.
## Code integrity guard
The following sections describe how code integrity guard works, its compatibility impact, and its configuration options.
### Description
Code integrity guard ensures that all binaries loaded into a process are digitally signed by Microsoft. Code integrity guard includes [WHQL](/windows-hardware/drivers/install/whql-release-signature) (Windows Hardware Quality Labs) signatures, which allows 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. If you attempt to load a binary that isn't signed by Microsoft, the memory manger returns 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
## Control flow guard (CFG)
The following sections describe how control flow guard works, its compatibility impact, and its configuration options.
### Description
Control flow guard (CFG) mitigates the risk of attackers using memory corruption vulnerabilities by protecting indirect function calls. For example, an attacker might use 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 could also be injected into the program).
## Data Execution Prevention (DEP)
The following sections describe how Data Execution Prevention works, its compatibility impact, and its configuration options.
### Description
Data execution prevention (DEP) prevents memory that wasn't explicitly allocated as executable from being executed. DEP helps protect against an attacker injecting malicious code into the process, such as through a buffer overflow, and then executing that code.
### Configuration options
**Enable ATL Thunk emulation** - This option controls ATL Thunk emulation. ATL, the ActiveX Template Library, is designed to be as small and fast as possible. To reduce binary size, it uses a technique called *thunking*. Thunking is often linked to 32-bit and 16-bit interaction, but ATL has no 16-bit parts. Instead, to save space, ATL stores machine code in memory that isn't word-aligned. This creates a smaller binary. ATL then runs that code directly. ATL versions compiled with Visual Studio 7.1 or earlier (Visual Studio 2003) don't mark this memory as executable. Thunk emulation fixes that issue. Apps with a binary extension model (such as Internet Explorer 11) need ATL Thunk emulation enabled.
## Disable extension points
The following sections describe how the disable extension points mitigation works, its compatibility impact, and its configuration options.
### Description
The Disable extension points mitigation disables various extension points for an application, which might be used to establish persistence or elevate privileges of malicious content.
## Disable Win32k system calls
The following sections describe how the disable Win32k system calls mitigation works, its compatibility impact, and its configuration options.
### Description
Win32k.sys provides a broad attack surface for an attacker. As a kernel-mode component, it's frequently targeted as an escape vector for applications that are sandboxed. 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. A thread is non-GUI when created, but converted on first call to win32k.sys, or through an API call to [IsGuiThread](/windows/win32/api/winuser/nf-winuser-isguithread).
## Don't allow child processes
The following sections describe how the don't allow child processes mitigation works, its compatibility impact, and its configuration options.
### Description
The Don't allow child processes 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. 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.
## Export address filtering
The following sections describe how export address filtering works, its compatibility impact, and its configuration options.
### Description
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. In order to mitigate the risk of such an attack, this mitigation protects three commonly attacked modules:
## Force randomization for images (Mandatory ASLR)
The following sections describe how Mandatory ASLR works, its compatibility impact, and its configuration options.
### Description
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. 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.
### Description
Hardware-enforced stack protection offers robust protection against ROP exploits. It works by keeping a record of the intended execution flow of a program. To support smooth adoption and app compatibility, Windows offers this protection as an opt-in model. Developers can enable it at their own pace.
### Compatibility considerations
### Description
Randomize memory allocations (Bottom-up ASLR) adds entropy to relocations, so their location is randomized and therefore less predictable. This mitigation requires [Mandatory ASLR](#force-randomization-for-images-mandatory-aslr) to take effect.
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
Most apps that work with Mandatory ASLR (rebasing) also work with Bottom-up ASLR. Some apps might have pointer-truncation issues if they save local pointers in 32-bit variables. These apps expect a base address below 4 GB, so they won't work with the high entropy option. You can disable high entropy if needed.
### Configuration options
@@ -6,14 +6,14 @@ ms.localizationpriority: medium author: limwainstein ms.author: lwainstein ms.reviewer: cjacks-ms.custom: asr, msecd-doc-authoring-1014+ms.custom: asr, msecd-doc-authoring-1016 ms.subservice: asr ms.topic: how-to ms.collection: - m365-security - tier3 - mde-asr-ms.date: 06/16/2026+ms.date: 07/03/2026 appliesto: - Microsoft Defender for Endpoint Plan 1 - Microsoft Defender for Endpoint Plan 2@@ -31,26 +31,26 @@ This article helps you understand how exploit protection works, both at the poli Exploit protection mitigations are applied per application. -Mitigations are configured via a registry entry for each program that you configure protections for. 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.+Each program has its own registry entry that controls which mitigations apply. These settings are stored in the **MitigationOptions** registry entry (`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\*ImageFileName*\MitigationOptions`). These mitigation settings take effect when you restart the program. They remain active until you change them and restart the program. > [!IMPORTANT]-> Image file execution options only allow 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 tested that version and that architecture of the application.+> Image file execution options only let you specify a file name or path. You can't specify a version number, architecture, or any other differentiator. Target mitigations to apps that have unique names or paths. Apply them only on devices where you tested that version and architecture of the application. -If you configure exploit protection mitigations using an XML configuration file by using PowerShell, Group Policy, or MDM, when processing this XML configuration file, individual registry settings are configured for you.+You can configure mitigations through an XML file by using PowerShell, Group Policy, or MDM. When you use an XML file, the system sets the registry entries for you. ## Resetting exploit protection > [!IMPORTANT]-> When the policy distributing the XML file is no longer enforced, settings deployed by this XML configuration file won't be automatically removed. +> When the Group Policy or MDM policy that deploys the XML file is no longer enforced, settings deployed by this XML configuration file won't be automatically removed. -To remove exploit protection settings, export the XML configuration from a clean Windows 10 or Windows 11 device, and deploy this new XML file. Alternately, Microsoft provides an XML file as part of the Windows Security Baselines for resetting exploit protection settings.+To remove exploit protection settings, export the XML configuration from a clean Windows 10 or Windows 11 device, and deploy this new XML file. Alternately, Microsoft provides an XML file as part of the [Windows Security Baselines](/windows/security/operating-system-security/device-management/windows-security-configuration-framework/windows-security-baselines) for resetting exploit protection settings. -To reset exploit protection settings using PowerShell, use the following command:+To reset exploit protection settings using PowerShell, run the following command to apply the reset policy from the XML file and restore mitigation settings to their defaults: ```powershell Set-ProcessMitigation -PolicyFilePath EP-reset.xml ```-Following is the EP-reset.xml distributed with the Windows Security Baselines:+The following XML file is the EP-reset.xml distributed with the [Windows Security Baselines](/windows/security/operating-system-security/device-management/windows-security-configuration-framework/windows-security-baselines). This file defines per-application mitigation overrides that reset exploit protection settings to their defaults for common applications such as Microsoft Office, web browsers, and media players: ```xml <?xml version="1.0" encoding="UTF-8"?> <MitigationPolicy>@@ -183,10 +183,12 @@ Following is the EP-reset.xml distributed with the Windows Security Baselines: ## Mitigation Reference -Each mitigation listed below includes a description of the protection it provides, compatibility considerations, and available configuration options.+The following exploit protection mitigations each include a description, compatibility considerations, and configuration options. ## Arbitrary code guard +The following sections describe how arbitrary code guard works, its compatibility impact, and its configuration options.+ ### 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.@@ -207,6 +209,8 @@ Arbitrary code guard prevents allocating any memory as executable, which present ## Block low integrity images +The following sections describe how block low integrity images works, its compatibility impact, and its configuration options.+ ### Description Block low integrity images prevents the application from loading files that are untrusted, typically because they've been downloaded from the internet from a sandboxed browser.@@ -223,6 +227,8 @@ Block low integrity images prevent the application from loading files that were ## Block remote images +The following sections describe how block remote images works, its compatibility impact, and its configuration options.+ ### Description 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.@@ -239,6 +245,8 @@ Block remote images prevent the application from loading images from remote devi ## Block untrusted fonts +The following sections describe how block untrusted fonts works, its compatibility impact, and its configuration options.+ ### 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. Only fonts that are installed into the windows\fonts directory will be loaded for processing by GDI.@@ -257,11 +265,13 @@ The most common use of fonts outside of the system fonts directory is with [web ## Code integrity guard +The following sections describe how code integrity guard works, its compatibility impact, and its configuration options.+ ### Description Code integrity guard ensures that all binaries loaded into a process are digitally signed by Microsoft. Code integrity guard includes [WHQL](/windows-hardware/drivers/install/whql-release-signature) (Windows Hardware Quality Labs) signatures, which allows 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. If you attempt to load a binary that isn't signed by Microsoft, the memory manager returns 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.+This mitigation is implemented within the memory manager, which blocks the binary from being mapped into memory. If you attempt to load a binary that isn't signed by Microsoft, the memory manger returns 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 @@ -275,6 +285,8 @@ This mitigation specifically blocks any binary that isn't signed by Microsoft. A ## Control flow guard (CFG) +The following sections describe how control flow guard works, its compatibility impact, and its configuration options.+ ### Description Control flow guard (CFG) mitigates the risk of attackers using memory corruption vulnerabilities by protecting indirect function calls. For example, an attacker might use 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 could also be injected into the program).@@ -296,6 +308,8 @@ Since applications must be compiled to support CFG, they implicitly declare thei ## Data Execution Prevention (DEP) +The following sections describe how Data Execution Prevention works, its compatibility impact, and its configuration options.+ ### Description Data execution prevention (DEP) prevents memory that wasn't explicitly allocated as executable from being executed. DEP helps protect against an attacker injecting malicious code into the process, such as through a buffer overflow, and then executing that code.@@ -310,10 +324,12 @@ All x86 (32-bit) binaries have DEP enabled by default, but DEP can be disabled p ### Configuration options -**Enable ATL Thunk emulation** - This configuration option disables ATL Thunk emulation. 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*. Thunking is typically thought of for interacting between 32-bit and 16-bit applications, but there are no 16-bit components to ATL here. Rather, in order to optimize for binary size, ATL stores machine code in memory that isn't word-aligned (creating a smaller binary), and then invoke that code directly. ATL components compiled with Visual Studio 7.1 or earlier (Visual Studio 2003) don't allocate this memory as executable - thunk emulation resolves that compatibility issue. Applications that have a binary extension model (such as Internet Explorer 11) needs to have ATL Thunk emulation enabled.+**Enable ATL Thunk emulation** - This option controls ATL Thunk emulation. ATL, the ActiveX Template Library, is designed to be as small and fast as possible. To reduce binary size, it uses a technique called *thunking*. Thunking is often linked to 32-bit and 16-bit interaction, but ATL has no 16-bit parts. Instead, to save space, ATL stores machine code in memory that isn't word-aligned. This creates a smaller binary. ATL then runs that code directly. ATL versions compiled with Visual Studio 7.1 or earlier (Visual Studio 2003) don't mark this memory as executable. Thunk emulation fixes that issue. Apps with a binary extension model (such as Internet Explorer 11) need ATL Thunk emulation enabled. ## Disable extension points +The following sections describe how the disable extension points mitigation works, its compatibility impact, and its configuration options.+ ### Description The Disable extension points mitigation disables various extension points for an application, which might be used to establish persistence or elevate privileges of malicious content.@@ -337,6 +353,8 @@ There are no configuration options for this mitigation. ## Disable Win32k system calls +The following sections describe how the disable Win32k system calls mitigation works, its compatibility impact, and its configuration options.+ ### Description Win32k.sys provides a broad attack surface for an attacker. As a kernel-mode component, it's frequently targeted as an escape vector for applications that are sandboxed. 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. A thread is non-GUI when created, but converted on first call to win32k.sys, or through an API call to [IsGuiThread](/windows/win32/api/winuser/nf-winuser-isguithread).@@ -351,6 +369,8 @@ This mitigation is designed for processes that are dedicated non-UI processes. F ## Don't allow child processes +The following sections describe how the don't allow child processes mitigation works, its compatibility impact, and its configuration options.+ ### Description The Don't allow child processes 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. 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.@@ -365,6 +385,8 @@ If your application launches child applications for any reason, such as supporti ## Export address filtering +The following sections describe how export address filtering works, its compatibility impact, and its configuration options.+ ### Description 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. In order to mitigate the risk of such an attack, this mitigation protects three commonly attacked modules:@@ -400,6 +422,8 @@ Additionally, by enabling EAF+, this mitigation adds the PAGE_GUARD protection t ## Force randomization for images (Mandatory ASLR) +The following sections describe how Mandatory ASLR works, its compatibility impact, and its configuration options.+ ### Description 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. 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.@@ -424,7 +448,7 @@ This compatibility effect of ASLR is typically constrained to older applications ### Description -Hardware-enforced stack protection offers robust protection against ROP exploits since it maintains a record of the intended execution flow of a program. To ensure smooth ecosystem adoption and application compatibility, Windows offers this protection as an opt-in model, so developers can receive this protection, at your own pace.+Hardware-enforced stack protection offers robust protection against ROP exploits. It works by keeping a record of the intended execution flow of a program. To support smooth adoption and app compatibility, Windows offers this protection as an opt-in model. Developers can enable it at their own pace. ### Compatibility considerations @@ -486,13 +510,13 @@ Legitimate applications that perform API interception might be detected by this ### Description -Randomize memory allocations (Bottom-up ASLR) adds entropy to relocations, so their location is randomized and therefore less predictable. This mitigation requires Mandatory ASLR to take effect.+Randomize memory allocations (Bottom-up ASLR) adds entropy to relocations, so their location is randomized and therefore less predictable. This mitigation requires [Mandatory ASLR](#force-randomization-for-images-mandatory-aslr) to take effect. 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 -Most applications that are compatible with Mandatory ASLR (rebasing) are also compatible with the other entropy of Bottom-up ASLR. Some applications might have pointer-truncation issues if they're 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).+Most apps that work with Mandatory ASLR (rebasing) also work with Bottom-up ASLR. Some apps might have pointer-truncation issues if they save local pointers in 32-bit variables. These apps expect a base address below 4 GB, so they won't work with the high entropy option. You can disable high entropy if needed. ### Configuration options 