Every endpoint detection and response (EDR) agent makes an architectural bet about how much of its code runs inside the operating system kernel, and that bet decides how much it can see, how hard it is to switch off and how badly it can fail. The July 2024 content update incident that crashed millions of Windows hosts made this a board question, and operating system vendors are now moving security products towards user mode. This guide is for endpoint architects, EDR owners and risk leads judging agent architecture and rollout controls. It assumes you know what EDR does; the EDR Guide covers the basics and the EDR Evasion and Defence Guide covers evasion techniques in depth. Operating systems are discussed in alphabetical order.
Key takeaways
- Neither model is purely one or the other. Almost every agent combines a small kernel sensor with user-mode services; the real question is how much logic, parsing and update handling sits in the kernel.
- Kernel code buys visibility and self-protection at the cost of resilience. Microsoft states this trade-off directly: a fault in kernel code can take down the whole system, where a fault in a user-mode service can be recovered.
- User mode is not automatically weaker. Operating system frameworks (Apple Endpoint Security, Linux eBPF, Windows ETW, AMSI and protected processes) now provide much of the telemetry and protection that once required a custom driver.
- The biggest operational risk is the update channel, not the driver. Frequent content updates parsed by kernel code need the same staged rollout, rings and rollback as code releases, and customers should demand control over them.
- Tamper resistance comes from trust boundaries, not privilege level alone. Kernel attackers using vulnerable drivers beat both models, so driver blocklists, memory integrity and early launch protection matter more than where the agent runs.
What "kernel mode" and "user mode" mean for an EDR agent
Operating systems run code at two main privilege levels. Kernel mode code shares one address space with the operating system and every driver, with nothing to catch its mistakes; user mode code runs in isolated processes, so a crash stays contained.
Microsoft's July 2024 guidance on integrating security tools explains why security vendors historically wrote kernel drivers: visibility of system-wide activity, the ability to load early in boot to catch bootkits and rootkits, protection of the product from tampering even by administrators, and performance for high-throughput work such as network analysis. It then states that kernel drivers provide these properties "at the cost of resilience", because kernel code runs at the most trusted level where recovery options are limited.
In practice an EDR agent is a stack of components. The architectural question is which of these sit in the kernel:
- Sensors: process, thread, image-load, registry, file system and network event collection.
- Enforcement hooks: the points where the agent can block a process start, a file write or a driver load before it completes.
- Content interpretation: parsing detection rules, behavioural templates and configuration delivered by the vendor, sometimes several times a day.
- Self-protection: preventing termination, unloading or reconfiguration of the agent.
Microsoft recommends keeping kernel components to minimal sensors for data collection and enforcement, and moving update management and content parsing to user mode, where recovery is possible. That is the most useful lens for assessing any agent.
Side-by-side comparison
| Decision criterion | Kernel-heavy agent | User-mode-first agent |
|---|---|---|
| Telemetry depth | Direct kernel callbacks and filter drivers; can observe events no public interface exposes | Limited to what the operating system exposes (ETW, Endpoint Security events, eBPF hooks); coverage depends on the platform's API |
| Prevention timing | Can block synchronously at the kernel decision point | Can block where the platform offers authorisation events (for example Apple Endpoint Security AUTH events, Windows protected services with policy); otherwise detect and respond after the fact |
| Crash blast radius | A fault crashes the host (Windows bugcheck, kernel panic); repeated on every boot if the faulty component loads early | A fault crashes the agent process; the host keeps running and the service can restart |
| Recovery from bad updates | Often needs hands-on intervention: safe mode, recovery environment, BitLocker recovery keys | Usually remote: roll back content or restart the service from the management plane |
| Tamper resistance against admin-level attackers | Strong: an administrator cannot easily stop or unload a well-built kernel component | Depends on OS protection (protected processes, system extension management, signed and locked configuration) |
| Tamper resistance against kernel-level attackers | Contested: attacker and agent run at the same privilege level | Weak on its own; relies on OS-level boundaries such as virtualisation-based security |
| OS vendor direction | Being restricted on macOS; under review on Windows | Preferred by Apple; Microsoft building a Windows endpoint security platform for user-mode products |
Threat model: what each architecture defends against
Judge the architecture against the attacks that target EDR itself, not just against malware in general. The Bring Your Own Vulnerable Driver and EDR Killers Guide covers the attacker side; here the point is how each design holds up.
| Threat | ATT&CK | Kernel-heavy agent | User-mode-first agent | Control that decides the outcome |
|---|---|---|---|---|
| Administrator stops or uninstalls the agent | T1685 Disable or Modify Tools | Usually resists | Resists only if the OS protects the service | Protected processes, managed system extensions, central uninstall tokens |
| Bring your own vulnerable driver ("EDR killer") | T1068, T1685 | Attacker kernel code can remove callbacks or terminate the agent | Attacker kernel code can kill the process outright | Vulnerable driver blocklist, memory integrity, driver allowlisting |
| Unhooking user-mode API hooks | T1685, T1106 Native API | Unaffected where kernel callbacks supply the same events | Affected if the agent relies on hooks injected into user processes | Prefer OS event sources (ETW, Endpoint Security) over in-process hooks |
| Rootkits and bootkits | T1014 Rootkit | Better placed, especially with early launch | Limited before user mode starts | Secure Boot, early launch anti-malware, measured boot and attestation |
| Faulty vendor update (non-malicious) | Not an ATT&CK technique | Host crash, possible boot loop | Agent crash, host survives | Staged content rollout, bounds checking, customer-controlled rings |
Kernel residence helps most against administrator-level tampering and early-boot threats, and it is a liability when the threat is the vendor's own update. Against an attacker with kernel execution, only a higher boundary such as hypervisor-protected code integrity helps. See the Rootkits and Bootkits Guide for early-boot defences.
Architecture in words, by operating system
Linux
Linux agents have historically used loadable kernel modules, which must be rebuilt or certified for each kernel version and can panic the host if faulty. The shift is to eBPF. According to the eBPF project documentation, eBPF runs sandboxed programs inside the kernel without changing kernel source or loading modules, and a verifier checks before attachment that each program runs to completion, does not crash the system and does not access memory out of bounds. The project notes the verifier is a safety tool, not a security judgement. eBPF therefore sits between the two models: code executes in kernel context, but under a safety check that a kernel module never gets. Loading requires root or the CAP_BPF capability, which is also why attackers value it; see the eBPF Security Guide.
macOS
Apple has made the decision for its platform. Its deployment guide says kernel extensions are "no longer recommended for macOS" because they threaten operating system integrity and reliability. On macOS 11 and later a kernel extension needs administrator approval, a restart and secure boot set to Reduced Security. System extensions, introduced in macOS 10.15, run in user space with only the privileges their function needs. The Endpoint Security framework is the C API security tools use from a system extension: a client can authorise pending events (AUTH events) or receive notifications of events that already happened (NOTIFY events), covering process execution, file system mounts, forks and signals. Apple documents three behaviours when a client misses the deadline for an AUTH response: kill the client (the default), fail closed or fail open. See the macOS Detection and Response Guide.
Windows
Windows is in transition. Today most Windows EDR agents load one or more kernel drivers: file system minifilters, process and image-load callbacks and network filters. Microsoft's guidance points vendors to user-mode alternatives where they exist: Event Tracing for Windows (ETW) and the Antimalware Scan Interface (AMSI) for visibility, virtualisation-based security (VBS) enclaves and protected processes for self-protection, and Early Launch Antimalware (ELAM) for boot-time trust.
Two mechanisms matter for tamper resistance in user mode. ELAM drivers initialise before other boot-start drivers and let antimalware software control the initialisation of subsequent boot drivers. A vendor with an ELAM driver can also run its user-mode service as a protected anti-malware service, which Microsoft documents as preventing non-protected processes, including administrators, from injecting code into or stopping the service, and allowing only Windows-signed code or code signed with the vendor's registered certificates to load.
In June 2025 Microsoft announced, under its Windows Resiliency Initiative, a Windows endpoint security platform that lets security vendors build products that run outside the kernel, with a private preview for Microsoft Virus Initiative (MVI) partners planned for the following month. The same announcement says MVI 3.0 requires partners to follow safe deployment practices, with gradual updates, deployment rings and monitoring. As of November 2026, treat the platform as an evolving direction and ask each vendor for its dated roadmap rather than assuming a timeline.
Failure modes: how each model breaks
Kernel-heavy agents
- Faulty content parsed in the kernel: the CrowdStrike root cause analysis of the July 2024 incident describes a content interpreter inside the kernel driver that read a 21st input field when only 20 were supplied, an out-of-bounds read that caused a system crash. The content was a rapid configuration update, not a sensor code release. Microsoft estimated 8.5 million Windows devices were affected.
- Boot loops: a driver that loads early and crashes on every boot cannot be fixed remotely, because the agent never reaches the network. Recovery needs safe mode or the recovery environment, plus disk encryption recovery keys at scale. The Mass Endpoint Recovery Guide covers this.
User-mode-first agents
- Blind spots where the OS offers no event: if the platform API does not expose an operation, the agent cannot see it.
- In-process hooks that attackers can remove: agents that inject DLLs into user processes to watch API calls are vulnerable to unhooking and direct system calls. OS-supplied event streams are harder to tamper with than hooks living in the attacker's own process.
- Termination and suspension: without protected process status or managed system extension policy, an administrator, or malware running as one, can stop the service.
- Deadline failures: on macOS a slow AUTH response gets the client killed, or the operation denied or allowed, depending on its deadline mode; know which mode each product uses.
Controls that matter whichever model you run
| Control | What it does | Where to configure or evidence it |
|---|---|---|
| Staged content rollout | Content and sensor updates go to a small ring first, bake, then expand, with automatic halt and rollback | EDR console update policies (sensor version pinning, content ring assignment); vendor's documented release process |
| Customer-controlled update rings | You decide which hosts take new content first and can hold back critical servers | Contract and console settings; the CrowdStrike root cause analysis lists customer control over rapid content deployment as a committed mitigation |
| Vulnerable driver blocklist | Blocks known vulnerable drivers before they load | Microsoft documents it as on by default since the Windows 11 2022 update and enforced with memory integrity, Smart App Control or S mode; updated quarterly and through monthly servicing; audit-only version available, verify via CodeIntegrity Operational event 3099 |
| Memory integrity (HVCI) | Uses virtualisation to stop unsigned or tampered kernel code running | Windows Security, Intune or Group Policy; on by default for most new Windows 11 devices |
| Early launch and protected service | Agent starts before other drivers and its user-mode service resists injection and termination | Ask the vendor for ELAM and protected service status; verify the service protection level |
| Managed system extensions (macOS) | Approves the agent silently and stops users or apps removing it | MDM system extension and removal policies |
| Tamper protection | Stops local changes to agent settings, exclusions and services | EDR console; require it on every host and alert on attempts |
| Recovery readiness | Lets you restore hosts that will not boot | Escrowed disk encryption recovery keys, offline runbooks, Windows Quick Machine Recovery where available |
Decision guidance: how to choose and what to demand
Most buyers cannot pick an architecture independently of a product, but they can weight the criteria and make the vendor show its work. The EDR and XDR Buyer's Guide covers wider evaluation; these are the architecture-specific points.
- Weight resilience higher where an outage is a safety or revenue event (clinical, point-of-sale, logistics, industrial HMIs) or devices are remote and encrypted.
- Weight kernel visibility and blocking higher for high-value servers, domain controllers and privileged access workstations, where the threat is a capable intruder and the hosts are few, centrally managed and recoverable.
- On macOS the decision is made: require Endpoint Security and system extension delivery, and treat any request to allow a kernel extension or Reduced Security as an exception needing risk acceptance.
- On Linux prefer eBPF-based sensors where kernel versions support them; they decouple the agent from kernel release cycles and add verifier safety. Keep a module-based fallback only for older kernels, documented as technical debt.
- On Windows ask for the user-mode roadmap: which components stay in the kernel, which move, and how the product will use the endpoint security platform as it matures.
- Small organisations: the lever is ring settings and recovery readiness. Large organisations: write ring policy into contracts and test rollback yearly.
Questions to put to any vendor:
- Which components run in kernel mode on each operating system, and what does each do?
- Is detection content parsed in kernel mode? If so, what bounds checking and validation does the parser apply?
- How are sensor and content updates staged internally, and what control do customers have over each?
- What happens to the host if the kernel component faults? Is there automatic fallback or a crash-loop breaker?
Worked scenario: one estate, two answers
A regional retailer runs 6,000 Windows point-of-sale terminals, 2,500 staff laptops (a mix of Windows and macOS), 400 Linux servers and 40 domain controllers and privileged access workstations.
- Point of sale: an outage closes stores, devices are encrypted and remote. The retailer keeps the existing agent but moves all terminals into the last update ring, with a 24-hour bake after the pilot and canary rings, and builds a recovery kit with escrowed recovery keys.
- Laptops: macOS devices are already on Endpoint Security system extensions managed by MDM, with user removal blocked. Windows laptops sit in a broad middle ring.
- Linux servers: the team migrates from a kernel module sensor to the vendor's eBPF sensor on supported kernels, ending the patch delays caused by waiting for module certification.
- Domain controllers and privileged workstations: few, high-value and staffed around the clock. They take content in the canary ring, after a lab ring, because early detection matters most here and on-call staff can recover a crash quickly.
Implementation: hardening the rollout of any agent
- Inventory components: list each agent's drivers, system extensions, modules, eBPF programs and services per operating system, with versions.
- Define rings: lab, canary (1 to 2 per cent, including staff who can report problems), early (10 to 20 per cent), broad, and a held-back ring of critical and hard-to-recover hosts.
- Apply rings to both sensor versions and content where the product allows, and record where it does not as a residual risk in the register.
- Turn on platform protections in audit first: vulnerable driver blocklist audit policy, memory integrity on a pilot group, then enforce once CodeIntegrity events show no business drivers affected.
- Test recovery: run a tabletop and a technical drill in which a ring of test hosts boot-loops, using the Security Tool Faulty Update Outage Playbook. Measure time to retrieve recovery keys and restore.
- Roll back: document and rehearse pinning the previous sensor version and pausing content.
Detection and measurement
Monitor the agent as a critical system in its own right. Watch for bugchecks naming a security driver, CodeIntegrity Operational events (3099 confirms the blocklist policy is active), new kernel services, heartbeat gaps, event drop counters and macOS system extension state changes.
- Agent health coverage: percentage of in-scope hosts reporting a healthy agent in the last 24 hours, by operating system and ring.
- Ring compliance: percentage of hosts assigned to a defined update ring, with critical hosts in the held-back ring.
- Kernel protection coverage: percentage of Windows hosts with memory integrity on and the vulnerable driver blocklist enforced.
- Security-agent-caused crashes: host crashes attributed to security components per 10,000 hosts per month, trending to zero.
- Recovery time objective tested: measured time to recover a boot-looping test ring, against target.
Where identity fits
EDR agents are non-human identities with the highest privilege on every host they touch. Each holds a device certificate or token for its cloud connection, and its console can push code to the whole fleet, so treat the update channel as a privileged deployment pipeline: protect console accounts with phishing-resistant authentication and privileged access controls, restrict who can change ring assignments and uninstall tokens, and log those changes. See the Securing the EDR and XDR platform itself guide for console hardening.
Framework mapping
| Framework | Reference | Relevance |
|---|---|---|
| NIST SP 800-53 Rev 5 | SI-3 Malicious Code Protection; SI-4 System Monitoring | The EDR capability itself |
| NIST SP 800-53 Rev 5 | SI-7 Software, Firmware, and Information Integrity | Driver integrity, memory integrity, early launch |
| NIST SP 800-53 Rev 5 | CM-3 Configuration Change Control; CM-4 Impact Analyses | Staged rings and testing of agent updates |
| NIST SP 800-53 Rev 5 | SR-3 Supply Chain Controls and Processes; CP-10 System Recovery and Reconstitution | Vendor update assurance and boot-loop recovery |
| NIST CSF 2.0 | DE.CM-09; PR.PS-02; GV.SC-07; RC.RP-01 | Monitoring, software maintenance, supplier risk and recovery |
| CIS Controls v8.1 | Control 10 Malware Defenses | Anti-malware deployment and update management |
| ISO/IEC 27001:2022 Annex A | A.8.7 Protection against malware; A.8.32 Change management | Malware controls and change discipline for agent updates |
| MITRE ATT&CK v20 | TA0112 Defense Impairment (T1685); T1068; T1014; T1055; T1106 | Threats to the agent covered in the threat model table |
Common failure patterns
- Treating content updates as safe because they are "only data": configuration parsed by kernel code is code in effect. Put it under the same ring discipline as sensor releases.
- One ring for the whole estate: default settings often push content everywhere at once. Hard-to-recover hosts should never be first.
- Assuming kernel equals tamper-proof: without the vulnerable driver blocklist and memory integrity, an attacker can load a signed vulnerable driver and switch off a kernel agent. See the EDR Tampering and BYOVD Response Playbook.
- No offline recovery path: recovery keys stored only in a system that also failed, or runbooks kept on affected laptops.
Practitioner checklist
- Document which agent components run in kernel mode on each operating system.
- Confirm whether detection content is parsed in kernel mode and what validation protects it.
- Assign every host to an update ring, with hard-to-recover hosts held back.
- Enforce the vulnerable driver blocklist and memory integrity on Windows after an audit phase.
- Require Endpoint Security system extensions on macOS, managed by MDM, with no Reduced Security exceptions.
- Verify the agent's user-mode service runs as a protected process where the platform supports it.
- Escrow disk encryption recovery keys and rehearse boot-loop recovery yearly.
- Monitor agent health, crashes attributed to security drivers and event drop counters.
Standards and references
- Microsoft Security Blog: Windows security best practices for integrating and managing security tools
- Microsoft Windows Experience Blog: The Windows Resiliency Initiative
- Microsoft Learn: Protecting anti-malware services
- Microsoft Learn: Early launch antimalware
- Microsoft Learn: Microsoft recommended driver block rules
- Apple Developer: Endpoint Security
- Apple Platform Deployment: System and kernel extensions in macOS
- eBPF.io: What is eBPF?
Related NHI Mgmt Group resources: Endpoint Security Guide · Major IT Outage Lessons Guide · Application Allowlisting vs EDR · EDR Telemetry Guide