如何以一种意外的办法发现并找到 WinIO 内核驱动栈溢出漏洞
在外围设备制造商 OEM 的产品中也发现好几个安全弱点,这影响了这些OEM厂商(Razer、EVGA、MSI、AMI)的许多用户。这些漏洞源于一个众所周知的易受攻击的驱动程序,通常被称为WinIO/WinRing0。 本文会重点介绍一个有趣的TOCTOU漏洞案例(CVE-2022-25637),以及其他一些漏洞。 众所周知,MSI开发了一个名为MSI Dragon Center的便捷工具,其目的是检索有关计算机统计信息(即GPU/CPU使用情况)并控制硬件相关设置。 WinIO是由www.internals.com开发的著名内核驱动程序(该网站已不再在线,但可以通过archive.org访问)。WinIO驱动程序库允许32位和64位Windows用户模式进程直接访问I/O端口、MSR寄存器和物理内存,它已被许多供应商广泛使用。由于它具有强大的功能,因此责任重大,所以说驱动程序本质上应该只允许安全性特权授予的用户可以使用这些安全性功能。 然而,在WinIo中,情况有所不同,任何用户都可以与之交互,包括沙盒应用程序。WinIo可以简单地在设备对象上设置一个安全描述符,以避免低权限用户与其交互,如下面的代码片段所示。 此memmove缺少任何参数检查。更准确地说,它属于控制长度参数,该参数源自SystemBuffer。因此,通过指定大于IOPM本地变量长度的长度,我们可以很容易地破坏堆栈。因此,我们可以重写本地堆栈数据,这是一个经典的缓冲区溢出场景,它可以导致重写调用方的返回指针,再加上使用ROP链,最终导致权限升级。 然而,存在另一个漏洞,即通过物理内存映射的权限升级,这允许我们拥有一个强大的R/W原语。因此,如果你想要使用rop链,你必须首先解决这个问题。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |