一个概念验证(PoC),演示对 360 安全卫士 WFP 驱动(360netmon_x64_wfp.sys) 接口的潜在滥用,旨在验证缺少调用者身份验证的 IOCTL 接口可能被第三方程序滥用的风险。
本项目仅用于安全研究和漏洞分析,禁止用于任何非法用途。
在对 360 安全卫士网络监控驱动 360netmon_x64_wfp.sys 进行逆向分析时,发现以下行为:
该驱动向用户态暴露了两个设备对象:
\\.\360TdiFilter\\.\360TdiSpeed任何拥有管理员权限的进程均可通过 DeviceIoControl 访问这些设备对象
IrpMjDeviceControl 处理函数未执行任何调用者身份或签名验证
某些 IOCTL 功能可直接用于:
本仓库提供了一个最小的 PoC,用以演示:
在安装了 360 安全卫士的系统上,一个进程如何利用合法的驱动接口阻止任意指定进程的网络访问。
在驱动 IrpMjDeviceControl 例程的入口处,仅验证了设备对象:
cmp rdi, g_pDeviceObject_TdiFilter
jz ...
完全没有执行调用者权限验证或来源认证。
因此,任何拥有管理员权限的进程都可以:
0x220804 配置进程网络限速或阻断0x220444 动态修改 WFP 过滤规则本 PoC 实现了以下操作:
\\.\360TdiFilter0x220804 将目标进程设置为“完全阻塞网络”模式结果:
在 Visual Studio 中打开项目并构建:
x64 Release
360WFP_Exploit.exe "C:\Windows\System32\notepad.exe"
执行后,目标进程将立即失去所有网络连接。
.
├── src/
│ ├── main.c // PoC 主逻辑
│ ├── driver_io.c // IOCTL 调用封装
│ └── utils.c // 辅助函数(如路径转换)
├── README.md
└── LICENSE
驱动期望的核心数据结构:
typedef struct _PACK {
WCHAR szNtPath[MAX_PATH + 40];
WCHAR szPath[MAX_PATH];
BOOL bCancelFlag;
LONGLONG qwBlockCnnt;
LONGLONG nLimitSend;
LONGLONG nLimitRecv;
DWORD dwZeroCheck;
} PACK, *PPACK;
当:
qwBlockCnnt = LLONG_MAX
时,驱动在 WFP Callout 中返回:
FWP_ACTION_BLOCK
从而导致目标进程的网络完全被阻断。