【样本分析】CVE-2017-11826再现在野新样本

https://p2.ssl.qhimg.com/t0173f5d52190c69f53.jpg 


前言

9月下旬,360核心安全事业部高级威胁应对团队捕获一个在野Office 0day样本,漏洞被公布后,编号为CVE-2017-11826。随后,有部分网友对该漏洞的某样本进行了深入分析,引起了广泛讨论。近日,高级威胁应对团队又捕获了另一个该漏洞的在野样本,该样本与之前的样本相比,增加了静态混淆,并调整了漏洞触发后的劫持地址,此外,较上一样本相比,该样本明显增加了堆喷射的范围。这一系列做法的目的是让其能够躲避静态检测并增加漏洞触发后利用的成功率。

接下来我们对此次样本进行简单分析。


样本分析

此次样本在文件构成上和之前的样本几乎没有区别,都是类似下面的组织结构:

https://p1.ssl.qhimg.com/t01a0821573a016bd68.png

图1:样本文档组织结构

不过值得注意的是,此次的样本增加了静态混淆,如下:

https://p4.ssl.qhimg.com/t01ad63a5a0a50823ba.png

图2:样本中的混淆字符

上图中红色部分为混淆字符,这种混淆方式可以绕过大多数静态检测,此时直接用rtfobj工具并不能直接提取里面的ole对象,如下图:

https://p1.ssl.qhimg.com/t019763dbe63446d9cd.png

图3:rtfobj提取原始样本中的ole对象失败 

手动去混淆后,删除无关控制字,并且删除文件末尾的乱码字符后,可得到精简后的样本:

https://p4.ssl.qhimg.com/t01a178a4c758e015c2.png

图4:去混淆并且精简后的样本

下图中带红框部分为之前被混淆的区域:

https://p2.ssl.qhimg.com/t01dfb6275dd211fbba.png

图5:去混淆前后对比

      这里对RTF文档内嵌OLE的头部数据稍作解释,了解这些之后,手动解混淆这个样本就没有什么困难了:

https://p1.ssl.qhimg.com/t01452e4c5e465ac215.png

图6:rtf文档中内嵌OLE对象格式 

      解混淆后,再次用rtfobj工具抽取里面的ole,此时的抽取结果如下:

https://p3.ssl.qhimg.com/t01f64f90fd9e85e121.png

图7:rtfobj对精简后样本的提取结果 

      到这里就不用多说了。经过若干操作,抽取出漏洞文档中的document.xml文件,与之前的对比,发现了一些有意思的地方:

https://p4.ssl.qhimg.com/t015976d784ba14bb6a.png

图8:本次样本与之前样本在document.xml上的差异

      较上次相比,本次在name属性提供的数据里面改了一个字节(一个比特位),这样有什么效果呢?推导如下:

https://p2.ssl.qhimg.com/t01792621c9ce80bbbb.png

图9:推导出的漏洞触发后eax寄存器值的变化情况

      看来改变这一个比特位后能把漏洞利用后的劫持地址提高0x10000,先前已经有分析文章说过,之前样本的利用并不是很稳定,看来这次利用编写人员果然将劫持地址提高了,目的当然是为了提高利用的成功率。

      接下来再来看一下本次样本中的堆喷射文档,这次提取出的1号对象并不能通过直接命名为.zip的方式去解压,会提示解压失败。我们将堆喷射文档用OleFileView打开来一探究竟:

https://p2.ssl.qhimg.com/t019e80e24f1d320245.png

图10:堆喷射文档在OleFileView中的视图

      原来用于堆喷射的docx文档是作为一个package流存储在1号ole对象中的。点击Package,将package对象保存成一个文档。具体操作步骤为:点击file->export:

https://p5.ssl.qhimg.com/t018233ca21d79facf7.png

图11:package流导出步骤

      把提取出的文件后缀名改为.zip,现在可以用压缩软件打开了,解压后观察里面的文件分布,我们看到了比之前样本多得多的activeX.xml文件:

https://p1.ssl.qhimg.com/t019f5b361d926da54a.png

图12:观察到的activeX.bin及其引用文件

      这次的堆喷射文档布局是这样的:

https://p3.ssl.qhimg.com/t01e1d7c33cb8992b1d.png

图13:堆喷射文档结构 

      本次用于堆喷射的axtiveX.bin如下(可以发现该文件在10月17号就已生成):

https://p3.ssl.qhimg.com/t011e708be500cd9a0a.png

图14:本次用来堆喷射的activeX1.bin文件

稍作统计后发现,本次样本用一个526KB的activex进行了500次堆喷射;而之前的样本是用一个2050KB的activex进行了40次堆喷射。本次样本的堆喷射覆盖面积是之前的3倍多:

https://p4.ssl.qhimg.com/t0102567920bd0f17ce.png

图15:本次样本与之前样本在堆喷射范围上的对比

      这样有什么好处呢?当然是为了漏洞触发成功后利用的稳定,之前的样本已经被吐槽利用稳定性差了,这次把劫持地址稍做调高并且把堆喷地址扩大三倍后,稳定性好了很多,以下该样本在我们的平台里跑出的结果:

https://p3.ssl.qhimg.com/t0124d6c60d8e72b5ad.png

图16:漏洞利用成功后的进程树 

      现在,我们构造crash样本故意使其崩溃,并记录主要寄存器及指令地址如下,可以看到崩溃时eax的值为0x88988ec,验证了前面静态分析的推导:

https://p5.ssl.qhimg.com/t0184cc22939e45a3aa.png

图17:本次样本崩溃时的寄存器信息 

      自9月下旬开始,核心安全事业部高级威胁自动化平台已能对该漏洞样本进行监控捕获。我们预计后面会有更多该漏洞的利用样本,同时也和大家一起等待它们的出现。在这里我们也建议用户下载360安全卫士,尽快更新针对该漏洞的补丁,或者通过以下链接下载微软的官方补丁并安装:

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11826

 

时间线:

2017-09-28    360安全团队捕获该漏洞的在野攻击

2017-10-10    微软官方公布针对该漏洞的补丁

2017-10-31    360安全团队再次捕获该漏洞的在野攻击

2017-11-02    360CERT团队完成了漏洞初步分析报告

2017-11-03    360安全团队对再次捕获的漏洞样本发布初步分析

 

参考链接:

《CVE-2017-11826漏洞分析、利用及动态检测》http://bobao.360.cn/learning/detail/4636.html

《CVE–2017–11826 样本分析报告(包含补丁分析)》http://bobao.360.cn/learning/detail/4649.html

《最新Office 0day漏洞(CVE-2017-11826)在野攻击通告》http://blogs.360.cn/blog/office_0day_cve-2017-11826_ch/

《CVE-2017-11826 | Microsoft Office Memory Corruption Vulnerability》https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11826

《Word 2007: Rich Text Format (RTF) Specification, version 1.9.1》https://www.microsoft.com/en-us/download/details.aspx?id=10725

(完)