CVE-2024-38054 Windows ksthunk.sys驱动提权漏洞分析

0x00 前言 最近,windows的Kernel Streaming框架出现了许多漏洞,本文通过分析CVE-2024-38054来了解一下Kernel Streaming这个攻击面。 CVE-2024-38054由 Angelboy提交给微软,在今年7月份修补的一个堆溢出漏洞。该漏洞在ksthunk.sys。驱动的作用是将WOW64(Windows 32-bit on Windows 64-bit)程序对使用Kernel Streaming框架的设备发起irp请求转化为64位的irp请求。以便后续处理无需区分wow64程序和正常64位程序。 目前由Fr0st1706编写的CVE-2024-38054的poc已经在GitHub公开。 0x01 Kernel Streaming框架简介 Kernel Streaming框架主要为windows中的音频、视频等设备提供支持。Kernel Streaming框架提供三种多媒体类驱动模型: port类, stream类和 AVStream类。 port 类是指用于 PCI 和基于 DMA 的音频设备。 stream类是指视频类设备。 AVStream 是 Microsoft 提供的多媒体类驱动程序,支持纯视频流和集成音频/视频流。 kernel steam架构如下所示: 由于音视频类的驱动大多是pnp类型的驱动,在windows中的设备不是类似\Devcie\NamedPipe的形式。而是类似下面形式: \\?\root#system#0000#{cf1dda2c-9743-11d0-a3ee-00a0c9223196}\{cfd669f1-9bc2-11d0-8299-0000f822fe8a}&{cf1dda2c-9743-11d0-a3ee-00a0c9223196} 如果想枚举pnp设备的路径的话,比较方便的方式是使用windows自带的工具: pnputil /enum-interfaces 也可以使用WDK提供的工具KsStudio来查看使用Kernel Streaming框架的驱动,我目前在win10下面测试正常,win11 ksmon.sys加载不上去。以wdk 10.0.26100.0为例,该程序的位置在:C:\Program Files (x86)\Windows Kits\10\Tools\10.0.26100.0\x64 中。该工具显示信息比较详细,对于某一项还是会有缺失。 另外一个缺点是筛选的种类有限,例如mskssrv.sys的类别是KSSTRING_Server 类别是{3C0D501A-140B-11D1-B40F-00A0C9223196}就没有在列表中。 在Kernel Streaming框架中有两个比较重要的内核对象种类:KS Filters 和 KS Pins ks filters是由微型端口驱动提供的filter factory创建的,用户态程序可以发起irp请求基于filter实例创建ks pin,然后使用ks pin实现向filter提交nodes 或者读取经过filter的数据。 0x02 pnp设备注册逻辑 以mskssrv.sys为例,可以在C:\Windows\INF\ks.inf中DeviceRegistration节中找到注册逻辑 可以看到在DeviceRegistration节中对HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 写入 rundll32.exe streamci,StreamingDeviceSetup {96E080C7-143C-11D1-B40F-00A0C9223196},{3C0D501A-140B-11D1-B40F-00A0C9223196},{3C0D501A-140B-11D1-B40F-00A0C9223196} 这个表示只会执行一次,执行streamci....

2025年01月08日 · 3 分钟 · pwnht