文章总结: 文档详细分析了一个针对CrowdStrikeEDR的0day漏洞利用驱动。该驱动通过内核级权限绕过PPL保护机制,使用IOCTL0x22E010直接终止受保护进程。研究发现驱动有15+变种且均持有有效微软签名,VT检测率为零。作者通过逆向工程还原了procKiller函数逻辑,并公开了符号链接与PoC代码。 综合评分: 87 文章分类: 漏洞分析,恶意软件,逆向分析,红队,终端安全
对用于攻击 CrowdStrike EDR 的 0day 漏洞进行逆向工程
haidragon haidragon
安全狗的自我修养
2026年4月7日 12:14 湖南
官网:http://securitytech.cc
#
驱动及其变种
在这张图片中,我们可以看到该驱动及其多个变种(15+ 个变种)内部代码完全相同。
📌 已识别的驱动(Identified Drivers)
所有这些驱动都由微软签名,签名有效,并且没有被任何机构阻止或吊销。
📌 VirusTotal 检测
当我们将其中一个驱动上传到 VirusTotal 时,可以看到它没有被任何杀毒软件(AV)或 EDR 厂商检测到。
链接: https://www.virustotal.com/gui/file/6fbaad2f00afaa94723fa7d5bd46e7ea4babb7ce478a8e7229ce7bd4b85e0f51/detection
🔍 逆向工程(Reverse Engineering)
现在进入逆向工程部分,我使用 IDA Pro 打开并加载了该驱动。但 IDA Pro 无法反编译驱动中的主函数(DriverEntry)。
这是一个已知问题:当驱动使用非标准栈帧,或者其入口点被混淆时,IDA 往往无法正确反编译。 因此我没有继续纠结 DriverEntry,而是直接跳到 dispatch handler(调度处理函数),因为真正有价值的逻辑在那里。
❌ DriverEntry 反编译失败
⚙️ DeviceIoControlHandler
DeviceIoControlHandler 函数虽然被反编译出来了,但代码看起来非常糟糕:
- 使用 CurrentStackLocation 字段的原始偏移
- 子函数没有命名
- 变量名毫无意义
修复前
修复后(类型和命名修正后)
我们可以看到有两个 IOCTL:
- 第一个没有深入分析
- 第二个(0x22E010)会进入一个用于终止进程的函数,我将其命名为 procKiller
🔪 procKiller 函数
打开 procKiller 的反编译代码后,依然非常混乱,需要像之前一样进行修复。
修复前
修复后
📌 procKiller 函数流程
- IOCTL 输入缓冲区被当作一个以 null 结尾的 ASCII 字符串,表示十进制 PID
- 驱动调用
atoi()将其转换为整数 - 将该整数传递给
TerminateProcess - 如果成功,则向输出缓冲区写入
"ok"
👉 这就是整个接口逻辑,非常简单粗暴
⚙️ TerminateProcess 内部逻辑
该函数执行流程如下:
- 使用
ZwOpenProcess根据 PID 打开目标进程并获取句柄 - 使用
ZwTerminateProcess通过该句柄终止进程
❗ 为什么可以杀死 CrowdStrike
这也解释了为什么 CrowdStrike(以及其他以 PPL 方式运行的 EDR)可以被终止:
- 在用户态: 调用 OpenProcess 访问 PPL 进程会返回 Access Denied
- 在内核态:
ZwOpenProcess不受该限制
👉 所以内核驱动可以直接干掉受保护进程
🔗 符号链接(关键缺失点)
虽然已经找到了终止进程的 IOCTL,但还缺少一个关键组件:
👉 驱动的符号链接(symbolic link)
没有它,就无法从用户态发送 IOCTL 请求。
🔍 查找符号链接(动态分析)
我采用了动态方法:
- 加载驱动
- 使用 WinObj 观察是否出现新的符号链接
最终成功找到了该驱动的符号链接:
📌 关键参数总结
驱动符号链接:
\\.\{F8284233–48F4–4680-ADDD-F8284233}
终止进程 IOCTL:
0x22E010
💻 创建 PoC(概念验证)
首先将符号链接和 IOCTL 定义为变量:
📌 主函数流程
- 使用
CreateFileW打开设备:
\\.\{F8284233–48F4–4680-ADDD-F8284233}
- 将 PID 转换为十进制 ASCII 字符串
- 使用
DeviceIoControl发送 IOCTL(0x22E010) - ✅ 进程被终止
main 函数(部分1)
main 函数(部分2)
🧪 测试 PoC
📥 加载驱动
首先使用 OSRLOADER 加载驱动。
也可以使用 sc.exe:
sc.exe create PoisonX binPath="C:\Path\to\Driver.sys"type=kernel
sc.exe start PoisonX
▶️ 运行前
💀 运行后(进程被终止)
📎 项目地址
PoC 和驱动已发布在 GitHub: https://github.com/j3h4ck/PoisonKiller/
- 公众号:安全狗的自我修养
- vx:2207344074
- http://gitee.com/haidragon
- http://github.com/haidragon
- bilibili:haidragonx
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全狗的自我修养 haidragon haidragon《对用于攻击 CrowdStrike EDR 的 0day 漏洞进行逆向工程》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论