Fortinet 的 fortimon3_74.sys 内核驱动(FortiClient 的“反漏洞利用”微过滤器)中存在一个漏洞,允许任何本地管理员通过向一个未认证的通信端口发送 8 字节消息,终止任意进程——包括受 PPL(Protected Process Light)保护的进程,如 Windows Defender (MsMpEng.exe) 和 lsass.exe。
没有缓冲区溢出。没有堆喷射。没有 ROP 链。只需 8 个字节。
| 字段 | 值 |
|---|---|
| 驱动 | fortimon3_74.sys(FortiClient 反漏洞利用微过滤器) |
| 端口 | \Fortimon3FilterAntiExploitPort |
| 影响 | PPL 绕过,任意进程终止 |
| 访问权限 | 本地管理员 |
| 认证 | 无 |
| BYOVD 风险 | 高——驱动由 Fortinet 签名 |
该驱动暴露了一个微过滤器通信端口,且未对调用方进行认证。它接受一个简单的 8 字节消息:
struct {
DWORD magic; // 0x6C6C696B(小端 ASCII 中的 "kill")
DWORD pid; // 目标进程 ID
};
收到此消息后,驱动会从内核模式调用带有 PROCESS_ALL_ACCESS 的 ZwOpenProcess(绕过 PPL 检查),然后调用 ZwTerminateProcess。对调用方或目标均未执行任何验证。
ZwOpenProcess 句柄创建在调用方的句柄表中(缺少 OBJ_KERNEL_HANDLE 标志),从而产生一个短暂的时间窗口,用户态攻击者可以在该窗口内复制一个指向受 PPL 保护的进程(如 lsass.exe)的 PROCESS_ALL_ACCESS 句柄——从而在不终止进程的情况下实现凭据窃取。
PROCESS_ALL_ACCESS 而非 PROCESS_TERMINATEOBJ_KERNEL_HANDLE 标志,将内核句柄暴露给用户态
观看完整演示 - 演示针对受保护进程的 PPL 绕过。
| 文件 | 描述 |
|---|---|
poc.c | 概念验证——通过易受攻击的驱动按名称终止任意进程 |
fortimon3_74.sys | 易受攻击的驱动二进制文件(Fortinet 签名) |
poc.jpg |
cl.exe poc.c /Fe:poc_kill.exe
poc_kill.exe MsMpEng.exe
要求:本地管理员权限,已加载 fortimon3_74.sys。
me1n
| 截图——lsass.exe 被终止,触发系统重启 |
forti.mp4 | 漏洞利用的视频演示 |