千家信息网

怎么进行CVE-2019-1132详细分析

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,今天就跟大家聊聊有关怎么进行CVE-2019-1132详细分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。CVE-2019-1132详细分析
千家信息网最后更新 2024年11月17日怎么进行CVE-2019-1132详细分析

今天就跟大家聊聊有关怎么进行CVE-2019-1132详细分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

CVE-2019-1132详细分析

一 、背景

ESET研究人员发现了Buhtrap组织在针对东欧的APT攻击中使用的样本,样本使用了Windows的0 DAY漏洞。微软发布了针对此漏洞的补丁,这个漏洞是CVE-2019-1132。因为该漏洞被长期使用在APT攻击中,所以这次事件也引起了很大的影响。本文的主要目的是对CVE-2019-1132这个漏洞做一个详细的分析,利用的PoC来自于SHIVAM TRIVEDI。

安全人员发现该漏洞是一个提权漏洞,利用了win32k.sys中的空指针间接引用。SHIVAM TRIVEDI提供的PoC在Windows 7 32(Win7 32Bit Build 7601版本)位上可以成功利用。

漏洞描述:

漏洞编号:CVE-2019-1132

漏洞描述:当Win32k组件无法正确处理内存中的对象时,Windows中存在一个提权漏洞,即"Win32k提权漏洞"

受影响版本:

Windows 7 for 32-bit Systems Service Pack 1

Windows 7 for x64-based Systems Service Pack 1

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for Itanium-Based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 R2 for Itanium-Based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1

二、行为流程

三、详细分析

1. 利用的基础

为了完成这个利用,首先需要创建一个多级菜单和两个窗口(我们称它们为Main窗口和Hunt窗口)。


这三部分是完成整个利用的所有基础,利用的两个关键步骤在于tagPopupMenu和tagWND数据结构的修改(tagPopupMenu和tagWND分别是内核中表示菜单和窗体的数据结构。)。下面我们来看一下重要的代码。

首先,需要创建一个3级的菜单,第一个菜单我们称为Root菜单,其他两个菜单被设置为Root菜单的子菜单。

然后创建两个窗体,即Main窗体和Hunt窗体。


在窗体创建完成以后,需要给该进程设置窗体的消息Hook和事件Hook。

对于消息Hook来说,重要之处是在窗体创建的时候,向第一个Menu发送MN_CANCELMENUS消息,从而销毁第一个菜单。

对于事件Hook来说,向窗体发送特定的菜单消息,以保证能触发特定的内核函数。


2.利用的过程

接下来,我们看一下,漏洞的形成和触发。

在这里我们要先说一下内核中菜单的数据结构tagWnd,tagWnd数据结构中的ppopupmenuRoot项指向了它的子菜单的数据结构,当它被销毁的时候,这个指针被置为null,也就是0。

触动漏洞的过程开始于TrackPopupMenu的使用。

当上面基础都准备好后,在调用TrackPopupMenu函数在Main窗体上显示菜单时,菜单被创建,所以菜单窗体的消息HOOK函数就会被执行,当消息HOOK函数检测到WM_NCCREATE消息和其他条件都满足的时候,就向ROOT菜单发送一个WM_CANCELMENUS消息,以销毁ROOT菜单。这个时候ROOT菜单数据结构的ppopupmenuRoot项变成了0。而这个时候,其他的子菜单仍然会继续创建。

ppopupmenuRoot为0,意味着在ROOT菜单可以引用地址为0的子菜单。接下来,在地址为0的地方分配内存,在这里构造了一个虚假的菜单。

和这个虚假的菜单相关联的重要概念是tagWND,也就是内核窗体数据结构。我们看一下tagWND数据结构。其中有一个非常重要的标识bServerSideWindowProc,这个标识的值如果被置1,那么窗体的回调函数会在内核态中被执行。

该利用使用了Hunt窗体作为最终的利用目标。为了达到这个目的,首先要获取窗口数据结构地址。

我们可以看到名为xxHMValidateHandle的函数获取了PTHREDSKHEAD的数据结构,这个结构中包含了窗体数据结构的地址。这个函数的原型应该来自于内核函数win32k!ValidateMenu。

然后,Hunt窗体的数据结构的一个特殊地址被赋值给了这个精心构造的假菜单。

我们再次调用TrackPopupMenuEx函数通过ROOT菜单和虚假的菜单来撬动利用。这次,Hunt窗体的bServerSideWindowProc会被置为1。

最后向Hunt窗体发送消息0x1234,Hunt窗体的默认回调函数就会在内核空间中执行了。

在Hut窗体的默认回调函数中拷贝SYSMTEM进程的TOKEN给自身,就实现了进程的提权操作。

(上图是成功提权)


四、防护措施

1、不要轻易打开可疑文件,如电子邮件、可疑链接、可疑文档等等。

2、及时安装系统补丁,使用最新版本的软件。

3、安装杀毒软件,及时更新病毒库。

4、使用"铁穹高级持续性威胁预警系统"(简称"铁穹")发现潜在的攻击行为,及时响应和阻断,避免造成业务中断或经济损失。

看完上述内容,你们对怎么进行CVE-2019-1132详细分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0