Stopping BYOVD Attacks on Windows: Vulnerable Driver Blocklist, Memory Integrity, the ASR Driver Rule and Hunting Loaded Drivers

2026-11-09 · By H.A

Stopping BYOVD Attacks on Windows: Vulnerable Driver Blocklist, Memory Integrity, the ASR Driver Rule and Hunting Loaded Drivers

Harden Windows 11 and Windows Server against bring-your-own-vulnerable-driver attacks by enforcing Microsoft's driver blocklist, HVCI and the ASR driver rule, then hunting for vulnerable drivers already running.

"Bring your own vulnerable driver" (BYOVD) has become a routine step before ransomware runs. This week researchers described the Lindnor backdoor deploying five vulnerable drivers and 13 security-killing tools on SQL Servers in about an hour, before Anubis ransomware. The attacker loads a legitimately signed but flawed kernel driver and uses it to kill EDR processes from the kernel. Windows already ships three defences against this: the Microsoft Vulnerable Driver Blocklist, memory integrity (HVCI), and a Defender Attack Surface Reduction rule. This tutorial checks all three on a Windows 11 or Windows Server machine, applies the latest blocklist, and adds hunting for drivers that get past them.

Prerequisites

Step 1: Check the current protection state

Start by finding out what is already on. The blocklist is on by default since the Windows 11 2022 update. It's also enforced whenever memory integrity, Smart App Control or S mode is active.

# Vulnerable driver blocklist switch (1 = on, 0 = off; missing = default)
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config' `
  -Name VulnerableDriverBlocklistEnable -ErrorAction SilentlyContinue

# Memory integrity / HVCI: a "2" in SecurityServicesRunning means HVCI is running
Get-CimInstance -Namespace root\Microsoft\Windows\DeviceGuard -ClassName Win32_DeviceGuard |
  Select-Object VirtualizationBasedSecurityStatus, SecurityServicesConfigured, SecurityServicesRunning

# ASR rules currently configured
Get-MpPreference | Select-Object AttackSurfaceReductionRules_Ids, AttackSurfaceReductionRules_Actions

You can also check in Windows Security > Device security > Core isolation details. Look at Memory integrity and Microsoft Vulnerable Driver Blocklist. If the blocklist toggle is greyed out, memory integrity or Smart App Control is on and is already enforcing it.

Step 2: Turn on the blocklist and memory integrity

If the blocklist is off, turn it on in the Windows Security app, or with a registry value and a reboot:

New-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config' `
  -Name VulnerableDriverBlocklistEnable -Type DWord -Value 1

Microsoft recommends memory integrity (HVCI) as the stronger protection. Turn it on in Core isolation details. For managed fleets, use Intune or Group Policy: Computer Configuration > Administrative Templates > System > Device Guard > Turn On Virtualization Based Security, with Virtualization Based Protection of Code Integrity set to Enabled with UEFI lock or Enabled without lock. Choose "without lock" while you pilot so you can roll back remotely.

Before you enable HVCI widely, check for incompatible drivers. Windows Security lists them when you try to turn on memory integrity. Update or remove those drivers first.

Step 3: Apply the latest blocklist instead of waiting for Windows Update

