Join our Newsletter — 33% off our NHI Course
Home› Guides› D3-DLIC Driver Load Integrity Checking: What It Hardens…
Guide Endpoint Security

D3-DLIC Driver Load Integrity Checking: What It Hardens and How to Verify It

← All guides
By NHI Mgmt Group, edited by Lalit Choda Updated 12 November 2026 11 min read
On this page

A malicious or vulnerable kernel driver runs with the highest privilege on the host, so whatever checks a driver before it loads is one of the last lines of defence. D3-DLIC Driver Load Integrity Checking is the MITRE D3FEND countermeasure for this. D3FEND defines it as "Ensuring the integrity of drivers loaded during initialization of the operating system." It sits in the Harden tactic under Platform Hardening and authenticates the Hardware Driver artefact. This card covers the two mechanisms D3FEND describes (signature checking and early-loading security agents), the single ATT&CK relationship D3FEND infers, how the control is configured on Linux, macOS and Windows, how to verify it, and its well-known limits. It is written for endpoint engineers, platform owners and detection teams. Operating systems are listed alphabetically.

Key takeaways

  • Signature checks prove origin, not safety. A correctly signed driver can still be vulnerable, which is why signature enforcement needs a blocklist or allowlist on top.
  • Enforcement mode matters more than signing. Linux module signing in permissive mode loads unsigned modules and only taints the kernel; enforcement needs CONFIG_MODULE_SIG_FORCE or module.sig_enforce=1.
  • Stolen signing keys are D3FEND's main caveat. The technique's own considerations list stolen private keys and compromised or lax certificate authorities.
  • D3FEND infers only one ATT&CK link. T1652 Device Driver Discovery shares the Hardware Driver artefact; the stronger practical value against rootkits and vulnerable drivers is context, not a D3FEND mapping.
  • Verify with events and status queries. Windows logs Code Integrity events, and Linux records a taint flag when an unsigned module loads in permissive mode.

D3-DLIC at a glance

FieldD3-DLIC Driver Load Integrity Checking
D3FEND IDD3-DLIC
TacticHarden
Parent techniquePlatform Hardening
Digital artefactHardware Driver (relation: authenticates)
D3FEND referencesCrowdStrike patent "Integrity assurance through early loading in the boot phase"; Microsoft patent "Protected computing environment"
ATT&CK relationship in D3FENDInferred only: T1652 Device Driver Discovery (checked November 2026)
Main limitationTrusts whatever the signing chain trusts, including stolen keys and signed vulnerable drivers

How it works

D3FEND describes two ways to achieve the technique:

  • Signed kernel components: drivers carry a signature over a hash of the component, often with a certificate chain, added before distribution. The operating system checks it before loading the driver and refuses or flags drivers that fail.
  • Early-loading security agent: a kernel-level security agent arranges for its own driver to initialise first, so it can inspect or control the drivers that follow. D3FEND's notes on the CrowdStrike reference explain the reason: attackers can change initialisation order to load a malicious driver before the defender.

Both rely on a trust anchor. D3FEND's considerations are blunt about it: signing keys of reputable companies have been stolen and used to sign malicious executables, root certificate authorities have been compromised, an attacker can set up an organisation that obtains a certificate, and a lax authority can issue incorrect certificates.

ATT&CK techniques D3FEND relates to D3-DLIC

Relationship type: inferred. D3FEND lists no direct ATT&CK mapping. The inferred relationship comes from a shared digital artefact: D3-DLIC authenticates Hardware Driver, and the only ATT&CK technique in D3FEND's model that touches Hardware Driver is T1652. Checked November 2026.

ATT&CK techniqueTacticShared artefactWhat it means in practice
T1652 Device Driver DiscoveryDiscoveryHardware Driver (enumerated)Weak as a control claim: integrity checking does not stop an adversary listing drivers. It does reduce what that discovery can lead to, because a driver the adversary wants to add or swap must pass the load check.

See T1652 Device Driver Discovery. In practice, teams deploy driver load checks against behaviour such as T1014 Rootkit, T1543.003 Windows Service (drivers are installed as kernel services), T1068 Exploitation for Privilege Escalation through vulnerable drivers, and T1553.006 Code Signing Policy Modification, where an adversary tries to switch enforcement off. That list is our context, not a D3FEND mapping. See MITRE ATT&CK T1553 Subvert Trust Controls and the Bring Your Own Vulnerable Driver and EDR Killers Guide.

