The Big Picture: Two Different Questions

By now you have seen walls that keep things apart, and guards that look for bad files. This section covers two last layers that ask different questions:

LayerQuestion it asksSimple picture
Application control"Is this program allowed to run at all?"A guest list at the door
Exploit protection"Is this (allowed) program being tricked into doing something it should not?"Safety features that make break-ins harder, even for a good building

Antivirus works by recognising bad. Application control works the other way: it only lets known good run. That is a much stronger idea, but harder to manage.

10.1 WDAC / AppLocker Concept

What it is: Application control is a set of rules that decide which programs, DLLs, scripts and installers may run on a PC. Anything not allowed is blocked, even if it is not known malware. Windows has two main tools.

ToolFull nameWhere it works
WDACWindows Defender Application Control. Microsoft has been renaming it App Control for Business.Enforced from the kernel (and can be strengthened with VBS). Stronger. Applies to all users.
AppLocker(same name)Enforced through a service. Can target specific users and groups. Easier, older, less strong.

What rules can look at:

Rule typeExampleNotes
Publisher"Allow anything signed by this company"Uses code signing (Section 9). Survives updates.
File hash"Allow only this exact file"Breaks when the file is updated
Path"Allow anything in C:\Program Files"Easy but weaker. Only safe if ordinary users cannot write to that path
Managed installer"Trust software installed by our deployment tool"WDAC feature
Reputation (ISG)"Trust what Microsoft's reputation system trusts"WDAC option

How the decision works:

 User starts a program
        │
        ▼
 ┌─────────────────────────────┐
 │ Application control policy  │
 │ (allow list + deny rules)   │
 └──────────────┬──────────────┘
                │
        ┌───────┴────────┐
 matches an allow rule?  │
        │ yes            │ no
        ▼                ▼
   ┌─────────┐     ┌───────────────┐
   │ RUNS    │     │ BLOCKED       │
   └─────────┘     │ (event logged)│
                   └───────────────┘

Audit mode first. Good practice is to start a policy in audit mode: it only logs what would have been blocked, and blocks nothing. After you review the log, you switch to enforce mode. This avoids breaking things.

Related feature: S mode. Windows in S mode only runs apps from the Microsoft Store, using an application control policy built in to Windows. You can leave S mode, but you cannot go back.

Where you meet it:

PlaceTypical use
Companies and schoolsPolicies sent through Intune or Group Policy so only approved apps run
Kiosk and lock-down PCsA PC that can only run one or two apps
Your home PCNot normally configured. You still get Smart App Control (see below) on some Windows 11 PCs.

Smart App Control (Windows 11, hedge). A consumer feature, available on some clean installs of Windows 11. It blocks untrusted or unsigned apps using a cloud reputation check plus code signing. It starts in an evaluation mode and turns itself on or off depending on how you use the PC. Once turned off, it normally cannot be turned back on without a reset (depends on version).

Edition note (hedge). AppLocker rule enforcement and some WDAC management options are mainly for Enterprise and Education (and in some cases Pro). Availability changes between versions, so check Microsoft's current documentation before planning anything.

Warning: A badly made policy can stop Windows apps or even prevent normal boot. Never experiment with application control on your only PC. Use a test machine or a virtual machine.

10.2 Exploit Protection Mitigations (DEP, ASLR, CFG)

The problem. Most programs have bugs. Some bugs let an attacker feed the program specially crafted data that makes it run the attacker's own instructions. Using a bug like this is called an exploit. The most common kind is a memory-corruption bug: the program writes outside the place it should, and overwrites something important, like a stored return address (Chapter 3 covers memory layout, the stack and the heap).

You cannot fix every bug. So Windows adds mitigations: built-in features that make exploiting a bug harder, or break the exploit entirely.

The main mitigations:

MitigationFull namePlain meaning
DEPData Execution PreventionMemory is marked either data or code. The CPU refuses to run instructions from data areas such as the stack or heap. (Uses the CPU's "NX" or "XD" bit.)
ASLRAddress Space Layout RandomizationWindows loads programs, libraries, stacks and heaps at random addresses each time. An attacker cannot know where useful code is.
CFGControl Flow GuardBefore a program jumps through a stored function pointer, Windows checks the target is a valid function start. Blocks jumps into the middle of code.
SEHOPStructured Exception Handler Overwrite ProtectionChecks that the exception-handler chain was not tampered with. Stops a classic stack-overwrite trick.
Stack protections(various, e.g. stack cookies)A small hidden value ("canary") is placed before a function's return address, and checked before the function returns. If overwritten, the program stops.
Heap protections(various)Detects heap corruption and terminates the process
CETControl-flow Enforcement Technology (hardware shadow stack, on supported CPUs)A protected second copy of return addresses; mismatches stop the program. Needs a new enough CPU and Windows.
 Without ASLR                          With ASLR
 Attacker knows:                       Every launch is different:
 "useful code is at 0x7FFA1000"        launch 1:  0x7FFA1000
 ───► exploit works every time         launch 2:  0x7FF5C000
                                       launch 3:  0x7FF9E000
                                       ───► attacker must guess
 Without DEP:  attacker's data  ──► runs as code   (bad)
 With DEP:     attacker's data  ──► CPU says "this is data, not code"
                                    ──► program stops, nothing runs

Why layers matter. Each mitigation can be defeated on its own. Together they force an attacker to chain several tricks, and a single failure makes the exploit crash instead of succeed.

Where you control them:

WhereWhat you see
Windows Security → App & browser control → Exploit protectionSystem settings (DEP, ASLR, CFG, SEHOP...) and per-program settings
PowerShellGet-ProcessMitigation -System shows system-wide settings. Get-ProcessMitigation -Name notepad.exe shows per-program settings (depends on the program and Windows version)
Per-program overridesYou can turn a mitigation on or off for one program, in case an old program breaks

Most mitigations are on by default for the system. Many modern programs also opt in on their own when they are built (compiled with ASLR and CFG support).

Extra layer: Windows Defender Exploit Guard (history). Microsoft once packaged these features under the name Exploit Guard (exploit protection, attack surface reduction rules, network protection and controlled folder access). The names changed over time; today you find them inside Windows Security and Microsoft Defender settings.

Attack Surface Reduction (ASR) rules (a brief taste). Defender has optional rules that block risky behaviour, for example "Block Office applications from creating child processes" or "Block credential stealing from LSASS". They are mostly used in managed environments. Availability depends on edition and settings.

Windows tip: If an old program crashes right after you enable a stricter exploit protection setting, you can set an exception for that one program instead of switching the protection off for everyone.

Do not turn mitigations off "to test". They are not slow. Weakening them reduces your safety for little gain.

Summary

TermPlain meaning
Application controlA list of what is allowed to run; all else is blocked
WDAC / App Control for BusinessStrong, kernel-enforced policy by publisher, hash and more
AppLockerOlder, per-user allow/deny rules
Audit mode / enforce modeOnly log / actually block
Smart App ControlConsumer reputation-and-signature blocker on some Windows 11 PCs
ExploitUsing a bug to make a program run attacker code
MitigationA feature that makes exploiting bugs harder
DEPRefuses to run instructions from data memory
ASLRRandomises where code is placed
CFGChecks jumps go to valid function starts
SEHOPProtects the exception handler chain
Get-ProcessMitigationPowerShell view of exploit protection settings