You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: defender-endpoint/exploit-protection-reference.md
+24-19Lines changed: 24 additions & 19 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ ms.collection:
15
15
- m365-security
16
16
- tier3
17
17
- mde-asr
18
-
ms.date: 11/07/2023
18
+
ms.date: 11/15/2024
19
19
search.appverid: met150
20
20
---
21
21
@@ -32,7 +32,7 @@ search.appverid: met150
32
32
33
33
> Want to experience Microsoft Defender for Endpoint? [Sign up for a free trial.](https://signup.microsoft.com/create-account/signup?products=7f379fee-c4f9-4278-b0a1-e4c8c2fcdf7e&ru=https://aka.ms/MDEp2OpenTrial?ocid=docs-wdatp-enablesiem-abovefoldlink)
34
34
35
-
Exploit protection provides advanced protections for applications that enterprise admins and IT pros can apply after a developer has compiled and distributed software.
35
+
Exploit protection provides advanced protections for applications that enterprise admins and IT pros can apply after a developer compiles and distributes software.
36
36
37
37
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.
38
38
@@ -47,7 +47,12 @@ Mitigations are configured via a registry entry for each program that you config
47
47
48
48
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.
49
49
50
-
When the policy distributing 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.
50
+
## Resetting exploit protection
51
+
52
+
> [!IMPORTANT]
53
+
> When the policy distributing the XML file is no longer enforced, settings deployed by this XML configuration file won't be automatically removed.
54
+
55
+
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.
51
56
52
57
To reset exploit protection settings using PowerShell, use the following command:
53
58
@@ -201,11 +206,11 @@ By preventing the *execute* flag from being set, the data execution prevention f
201
206
202
207
### Compatibility considerations
203
208
204
-
Arbitrary code guard prevents allocating any memory as executable, which presents a compatibility issue with approaches such as Just-in-Time (JIT) compilers. Most modern browsers, for example, compile JavaScript into native code in order to optimize performance. In order to support this mitigation, they'll 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 are similarly incompatible with this mitigation.
209
+
Arbitrary code guard prevents allocating any memory as executable, which presents a compatibility issue with approaches such as Just-in-Time (JIT) compilers. Most modern browsers, for example, compile JavaScript into native code in order to optimize performance. In order to support this mitigation, they 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 are similarly incompatible with this mitigation.
205
210
206
211
### Configuration options
207
212
208
-
**Allow thread opt-out** - You can configure the mitigation to allow an individual thread to opt-out of this protection. The developer must have written the application with awareness of this mitigation, and have called the [**SetThreadInformation**](/windows/win32/api/processthreadsapi/nf-processthreadsapi-setthreadinformation) API with the *ThreadInformation* parameter set to **ThreadDynamicCodePolicy** in order to be allowed to execute dynamic code on this thread.
213
+
**Allow thread opt-out** - You can configure the mitigation to allow an individual thread to opt-out of this protection. The developer must write the application with awareness of this mitigation, and call the [**SetThreadInformation**](/windows/win32/api/processthreadsapi/nf-processthreadsapi-setthreadinformation) API with the *ThreadInformation* parameter set to **ThreadDynamicCodePolicy** in order to be allowed to execute dynamic code on this thread.
209
214
210
215
**Audit only** - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. Audit events can then be viewed either in the event viewer or using Advanced Hunting in [Defender for Endpoint](/defender-xdr/advanced-hunting-overview).
211
216
@@ -219,7 +224,7 @@ This mitigation blocks image loads if the image has an Access Control Entry (ACE
219
224
220
225
### Compatibility considerations
221
226
222
-
Block low integrity images prevent the application from loading files that were downloaded from the internet. If your application workflow requires loading images that are downloaded, you'll want to ensure that they're downloaded from a higher-trust process, or are explicitly relabeled in order to apply this mitigation.
227
+
Block low integrity images prevent the application from loading files that were downloaded from the internet. If your application workflow requires loading images that are downloaded, you want to ensure that they're downloaded from a higher-trust process, or are explicitly relabeled in order to apply this mitigation.
223
228
224
229
### Configuration options
225
230
@@ -269,19 +274,19 @@ This mitigation is implemented within the memory manager, which blocks the binar
269
274
270
275
### Compatibility considerations
271
276
272
-
This mitigation specifically blocks any binary that isn't signed by Microsoft. As such, it is 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.
277
+
This mitigation specifically blocks any binary that isn't signed by Microsoft. As such, it's incompatible with most non-Microsoft 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.
273
278
274
279
### Configuration options
275
280
276
-
**Also allow loading of images signed by Microsoft Store** - Applications that are distributed by the Microsoft Store are digitally signed by the Microsoft Store, and adding this configuration allows binaries that have gone through the store certification process to be loaded by the application.
281
+
**Also allow loading of images signed by Microsoft Store** - Applications that are distributed by the Microsoft Store are digitally signed by the Microsoft Store, and adding this configuration allows binaries that go through the store certification process to be loaded by the application.
277
282
278
283
**Audit Only** - You can enable this mitigation in audit mode in order to measure the potential compatibility impact on an application. Audit events can then be viewed either in the event viewer or using Advanced Hunting in [Microsoft Defender for Endpoint](/defender-xdr/advanced-hunting-overview).
279
284
280
285
## Control flow guard (CFG)
281
286
282
287
### Description
283
288
284
-
Control flow guard (CFG) mitigates the risk of attackers using memory corruption vulnerabilities by protecting indirect function calls. For example, an attacker may 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 may also have been injected into the program).
289
+
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).
285
290
286
291
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's called. If the target isn't a valid call target, then the application is terminated. As such, only applications that are compiled with CFG support can benefit from this mitigation.
287
292
@@ -308,7 +313,7 @@ If you attempt to set the instruction pointer to a memory address not marked as
308
313
309
314
### Compatibility considerations
310
315
311
-
All x64, ARM, and ARM-64 executables have DEP enabled by default, and it can't be disabled. Since an application has never been executed without DEP, compatibility is assumed.
316
+
All x64, ARM, and ARM-64 executables have DEP enabled by default, and it can't be disabled. Since an application isn't executed without DEP, compatibility is assumed.
312
317
313
318
All x86 (32-bit) binaries have DEP enabled by default, but DEP can be disabled per process. Some old legacy applications, typically applications developed prior to Windows XP SP2, might not be compatible with DEP. 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.
314
319
@@ -361,7 +366,7 @@ This mitigation prevents an application from creating new child applications. A
361
366
362
367
### Compatibility considerations
363
368
364
-
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.
369
+
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 is broken with this mitigation applied.
365
370
366
371
### Configuration options
367
372
@@ -377,7 +382,7 @@ Export address filtering (EAF) mitigates the risk of malicious code looking at t
377
382
- kernelbase.dll
378
383
- kernel32.dll
379
384
380
-
The mitigation protects the memory page in the [export directory that points to the [export address table](/windows/win32/debug/pe-format#export-address-table). This memory page will have the [PAGE_GUARD](/windows/win32/memory/creating-guard-pages) protection applied to it. When someone tries to access this memory, it generates a STATUS_GUARD_PAGE_VIOLATION. The mitigation handles this exception, and if the accessing instruction doesn't pass validation, the process is terminated.
385
+
The mitigation protects the memory page in the [export directory that points to the [export address table](/windows/win32/debug/pe-format#export-address-table). This memory page has the [PAGE_GUARD](/windows/win32/memory/creating-guard-pages) protection applied to it. When someone tries to access this memory, it generates a STATUS_GUARD_PAGE_VIOLATION. The mitigation handles this exception, and if the accessing instruction doesn't pass validation, the process is terminated.
381
386
382
387
### Compatibility considerations
383
388
@@ -428,11 +433,11 @@ This compatibility impact of ASLR is typically constrained to older applications
428
433
429
434
### Description
430
435
431
-
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 will offer this protection as an opt-in model, so developers can receive this protection, at your own pace.
436
+
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.
432
437
433
438
### Compatibility considerations
434
439
435
-
Hardware-enforced stack protection will only work on chipsets with support for hardware shadow stacks, Intel's Control-flow Enforcement Technology (CET) or AMD shadow stacks.
440
+
Hardware-enforced stack protection only works on chipsets with support for hardware shadow stacks, Intel's Control-flow Enforcement Technology (CET) or AMD shadow stacks.
436
441
437
442
### Configuration options
438
443
@@ -478,7 +483,7 @@ This mitigation protects the following Windows APIs:
478
483
479
484
### Compatibility considerations
480
485
481
-
Legitimate applications that perform API interception may be detected by this mitigation and cause some applications to crash. Examples include security software and application compatibility shims.
486
+
Legitimate applications that perform API interception might be detected by this mitigation and cause some applications to crash. Examples include security software and application compatibility shims.
482
487
483
488
### Configuration options
484
489
@@ -494,7 +499,7 @@ The size of the 32-bit address space places practical constraints on the entropy
494
499
495
500
### Compatibility considerations
496
501
497
-
Most applications that are compatible with Mandatory ASLR (rebasing) are also compatible with the other entropy of Bottom-up ASLR. Some applications may 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).
502
+
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).
498
503
499
504
### Configuration options
500
505
@@ -507,7 +512,7 @@ Most applications that are compatible with Mandatory ASLR (rebasing) are also co
507
512
508
513
### Description
509
514
510
-
Simulate execution (SimExec) is a mitigation for 32-bit applications only. This helps validate that calls to sensitive APIs will return to legitimate caller functions. 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. 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.
515
+
Simulate execution (SimExec) is a mitigation for 32-bit applications only. This helps validate that calls to sensitive APIs return to legitimate caller functions. 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. 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.
511
516
512
517
The APIs intercepted by this mitigation are:
513
518
@@ -631,7 +636,7 @@ If these validations fail, then exception handling is aborted, and the exception
631
636
632
637
### Compatibility considerations
633
638
634
-
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.
639
+
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 might manifest as a race condition that reveals a latent multi-threading bug in the application.
635
640
636
641
### Configuration options
637
642
@@ -642,7 +647,7 @@ Compatibility issues with SEHOP are relatively rare. It's uncommon for an applic
642
647
643
648
### Description
644
649
645
-
*Validate handle usage* is a mitigation that helps protect against an attacker using an existing handle to access a protected object. A [handle](/windows/win32/sysinfo/handles-and-objects) 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). If the application attempts to use an invalid object, instead of simply returning null, the application raises an exception (STATUS_INVALID_HANDLE).
650
+
*Validate handle usage* is a mitigation that helps protect against an attacker using an existing handle to access a protected object. A [handle](/windows/win32/sysinfo/handles-and-objects) is a reference to a protected object. If application code is referencing an invalid handle, it 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). If the application attempts to use an invalid object, instead of simply returning null, the application raises an exception (STATUS_INVALID_HANDLE).
646
651
647
652
This mitigation is automatically applied to Windows Store applications.
0 commit comments