首页
社区
课程
招聘
[翻译]Bitmap轶事:Windows 10纪念版后的GDI对象泄露
发表于: 2018-3-24 17:06 9276

[翻译]Bitmap轶事:Windows 10纪念版后的GDI对象泄露

2018-3-24 17:06
9276

原文链接:https://labs.mwrinfosecurity.com/blog/a-tale-of-bitmaps/

开始之前,先要吹一波Nicolas Economou, Diego Juarez和KeenLab。是你们全力推动了Windows内核exp技术的发展,又把这些晦涩的知识点慷慨的分享在了众所周知的社区。在Windows 10纪念版(Build 1607)的补丁中,微软打上了一个非常重要的信息泄露的补丁,它此前常用于揭示内核空间中的Bitmap对象的地址。本文讨论了一种应用于纪念版本后的Bitmap对象泄露方法。该方法首次被Nicolas Economou和Diego Juarez在2016年的Ekoparty演讲中提出,标题为 "Abusing GDI for ring0 exploit primitives: Reloaded"。

下面的资源提供了bitmap在内核exp上下文中使用的背景信息。

自2015年以来,Bitmap广泛的被滥用于内核内存污染exp。内核bitmap surface对象头包含了一个成员(pvScan0),它指向了bitmap的首个扫描行。从exp的视角来看,该成员提供了一个强大的ring0本源(primitive),这是因为有着一大堆GDI API调用会在这一指针上进行直接操作,尤其是GetBitmapBitsSetBitmapBits。如果内存污染使得攻击者可以修改该指针,这些API调用本质上就提供了一个内核空间的任意地址读写。这一方法非常通用且可以在大多数的包含多种形式任意写的内核漏洞中使用。

本技术一个完整的exp超过了本文所讲的范围但是我们会叙述它的本质。首先,攻击者创建了两个Bitmap对象,一个作为Manager,另一个作为Worker。借助内核漏洞下一步就可以修改Manager bitmap对象的pvScan0指针使其指向Worker的pvScan0。一旦完成这一步,SetBitmapBits可以被Manager调用来修改Worker的pointer,此后在Worker bitmap上调用SetBitmapsBits/GetBitmapBits就可以实现任意地址读写。该实现逻辑的示例函数如下。

当Bitmap对象由进程创建后,进程PEB的GdiSharedHandleTable就增加了一个条目。如下图所示。

_GDI_CELL中的pKernelAddress泄露出了Bitmap对象在内核空间的地址。既然进程可以追溯其本身的PEB,那么泄露出bitmap内核对象地址也就是按图索骥。下面的PowerShell函数可以在纪念版补丁前用来创建一个Manager和Worker bitmap。

函数的输出如下所示。注意,为了方便,句柄和地址都使用了十进制数来表示。

Process hacker可以用来核实这些结果。

##纪念版之后的泄露

纪念版的补丁用哑数据替代了_GDI_CELL中的pKernelAddress,以此阻止内核对象泄露。该ring0手法的终结让一大堆exp开发者黯然伤神,然而事实上这就结束了吗?谁说泄露Bitmap对象只能靠PEB的?

当bitmap对象创建后,它们分配在内核的分页会话池中。

下面的用户对象列表都放在该分页池中,MSDN官方的说法。

在当前最新的Windows 10版本中,可以泄露出这些对象的内核地址。下图阐释了进程使用accelerator table的示例。

_HANDLEENTRY结构体的phead成员揭示了accelerator table的内核对象地址。如果我们创建一个accelerator table,泄露出它的地址,释放它并分配一个相同大小的bitmap对象的话,就可以强制内核来重用这段被释放的内存。想要保证该UAF风格的信息泄露百分百可靠,我们需要做的就是让对象足够大,比如4KB或更大一些,来阻止任意重用。

这一操作完成后,我们就拿到了bitmap的地址,他就是accelerator table此前的地址,然后就可以重用以前的ring0手法了!下面给出PowerShell中的示例代码。

该函数的输出如下。

为了核实这一地址(accelerator table此前用到所用)确实包含了我们的bitmap,可以在KD中执行!pool ADDRESS

有效的exp缓解措施需要一定的不同策略,其中包含了漏洞补丁、保护增强以及消除已知的exp技术。微软在后两类策略中持之以恒的做出了努力,它们富有成效且大大的增强了Windows内核的安全性。这些提升增加了内核exp开发的难度,且在某些情况下完全消除了这一类bug。然而,如本文所展示,新的技术会被挖掘出来,道高一尺魔高一丈!

关于Windows 10纪念版补丁中的新缓解措施的更多细节可以在这里找到here


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//