atang100 发表于 2026-10-3 15:41:02

Windows内核中进程创建通知回调PsSetCreateProcessNotifyRoutineEx的防御避坑

在开发安全驱动或反作弊模块时,PsSetCreateProcessNotifyRoutineEx 是监控子进程生成的标准手段。但在实际部署中容易遇到以下细节问题:

1. 驱动签名要求:调用 Ex 版回调必须在链接时指定 /INTEGRITYCHECK,并且二进制文件需要有经过验证的WHQL或交叉签名,否则注册时会直接返回 STATUS_ACCESS_DENIED。
2. 回调中的死锁:回调发生在进程创建的关键阶段,此时持有大量系统锁。千万不要在回调函数内阻塞等待同一个进程里的线程,也不要尝试在回调内同步执行高耗时的网络/磁盘 I/O。
3. 创建拦截策略:如果需要阻断目标进程创建,通过设置 PPS_CREATE_NOTIFY_INFO->CreationStatus = STATUS_ACCESS_DENIED 即可干净地终止,而不需要粗暴地在内部调用 ZwTerminateProcess。
4. 深度过滤:CommandLine 字段为 PUNICODE_STRING,但在某些壳程序注入时参数可能延迟初始化或被动态篡改,因此只信赖 ImageFileName 比单纯依赖命令行参数更加可靠。

atang100 发表于 2026-10-4 07:47:50

补充一点实战细节:当监控到进程退出通知时(PPS_CREATE_NOTIFY_INFO 为 NULL),进程内的大多数资源已经被清理,此时不要再去访问该进程的用户态虚拟内存,只读内核层缓存好的 PID/EPROCESS 即可。

untaxed 发表于 2026-10-10 10:55:05

不管你信不信,反正我是信了。

liuming 发表于 2026-10-16 19:26:58

不管你信不信,反正我是信了。
页: [1]
查看完整版本: Windows内核中进程创建通知回调PsSetCreateProcessNotifyRoutineEx的防御避坑