The blocklist built into Windows gets updated through monthly updates and a quarterly refresh. The version Microsoft publishes for download is usually more complete, because some blocks are held back from the in-box list for compatibility. To apply it:

  1. Download the App Control policy refresh tool (https://aka.ms/refreshpolicy).
  2. Download and extract the vulnerable driver blocklist binaries (https://aka.ms/VulnerableDriverBlockList).
  3. Choose the audit version first, rename it to SiPolicy.p7b, and copy it into place:
Copy-Item .\SiPolicy.p7b "$env:windir\System32\CodeIntegrity\SiPolicy.p7b" -Force
# Then run the refresh tool you downloaded in step 1 (elevated)
  1. Confirm it loaded. In Event Viewer, open Applications and Services Logs > Microsoft > Windows > CodeIntegrity > Operational and filter for event 3099. The PolicyName and PolicyId should match the blocklist XML. On Windows 11 22H2 and later you can also list active policies:
CiTool.exe --list-policies

Leave the audit version running for a week. Audit events (3076) show which drivers would be blocked. Once nothing important appears, swap in the enforced version. Enforced blocks are logged as 3077. Drivers that are already running are only blocked after a reboot.

If you already run your own App Control (WDAC) allowlist, merge the blocklist with it rather than overwriting SiPolicy.p7b. Remove the blocklist's Allow All rules before merging.

Step 4: Stop new vulnerable drivers being written to disk

The blocklist stops listed drivers from loading. The ASR rule Block abuse of exploited vulnerable signed drivers stops apps from writing them to disk in the first place. Run it in audit mode first, then switch to block:

$rule = '56a863a9-875e-4185-98a7-b882c64b5ce5'
Add-MpPreference -AttackSurfaceReductionRules_Ids $rule -AttackSurfaceReductionRules_Actions AuditMode
# After a clean pilot:
Add-MpPreference -AttackSurfaceReductionRules_Ids $rule -AttackSurfaceReductionRules_Actions Enabled

ASR events go to Microsoft-Windows-Windows Defender/Operational: 1121 for a block and 1122 for audit. In Intune the rule is named Block abuse of exploited vulnerable signed drivers (Device).

Step 5: Hunt for drivers that are already loaded

None of the three controls catches every vulnerable driver, and the community list moves faster than Microsoft's. The LOLDrivers project publishes known-vulnerable and malicious driver hashes. This script compares the hashes of running drivers against that list:

$lol = Invoke-RestMethod 'https://www.loldrivers.io/api/drivers.json'
$bad = @{}
foreach ($d in $lol) { foreach ($s in $d.KnownVulnerableSamples) {
  if ($s.SHA256) { $bad[$s.SHA256.ToUpper()] = $d.Tags -join ',' } } }

Get-CimInstance Win32_SystemDriver | Where-Object State -eq 'Running' | ForEach-Object {
  $p = $_.PathName -replace '^\\\?\?\\','' -replace '^\\SystemRoot', $env:windir
  if ($p -notmatch '^[A-Za-z]:') { $p = Join-Path $env:windir $p }
  if (Test-Path $p) {
    $h = (Get-FileHash $p -Algorithm SHA256).Hash
    if ($bad.ContainsKey($h)) { [pscustomobject]@{Driver=$_.Name; Path=$p; Match=$bad[$h]} }
  }
}

No output means none of the running drivers match. For any match, find the software that installed it, remove or update it, and if it was unexpected, treat the host as compromised.

Also watch for new kernel driver services. Attackers usually install the vulnerable driver as a service right before they use it:

Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} -MaxEvents 200 |
  Where-Object { $_.Message -match 'kernel mode driver' } |
  Select-Object TimeCreated, Message

If you run Sysmon, Event ID 6 (driver loaded) logs the hash and signature of every driver load. In Defender for Endpoint advanced hunting:

DeviceEvents
| where Timestamp > ago(30d)
| where ActionType in ("AsrVulnerableSignedDriverAudited","AsrVulnerableSignedDriverBlocked","DriverLoad")
| project Timestamp, DeviceName, ActionType, FileName, FolderPath, SHA256, InitiatingProcessFileName

Drivers loaded from C:\Users\, C:\ProgramData\ or temp folders deserve a close look. Real hardware drivers rarely live there.

Verification

Troubleshooting

Wrapping Up

BYOVD succeeds where a vulnerable signed driver can still load and EDR can then be killed from the kernel. Turning on memory integrity, applying the current blocklist, blocking new driver drops with ASR, and hunting the drivers already running closes most of that gap. That matters most on servers, where operators often switch these features off for "compatibility". It's an afternoon of work.

COMPUTE NODE · · --:--:--

Fresh cybersecurity news,
daily threat intelligence.

Daily cyber news, live threat intel and exploited CVEs.

Everything in one place

Self-hosted, hardened, and yours.

RUN IT

Local AI console

Chat with a model on your own hardware via Ollama or any OpenAI-compatible server. No cloud, no key.

DEFEND

Cyber threat feed

Automatic daily intel from CISA KEV, NVD & GitHub advisories, a live cyber threat map, and your own notes.

NEWS

News & videos

Articles and updates on pentesting, AI, and cyber — with embedded video, including YouTube. Post your own.

DIRECTORY

Registry

Runtimes, models, MCP servers, agents, and a full security & pentest tooling section.

PUBLISH

Posts

Write, edit, publish, and share articles backed by a real database and your account.

COMMUNITY

Forum

Threads and replies across categories from Models to Hardware to Security.

CODE

Repos

Curated AI and security GitHub repos, plus a shelf for pinning your own.

DOWNLOAD

Skill packs

Agent starters, RAG scaffolds, and defensive security & VAPT report templates.

Registry

Runtimes, models, MCP servers, agent frameworks, and a security & pentest tooling section — all links out to the real projects.

Local AI console

Talk to a model running on your own machine through Ollama or an OpenAI-compatible server — your prompts and the model's replies always go straight from your browser to your local model, never through a Reef server. Attach files for context, and pick up saved chats where you left off.

Type /image a prompt in the box below to generate
Not connected

Local AI hardware benchmark

A spec-based compatibility advisor — tells you which local models your hardware can run well, which will be slow, and which to skip. Connect to Ollama below for a real, measured speed test instead of an estimate.

1. Your hardware

2. Live check against your local model server (optional)

If a local model server is running, this cross-references the table above with what you've actually got loaded — and runs a real, measured speed test instead of an estimate.

AI Database

A browsable catalog of AI models across providers — context windows, pricing, and capabilities.

Loading…

Cyber threat feed

Latest threats pulled automatically every day from CISA's Known-Exploited-Vulnerabilities catalog and NVD — plus threat intel you post yourself.

⇩ Export STIX
Loading threat feed…

Cyber threat map

Attacks happening right now, all over the world.

Connecting…
LIVE · MAURITIUS TIME--:--:--
attack route, country to country attack route into Mauritius attacker reported worldwide
Loading live data…
attackers reported per minute · click to rewindnow

Top attack routesweb

Attackers based inlast hour

Networkslast hour

Click any dot, feed row or table row to see that IP's profile.

Mauritius

Who attacks Mauritius

Loading…

Web attacks malicious requests to Mauritian websites that were blocked
Network DDoS floods meant to knock Mauritian servers offline

    Mauritius · last 24 h

    How Mauritius is attacked

    Network-level attacks (DDoS) aimed at Mauritius, by method. They try to knock servers and networks offline by sheer volume.

    • Loading…

    The ports or services these floods aimed at aren't published.

    Mauritius · last hour

    Attackers located in Mauritius

    0attackers located in Mauritius were reported in the last hour

    This counts attacks coming from Mauritius, not attacks on it: IPs in Mauritius that servers elsewhere reported for attacking them. Usually zero or one; when it rises, it's often a hacked local server or router.

    Worldwide today

    What attackers are knocking on

    Ports most targeted across a worldwide network of sensors .

    Worldwide today

    Most active attackers

    Ranked by how many separate sensors they hit. Click a row for its profile.

    IPCountryNetworkSensors hitReports
    What you're looking at
    Blue routes

    Share of attack traffic from one country to another. Thicker, faster streams carry more. Particles show volume, not one per attack.

    Every 15 min · published 1–2 h behind
    Amber flashes

    An attacking IP that servers around the world reported in the last minute, placed where the IP is. Its targets aren't published, so there's no line.

    Every minute · shown about 1 min behind
    Locations

    IP locations are approximate (city level at best) and show where the machine is hosted, not who controls it.

    Approximate · city level at best

    News

    Articles, guides and updates on pentesting, AI, and cybersecurity — with embedded video. Add your own, including YouTube.

    Loading…

    Posts

    Loading…

    Loading posts…

    Forum

    Questions, answers, and talk about running AI locally.

    Loading forum…

    GitHub repositories

    Curated AI and security repos, plus your own pinned shelf.

    Command board

    One-liners, configs, and advice worth keeping — shared by everyone here.

    ⚠ Commands are shared with all users. Never include credentials, tokens, or internal hostnames. Review anything before you run it.
    Loading commands…

    Skill packs

    Starter files served from the API — AI agent scaffolds plus defensive security & VAPT reporting templates. Click to download.

    Loading skills…

    Threat Library

    Threat actors, malware and tools — their attack techniques, Reef Sentinel coverage and indicators of compromise.

    Loading…

    Threat Intelligence

    Curated threat write-ups, advisories and analysis — with cover media.

    Loading…

    Tutorials

    Step-by-step guides for running local AI, using the console, and tracking threats. Admins can add their own.

    Loading…

    Downloads

    Direct links to the official homepage/download page for well-known cybersecurity, penetration-testing, and local-AI software. Always verify checksums/signatures from the vendor before running anything.

    Loading…

    Terms & Conditions

    Loading…

    Help & FAQ

    Answers to common questions about Reef Sentinel, plus a formatting guide for posts, articles, and comments.


    Formatting guide

    Commands you can type into the body of a post, comment, or reply — no HTML needed. Comments and short replies only support bold, italic, and inline code.

    Contact us

    Questions, feedback, or a security disclosure? Reach us directly, or send a message and we'll get back to you by email.

    Loading…

    Send a message

    VAPT Report Generator

    Build an engagement, add findings with a live CVSS calculator, and generate a branded, print-ready report.

    Recon Toolkit

    Passive OSINT lookups for the recon phase of an engagement, plus offline hash identification and a payload cheatsheet.

    Website Checker

    Reads a website's HTTP response headers to identify its framework and server, shows any known CVEs for the exposed versions with details, and recommends what to do.

    Control panel

    Manage everything shown on the site — news & videos, posts, homepage headlines, and subscribers. Admin only.

    Overview
    Content
    Site
    Account & Security

    Email settings

    SMTP on ports 25/465/587 is blocked outbound by some hosts (e.g. DigitalOcean droplets by default) — Resend and Brevo send over their HTTPS API instead, so they work even then. Only the selected provider is used to send; the others stay saved but idle, so you can switch back any time without losing settings.

    Get a key from resend.com/api-keys. Uses the "From address" below as the sender — it must be on a domain you've verified with Resend.

    Get an API key (not an SMTP key) from app.brevo.com/settings/keys/api. Uses the "From address" below as the sender — it must be a verified sender in your Brevo account.

    "From address" and "Site name/URL" are shared by SMTP, Resend, and Brevo — they control what recipients see, regardless of which provider is active.

    Send a test email

    Sends through whichever provider is currently active above. Save your settings first if you just changed them.