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:
| Layer | Question it asks | Simple 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.
| Tool | Full name | Where it works |
|---|---|---|
| WDAC | Windows 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 type | Example | Notes |
|---|---|---|
| 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:
| Place | Typical use |
|---|---|
| Companies and schools | Policies sent through Intune or Group Policy so only approved apps run |
| Kiosk and lock-down PCs | A PC that can only run one or two apps |
| Your home PC | Not 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:
| Mitigation | Full name | Plain meaning |
|---|---|---|
| DEP | Data Execution Prevention | Memory 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.) |
| ASLR | Address Space Layout Randomization | Windows loads programs, libraries, stacks and heaps at random addresses each time. An attacker cannot know where useful code is. |
| CFG | Control Flow Guard | Before a program jumps through a stored function pointer, Windows checks the target is a valid function start. Blocks jumps into the middle of code. |
| SEHOP | Structured Exception Handler Overwrite Protection | Checks 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 |
| CET | Control-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:
| Where | What you see |
|---|---|
| Windows Security → App & browser control → Exploit protection | System settings (DEP, ASLR, CFG, SEHOP...) and per-program settings |
| PowerShell | Get-ProcessMitigation -System shows system-wide settings. Get-ProcessMitigation -Name notepad.exe shows per-program settings (depends on the program and Windows version) |
| Per-program overrides | You 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
| Term | Plain meaning |
|---|---|
| Application control | A list of what is allowed to run; all else is blocked |
| WDAC / App Control for Business | Strong, kernel-enforced policy by publisher, hash and more |
| AppLocker | Older, per-user allow/deny rules |
| Audit mode / enforce mode | Only log / actually block |
| Smart App Control | Consumer reputation-and-signature blocker on some Windows 11 PCs |
| Exploit | Using a bug to make a program run attacker code |
| Mitigation | A feature that makes exploiting bugs harder |
| DEP | Refuses to run instructions from data memory |
| ASLR | Randomises where code is placed |
| CFG | Checks jumps go to valid function starts |
| SEHOP | Protects the exception handler chain |
Get-ProcessMitigation | PowerShell view of exploit protection settings |