Where it is implemented

Linux

  • Module signature verification: CONFIG_MODULE_SIG turns on checking. With CONFIG_MODULE_SIG_FORCE off (permissive), unsigned modules and modules signed with unknown keys still load and the kernel is tainted with flag E. With it on, or with module.sig_enforce=1 on the kernel command line, only validly signed modules load.
  • Trusted keys: built-in keys sit in the .builtin_trusted_keys keyring, visible in /proc/keys. Extra keys can be added only if signed by a key already in that keyring.
  • Signing key handling: the kernel documentation warns that anyone holding the private key can sign malicious modules, so it should be moved somewhere secure or destroyed rather than left in the source tree. Keys can also be referenced by a PKCS#11 URI.
  • Boot chain: distributions combine module signing with Secure Boot; see the Linux Secure Boot and Shim Guide.

macOS

  • Kext signature checks: Apple states that with System Integrity Protection (SIP) on, the signature of each kernel extension is verified before it is included in the kernel collection, and that with SIP off the kext signature is not enforced.
  • Approval: user consent and administrator authorisation are required to load kernel extensions installed on macOS 10.13 or later. A device management service can specify a list of kernel extensions that load without user consent.
  • Apple silicon: kexts must be explicitly enabled from recoveryOS, which sets secure boot to Reduced Security.
  • Alternatives: Apple recommends solutions that do not extend the kernel, such as those built on DriverKit, EndpointSecurity and NetworkExtension.

Windows

  • Kernel-mode code signing policy: from Windows 10 version 1607, new kernel drivers must be signed through the Windows Hardware Dev Center. Microsoft documents exceptions: systems upgraded from earlier releases, Secure Boot off, and drivers signed with an end-entity certificate issued before 29 July 2015 that chains to a supported cross-signed CA.
  • Microsoft vulnerable driver blocklist: a list of drivers with known vulnerabilities or malware links. Microsoft documents it as on by default from the Windows 11 2022 update, and enforced with memory integrity, Smart App Control or S mode. It is updated quarterly and through monthly updates, and can be deployed as an App Control for Business policy.
  • Memory integrity (HVCI): runs kernel-mode code integrity inside virtualisation-based security, so a compromised kernel cannot simply switch the check off. It is set under Windows Security, Device security, Core isolation details.
  • Early Launch Antimalware (ELAM): ELAM drivers initialise before other boot-start drivers and classify each as known good, known bad or unknown. The DriverLoadPolicy value under HKLM\System\CurrentControlSet\Control\EarlyLaunch sets which classes initialise; Microsoft labels 0x3 as the default.

For allowlisting drivers by policy, see App Control for Business (WDAC).

Choosing a configuration

SituationLinuxmacOSWindows
General fleetDistribution kernel with signature enforcement and Secure Boot onSIP on, Full Security on Apple silicon, no kexts unless neededMemory integrity on, vulnerable driver blocklist on, Secure Boot on
Third-party or in-house driversSign with an organisation key held in an HSM or PKCS#11 token and enrol itPrefer DriverKit or system extensions; pre-approve required kexts by MDMUse Dev Center signed drivers; allow specific drivers by App Control policy
High-value serversAdd an explicit allowlist of expected modules and alert on any loadApprove only named kexts by MDM and review the listAdd an App Control driver allowlist on top of the blocklist
Small organisationKeep distribution defaults with enforcement onKeep SIP on and Apple defaultsKeep Windows 11 defaults on and do not disable them for convenience

Implementation steps

  1. Inventory drivers. List kernel modules and drivers per platform image, with signer, version and owner. Unknown signers are the first finding.
  2. Turn on enforcement in audit first. On Windows, deploy the blocklist or a driver allowlist in audit mode and review audit block events. On Linux, run permissive mode on a pilot group and look for tainted kernels.
  3. Fix or replace incompatible drivers. Microsoft notes that memory integrity can break incompatible drivers and that the remedy is an updated driver.
  4. Enforce by ring. Move pilot, then broad, then critical systems to enforcement. Plan for reboots: Microsoft notes a policy change does not stop drivers already running.
  5. Protect the signing keys. Organisation keys used for drivers or modules live in hardware-backed storage, with named approvers. See the Code Signing Security Guide.
  6. Keep a rollback path. Document recovery: on Windows, Microsoft describes switching memory integrity off from Windows RE; on Linux, keep a known-good kernel entry. Test recovery before broad rollout.

