文章总结: 文档介绍了一款名为TopazTerminator的开源工具,利用存在漏洞的合法签名驱动wsftprm.sys,通过逆向计算IOCTL代码强制终止包括杀毒软件和EDR在内的受保护进程。该工具利用内核权限绕过PPL保护,隐蔽性强。文章详细分析了攻击原理,建议用户保持系统更新及启用驱动黑名单功能以加强防御。 综合评分: 88 文章分类: 安全工具,漏洞POC,逆向分析,红队,终端安全
TopazTerminator:一款利用漏洞驱动杀进程的黑客工具
原创
工具党 工具党
幻泉之洲
2026年3月5日 20:06 北京
本文介绍了一种名为TopazTerminator的工具,它利用一个尚未被微软官方屏蔽的、存在漏洞的驱动程序wsftprm.sys,可以强制终止包括杀毒软件和EDR在内的受保护系统进程。文章将详细解释其工作原理,并分析其潜在风险。
01 工具概述:一个利用漏洞驱动的进程杀手
前几天又看到一个驱动程序被披露出来,没法再继续当作秘密武器了。我说的就是 wsftprm.sys 这个驱动,我本来还想自己捂捂呢。
既然现在连公开的PoC(概念验证代码)都出来了,那我干脆也别藏了,索性把自己的实现版本开源出来。大家都清楚,这种驱动很快就会被微软加到有漏洞驱动黑名单里,到时候就用不了了。所以,趁现在还能用,这是我用C语言写的一个实现。
该工具名为TopazTerminator。它的核心是利用一个存在漏洞的、已经签名的内核驱动(Topaz Antifraud的wsftprm.sys),来强行结束Windows系统上受保护的进程。这些进程通常包括你电脑里的杀毒软件或者各种端点检测与响应解决方案。简单说,这是个能“干”掉安全软件的狠家伙。
02 核心漏洞:那个有趣的IOCTL处理方式
截止到2026年1月,wsftprm.sys文件依然是那些签了名、却又存在漏洞,并且还没有被微软官方拉黑的驱动程序之一。它的SHA-256哈希值是这个:FF5DBDCF6D7AE5D97B6F3EF412DF0B977BA4A844C45B30CA78C0EEB2653D69A8。如果你手里有这个版本的驱动,那么接下来要讲的功能就可能有效。
关于如何加载和分析一个驱动,网上的资料一抓一大把,我就不重复了。这个驱动真正有趣的地方,在于它处理IOCTL的方式。
IOCTL是用户层程序和内核驱动“对话”的一种方式,通常你会看到一个巨大的switch语句,根据不同的命令码执行不同的功能。但这个驱动不这么干。
它用了一连串的减法运算来处理IOCTL命令码,故意把真正的数值给藏了起来。下面是它的主分发函数里最关键的几行逻辑伪代码:
__int64 __fastcall DispatchDeviceControl(__int64 a1, __int64 a2, …) { // … v7 = IoControlCode; // 用户传进来的IOCTL代码
v8 = v7 – 0x222000; v9 = v8 – 4; v10 = v9 – 4; v11 = v10 – 16;
if ( v11 == 4 && InputBufferLength == 1036 ) { // 把1036字节的输入缓冲区拷贝出来 // 提取前4个字节作为进程PID // 调用 sub_14000264C(PID, buffer) → 这个函数最终会终止进程 } }
03 关键函数:层层递进的进程终止链
当上面的条件满足后,代码会去调用一个函数来处理用户传进来的PID。这个调用链最终会走到系统底层的进程终止函数。
简单分解一下:
- 用户程序通过DeviceIoControl发过来一个1036字节的缓冲区。
- 驱动程序取缓冲区的前4个字节,认为它是一个进程ID。
- 调用
sub_14000264C,这个函数内部又会去调用sub_140002848。
真正“动手”的是sub_140002848,它的逻辑非常直接:
__int64 __fastcall sub_140002848(unsigned int a1) // a1就是用户提供的PID { CLIENT_ID ClientId = { (HANDLE)a1, 0 }; OBJECT_ATTRIBUTES ObjAttr = { sizeof(ObjAttr), 0, 0, 0, 0, 0 }; HANDLE ProcessHandle;
ZwOpenProcess(&ProcessHandle, PROCESS_ALL_ACCESS, &ObjAttr, &ClientId); if (NT_SUCCESS(status) && ProcessHandle) { ZwTerminateProcess(ProcessHandle, 0); ZwClose(ProcessHandle); } // … }
看到了吗?它先用ZwOpenProcess,带着PROCESS_ALL_ACCESS(完全访问权限)去打开目标PID对应的进程。一旦打开成功,就直接用ZwTerminateProcess强行结束它。ZwTerminateProcess这个系统调用,就是Windows内核里专门用来终结进程的“生死簿”。
04 如何构造攻击:逆向计算正确的IOCTL代码
知道漏洞触发路径了,那怎么构造数据呢?我们得反推出那个能“通关”的IOCTL代码。
触发条件是v11 == 4 且输入缓冲区长度为1036。从v11往回倒推就行:
- v11 == 4
- 因为 v11 = v10 – 16,所以 v10 – 16 == 4 → v10 = 20 (十六进制 0x14)
- 因为 v10 = v9 – 4, 所以 v9 – 4 == 20 → v9 = 24 (0x18)
- 因为 v9 = v8 – 4, 所以 v8 – 4 == 24 → v8 = 28 (0x1C)
- 因为 v8 = v7 – 0x222000,所以 v7 – 0x222000 == 28 → v7 = 0x222000 + 0x1C = 0x22201C
最终我们算出来了:触发这个漏洞利用的IOCTL代码是 0x22201C。
所以,攻击流程就明确了:
- 以高权限加载或利用已加载的wsftprm.sys驱动。
- 准备一个1036字节的缓冲区,把你想干掉的进程的PID(进程ID)填在缓冲区最开头的4个字节里。
- 调用
DeviceIoControl函数,传入计算出的IOCTL码0x22201C和这个缓冲区。 - 驱动收到命令后,就会去打开并终结那个PID对应的进程。
这里的可怕之处在于,由于这是内核驱动直接调用高权限的API,它甚至可以终结那些启用了PPL(受保护进程)特性的进程。PPL本来是微软用来保护关键系统进程(比如某些安全组件)的一种机制,但在这个驱动漏洞面前,可能形同虚设。
05 优缺点与现状分析
优点(从攻击者角度看):
-
隐蔽性强
:利用的是合法的、签过名的第三方驱动,不像自己写的恶意驱动容易被检测。
-
权限高
:在内核层执行,可以绕过很多用户层的防护和权限检查。
-
效果直接
:能直接干掉包括部分EDR和安全软件在内的关键进程,为后续攻击铺平道路。
缺点与风险:
-
寿命有限
:这种公开的漏洞驱动,被微软加到“有漏洞驱动黑名单”里只是时间问题。一旦被拉黑,系统就会阻止它加载。文章作者也说了,这是趁还能用的时候发出来。
-
稳定性风险
:强行终止关键系统进程可能导致系统蓝屏或功能异常。
-
法律风险
:未经授权使用此类工具攻击他人系统是明确的违法行为。
根据作者的信息,这个利用方法最后一次测试是在Windows 25H2版本上有效。后续的Windows更新,尤其是专门的安全更新,很可能会封堵此漏洞。
结语:漏洞的双面性
TopazTerminator展示了一个典型的“有漏洞的合法驱动”如何被武器化。对于安全研究员来说,研究它是为了了解攻击手法,从而更好地防御——比如安全厂商可以据此更新自己的产品,增加对这类驱动加载行为的检测。
对于普通用户和安全运维人员,这件事提醒我们,仅仅依赖杀毒软件签名或驱动签名来判断安全性已经不够了。“自带干粮”的攻击越来越常见。保持系统更新,启用驱动黑名单等高级防护功能,采用多层次的安全防护策略,才是更稳妥的做法。
这个工具本身像一把刀,既可成为攻击者的利器,也能成为防御者剖析攻击链的样本。而刀柄握在谁手里,决定了它的用途。
获取方式:回复“TopazTerminator”获取
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:幻泉之洲 工具党 工具党《TopazTerminator:一款利用漏洞驱动杀进程的黑客工具》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论