返回

揭秘 Windows 系统 win32k 内核提权漏洞成因及修复详解

闲谈

微软在 2018 年 5 月安全公告中披露并修复了 4 个存在于 win32k 内核中的提权漏洞。这些漏洞均可被攻击者利用,从而获取系统最高权限,对服务器或个人电脑系统造成严重破坏。

在本文中,我们将通过对比补丁程序,发现并分析其中一个由空指针解引用导致的提权漏洞,了解其成因以及微软是如何修复它的。

漏洞成因分析

该漏洞存在于 win32k 内核的 Gdi32.dll 模块中。在分析补丁程序之前,我们首先需要理解这个模块中的相关代码。

Gdi32.dll 模块是 Windows 图形设备接口 (GDI) 的核心模块,它负责处理与图形设备相关的各种操作,包括绘图、文本渲染和图像处理等。其中,有一个函数名为 NtGdiBitBlt,它负责将一个位图从一个设备复制到另一个设备。

在 NtGdiBitBlt 函数中,有一个名为 pDest 的参数,它指向目标设备的设备上下文 (DC)。当 pDest 为空时,NtGdiBitBlt 函数会调用一个名为 GreDibBlt 的函数来完成位图的复制操作。

在 GreDibBlt 函数中,有一个名为 pBitBlt 的指针,它指向一个指向位图数据的指针数组。如果 pBitBlt 为空,GreDibBlt 函数将调用一个名为 GreEngBitBlt 的函数来完成位图的复制操作。

在 GreEngBitBlt 函数中,有一个名为 pBits 的指针,它指向位图数据。如果 pBits 为空,GreEngBitBlt 函数将调用一个名为 EngBitBlt 函数来完成位图的复制操作。

在 EngBitBlt 函数中,有一个名为 pBits 的指针,它指向位图数据。如果 pBits 为空,EngBitBlt 函数将调用一个名为 EngBitBlt 函数来完成位图的复制操作。

补丁分析

在微软发布的 5 月安全公告中,修复了这个漏洞的补丁程序位于 Gdi32.dll 模块中。补丁程序对 GreEngBitBlt 函数进行了一些修改,具体如下:

  • 在 GreEngBitBlt 函数的开头,增加了对 pBits 指针的检查。如果 pBits 为空,则直接返回,不执行后面的代码。
  • 在 GreEngBitBlt 函数中,将 pBits 指针的值赋给一个局部变量 pBitsLocal,并使用 pBitsLocal 来访问位图数据。

这些修改有效地防止了 GreEngBitBlt 函数在 pBits 为空时访问无效内存,从而修复了这个漏洞。

修复建议

对于这个漏洞,微软建议用户安装最新的安全补丁程序。用户可以访问微软官网,下载并安装最新的补丁程序。

总结

通过对补丁程序的对比分析,我们发现微软通过在 GreEngBitBlt 函数中增加对 pBits 指针的检查,从而修复了这个漏洞。这个漏洞可被攻击者利用,从而获取系统最高权限,危害不容小觑。用户应及时安装最新的安全补丁程序,以保护系统免受攻击。