How to verify it works

CheckLinuxmacOSWindows
Enforcement is onKernel built with CONFIG_MODULE_SIG_FORCE or booted with module.sig_enforce=1SIP reported as enabled on every MacWin32_DeviceGuard SecurityServicesRunning includes 2 (memory integrity running)
Policy is the expected oneExpected keys present in .builtin_trusted_keysMDM kext approval list matches the expected listEvent ID 3099 in CodeIntegrity Operational log shows the blocklist PolicyName and PolicyID
Test with a known-bad caseOn a test host, an unsigned test module is refusedOn a test Mac, an unapproved kext does not load without consentOn a test host in audit mode, a driver on the blocklist generates an audit event
DriftAny kernel showing taint flag EMacs with SIP off or Reduced Security set without a recorded reasonDevices where memory integrity or the blocklist has been turned off

Metrics to track (examples, not standards): share of endpoints with enforcement on, number of distinct driver signers in the estate, unsigned or tainted loads per month, and time from a blocklist update to fleet-wide coverage.

Limits, bypasses and failure patterns

  • Signed but vulnerable drivers: the signature is valid, so only a blocklist or allowlist stops the load. Microsoft also notes its attack surface reduction rule for vulnerable signed drivers stops the file being written, not an existing driver loading.
  • Stolen or expired certificates still trusted: in the NVIDIA code-signing certificates theft, leaked expired certificates issued before the July 2015 cut-off remained usable for driver signing, and policy-based blocking was the suggested response.
  • Permissive mode left on: Linux module signing without enforcement records a taint but loads the module.
  • Exceptions nobody tracks: Secure Boot switched off for one device or test signing left enabled removes the protection silently.
  • Signing keys on build servers: a module signing key left in the kernel tree or a CI workspace lets anyone with access sign drivers. The key is a machine credential; manage it like one with the Code Signing Policy Template.
  • Blocklist merged into allowlist: Microsoft notes the blocklist policy contains Allow All rules that must be removed before merging with an explicit allowlist.

Framework mapping

FrameworkReferenceRelationship to D3-DLIC
NIST SP 800-53 Rev 5CM-14 Signed ComponentsPrevent installation of components without a recognised signature
NIST SP 800-53 Rev 5SI-7, SI-7(15) Code AuthenticationIntegrity verification and cryptographic authentication of code before installation
MITRE ATT&CK mitigationM1045 Code SigningThe ATT&CK mitigation closest to this countermeasure
MITRE ATT&CKT1652 (inferred by D3FEND)Shared Hardware Driver artefact

See M1045 Code Signing.

Practitioner checklist

  • Inventory kernel drivers and modules with signer and owner for each platform image.
  • Run Linux kernels with module signature enforcement, not permissive mode.
  • Keep SIP on for Macs and approve only required kernel extensions through device management.
  • Keep memory integrity and the vulnerable driver blocklist on for Windows endpoints and servers.
  • Add an explicit driver allowlist for high-value systems.
  • Store driver and module signing keys in hardware-backed storage with named approvers.
  • Track Secure Boot off, test signing on and similar exceptions as risks with owners.
  • Alert on tainted kernels, Code Integrity block events and enforcement being switched off.
  • Test rollback and recovery before enforcing across the fleet.

Standards and references

Related NHI Mgmt Group resources: Bring Your Own Vulnerable Driver and EDR Killers Guide · App Control for Business (WDAC) · Code Signing Security Guide · Linux Secure Boot and Shim Guide · MITRE D3FEND Guide

Free weekly newsletter

Subscribe to the NHI & AI Identity Journal

The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.

Bonus 33% off our NHI Course when you subscribe.

NHIMG Editorial Note
Researched and written by the NHI Mgmt Group editorial team using AI tools, under the editorial direction of Lalit Choda. Facts are drawn from the sources listed on this page and checked by our automated quality process. Last updated 12 November 2026. Spotted an error? Use our contact page.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM and Agentic AI security. nhimg.org