快速突破:用户模式下超越 Windows 内核通知例程
1. 引言
现代操作系统允许用户进程对同一用户启动的其他进程进行完全访问控制。在涉及敏感安全进程(如杀毒软件)的场景中,内核层面会实施保护方案,以应对恶意用户进程的越权行为。在 Windows 操作系统家族中,对于需要保护的用户模式进程,内核驱动会通过专用例程得到通知。当不同用户进程发起对原始用户模式进程的句柄请求时,内核驱动会建立回调机制,在将句柄传递给请求进程之前,执行选择性权限移除操作(例如,移除对进程内存的读取访问权限)。
然而,本文揭示了一个存在于 Windows 7 到最新 Windows 10 操作系统中的用户模式进程访问控制的根本漏洞。我们发现,用户模式进程可以在 kernel 驱动得到通知之前,也就是在回调机制建立之前,获得具有完全特权的访问句柄。这种漏洞可能被恶意利用,例如:
- 禁用赛门铁克端点保护等反恶意软件套件。
- 控制 VirtualBox 受保护的进程。
- 绕过 BattlEye 和 EasyAntiCheat 等主要的视频游戏反作弊保护解决方案。
2. 背景知识
操作系统的一个重要功能是确保进程能够并发、安全地执行,彼此之间不会相互干扰。但在某些情况下,进程之间需要进行交互,这时就需要向操作系统请求授权。在 Windows 操作系统中,通常使用 OpenProcess
函数来请求目标进程的句柄,获得的句柄代表了相应的授权。
句柄具有一组特权,可用于特定操作,例如创建子进程和新线程、复制句柄、查询信息、设置配额以及暂停、恢复和终止进程等。许多这些特权可能会被用于修改相邻进程,因此对某些进程