CVE-2019-1132:Windows 0 day漏洞在野发现

本地权限提升漏洞CVE-2019-1132。利用过程的核心是win32k.sys模块中的NULL指针解引用(pointer dereference)。在发现并分析后,ESET向微软安全响应中心提交了报告。该漏洞现已被微软修复并发布了相应补丁。

该漏洞影响以下Windows版本如下:

· Windows 7 32位系统Service Pack 1

· Windows 7(基于x64的系统)Service Pack 1

· Windows Server 2008 32位系统Service Pack 2

· Windows Server 2008(基于Itanium的系统)Service Pack 2

· Windows Server 2008(基于x64的系统)Service Pack 2

· Windows Server 2008 R2(基于Itanium的系统)Service Pack 1

· Windows Server 2008 R2(基于x64的系统)Service Pack 1

利用过程

与近年来披露的许多其他win32k.sys漏洞一样,攻击者利用的也是弹出式菜单对象。利用过程首先创建两个窗口,分别用于第一阶段和第二阶段,在第一个窗口中创建弹出式菜单对象,并通过CreatePopupMenu和AppendMenu函数追加菜单项,此外还需设置WH_CALLWNDPROC和EVENT_SYSTEM_MENUPOPUPSTART钩子。

接着通过TrackPopupMenu函数来显示菜单。此时,连接到EVENT_SYSTEM_MENUPOPUPSTART的代码将被执行——通过向菜单发送MN_SELECTITEM,MN_SELECTFIRSTVALIDITEM和MN_OPENHIERARCHY消息序列来打开菜单中的第一个可用项。

下一步对于触发此漏洞非常关键。当初始菜单已经创建、子菜单正准备创建时,攻击者必须及时捕获这一时刻,为此需要在WH_CALLWNDPROC钩子中处理WM_NCCREATE消息。当利用代码检测到系统处于这种状态时,它会向第一个菜单发送MN_CANCELMENUS (0x1E6)消息来取消该菜单,但是子菜单仍会被创建。PHP大马

如果我们在内核模式下检查这个子菜单对象,将看到tagPOPUPMENU – >ppopupmenuRoot = 0,这种状态能让攻击者将该内核结构中的元素用作空指针解引用。接着利用代码会在地址0x0处分配一个新页面,内核将把此地址当作tagPOPUPMENU对象(参见图1)。

CVE-2019-1132:Windows 0 day漏洞在野发现

图1. tagPOPUPMENU的内核结构

再之后使用第二个窗口。此阶段的主要目标是翻转第二个窗口的tagWND结构中的bServerSideWindowProc位,使其在内核模式下执行WndProc过程。

为了执行上述操作,攻击者调用了user32.dll库中的非导出函数HMValidateHandle来获取第二个窗口中tagWND结构的内核内存地址,然后在NULL页面处制作一个假的tagPOPUPMENU对象,并将MN_BUTTONDOWN消息发送到子菜单。

之后内核最终将执行win32k!xxxMNOpenHierarchy函数。

CVE-2019-1132:Windows 0 day漏洞在野发现

图2. win32k!xxxMNOpenHierarchy函数的反汇编代码

此函数再将NULL页面上设计的对象传递给win32k!HMAssignmentLock。 bServerSideWindowProc位是在win32k!HMDestroyUnlockedObject函数内部设置的,win32k!HMDestroyUnlockedObject函数则位于win32k!HMAssignmentLock内部的几个更深层的调用中。

CVE-2019-1132:Windows 0 day漏洞在野发现

图3. win32k!HMDestroyUnlockedObject函数的反汇编代码

到此步算是万事俱备了。之后攻击者可以将特定消息发送到第二个窗口,以便在内核模式下执行WndProc。

利用代码的最后一步是将系统令牌替换当前进程的令牌。

而微软最新发布的补丁中,增加了win32k!xxxMNOpenHierarchy函数中对NULL指针的检查步骤。奇热影视

CVE-2019-1132:Windows 0 day漏洞在野发现

图4.两个win32k.sys版本之间的代码差异,原始(左)和修补后(右)

结论

该漏洞仅适用于较老版本的Windows,因为微软从Windows 8开始不允许用户进程映射到NULL页面,还将此缓解措施反向移植到64位的Windows 7。

仍然使用32位Windows 7 Service Pack 1的人应考虑更新到最新版本,因为它的扩展支持将于2020年1月14日结束。这意味着Windows 7用户将无法获得关键的安全更新,类似这样的漏洞以后就很难修补了。

IoC

SHA-1 hash :CBC93A9DD769DEE98FFE1F43A4F5CADAF568E321

ESET检测名:Win32/Exploit.CVE-2019-1132.A

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值