Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...

$
0
0

CVE-2016-7255:分析挖掘windows内核提权漏洞。Windows内核提权漏洞CVE-2016-7255已经受到了很多媒体的关注。在11月份的Patch Tuesday中,微软发布了针对此漏洞的修复程序,将其作为MS16-135公告的一部分。根据微软的说明,CVE-2016-7255主要用于执行有针对性的攻击,并且可以通过一些“野路子”来找到样本。 谷歌和微软已经证实俄罗斯黑客集团APT28使用了一个Flash漏洞(CVE-2016-7855)和这个内核提权漏洞执行了一次有针对性的攻击,谷歌也发布了一些针对此漏洞的讨论:

https://security.googleblog.com/2016/10/disclosing-vulnerabilities-to-protect.html

https://threatpost.com/microsoft-says-russian-apt-group-behind-zero-day-attacks/121722/

http://securityaffairs.co/wordpress/53242/hacking/cve-2016-7255-zero-day.html

McAfee Labs的漏洞研究团队花费了大量时间来分析此漏洞。我们将在这篇文章中,简要讨论我们的一些发现。

分析

我们首先从MS16-135的补丁开始着手分析,很快我们就注意到MS16-135在目标系统上更新了win32k.sys,于是我们下一步就开始比较(通过二进制差分手段)两个win32k.sys文件(安装补丁前后)。另外一提,我们的测试系统运行的是Windows 7,版本号为6.1.7601.23584。

看看二进制差分的结果,我们注意到以下功能被修改。


CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...

图1:在win32k.sys中被更改的函数——xxxNextWindow

经过这些初步调查后我们得出结论:CVE-2016-7255的补丁程序完全应用于修复win32k.sys中的xxxNextWindow函数。

以下截图显示了补丁中对xxxNextWindow(x, x)所做更改的更高级概括:


CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...

图2:对函数xxxNextWindow进行高级差分的结果

我们可以看到在被修复函数中增添了一些新的逻辑(用红色突出显示)。放大到第一个新插入的基本块,我们可以看到新引入的代码进行了对eax + 0x23的值的比较操作:


CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...

图3:xxxNextWindow中插入的第一个基本块

然后,我们在下一个新插入的基本块中看到了类似的逻辑。


CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...

图4:xxxNextWindow中插入的第二个基本块

谷歌已经声明了该漏洞“可以通过win32k.sys系统调用NtSetWindowLongPtr()为GWL_STYLE设置为WS_CHILD的窗口句柄上的索引GWLP_ID触发。“

事实上,NtSetWindowLongPtr()只起到了触发这个漏洞的作用,而根本原因在于xxxNextWindow。更具体地说,由NtSetWindowLongPtr()设置的不合适的参数可以触发xxxNextWindow中的“任意地址写入”场景。

现在让我们来看看未打补丁的xxxNextWindow(x, x, …)的反编译版本。


CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...

图5:未修复的xxxNextWindow的反编译版本

应用补丁后,xxxNextWindow(x, x, …)如下所示:


CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...

图6:已修复的xxxNextWindow的反编译版本

打补丁后的代码使用条件分支语句“(*(_BYTE *)(v8 + 0x23) & 0xC0) != 0x40”增强了参数验证。

在这个新语句中,变量v8(在eax中)是上一个GetNextQueueWindow调用的返回值。 (见下图)


CVE-2016-7255:分析挖掘Windows内核提权漏洞 Windows系统 内核提权漏洞 内核提权漏洞 ...
图7:变量v8来自对GetNextQueueWindow的调用:“v8 = _GetNextQueueWindow(v7, v31, 1);”

Viewing all articles
Browse latest Browse all 12749

Trending Articles