众所周知,SysInternals Process Explorer 驱动(PSEXP152.sys)的旧版本(17.x 之前)存在漏洞,可被滥用来打开对 PPL 进程的完全访问进程句柄(IOCTL:0x8335003c),而较新版本(17.x 及以上)仍然存在漏洞,并且能够通过不同的驱动函数(IOCTL:0x83350014)实现相同效果。 此 IOCTL 函数可复制任意句柄,并且在驱动版本 17.00 中已打补丁以过滤系统进程和任何受保护进程(PP/PPL)。但该函数存在一个重大疏漏,因为仍然可以从你自己的非 PPL 进程复制任意进程和线程句柄。只需以较低权限(如 PROCESS_QUERY_LIMITED_INFORMATION)打开一个 PPL 进程,然后通过 Process Explorer 驱动从你自己的进程复制此句柄,就足以绕过过滤器并获得对 PPL 进程的完全访问句柄。 我多年前使用此方法绕过 PPL 进程保护,但 Microsoft 在驱动版本 17.11 中修补了此绕过,现在会检查目标句柄是否为 PPL 进程或线程句柄。尽管如此,从 17.00 到 17.09 的驱动版本(17.10 不存在)并未包含在 Microsoft 的易受攻击驱动程序阻止列表中,我怀疑一些 EDR 供应商(目前)也不会标记这些版本。
这只是用于终止 PPL 进程的 PoC 实现。同样强大的句柄复制 IOCTL 也可用于复制其他句柄类型(如线程),并向其他 PPL 进程注入 shellcode。
用法:
1. 下载较旧的 SysInternals Process Explorer(17.00 至 17.10)
2. 以管理员身份运行 procexp64.exe 以加载易受攻击的驱动
3. 在 Process Explorer 中查找例如 MsMpEng.exe 的 PID(例如:3660)
4. 以管理员身份运行 ps_ppl_bypass.exe PID("ps_ppl_bypass.exe 3660")以终止目标进程
仍然可以通过从 SysInternals Handles 工具中提取,从官方 SysInternals 网站获取旧版驱动:https://learn.microsoft.com/en-us/sysinternals/downloads/handle