Attack Surface Reduction Rules: The Quiet Layer That Stopped Office Macros
How Microsoft built a 19-rule, kernel-mediated behaviour block list inside Windows Defender that turned the Emotet macro chain into a one-row, no-ticket telemetry event.
Permalink1. One Block, No Analyst Ticket
At 03:42 on a Tuesday morning in Frankfurt, a finance analyst opens an invoice attached to an email that looks like one she has answered fifty times before. The document's Document_Open macro fires, the VBA calls Shell("powershell.exe -enc ..."), and nothing happens. No PowerShell window. No second-stage download. No banking-trojan loader. No ransom note three weeks later. The only artefact is one row in Microsoft Defender for Endpoint's DeviceEvents table, with ActionType equal to AsrOfficeChildProcessBlocked, that no analyst will triage because there is nothing left to triage [5].
That row, and the silence around it, is the entire subject of this article.
To understand why nothing happened, watch the call in slow motion. WINWORD.EXE is a long-running user-mode process. The macro's process-creation call crosses the syscall boundary into the kernel's process-management subsystem, where Microsoft Defender Antivirus has registered a process-creation notify routine. Defender's kernel-mode driver WdFilter.sys -- registered with the Windows Filter Manager as a file-system minifilter AND with the kernel's process subsystem via PsSetCreateProcessNotifyRoutineEx -- intercepts the event through its process-creation notify routine before the new process runs and hands it to the user-mode antivirus engine MsMpEng.exe. (Section 5 walks the kernel/user-mode split in full.) MsMpEng.exe evaluates the rule with GUID D4F940AB-401B-4EFC-AADC-AD5F3C50688A -- "Block all Office applications from creating child processes" [5]. The predicate evaluates true. The rule is set to Block. The minifilter fails the operation. The macro gets a non-zero error from its process-creation call. The spawn never happens.
A fixed catalogue of behavioural blocks shipped as a feature of Microsoft Defender Antivirus on Windows 10 1709 and later, Windows 11, and supported Windows Server editions. Each rule names a specific runtime behaviour -- "Office applications creating child processes," "credential stealing from the Windows local security authority subsystem," "abuse of exploited vulnerable signed drivers" -- and can be enabled in Audit, Warn, or Block mode through Microsoft Intune, Microsoft Configuration Manager, Group Policy, PowerShell, or the Defender for Endpoint portal. As of May 2026 the catalogue contains nineteen rules: three Standard protection rules and sixteen Other ASR rules [5].
Notice what the rule did not do. It did not classify the binary. Both WINWORD.EXE and powershell.exe are signed by Microsoft. Both have multi-decade Authenticode reputation. Both have appeared on every reasonable allow-list since Windows 7. A signature engine, asked "is the macro malicious," would have had to read the macro's bytes, normalise its obfuscation, and decide whether the sequence of Office object-model calls plus a base64 blob constitutes hostile intent. That decision is hard in the easy cases and undecidable in general. The rule sidestepped the whole question. It classified the edge between two perfectly legitimate signed binaries: WINWORD.EXE becoming the parent of powershell.exe. The bytes are not the predicate. The parent-child relationship is.
ActionType == 'AsrRuleTriggered'" survives in vendor playbooks and Stack Overflow answers but does not match Microsoft Learn's current rules reference, which enumerates a rule-specific Asr<RuleName>Audited and Asr<RuleName>Blocked pair for every rule except the server-only Webshell rule. The canonical Advanced Hunting filter is where ActionType startswith "Asr", not equality against a generic value [5].
The Frankfurt analyst's hypothetical Tuesday is one of millions. Defender Antivirus ships on every supported edition of Windows [5]. The Office-child-process rule has been blockable since October 2017 [1]. It is not the only ASR rule, and ASR is not the only layer that ended the Emotet macro era. Europol's January 27, 2021 takedown and the Microsoft 365 Apps default block of internet macros in February and July 2022 share the credit. But ASR is the layer with the deepest enforcement substrate (a kernel-mode minifilter), the fullest behavioural catalogue (nineteen rules naming specific runtime edges), and the simplest mental model for a defender: name a behaviour, ship an enforcement edge, audit, then block.
The rest of the article walks the ten questions the Frankfurt block raises. If signatures cannot tell us whether the analyst's macro is malicious -- because both binaries are signed and the static fingerprint of the macro changes every campaign -- how exactly did one row in DeviceEvents know to fire? What does the kernel see that the signature engine does not? Why did three predecessor paradigms (signatures, AppLocker, EMET) fail to close this specific gap, and what made October 2017 the moment Microsoft decided to ship a behaviour catalogue instead of a better classifier? Section 2 starts with the empirical signal that forced the shift.
2. Why Signatures Stopped Being Enough
By the time Microsoft published the October 23, 2017 Windows Defender Exploit Guard launch announcement, the team had a single sentence ready for the executive summary: "fileless attacks, which compose over 50% of all threats" [1]. That line did two jobs. It justified shipping ASR. It also marked the moment the signature model hit its industrial-scale ceiling.
"Despite advances in antivirus detection capabilities, attackers are continuously adapting ... This emerging trend of fileless attacks, which compose over 50% of all threats, are extremely dangerous, constantly changing, and designed to evade traditional AV." -- Microsoft Threat Intelligence team, October 23, 2017 [1]
The 50-percent number is a 2017-vintage Microsoft characterisation, not a peer-reviewed empirical study, but it captures a structural shift that every endpoint-defence vendor had been watching for three years. Three forces had converged.
First, mature crypters and packers had defeated static signatures. The classic AV pipeline -- compute a hash, match against a corpus of known-bad hashes -- assumed attackers shipped a small number of stable binaries. By 2017 the typical commodity malware family rebuilt its payload on every campaign, layered three encryption stages, and emerged as a polymorphic blob whose static fingerprint changed faster than the signature feed. Fred Cohen had warned in 1984 that any complete malicious-program detector reduces to the Halting Problem [4]; commodity packers were the industrial-scale form of that result.
Second, attackers had moved off custom binaries entirely. The Living-Off-the-Land Binaries, Scripts, and Libraries project -- LOLBAS -- catalogues over two hundred Microsoft-signed Windows binaries that attackers use to execute malicious behaviour without dropping any malware artefact on disk [6]. powershell.exe, cmd.exe, wscript.exe, mshta.exe, regsvr32.exe, rundll32.exe, cmstp.exe, msdt.exe, msbuild.exe, installutil.exe -- all signed by Microsoft, all on every reasonable allow-list, all capable of executing arbitrary code given the right command line. The on-disk artefact is benign; the malice lives in the runtime edge between two signed binaries.
A signed Microsoft Windows binary that attackers use to execute malicious behaviour while staying off identity-based allow-lists. The LOLBAS Project enumerates over two hundred such binaries together with the abuse classes each enables and the MITRE ATT&CK techniques each maps to [6].
Third, Office macros had become the dominant initial-access vector. Emotet first appeared as a banking trojan in June 2014; by 2017 it had transformed into a crime-as-a-service loader platform that delivered TrickBot, Dridex, IcedID, and eventually Conti and Ryuk to its access buyers [7]. The delivery vehicle barely changed across that pivot: a Word or Excel document, a Visual Basic for Applications macro, a call into Shell, WScript.Shell.Run, or the Windows Management Instrumentation provider to spawn the next stage. The malice was never inside WINWORD.EXE. The malice was in the edge that connected WINWORD.EXE to whichever signed Microsoft binary the operator decided to spawn.
The NTFS alternate data stream Zone.Identifier written by browsers, mail clients, and archive extractors to flag a file as originating from outside the local machine. Office uses the MOTW to drop a downloaded document into Protected View; the February 2022 Microsoft 365 Apps internet-macro default block treats the MOTW as the trigger to remove the "Enable Content" button entirely [8].
The pre-2017 defence stack covered slices of this problem, but no layer covered the specific behaviour class "an Office application creates a child process." AV signatures and heuristics scored the binaries; both were signed Microsoft binaries. AppLocker (2009) decided whether a binary was allowed to run; both were on the allow-list. EMET (2009) blocked memory-corruption exploit primitives; the macro chain involved no memory corruption. Reputation-based file blocking covered downloaded payloads; the payload was a base64 string passed on the PowerShell command line, never written to disk. Each layer answered a different question. None answered the question the macro chain raised.
The strategic shift Microsoft eventually made was small in the framing and enormous in the consequences. Instead of asking "is this binary malicious?" -- a question undecidable in general -- the next layer would ask "did the suspicious behaviour happen?" The new question is decidable per event at the OS interception layer, because the kernel sees every process-creation call, every image load, every file write, every registry set. Edge classification does not require static analysis; it requires only that the kernel be wired to ask one extra predicate before completing the operation.
The named author at the bottom of the 2017 launch post body (fetched 2026-05-26) is Misha Kutsovsky (@mkutsovsky), Program Manager, Windows Active Defense. The top-of-page byline and<meta name="author"> tag have since been consolidated under the "Microsoft Threat Intelligence" institutional account during Microsoft's 2022-2025 re-platforming of older Security Blog posts; the in-body attribution is unchanged. This article cites the institutional author as it appears in the page head; the named person at the bottom of the body is Kutsovsky [1].
One taxonomy point deserves its own paragraph, because confusion about it shapes most beginner questions about ASR. Microsoft Defender Antivirus is the on-host scanning engine that ships free with every Windows edition. Microsoft Defender for Endpoint (MDE) is the cloud-managed EDR layer Microsoft sells on top. ASR rules live inside Defender Antivirus. They run whether or not the device is enrolled in MDE. MDE adds management, telemetry ingestion through the DeviceEvents table, and Advanced Hunting; it does not add the enforcement. The Frankfurt block fires in Defender Antivirus; the DeviceEvents row only reaches MDE if MDE is connected. The EDR-in-block-mode page is explicit on the dependency: ASR rules run only when Defender Antivirus is in Active mode, never when a third-party AV is primary and Defender is passive [9].
By 2014-2015 the Microsoft Defender team had identified the problem. They did not invent the answer from scratch. They inherited a Windows defence stack that had been trying to solve the same problem for sixteen years, in three earlier paradigms. What were they, and why did none of them stop Emotet?
3. AppLocker, EMET, and What They Could Not Do
Three predecessor paradigms. Three different failures. Three different lessons that Microsoft eventually folded into the design of ASR.
AppLocker (2009, Windows 7)
AppLocker was the identity-based answer to the question "which binaries are allowed to run on this endpoint?" Administrators write rules that allow or deny executable code by publisher, by path, or by file hash; the kernel enforces the policy at process-creation time. Microsoft Learn still describes AppLocker as the Windows 7-era predecessor to App Control for Business, and the design has not changed structurally in the intervening sixteen years [10]. AppLocker is genuinely stricter than ASR on the identity axis. A well-tuned AppLocker policy on a hardened endpoint enforces default-deny: only allowed publishers, only allowed paths, only allowed hashes ever execute.
AppLocker has two practical weaknesses and one structural one. The first practical weakness is brittleness against signed LOLBins: powershell.exe, cmd.exe, wscript.exe, mshta.exe, regsvr32.exe, rundll32.exe, cmstp.exe, msdt.exe, msbuild.exe, installutil.exe are all on every reasonable AppLocker allow-list because every legitimate IT-automation pipeline depends on them [6]. The second is admin-deployment overhead: every new line-of-business application needs an explicit rule addition, large estates fall back to Audit mode permanently, and exception sprawl turns the policy into a sieve.
The structural weakness is the one that matters here. The AppLocker rule grammar has no slot for "WINWORD.EXE may run, but it may not be the parent of cmd.exe." That sentence is a property of an edge in the runtime graph, and the AppLocker schema models nodes, not edges.
EMET (2009-2018)
The Enhanced Mitigation Experience Toolkit was Microsoft's per-process opt-in exploit-time mitigation framework. Data Execution Prevention, Address Space Layout Randomization, Structured Exception Handler Overwrite Protection, the Export Address Table Access Filter, anti-Return-Oriented-Programming heuristics, caller-checks, heap-spray pre-allocation -- EMET stitched the menu together for any process the administrator opted in. EMET stopped buffer overflows from achieving code execution. It made the cheap exploit-development pipeline visibly more expensive.
EMET did not stop the Emotet macro chain. The chain involved no memory corruption. The chain was a legitimately loaded, uncorrupted, signed Office application making a perfectly ordinary user-mode parent-child process-creation call. There was no exploit primitive to mitigate. The 2017 Exploit Guard launch announcement said the same in cleaner language: Exploit Protection (the Windows-integrated pillar that absorbed EMET's mitigations) and Attack Surface Reduction (the new pillar) cover different gaps, because exploit-time mitigations and post-exploit behaviour blocks address different attacker stages [1]. EMET reached end-of-life on July 31, 2018 per the Microsoft product lifecycle page [11]; its mitigations live on under different names in the Exploit Protection panel of Windows Security.
Signature and heuristic AV
The third predecessor is the one Cohen's 1984 paper had already analysed. Signature and heuristic AV classify nodes, which is to say they answer "is this binary, considered as a sequence of bytes, malicious?" Cohen proved that the general form of that question reduces to the Halting Problem. The verbatim sentence from his open-access archive is the cleanest one-line statement of the result [4]:
The classical result, established in Fred Cohen's 1984 paper "Computer Viruses: Theory and Experiments" (presented at the 7th DoD/NBS Computer Security Conference and reprinted in Computers and Security 6(1):22-35 in January 1987), that detection of arbitrary viral behaviour in a program reduces to the Halting Problem. The diagonal construction assumes a decider D(P) for viral behaviour; constructs a program V that calls D(V) and behaves virally iff D(V) = 0; derives a contradiction. The corollary -- any non-trivial semantic property of programs is undecidable -- is the Rice-1953 generalisation [4].
The practical version of the ceiling for the Emotet case is that a signature engine cannot, in general, distinguish a Word macro that legitimately spawns cmd.exe to run an IT-automation script from a Word macro that spawns cmd.exe to launch the Emotet stage-two PowerShell stub. Both call the same Win32 API. Both pass argument strings the engine cannot prove are malicious without modelling the operator's intent. The fingerprint of the malice is not in the binaries; it is in the runtime relationship between them.
The three together demonstrate that the Windows endpoint defence stack of 2017 was structurally node-classifying or identity-classifying, with no layer modelling the runtime edge. The strategic gap is the slot ASR was designed to fill.
On October 17, 2017, Microsoft shipped Windows 10 Fall Creators Update (build 1709) [12]. Six days later, the Microsoft Security Blog named the new pillar: Attack Surface Reduction [1]. What did the first eight rules do, and how did they finally model the edge that AppLocker, EMET, and signatures could not?
4. The Evolution, Generation by Generation
October 23, 2017. The Microsoft Security Blog publishes "Windows Defender Exploit Guard: Reduce the attack surface against next-generation malware" [1]. The post names four pillars: Attack Surface Reduction, Network Protection, Controlled Folder Access, and Exploit Protection. The first pillar ships with eight rules. Nine years later the catalogue is nineteen rules wide. Each generation closed a specific attacker behaviour; each generation produced a published bypass within months.
Diagram source
flowchart TD
G1["Gen 1 - Oct 2017 (1709) - 8 Office, script, email rules"]
G2["Gen 2 - 2018-2019 (1803-1903) - LSASS, PSExec/WMI, prevalence, Adobe, WMI persistence"]
G3["Gen 3 - Apr 2020 - Warn mode added, platform 4.18.2008.9"]
G4a["Gen 4a - Dec 2021 / 2022 - BYOVD rule, Vulnerable Driver Reporting Center"]
G4b["Gen 4b - Feb/Jul 2022 - Parallel layer, M365 Apps internet-macro default block"]
G5["Gen 5 - 2023-2026 - Standard protection partition, Webshell, Safe Mode reboot, copied tools, USB, Outlook child-process rules"]
G1 --> G2 --> G3 --> G4a --> G4b --> G5 Generation 1, October 2017 -- the eight launch rules
The launch rules, as listed verbatim in the 2017 announcement, are the Office-macro response pack [1]:
- Block Office applications from creating executable content
- Block Office applications from launching child processes
- Block Office applications from injecting into other processes
- Block Win32 imports from macro code in Office
- Block obfuscated macro code (and other obfuscated scripts, AMSI-backed)
- Block JavaScript or VBScript from launching downloaded executable content
- Block execution of executable content dropped from email or webmail
- Block malicious JavaScript and VBScript scripts (AMSI-backed)
None of these rules solves a node-classification problem. Each rule names a single edge in the runtime process / file-system / registry graph and refuses to let it happen. "Block Office applications from creating child processes" is not "is WINWORD.EXE malicious?" but "did WINWORD.EXE just try to be the parent of another process?" The kernel answers the question with one comparison against the parent image path.
Generation 2, 2018-2019 -- credential theft, lateral movement, persistence
Between Windows 10 1803 (April 2018) and 1903 (May 2019) the catalogue expanded beyond Office to the rest of the attacker intrusion chain. Six new rules with their GUIDs, from the Microsoft Learn rules reference [5]:
- Block credential stealing from the Windows local security authority subsystem --
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2-- introduced 1803. The Mimikatz response: refuse process handles tolsass.exewith rights sufficient to read its address space. - Block executable files from running unless they meet a prevalence, age, or trusted list criterion --
01443614-cd74-433a-b99e-2ecdc07bfc25-- 1803. The unique-binary-per-campaign response, leaning on cloud-protection (MAPS) reputation. - Block process creations originating from PSExec and WMI commands --
d1e49aac-8f56-4280-b9ba-993a6d77406c-- 1803. The Emotet lateral-movement response. - Use advanced protection against ransomware --
c1db55ab-c21a-4637-bb3f-a12568109d35-- 1803. The mass-encryption-detection response, also cloud-protection-dependent. - Block Adobe Reader from creating child processes --
7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c-- 1809. The PDF-exploit-spawning-payload response. - Block persistence through WMI event subscription --
e6db77e5-3df2-4cf1-b95a-636979351e5b-- 1903. The APT29 / Cobalt Strike__FilterToConsumerBindingresponse.
Each rule is a direct response to a specific attacker move. The LSASS rule answers Mimikatz. The PSExec/WMI rule answers Emotet's lateral movement. The WMI persistence rule answers permanent-implant techniques that survive reboot through the WMI repository.
The PSExec/WMI rule (d1e49aac-...) is the textbook example of an ASR rule with high enterprise friction. Microsoft Configuration Manager (formerly SCCM) relies heavily on WMI; Microsoft Learn's overview page explicitly tells administrators not to set this rule to Block or Warn without extensive Audit-mode testing if Configuration Manager manages the device, "because the Configuration Manager client relies heavily on WMI" [13]. Most large estates therefore run this rule in Audit indefinitely.
Generation 3, April 2020 -- Warn mode
Until 2020, the only choices for an ASR rule were Audit (logs only) and Block (the operation fails). The middle ground was a productivity problem: a power user whose legitimate IT-automation macro was being blocked had no recourse short of a help-desk ticket. The Microsoft Defender team's "Demystifying attack surface reduction rules - Part 1" Tech Community post, modified time April 22, 2020, announced the third mode -- Warn -- with a user-facing block dialog and a 24-hour per-user per-rule per-app exclusion cache [14].
Two precision facts deserve to be stated cleanly, because both contradict secondary-source folklore.
First, the platform prerequisite for Warn mode is Microsoft Defender Antivirus platform release 4.18.2008.9 (August 2020) or later, engine release 1.1.17400.5 or later [13]. The older secondary-blog claim of "4.18.2001.10 / January 2020" is contradicted by Microsoft Learn's current canonical page and should not be repeated.
Second, exactly two ASR rules deliberately skip Warn mode and go straight from Audit to Block, not five. Microsoft Learn's overview page lists them verbatim: "Block credential stealing from the Windows local security authority subsystem" and "Block Office applications from injecting code into other processes" [13]. The folklore that lists five no-Warn rules (sometimes including the Webshell rule, the Safe Mode reboot rule, and the copied-tools rule) is wrong. The rules reference page enumerates Warn-mode bypass ActionType variants for the Safe Mode reboot rule (AsrSafeModeRebootWarnBypassed) and the copied-tools rule (AsrAbusedSystemToolWarnBypassed) -- direct byte-level proof that those rules do support Warn [5].
Diagram source
flowchart LR
A["Audit - Log only, no enforcement"] --> W["Warn - User can bypass for 24h"]
W --> B["Block - Operation fails"]
A2["LSASS rule and Office injection rule"] --> A
A2 --> B The reason these two rules skip Warn is structural, not cosmetic. A low-privilege user cannot meaningfully consent to a process opening LSASS memory; the consent dialog would itself be a credential-theft enabler. Likewise, a non-admin user cannot rationally decide whether WINWORD.EXE should be allowed to inject shellcode into explorer.exe; the request encodes its own malice. The remaining sixteen rules support the full Audit, Warn, Block ladder.
Generation 4a, December 2021 -- the BYOVD rule
The 2020-2022 era brought a new attacker move into mainstream incident response: Bring Your Own Vulnerable Driver, or BYOVD. The attacker imports a legitimate, signed, but vulnerable kernel driver, exploits its bug to gain kernel-mode primitives, uses those primitives to disable EDR and antivirus monitoring, and proceeds.
The 2021 motivating events made the threat unambiguous. Lazarus's autumn-2021 abuse of CVE-2021-21551 (Dell dbutil_2_3.sys) was the first recorded in-the-wild abuse of that driver, disclosed by ESET on September 30, 2022 [15] [16]. BlackByte's October 2022 abuse of CVE-2019-16098 (MSI Afterburner RTCore64.sys) was documented by Sophos with one of the year's defining lines: "disabling a whopping list of over 1,000 drivers on which security products rely to provide protection" [17] [18].
An attack pattern in which the operator imports a signed but exploitable kernel driver into the victim environment, exploits a known driver vulnerability to obtain kernel-mode primitives (typically arbitrary memory read or write), and uses those primitives to disable security telemetry. CVE-2021-21551 (Dell DBUtil) and CVE-2019-16098 (MSI Afterburner) are the canonical examples; the Sophos write-up of BlackByte's RTCore64.sys abuse documents disabling roughly one thousand security-product drivers [16] [18] [17].
Microsoft launched the Vulnerable and Malicious Driver Reporting Center on December 8, 2021, explicitly naming the new ASR rule as the enforcement layer alongside the kernel-load-time Vulnerable Driver Blocklist [19]. The ASR rule is "Block abuse of exploited vulnerable signed drivers (Device)" -- GUID 56a863a9-875e-4185-98a7-b882c64b5ce5 [5]. The Windows 11 22H2 release on September 20, 2022 [20] made the Microsoft Vulnerable Driver Blocklist default-on for all devices, which is the kernel-load-time sibling to the ASR write-time block [21].
Generation 4b, February and July 2022 -- the parallel layer
This is the generation that deserves the most honest framing in the article, because the marketing version oversimplifies what actually happened to Office macros.
Tom Gallagher's February 7, 2022 Microsoft 365 Blog post announces the default block of VBA macros in MOTW-internet documents [2]. The trust bar removes the "Enable Content" button entirely. Microsoft pauses the rollout on July 8, 2022 for usability adjustments, then resumes on July 20, 2022 -- both dates verifiable from the post's article:modified_time metadata. ESET's June 2022 write-up confirms the intended effect: between April 26 and May 2, 2022 Emotet operators were already testing LNK and ISO replacements for the macro carrier [7].
"A wide range of threat actors continue to target our customers by sending documents and luring them into enabling malicious macro code." -- Tom Gallagher, Partner Group Engineering Manager, Office Security, February 7, 2022 [2]
The Microsoft 365 Apps default block is not a generation of ASR. It is a parallel layer that ships inside Office, runs against every Microsoft 365 Apps installation managed or unmanaged, and uses the MOTW as its trigger rather than the kernel-mode minifilter. It cooperates with ASR; it does not subsume ASR.
A coincidence worth noting: Europol's Operation LadyBird seized Emotet's command-and-control infrastructure on January 27, 2021 [3]. SANS Internet Storm Center Diary 27036, published the same day by handler Daniel Wesemann, documented the canonical WMI-grandparent bypass to the Office-child-process ASR rule [22]. A takedown and a bypass landed on the same Wednesday.Generation 5, 2023-2026 -- Standard protection and the long tail
By 2023 Microsoft had enough deployment telemetry to partition the rules into two categories. The Standard protection rules are the three with a low false-positive floor, safe to enable in Block mode without staged rollout: BYOVD, LSASS credential-theft, and WMI persistence [13]. The remaining sixteen are Other ASR rules and require the full Audit, Warn, Block ladder. Several new rules landed in this period [5]:
- Block Webshell creation for Servers --
a8f5898e-1dc8-49a9-9878-85004b8a61e6-- the post-HAFNIUM / ProxyShell response. This is the only rule in the catalogue whose row in the Microsoft Learn reference shows "N" for EDR alerts, meaning it does not emit a pairedAuditedandBlockedActionTypeinDeviceEvents. Defenders hunt blocked webshell drops throughMpCmdRun.logand IIS access logs, not Advanced Hunting. - Block rebooting machine in Safe Mode --
33ddedf1-c6e0-47cb-833e-de6133960387-- the BlackByte-era safe-mode-encryption response. - Block use of copied or impersonated system tools --
c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb-- the rename-and-relocate evasion response (attackers copyingcmd.exeto a writable path and renaming itupdate.exe). - Block untrusted and unsigned processes that run from USB --
b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4-- the BadUSB / removable-media response. - Block Office communication application from creating child processes --
26190899-1602-49e8-8b27-eb1d0a1ce869-- the Outlook variant of the Office-child-process rule.
The three ASR rules Microsoft classifies as safe to enable in Block mode without staged rollout: Block abuse of exploited vulnerable signed drivers, Block credential stealing from the Windows local security authority subsystem, and Block persistence through WMI event subscription. The classification appears verbatim on the ASR rules overview page [13]. The LSASS rule is redundant when LSA Protection is enabled; the WMI persistence rule still requires Audit testing if Microsoft Configuration Manager manages the device.
The catalogue stands at 19 rules as of May 2026 -- three Standard protection rules and sixteen Other ASR rules, the count inclusive of the server-only Webshell rule that does not emit DeviceEvents [5]. The pattern is consistent enough that the next section gives it a name.
5. Edges, Not Nodes
The structural pivot the whole article rests on can be written in one sentence: signatures classify nodes; AppLocker classifies identities; ASR classifies edges in the runtime graph. The rest of this section unpacks what that means and why it matters.
A node in the runtime graph is a binary or a file -- the kind of thing static analysis can fingerprint. An edge is a runtime relationship between two nodes: process A creating process B, process A writing file F, process A opening a handle to LSASS memory, the WMI repository writing a new __FilterToConsumerBinding. Signatures answer "is this node bad?" -- undecidable in general per Cohen 1984 [4]. AppLocker answers "is this node's identity on the allow-list?" -- decidable but blind to LOLBin chains [6]. ASR answers "did this specific edge happen?" -- decidable per event at the OS interception layer.
The Cohen sidestep is precise. Cohen 1984 proved that classifying nodes ("is this program malicious?") is undecidable in general, via a reduction to the Halting Problem. He did not prove that classifying runtime edges is undecidable, because "did this specific parent-child invocation just happen?" is an observable proposition. The kernel sees the system call. The decision is local. No static analysis is required. ASR is the canonical industrial instantiation of that insight; every generation in Section 4 is a catalogue extension within the edge-classification approach, not a structural reframing of it.
Signatures classify nodes. AppLocker classifies identities. ASR classifies edges in the runtime graph. By moving from node classification to edge classification, Microsoft sidesteps Cohen-1984 undecidability in the practical sense: you do not need to decide whether the binary is malicious, only whether the edge happened. The kernel sees the edge.
Where does the enforcement actually live? The "kernel-mediated" framing earns its phrasing in three precise pieces.
First, WdFilter.sys is the Microsoft Defender Antivirus minifilter driver. An altitude, in Windows Filter Manager terminology, is a 32-bit decimal that determines the order in which file-system minifilters see I/O. Higher altitudes see I/O first on the way down to the file system and last on the way back up. Anti-virus drivers live in the 320000-329998 band. It is registered with the Windows Filter Manager in the FSFilter Anti-Virus altitude band (320000-329998), specifically at altitude 328010 per Microsoft's IFS allocated-altitudes reference [23]. It runs in kernel mode and intercepts process-creation, image-load, file-write, and (for some rules) WMI and registry edges through Filter Manager pre-operation callbacks and process / image-load notify routines.
The Microsoft Defender Antivirus minifilter driver. Registered with the Windows Filter Manager at altitude 328010 in the FSFilter Anti-Virus band (320000-329998) per Microsoft's allocated-altitudes reference [23]. It runs in kernel mode and hosts the interception callbacks that ASR uses to see process-creation, image-load, and file-write edges before the user-mode actor completes the operation.
Second, MsMpEng.exe is the Defender Antivirus service process. It runs in user mode at integrity level System. For every intercepted edge it consults the per-rule predicate, the per-rule exclusion list, and (for cloud-protected rules) the Microsoft Active Protection Service reputation, then returns Audit, Warn, or Block. The kernel/user-mode split is structural, not accidental. Interception must happen in the kernel before the user-mode actor completes the call. But exclusion-list lookup and cloud reputation are not appropriate inside a minifilter that holds the IRP open.
The Microsoft Defender Antivirus service process. Runs in user mode at integrity level System and hosts the policy-evaluation engine that decides Audit, Warn, or Block for every edge intercepted by WdFilter.sys. The two together form the kernel-mediated, user-mode-evaluated enforcement architecture that ASR relies on.
Third, telemetry. ASR blocks land in Defender for Endpoint's DeviceEvents Advanced Hunting table with a rule-specific ActionType such as AsrOfficeChildProcessBlocked or AsrLsassCredentialTheftBlocked. The rules reference enumerates a paired Audited and Blocked ActionType for every rule except the Webshell rule, which is the only one without a DeviceEvents row [5]. The universal hunting query is DeviceEvents | where ActionType startswith "Asr". The generic AsrRuleTriggered is folk wisdom; it has never existed.
Microsoft Defender for Endpoint's Kusto Query Language (KQL) surface over endpoint telemetry. ASR blocks and audit events land in the DeviceEvents table with rule-specific ActionType values. Defenders combine DeviceEvents with DeviceProcessEvents, DeviceFileEvents, and DeviceImageLoadEvents to assemble the corroborating edge data around any ASR row [5].
Diagram source
flowchart LR
P["User-mode process
WINWORD.EXE"] -->|"CreateProcessW"| K["Windows kernel
process-creation notify"]
K --> WD["WdFilter.sys
kernel-mode minifilter
altitude 328010"]
WD -->|"edge event"| MP["MsMpEng.exe
user-mode service
rule predicate + exclusions + MAPS"]
MP -->|"Audit / Warn / Block"| WD
WD -->|"fail or allow CreateProcessW"| P
MP -->|"telemetry"| DE["DeviceEvents
ActionType = AsrOfficeChildProcessBlocked"] The marginal performance cost of an ASR check is bounded by the existing WdFilter.sys callout that already runs for real-time scanning. ASR piggybacks on callouts the antivirus engine has already paid for. Microsoft has not published a number isolating ASR per-event overhead from broader minifilter cost; the IFS allocated-altitudes page is the closest published reference [23]. The sub-microsecond-per-event framing is INFERRED from the architecture, not measured.
"Protection from denial of services requires the detection of halting programs which is well known to be undecidable." -- Fred Cohen, "Computer Viruses: Theory and Experiments," 1984 [4]
The framework now in place is "name a behaviour class, ship an enforcement edge." Nine years and seven generations of catalogue extension have followed that single rule. So what does the catalogue look like in detail today? The next section is the reference table: nineteen rules, organised by category, with GUID, ActionType, and the attacker behaviour each one closes.
6. The Nineteen Rules in Detail
This section is the article's reference table. Not a deployment guide (that comes in Section 10), but a catalogue to return to when you need to remember which GUID maps to which behaviour and which ActionType lands in DeviceEvents. Every row is from Microsoft Learn's rules reference page [5].
Standard protection rules (3 rules)
Microsoft itself recommends enabling these three in Block mode without staged rollout, because their false-positive floor is low [13].
| Short name | GUID | ActionType (Blocked) | Notes |
|---|---|---|---|
| Block abuse of exploited vulnerable signed drivers | 56a863a9-875e-4185-98a7-b882c64b5ce5 | AsrVulnerableSignedDriverBlocked | The BYOVD response; pairs with the kernel-load-time Vulnerable Driver Blocklist [21] |
| Block credential stealing from the Windows local security authority subsystem | 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 | AsrLsassCredentialTheftBlocked | Redundant when LSA Protection is enabled [13] |
| Block persistence through WMI event subscription | e6db77e5-3df2-4cf1-b95a-636979351e5b | AsrPersistenceThroughWmiBlocked | Still requires Audit testing if Configuration Manager manages the device |
Productivity apps (6 rules)
The Office and Adobe response pack, anchored by the Office-child-process rule that opens this article.
| Short name | GUID | ActionType (Blocked) | Notes |
|---|---|---|---|
| Block all Office applications from creating child processes | d4f940ab-401b-4efc-aadc-ad5f3c50688a | AsrOfficeChildProcessBlocked | The macro-to-PowerShell stopper |
| Block Office applications from creating executable content | 3b576869-a4ec-4529-8536-b80a7769e899 | AsrExecutableOfficeContentBlocked | Blocks dropped EXEs from Office processes |
| Block Office applications from injecting code into other processes | 75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84 | AsrOfficeProcessInjectionBlocked | No Warn-mode support [13] |
| Block Win32 API calls from Office macros | 92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b | AsrOfficeMacroWin32ApiCallsBlocked | Refuses Declare statements that bind to native DLLs |
| Block Office communication application from creating child processes | 26190899-1602-49e8-8b27-eb1d0a1ce869 | AsrOfficeCommAppChildProcessBlocked | The Outlook variant |
| Block Adobe Reader from creating child processes | 7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c | AsrAdobeReaderChildProcessBlocked | The PDF response |
Scripts and email (3 rules)
The AMSI-backed script-content rules plus the email-drop-execution rule.
| Short name | GUID | ActionType (Blocked) | Notes |
|---|---|---|---|
| Block execution of potentially obfuscated scripts | 5beb7efe-fd9a-4556-801d-275e5ffc04cc | AsrObfuscatedScriptBlocked | AMSI-backed |
| Block JavaScript or VBScript from launching downloaded executable content | d3e037e1-3eb8-44c8-a917-57927947596d | AsrScriptExecutableDownloadBlocked | The drive-by-download response |
| Block executable content from email client and webmail | be9ba2d9-53ea-4cdc-84e5-9b1eeee46550 | AsrExecutableEmailContentBlocked | Catches the dropped-attachment-run pattern |
Lateral movement and prevalence (4 rules)
The cloud-protected, prevalence-based rules plus the Emotet lateral-movement responses.
| Short name | GUID | ActionType (Blocked) | Notes |
|---|---|---|---|
| Block process creations originating from PSExec and WMI commands | d1e49aac-8f56-4280-b9ba-993a6d77406c | AsrPsexecWmiChildProcessBlocked | Conflicts with Configuration Manager [13] |
| Block executable files from running unless they meet a prevalence, age, or trusted list criterion | 01443614-cd74-433a-b99e-2ecdc07bfc25 | AsrUntrustedExecutableBlocked | Requires cloud protection (MAPS) |
| Block untrusted and unsigned processes that run from USB | b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4 | AsrUntrustedUsbProcessBlocked | The BadUSB response |
| Use advanced protection against ransomware | c1db55ab-c21a-4637-bb3f-a12568109d35 | AsrRansomwareBlocked | Requires cloud protection |
Server, system-tool, and safe-mode (3 rules)
The post-2022 additions.
| Short name | GUID | ActionType (Blocked) | Notes |
|---|---|---|---|
| Block Webshell creation for Servers | a8f5898e-1dc8-49a9-9878-85004b8a61e6 | (no DeviceEvents pair) | Only rule without a DeviceEvents ActionType [5] |
| Block rebooting machine in Safe Mode | 33ddedf1-c6e0-47cb-833e-de6133960387 | AsrSafeModeRebootBlocked | Also emits AsrSafeModeRebootWarnBypassed -- proof Warn is supported |
| Block use of copied or impersonated system tools | c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb | AsrAbusedSystemToolBlocked | Also emits AsrAbusedSystemToolWarnBypassed -- proof Warn is supported |
Total: 19 rules. Older blog posts that cite "16 rules" or "17 rules" reflect a 2021-2023 snapshot of the catalogue before the Safe Mode, copied-tools, USB, and Outlook variants landed.
The per-rule MITRE crosswalk
MITRE ATT&CK's Behavior Prevention on Endpoint mitigation (M1040) nominates ASR rules by name for several technique families. The first eight rows below are verbatim nominations from the M1040 page; the last two (T1505.003 and T1562.009) are this article's own mappings from rule semantics to the most-natural MITRE technique, because M1040 itself does not enumerate the Webshell or Safe Mode Boot techniques [24]:
| MITRE technique | ASR rule that covers it |
|---|---|
| T1059.005 / T1059.007 (Command and Scripting Interpreter: Visual Basic / JavaScript) | Block JavaScript or VBScript from launching downloaded executable content; Block execution of potentially obfuscated scripts |
| T1543 / T1543.003 (Create or Modify System Process / Windows Service) | Block abuse of exploited vulnerable signed drivers |
| T1486 (Data Encrypted for Impact) | Use advanced protection against ransomware |
| T1546.003 (Event Triggered Execution: WMI Event Subscription) | Block persistence through WMI event subscription |
| T1559 / T1559.002 (Inter-Process Communication: Dynamic Data Exchange) | Block all Office applications from creating child processes |
| T1106 (Native API) | Block Win32 API calls from Office macros |
| T1027 / T1027.009 / T1027.010 (Obfuscated Files or Information) | Block execution of potentially obfuscated scripts |
| T1003.001 (LSASS Memory) | Block credential stealing from the Windows local security authority subsystem |
| T1505.003 (Server Software Component: Web Shell) -- author mapping, not M1040-nominated | Block Webshell creation for Servers |
| T1562.009 (Impair Defenses: Safe Mode Boot) -- author mapping, not M1040-nominated | Block rebooting machine in Safe Mode |
The crosswalk gives a defender the per-technique coverage map without leaving the article.
The Webshell rule's missingDeviceEvents ActionType is the most visible gap in the catalogue's telemetry surface. Defenders typically use Sysmon Event ID 11 (FileCreate) in web roots and IIS access logs to corroborate blocked webshell creations on servers; the Microsoft Learn rules reference is explicit that the EDR-alerts column for this rule is "N" [5].
The universal Advanced Hunting query, demonstrated below in a runnable JavaScript shape so a reader can verify the aggregation logic without a Defender for Endpoint tenant, is the single most useful starting point for any ASR investigation.
// Mocked DeviceEvents rows. Replace with output of:
// DeviceEvents | where ActionType startswith "Asr"
// | summarize count() by ActionType, DeviceName | order by count_ desc
const deviceEvents = [
{ DeviceName: "WS-FIN-042", ActionType: "AsrOfficeChildProcessBlocked" },
{ DeviceName: "WS-FIN-042", ActionType: "AsrOfficeChildProcessBlocked" },
{ DeviceName: "WS-FIN-118", ActionType: "AsrOfficeChildProcessAudited" },
{ DeviceName: "WS-ENG-003", ActionType: "AsrLsassCredentialTheftBlocked" },
{ DeviceName: "WS-FIN-042", ActionType: "AsrPsexecWmiChildProcessAudited" },
{ DeviceName: "WS-FIN-118", ActionType: "AsrVulnerableSignedDriverBlocked" },
{ DeviceName: "OTHER", ActionType: "DeviceLogon" }, // filtered out
];
const asrRows = deviceEvents.filter(r => r.ActionType.startsWith("Asr"));
const counts = asrRows.reduce((m, r) => {
const key = r.ActionType + " | " + r.DeviceName;
m[key] = (m[key] || 0) + 1;
return m;
}, {});
Object.entries(counts)
.sort((a, b) => b[1] - a[1])
.forEach(([key, n]) => console.log(n + "\t" + key)); Press Run to execute.
Nineteen rules. Three categories. One catalogue that has grown by twelve rules in nine years and shows no sign of stopping. But ASR is not the only behaviour-blocking layer on the Windows endpoint. How does the catalogue compare to CrowdStrike's Indicators of Attack, SentinelOne's Storyline, App Control for Business, Sysmon, and the rest?
7. Where ASR Sits Among the Behaviour Layers
ASR is one of seven currently-deployed methods for behavioural defence on the Windows endpoint. None of them obsoletes any of the others; they layer. Counting the strengths honestly means counting the weaknesses too.
App Control for Business, AppLocker, WDAC
Identity classification. App Control for Business and its predecessor AppLocker are stricter than ASR on the identity axis (default-deny when tuned) but blind to behaviour edges among allowed binaries [10]. The Vulnerable Driver Blocklist that ships default-on with Windows 11 22H2 is the kernel-load-time sibling to ASR's BYOVD rule and works against the same class of attack from the kernel side rather than the user side [21]. App Control and ASR are complementary, not competing.
CrowdStrike Falcon Behavioral Indicators of Attack
Cloud-evaluated edge classifier. CrowdStrike's own one-line definition of IOAs is the cleanest a vendor has published [25]: "telltale signs or activities that signal a potential cybersecurity threat or attack is in progress. ... They aim to identify and mitigate a threat before it can fully materialize." The trade-offs cut both ways. CrowdStrike pushes new IOA rules from the cloud without an OS update -- real adaptivity. The cost: no public reference catalogue (every IOA is vendor-internal), a cloud dependency for some configurations, and a commercial licence. ASR is free; CrowdStrike is not.
SentinelOne Singularity Storyline, ActiveEDR
On-agent behavioural-AI engine with per-host storyline graph correlation and a STAR custom-rule layer. SentinelOne's product-level marketing pages return JavaScript-rendered shells or HTTP 404s to text-only fetchers, so byte-precision verification for specific features is currently unavailable. The model-level description (on-agent graph correlation that works offline) is well-attested in the secondary literature. The trade-offs mirror CrowdStrike's: vendor-internal classifier, no public catalogue, commercial licence. This article keeps the framing at the model level and avoids specific feature or performance claims.
Microsoft 365 Apps internet-macro default block
The Office-internal parallel layer that ended the macro era for unmanaged tenants [8] [2]. Office-only and macro-only; covers neither DDE, OLE, embedded executables, nor non-VBA Office attack chains. ASR remains the layer that catches the corresponding edge if the macro layer is bypassed by a managed-tenant override or by a non-macro initial-access vector.
Sysmon and custom SIEM rules
High-fidelity edge visibility; no enforcement. Practitioners run Sysmon alongside ASR for audit-trail coverage of edges ASR does not block and for corroborating telemetry around edges it does. Note that MITRE M1042 ("Disable or Remove Feature or Program") does not mention Sysmon or ASR by name [26]; the Sysmon-with-ASR pairing is practitioner consensus rather than an M1042 nomination. M1040 (Behavior Prevention on Endpoint) is the mitigation that names ASR rules verbatim [24].
EDR-in-block-mode
The sibling post-event automated-response layer to ASR, not an umbrella over it. EDR-in-block-mode is required for passive-AV configurations where Defender Antivirus is not the primary. Microsoft Learn's EDR-in-block-mode page is unambiguous about the dependency: "Features like network protection and attack surface reduction (ASR) rules and indicators ... are only available when Microsoft Defender Antivirus is running in Active mode" [9]. EDR-in-block-mode acts strictly post-event on EDR detections; ASR acts pre-completion on the operation itself. Different points in the timeline.
A common misframing places EDR-in-block-mode as the umbrella feature that "covers" ASR. The Microsoft Learn page contradicts that reading directly. EDR-in-block-mode is the layer that lets Defender for Endpoint block based on its EDR findings even when a third-party AV is primary; ASR is the layer that intercepts the operation at the minifilter before any other component sees it. They are siblings, not parent and child [9].The comparison matrix
The seven methods on ten axes. Read this as a trade-off space; no row dominates the others on every axis.
| Method | Classification axis | Enforcement substrate | Catalogue inspectability | Cost | Cloud-connectivity required | OS coverage | Best suited for |
|---|---|---|---|---|---|---|---|
| ASR rules | Edge | Kernel-mode minifilter + user-mode service | Fully public per-rule [5] | Free with Windows | No (some rules require MAPS) | Windows 10 1709+, Windows 11, Windows Server | Behaviour-edge defence; macro chains; LSASS; BYOVD |
| M365 Apps internet-macro block | Document-trust | Office process | Public docs [8] | Free with M365 | No | Microsoft 365 Apps | Internet-marked Office macros |
| App Control + Vulnerable Driver Blocklist | Identity + driver hash | Kernel | Public policy XML / Block rules [21] | Free with Windows | No | Windows 10+, Server | Default-deny; kernel-load-time BYOVD |
| CrowdStrike Falcon IOAs | Edge | Agent + cloud | Vendor-internal [25] | Commercial | Yes (some) | Cross-platform | Adaptive cloud-pushed behavioural detection |
| SentinelOne Storyline | Edge graph | On-agent | Vendor-internal | Commercial | No (designed offline) | Cross-platform | Per-host graph correlation |
| Sysmon + SIEM | Visibility only | User-mode (Sysmon) + SIEM | Public events; SIEM rules per-tenant | Sysmon free; SIEM commercial | Yes (SIEM) | Windows 7+, Linux | Audit trail; corroboration |
| EDR-in-block-mode | Post-detection block | MDE service | MDE-managed | Defender for Endpoint licence | Yes | Windows 10+, Server | Passive-AV configurations |
Each row in the matrix names a different trade-off. ASR is the only row that is free, kernel-mediated, fully inspectable, and shipped with every Windows edition that includes Defender Antivirus. But the catalogue is finite. And the attacker's degrees of freedom are not. What does the theory say about the gap?
8. What No Behaviour Block List Can Do
Every defence layer has a lower bound. ASR's is Cohen 1984 -- but indirectly, through the structural floor that every edge predicate inherits.
Cohen's 1984 result (introduced in Section 3 as a Definition with its diagonal-construction proof sketch and Rice-1953 corollary) proves that detection of arbitrary viral behaviour in a program reduces to the Halting Problem and is therefore undecidable in general [4]. ASR sidesteps the result by changing the question. Not "is this program malicious?" -- undecidable in general -- but "did this specific edge in the runtime graph just occur?" -- decidable per event at the OS interception layer. The Cohen ceiling does not directly forbid edge classification; it forbids node classification. Edge classification is decidable per edge.
The cost is two structural floors that any behaviour-block list inherits.
The over-approximation floor. Every edge predicate is itself an over-approximation of "is this edge malicious." Legitimate IT-automation Word macros do legitimately spawn PowerShell. Legitimate backup software does legitimately read LSASS memory (WerFaultSecure.exe appears on extracted LSASS-rule exclusion lists per Adam Svoboda's VDM-extraction technique [28]). Legitimate management software does legitimately write driver files. Every ASR rule therefore has a structural false-positive floor; the per-rule exclusion list is the recovery mechanism. Exclusion lists trade safety for compatibility.
The catalogue-finiteness upper bound. The space of possible attack edges is countably infinite. Any composition of CreateProcess, WriteFile, RegSetValue, WMI subscription, scheduled task, COM IDispatch::Invoke, or driver-load can be chained into a new edge sequence. The catalogue is finite -- nineteen rules in May 2026 [5]. The bound is sharp: an attacker whose chain crosses any edge e in the catalogue is detected at e; an attacker whose chain avoids every edge in the catalogue is not.
ASR compresses bypass cost; it does not eliminate it. The catalogue is finite. The attacker's space of edges is countably infinite. Behaviour-block lists are incomplete by construction -- and that is not a defect; it is the design philosophy. The defender's job is not to fix the incompleteness but to make every cheap attack chain expensive enough that the attacker stops using it.
The empirical evidence for the catalogue-finiteness bound is the bypass-research cluster. SANS ISC Diary 27036 (Daniel Wesemann, January 27, 2021) documents the WMI-grandparent bypass to the Office-child-process rule [22]. Sevagas / Emeric Nasi's "Bypass Windows Defender Attack Surface Reduction" PDF (2021) documents COM-object-indirection bypasses [29]. Primusinterp's "Cheesing Microsoft Attack Surface Reduction rules" enumerates chained-COM bypasses against the 2017-era catalogue [30]. Adam Svoboda's VDM-extraction technique enumerates the exclusion lists themselves [28]. None of these is a defect Microsoft has been slow to fix. All are structural consequences of the catalogue-finiteness bound.
ASR's design philosophy is not to achieve the theoretical optimum of "complete, sound, real-time, false-positive-free edge catalogue" (unachievable for the reasons above). It is to compress the attacker's bypass cost -- to force the attacker off the cheap, common attack chains (WINWORD -> cmd -> PowerShell) onto more expensive ones (WMI grandparent, COM indirection, scheduled-task fan-out, exclusion-list enumeration, BYOVD). The Section 11 FAQ entry that picks up this thread makes it explicit.
A finite catalogue, an unbounded attacker space, and a structural floor under each rule. The next section names the open problems that follow.
9. What Is Still Moving
The bypass-research corpus around ASR is not a temporary embarrassment. It is the permanent shape of every catalogue-based defence. Six open problems define the layer's research frontier as of May 2026.
Problem 1 -- The WMI and COM grandparent bypass class
The canonical bypass is documented in SANS Internet Storm Center Diary 27036, published January 27, 2021 by handler Daniel Wesemann [22]. Emotet's VBA invoked Win32_Process.Create via WMI, so WmiPrvSE.exe became the literal parent of cmd.exe; the Office-child-process rule's predicate is byte-literal (it checks the immediate parent image against the Office binary list) and therefore never fires.
Diagram source
sequenceDiagram
participant VBA as VBA macro in WINWORD.EXE
participant WMI as WmiPrvSE.exe (svchost host)
participant CMD as cmd.exe
participant WD as WdFilter.sys
participant MP as MsMpEng.exe
VBA->>WMI: GetObject winmgmts, Win32_Process.Create
WMI->>WD: process-create notify, parent = WmiPrvSE
WD->>MP: edge event, parent image WmiPrvSE.exe
MP-->>WD: rule D4F940AB predicate false, no Office parent
WD-->>WMI: allow CreateProcess
WMI->>CMD: spawn cmd.exe "'cmd' is not a child process of Word, and the ASR block rule to prevent child processes of Word consequently doesn't trigger." -- Daniel Wesemann, SANS ISC Diary 27036, January 27, 2021 [22]
The PSExec/WMI rule (d1e49aac-...) was added in Windows 10 1803 to catch the most common variant, but Microsoft Learn warns that it conflicts with Configuration Manager [13]. COM-object indirection (MMC.Application, Outlook.Application, ShellWindows) generalises the bypass beyond WMI [29] [30]. No ASR rule today covers transitive-parent classification across COM or scheduled-task fan-out without breaking Configuration Manager dependencies. The open question is whether a transitive-parent predicate can be added without breaking SCCM, and what false-positive rate that costs.
Problem 2 -- Event 5007 and exclusion-list enumeration
Adam Svoboda's technique demonstrates that ASR exclusion lists live in Defender VDM containers (mpasbase.vdm, mpasdlta.vdm) and are extractable with wdextract64.exe [28]. A low-privilege user with read access to C:\ProgramData\Microsoft\Windows Defender\Definition Updates\ can enumerate the whitelisted paths the LSASS rule, the BYOVD rule, and other rules carry by default. Tamper Protection prevents runtime modification of the exclusion list but does not prevent read access [31]. Once the exclusion list is enumerated, the per-rule defence becomes "did the attacker drop the payload in a writable whitelisted path?" -- a deployment-quality question, not a structural one. The open problem is whether the exclusion lists should be encrypted at rest with a key not derivable by an unprivileged process.
Problem 3 -- Catalogue completeness against modern initial-access vectors
Emotet's post-2022 pivot to OneNote embedded scripts, HTML smuggling, ISO and IMG containers (which strip MOTW on extraction), LNK files, and 7z archives is not covered by ASR's existing rules [7]. SmartScreen, Network Protection, and the Microsoft 365 Apps internet-macro default block cover some of this surface, but not via ASR's edge-predicate model. The open question is whether the ASR catalogue should grow to cover OneNote-spawns-child, or whether the right answer is to rely on the parallel layers and accept that ASR's coverage of OneNote-era initial-access is partial.
Problem 4 -- The Webshell rule's missing telemetry surface
Per the Microsoft Learn rules reference, "Block Webshell creation for Servers" (a8f5898e-...) is the only rule without a DeviceEvents ActionType pair [5]. Defenders cannot KQL-hunt for blocked Webshell creations the way they can for every other rule; visibility lives in MpCmdRun.log and IIS access logs. The open question is when Microsoft will add the missing ActionType so that the Webshell rule's audit-and-block events become uniformly queryable in Advanced Hunting.
Problem 5 -- Tamper Protection versus kernel-level attackers
ASR is enforced by WdFilter.sys running at integrity level System, but a kernel-mode attacker (for example, one with a BYOVD-loaded malicious driver) is a peer. BlackByte's 2022 BYOVD campaigns demonstrated the pattern: load a vulnerable signed driver, disable Defender's notify routines, proceed [17]. The ASR BYOVD rule (56a863a9-...) plus the WDAC Vulnerable Driver Blocklist default-on in Windows 11 22H2 [21] plus Hypervisor-protected Code Integrity each close a sub-class. None closes the full class, because the driver-block-list is update-cadence-bounded. The open question is whether WdFilter.sys can be moved into a Virtualization-Based Security isolated enclave such that even a kernel-compromise primitive cannot tamper with ASR enforcement.
Problem 6 -- The inspectability dual
ASR's structural floor is catalogue finiteness. The structural floor of its SOTA competitors (CrowdStrike AI-powered IOAs, SentinelOne Storyline) is vendor-internal inspectability. When an AI-powered IOA fires, the defender has no rule GUID to look up, no published predicate to reason about, no per-edge auditability for purple-team coverage assessment. The two bounds are complementary: ASR optimises for inspectability at the cost of catalogue-growth lag; the AI-powered competitors optimise for adaptive classifier coverage at the cost of inspectability. A complete edge-classification SOTA layer would combine both. No single product currently does.
The catalogue is incomplete by construction. The defender's job is not to fix the incompleteness; it is to make every cheap attack chain too expensive to use. Section 10 codifies that into a Monday-morning playbook.
10. How to Actually Use This on Monday
Five steps. Source-control everything. Treat ASR not as a replacement for AppLocker, App Control for Business, or your EDR -- treat it as a kernel-mediated, free, behaviour-edge layer that costs almost nothing once tuned.
Step 1 -- Enable the three Standard protection rules in Block mode first
Microsoft itself classifies these three as low-false-positive-floor [13]:
- Block abuse of exploited vulnerable signed drivers (Device) --
56a863a9-875e-4185-98a7-b882c64b5ce5. - Block credential stealing from the Windows local security authority subsystem --
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2. Note: if LSA Protection is enabled on the device (recommended together with Credential Guard), Microsoft Learn states verbatim that "this rule is redundant" and Defender will show the rule as "not applicable" [13]. - Block persistence through WMI event subscription --
e6db77e5-3df2-4cf1-b95a-636979351e5b. Even though this rule is in the Standard set, Microsoft Learn recommends extensive Audit-mode testing if Configuration Manager manages the device, "because the Configuration Manager client relies heavily on WMI" [13].
Step 2 -- Move the other sixteen rules through Audit, Warn, Block
The canonical deployment ladder is enumerated in the implementation guide on Microsoft Learn: start every rule in Audit, watch DeviceEvents for false positives, transition to Warn (or Block where Warn is unsupported), then transition to Block once the false-positive rate is acceptable in your first deployment ring [32]. Two rules skip Warn entirely and go Audit straight to Block: Block credential stealing from LSASS and Block Office applications from injecting code into other processes [13]. The other fourteen Other ASR rules support the full three-step ladder.
Step 3 -- Hunt with the universal query
DeviceEvents | where ActionType startswith "Asr" returns every Audit and Block emission across the fleet. Pair with DeviceProcessEvents and DeviceFileEvents for the corroborating edge data; the Section 6 RunnableCode block demonstrates the shape. For the one rule without a DeviceEvents row -- Block Webshell creation for Servers -- use Sysmon Event ID 11 in web roots plus IIS access logs [5]. Microsoft Learn's operationalize page is the corresponding canonical reference for post-deployment monitoring practices [33].
Step 4 -- Layer with the sibling controls
ASR alone is not a complete posture. The set of controls that compose with ASR includes:
- Tamper Protection [31] -- prevents administrators (and attackers with admin rights) from disabling ASR rules at runtime through registry or service tampering.
- Cloud Protection (MAPS) -- required for several rules including the prevalence-based executable rule and the ransomware advanced-protection rule [5].
- The Microsoft 365 Apps macros-from-the-internet-blocked-by-default policy [8] [2] -- the consumer-facing twin of ASR's Office rules; default-on for every Microsoft 365 tenant since the July 2022 staged rollout.
- The Vulnerable Driver Blocklist [21] -- default-on in Windows 11 22H2; sibling to the BYOVD ASR rule at the kernel-load edge.
- EDR-in-block-mode [9] -- only when Defender Antivirus is in passive mode (third-party AV is primary).
- Sysmon -- for visibility into edges ASR does not block and for audit-trail corroboration of edges it does. (M1040 nominates ASR per-technique [24]; M1042 does not mention Sysmon or ASR by name [26] -- the pairing is practitioner consensus, not an M1042 nomination.)
Step 5 -- Track exclusions in source control
The exclusion list is the most common deployment-failure surface. Adding C:\Program Files\Vendor\ as an exclusion for one rule applies fleet-wide; over-broad exclusions are the dominant practical risk to the layer's integrity. Use Git or equivalent; review exclusions every quarter; demand a Jira ticket per exclusion with a sunset date.
PowerShell snippet to enable the three Standard protection rules in Block mode
Set-MpPreference -AttackSurfaceReductionRules_Ids `
'56a863a9-875e-4185-98a7-b882c64b5ce5', `
'9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2', `
'e6db77e5-3df2-4cf1-b95a-636979351e5b' `
-AttackSurfaceReductionRules_Actions Enabled, Enabled, Enabled
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_IdsRun as administrator. The three GUIDs are BYOVD, LSASS, and WMI persistence respectively. Confirm with the Get-MpPreference call. For staged rollout in an enterprise, manage these through Intune or Group Policy instead so the configuration follows the device.
Five steps, three Standard protection rules, sixteen Other ASR rules, two rules that skip Warn mode, one universal hunting query. The rest is exception-list discipline. Section 11 closes with the seven misconceptions that survive every rollout.
11. Frequently Asked Questions
Frequently asked questions
Is ASR the same thing as Microsoft Defender for Endpoint?
No. ASR rules live inside Microsoft Defender Antivirus -- the on-host scanning engine that ships free with every Windows edition that includes Defender. Microsoft Defender for Endpoint is the cloud-managed EDR layer Microsoft sells on top, with DeviceEvents Advanced Hunting, Indicators of Compromise management, and automated investigation. ASR rules can be configured locally via PowerShell or Group Policy with no Defender for Endpoint licence at all. Defender for Endpoint adds management, telemetry ingestion, and Advanced Hunting; it does not add the enforcement [5] [9].
Does every ASR block emit ActionType equal to 'AsrRuleTriggered'?
No. This is the SOC-playbook folklore that survives every rollout. Each rule emits a rule-specific Asr<RuleName>Audited and Asr<RuleName>Blocked pair (the server-only Webshell rule is the only exception, with no DeviceEvents row at all). The canonical universal Advanced Hunting query is DeviceEvents | where ActionType startswith "Asr", not equality against a generic value. Microsoft Learn's rules reference enumerates every pair [5].
Did ASR stop Office macros all by itself?
No. The Office macro era ended through three layers in combination: (1) Europol's Operation LadyBird on January 27, 2021, the coordinated international takedown of Emotet's command-and-control infrastructure [3]; (2) ASR's 2017-onward Office rules at the enterprise tier, managed through Intune, Group Policy, or Defender for Endpoint; (3) the Microsoft 365 Apps internet-macro default block at the consumer and tenant tier, announced by Tom Gallagher on February 7, 2022 and resumed July 20, 2022 after a brief pause for usability fixes [2]. ASR is the enterprise-managed layer. It was not the only layer. The honest version of the story names all three.
Is ASR enforced in the kernel?
Partially yes, and the nuance matters. The interception point (WdFilter.sys, registered at altitude 328010 in the FSFilter Anti-Virus band per the IFS allocated-altitudes reference [23]) is kernel-mode. The policy evaluation (MsMpEng.exe) is user-mode at integrity level System. Calling ASR "kernel-mode" without nuance is incomplete; the correct one-line framing is "kernel-mediated interception, user-mode policy evaluation."
If I enable LSA Protection or Credential Guard, do I still need the LSASS ASR rule?
No. Microsoft Learn's overview page states verbatim: "If you enabled Local Security Authority (LSA) protection (recommended, along with Credential Guard), this rule is redundant" [13]. The LSASS ASR rule shows as "not applicable" on devices where LSA Protection is enabled. The "not applicable" state is the correct behaviour, not a misconfiguration.
Does Warn mode work for all ASR rules?
No. Only two ASR rules skip Warn mode -- "Block credential stealing from the Windows local security authority subsystem" and "Block Office applications from injecting code into other processes" -- both per Microsoft Learn's overview page [13]. Section 4 Generation 3 walks the byte-level proof that the rest of the catalogue (including the Safe Mode reboot rule and the copied-tools rule, two of the five rules the folklore wrongly lists) does support Warn.
Does the SOC ever see ASR blocks?
Yes -- routinely. The "the SOC never sees ASR" framing is rhetoric, not reality. Multiple rules raise EDR alerts in Defender for Endpoint; every rule except the Webshell rule lands a row in DeviceEvents [5]. The accurate framing is that ASR blocks rarely require analyst response because there is nothing left to triage once the kernel has returned the operation as failed -- the Frankfurt analyst from this article's opening never gets paged because the macro never spawned PowerShell. The SOC can hunt, audit, and report on ASR activity at any time; the choice not to triage individual blocks is exactly what a well-tuned preventive layer ought to enable.
Nine years, seven generations, nineteen rules, one structural pivot from nodes to edges, and the same Cohen-1984 ceiling that every behaviour-block list inherits. The Frankfurt analyst from this article's opening never knew the macro fired -- because the kernel made sure nothing happened. That is the article in one sentence: a quiet layer that converts a credential-stealing-banking-trojan-turned-loader campaign into a single-row telemetry event the SOC routinely ignores, by classifying edges instead of nodes.
Study guide
Key terms
- Attack Surface Reduction (ASR) rules
- A fixed catalogue (19 rules in May 2026) of behavioural blocks enforced by Microsoft Defender Antivirus on supported Windows editions. Each rule names a specific runtime edge and can be set to Audit, Warn, or Block mode.
- Edge classification
- Deciding whether a specific runtime relationship between two nodes (process A creating process B, process A opening a handle to LSASS memory) is permitted, as opposed to deciding whether a node (binary) is malicious in isolation.
- WdFilter.sys
- The Microsoft Defender Antivirus kernel-mode minifilter, registered at altitude 328010 in the FSFilter Anti-Virus band, that intercepts the runtime edges ASR evaluates.
- MsMpEng.exe
- The user-mode Microsoft Defender Antivirus service that evaluates ASR rule predicates against edges intercepted by WdFilter.sys.
- BYOVD
- Bring Your Own Vulnerable Driver: an attack pattern where the operator imports a signed but vulnerable kernel driver to gain kernel-mode primitives and disable security telemetry.
- Mark of the Web (MOTW)
- The NTFS Zone.Identifier alternate data stream that marks a file as originating from outside the local machine. The Microsoft 365 Apps internet-macro default block uses MOTW as its trigger.
- Standard protection rules
- The three ASR rules Microsoft classifies as safe to enable in Block mode without staged rollout: BYOVD, LSASS, and WMI persistence.
- LOLBin
- Living-Off-the-Land Binary: a signed Microsoft Windows binary that attackers use to execute malicious behaviour while staying off identity-based allow-lists.
- Cohen-1984 undecidability
- Fred Cohen's 1984 result that detection of arbitrary viral behaviour in a program reduces to the Halting Problem and is therefore undecidable in general.
References
- (2017). Windows Defender Exploit Guard: Reduce the attack surface against next-generation malware. https://www.microsoft.com/en-us/security/blog/2017/10/23/windows-defender-exploit-guard-reduce-the-attack-surface-against-next-generation-malware/ ↩
- (2022). Helping users stay safe: Blocking internet macros by default in Office. https://techcommunity.microsoft.com/blog/microsoft_365blog/helping-users-stay-safe-blocking-internet-macros-by-default-in-office/3071805 ↩
- (2021). World's most dangerous malware EMOTET disrupted through global action (Wayback snapshot, 2021-01-27). https://web.archive.org/web/20210127150000/https://www.europol.europa.eu/newsroom/news/world%E2%80%99s-most-dangerous-malware-emotet-disrupted-through-global-action ↩
- (1984). Computer Viruses: Theory and Experiments (Introduction). https://all.net/books/virus/part1.html ↩
- (2026). Attack surface reduction rules reference. https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-reference ↩
- Living Off The Land Binaries, Scripts and Libraries (LOLBAS). https://lolbas-project.github.io/ ↩
- (2022). How Emotet is changing tactics as Microsoft is tightening Office macro security. https://www.welivesecurity.com/2022/06/16/how-emotet-is-changing-tactics-microsoft-tightening-office-macro-security/ ↩
- (2026). Macros from the internet are blocked by default in Office. https://learn.microsoft.com/en-us/microsoft-365-apps/security/internet-macros-blocked ↩
- (2026). Endpoint detection and response in block mode. https://learn.microsoft.com/en-us/defender-endpoint/edr-in-block-mode ↩
- (2026). What is AppLocker?. https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/applocker/what-is-applocker ↩
- (2018). Enhanced Mitigation Experience Toolkit (EMET) - Microsoft Lifecycle. https://learn.microsoft.com/en-us/lifecycle/products/enhanced-mitigation-experience-toolkit-emet ↩
- (2017). What's new in the Windows 10 Fall Creators Update. https://blogs.windows.com/windowsexperience/2017/10/17/whats-new-windows-10-fall-creators-update/ ↩
- (2026). Attack surface reduction rules overview. https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-overview ↩
- (2020). Demystifying attack surface reduction rules - Part 1. https://techcommunity.microsoft.com/blog/microsoftdefenderatpblog/demystifying-attack-surface-reduction-rules---part-1/1306420 ↩
- (2022). Amazon-themed campaigns of Lazarus in the Netherlands and Belgium. https://www.welivesecurity.com/2022/09/30/amazon-themed-campaigns-lazarus-netherlands-belgium/ ↩
- (2021). CVE-2021-21551 (Dell dbutil_2_3.sys). https://nvd.nist.gov/vuln/detail/CVE-2021-21551 ↩
- (2022). BlackByte ransomware returns. https://news.sophos.com/en-us/2022/10/04/blackbyte-ransomware-returns/ ↩
- (2019). CVE-2019-16098 (RTCore64.sys / MSI Afterburner). https://nvd.nist.gov/vuln/detail/CVE-2019-16098 ↩
- (2021). Improve kernel security with the new Microsoft Vulnerable and Malicious Driver Reporting Center. https://www.microsoft.com/en-us/security/blog/2021/12/08/improve-kernel-security-with-the-new-microsoft-vulnerable-and-malicious-driver-reporting-center/ ↩
- (2022). Available today: The Windows 11 2022 Update. https://blogs.windows.com/windowsexperience/2022/09/20/available-today-the-windows-11-2022-update/ ↩
- (2026). Microsoft recommended driver block rules. https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules ↩
- (2021). Emotet vs. Windows Attack Surface Reduction (SANS ISC Diary 27036). https://isc.sans.edu/diary/27036 ↩
- (2026). Allocated altitudes (Windows file-system minifilter altitudes). https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/allocated-altitudes ↩
- Behavior Prevention on Endpoint (M1040). https://attack.mitre.org/mitigations/M1040/ ↩
- What are Indicators of Attack (IOAs)?. https://www.crowdstrike.com/en-us/cybersecurity-101/threat-intelligence/indicators-of-attack-ioa/ ↩
- Disable or Remove Feature or Program (M1042). https://attack.mitre.org/mitigations/M1042/ ↩
- (2023). Endpoint Prevention and Response (EPR) Test 2023. https://av-comparatives.org/tests/endpoint-prevention-response-epr-test-2023/ ↩
- Extracting whitelisted paths from Windows Defender ASR rules. https://adamsvoboda.net/extracting-whitelisted-paths-from-windows-defender-asr-rules-new/ ↩
- (2021). Bypass Windows Defender Attack Surface Reduction. https://blog.sevagas.com/IMG/pdf/bypass_windows_defender_attack_surface_reduction.pdf ↩
- Cheesing Microsoft Attack Surface Reduction rules. https://primusinterp.com/posts/WindowsASR/ ↩
- (2026). Prevent changes to security settings with tamper protection. https://learn.microsoft.com/en-us/defender-endpoint/prevent-changes-to-security-settings-with-tamper-protection ↩
- (2026). Test attack surface reduction (ASR) rules. https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-deployment-implement ↩
- (2026). Operationalize attack surface reduction (ASR) rules. https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-deployment-operationalize ↩