突破用户模式下的Windows内核通知例程
1. 漏洞验证与利用程序开发
为了验证相关假设,开发了概念验证的利用程序。通过在PcaSvc进程中挂钩OpenProcess函数,将新进程的PID通过共享内存传递给另一个进程,并使用信号量恢复其执行,使其能够调用OpenProcess并获得完全特权的句柄。这一利用程序证实了PcaSvc能够超越反作弊驱动程序使用的内核进程通知例程。
分析PcaSvc的内部机制后发现,它使用作业对象来接收通知。基于此,创建了独立的利用程序hFromJob来复制PcaSvc的行为。此外,还开发了第二个利用程序hThemAll,它限制更少,进一步证实了该漏洞源于进程初始化期间的不安全时间段。
2. 漏洞时间周期测量
测量漏洞时间周期并非易事,因为它取决于硬件特性(如CPU频率、核心数、线程数)以及当前系统状态等难以完全控制的参数。所有实验都在空闲系统的2.40 GHz单核虚拟机中进行。
测量漏洞时间周期的方法是统计在保护机制建立之前能够获取的完全特权句柄数量,并将获得的第一个非完全特权句柄作为利用时间窗口结束的标志。具体使用了以下三种测量方法:
- RDTSC(读取时间戳计数器)CPU指令 :获取CPU周期数。
- QueryPerformanceCounter :微软提供的高分辨率时间戳,可用于时间间隔测量。
- GetTickCount64 :使用CPU时钟给出以毫秒为单位的时间间隔。
2.1 hFromJob测量结果
修改hF