宏观视角下的office漏洞(2010-2018)

阅读量    96497 | 评论 5

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

银雁冰 360高级威胁应对团队·高级威胁自动化组

前言

本文是对我在Bluehat Shanghai 2019演讲内容的一个拓展性总结。在本文中,我将总结2010年到2018年出现的Office相关0day/1day漏洞。我将对每种类型的漏洞做一次梳理,并对每个漏洞的相关分析文章进行引用和归类。

希望这篇文章可以帮助到后续从事office漏洞研究的人。

 

概述

2010年到2018年,office相关的0day/1day攻击从未暂停过。以下一些CVE编号,是我在研究过程中具体观察到的,有过实际攻击样本的0day/1day漏洞(也许还有一些遗漏的,读者可以进行补充)。

我们先来看一下具体的CVE编号。

年份 编号
2010 CVE-2010-3333
2011 CVE-2011-0609/CVE-2011-0611
2012 CVE-2012-0158/CVE-2012-0779/CVE-2012-1535/CVE-2012-1856
2013 CVE-2013-0634/CVE-2013-3906
2014 CVE-2014-1761/CVE-2014-4114/CVE-2014-6352
2015 CVE-2015-0097/CVE-2015-1641/CVE-2015-1642/CVE-2015-2424/CVE-2015-2545/CVE-2015-5119/CVE-2015-5122/CVE-2015-7645
2016 CVE-2016-4117/CVE-2016-7193/CVE-2016-7855
2017 CVE-2017-0199/CVE-2017-0261/CVE-2017-0262/CVE-2017-8570/CVE-2017-8759/CVE-2017-11826/CVE-2017-11882/CVE-2017-11292
2018 CVE-2018-0798/CVE-2018-0802/CVE-2018-4878/CVE-2018-5002/CVE-2018-8174/CVE-2018-8373/CVE-2018-15982

我们先按组件类型对上述漏洞进行分类。需要说明的是,Flash本身也属于ActiveX控件的一种,下表中分类时我将其独立归为一类。

组件类型 编号
RTF控制字解析问题 CVE-2010-3333/CVE-2014-1761/CVE-2016-7193
Open XML标签解析问题 CVE-2015-1641/CVE-2017-11826
ActiveX控件解析问题 CVE-2012-0158/CVE-2012-1856/CVE-2015-1642/CVE-2015-2424/CVE-2017-11882/CVE-2018-0798/CVE-2018-0802
Office内嵌Flash漏洞 CVE-2011-0609/CVE-2011-0611/CVE-2012-0779/CVE-2012-1535/CVE-2013-0634/CVE-2015-5119/CVE-2015-5122/CVE-2015-7645/CVE-2016-4117/CVE-2016-7855/CVE-2017-11292/CVE-2018-4878/CVE-2018-5002/CVE-2018-15982
Office TIFF图片解析漏洞 CVE-2013-3906
Office EPS文件解析漏洞 CVE-2015-2545/CVE-2017-0261/CVE-2017-0262
借助Moniker加载的漏洞 CVE-2017-0199/CVE-2017-8570/CVE-2017-8759/CVE-2018-8174/CVE-2018-8373
其他Office逻辑漏洞 CVE-2014-4114/CVE-2014-6352/CVE-2015-0097

我们再依据漏洞类型对上述非Flash漏洞进行分类。(Flash漏洞的相关总结可以参考其他研究员的文章)

漏洞类型 编号
栈溢出(Stack Overflow) CVE-2010-3333/CVE-2012-0158/CVE-2017-11882/CVE-2018-0798/CVE-2018-0802
堆越界写入(Out-of-bound Write) CVE-2014-1761/CVE-2016-7193
类型混淆(Type Confusion) CVE-2015-1641/CVE-2017-11826/CVE-2017-0262
释放后重用(Use After Free) CVE-2012-1856/CVE-2015-1642/CVE-2015-2424/CVE-2015-2545/CVE-2017-0261/CVE-2018-8174/CVE-2018-8373
整数溢出(Integer Overflow) CVE-2013-3906
逻辑漏洞(Logical vulnerability) CVE-2014-4114/CVE-2014-6352/CVE-2015-0097/CVE-2017-0199/CVE-2017-8570/CVE-2017-8759

接下来我们按上面第二张表(Flash漏洞除外)来逐一审视这些漏洞。

 

RTF控制字解析问题

CVE-2010-3333

该漏洞是科恩实验室掌门人wushi发现的。这是一个栈溢出漏洞。

关于这个漏洞的分析文章看雪上有很多,以下列举几篇。

《漏洞战争》的第2章第4节对这个漏洞也有比较系统的介绍,感兴趣的读者可以自行阅读相关章节。

CVE-2014-1761

该漏洞是谷歌发现的一个0day。这是一个堆内存越界写入漏洞。

李海飞曾对该漏洞做过非常精彩的分析。

看雪论坛也有关于该漏洞的两篇高质量分析文章。

安全客上也有关于该漏洞的一篇高质量分析。

此外,韩国的安博士也发过一篇关于这个漏洞的报告。

调试这个漏洞时需要注意的地方是该漏洞的某些样本对触发环境比较苛刻,上述文章里面有提到如何构造相关实验环境。

CVE-2016-7193

该漏洞是Austrian Military Cyber Emergency Readiness Team(奥地利军事网络应急准备小组)报告给微软的一个0day

这也是一个堆内存越界写入漏洞。

百度安全实验室曾对该漏洞做过比较完整的分析。

我也曾关于该漏洞的利用编写分享过一篇分析。

 

Open XML标签解析问题

CVE-2015-1641

谷歌的0day总结表格中将其列举为2015年的0day之一。

这是一个类型混淆漏洞。

关于该漏洞,飞塔曾写过一篇分析文章。

阿里安全也关于该漏洞写过一篇精彩的分析。

安全客上也有该漏洞的一篇精彩分析。

知道创宇404实验室也写过一篇关于该漏洞的精彩分析。

我也写过涉及该漏洞原理的一篇分享。

在调试这类涉及到堆喷射的office样本时,需要特别注意调试器的介入往往会影响进程的堆布局(特别是一些堆选项的设置)。如果调试时样本行为无法正常触发,往往是直接用调试器启动样本导致的,这种时候可以试一下双击样本后再挂上调试器。

CVE-2017-11826

该漏洞是我所在团队报给微软的一个0day。也是第一个由中国安全厂商发现的Office 0day

这是一个类型混淆漏洞,原理上和CVE-2015-1641上有诸多一致。

FireEye大牛binjo曾写过该漏洞的一篇分析文章。

看雪上也有一篇对该漏洞的分析文章,不过这篇文章可能需要二进制漏洞板块的阅读权限。

我也写过两篇与该漏洞相关的分析文章,当时水平有限,分析质量比较一般。

卡巴斯基也写过一篇关于该漏洞的分析文章。

2017年的滴滴安全大会上曾对该漏洞的细节有过一些补充。

关于该漏洞的其他一些分析文章总结如下。

这个漏洞可以和CVE-2015-1641, CVE-2016-7193一起进行调试,漏洞原理和利用手法上都有一定相似之处。

 

ActiveX控件解析问题

CVE-2012-0158

这也是一个栈溢出漏洞,时至今日依然在被使用。

关于该漏洞,我曾写过一篇比较详细的分析。

安全客上有另一篇对该漏洞的分析文章。

推荐阅读一篇有关该漏洞的论文。

上面几篇文章对该漏洞的原因已经分析清楚了。

关于利用部分,这么多年下来已经发展出形形色色的手法,网上也有形形色色的文章,这里不再列出,感兴趣的读者可以自行查找。

CVE-2012-1856

这是一个UAF漏洞。

看雪上有一篇关于该漏洞的精彩分析,算是写得比较清楚了。

CVE-2015-1642

该漏洞公布时也是一个0day。这是一个UAF漏洞。

MWR实验室的Yong Chuan, Koh当时也独立发现了该漏洞,他写过一篇关于该漏洞的分析。

NCCGroupDominic Wang也分享过关于该漏洞原理和利用构造的一些细节。

Danny__Wei则实现了Dominic Wang描述的利用过程,并分享了相关代码。

我在Danny__Wei代码的基础上也做了一番调试,写过一篇分享。

CVE-2015-2424

该漏洞是APT28所使用的一个0day。但该漏洞后续并未被广泛使用。

SpiderLabs曾写过相关样本的一篇分析文章,但并未涉及漏洞细节部分。

关于该漏洞的触发现场,我目前唯一能找到的是twitter上的一张截图

我并未深入调试过该漏洞的样本,感兴趣的读者可以自己调试一下。

CVE-2017-11882

该漏洞是office公式编辑器组件内的一个栈溢出漏洞,这个漏洞是目前攻击者用的最多的office漏洞,大有取代CVE-2012-0158的趋势。

我曾写过关于该漏洞的一篇分析。这篇文章中提到的另一处溢出点其实就是CVE-2018-0802

这是漏洞发现者写的分析文章。

以下几篇分析文章也值得一看。

CVE-2018-0798

该漏洞即CheckPoint报给微软的CVE-2018-0802漏洞,在分类上微软这次应该是乌龙了,毕竟当时有大量公式编辑器漏洞报给MSRC。我问过一个报了这个漏洞的小伙伴,他告诉我这个漏洞应该是CVE-2018-0798

这也是公式编辑器的一个栈溢出漏洞。它的优势在于无论在打11882的补丁的机器上还是没打11882补丁的机器上都能用。所以近来也一直受攻击者青睐。

首先列举CheckPoint对该漏洞的一篇分析。

关于该漏洞我也写过一篇分析文章。

CVE-2018-0802

该漏洞是我所在团队报给微软的一个0day

这也是公式编辑器的一个栈溢出漏洞。相关样本Bypass ASLR的方式可以说是教科书级别的。

我当时写过一篇关于该漏洞的分析。

以下为该漏洞的其他一些分析文章。

 

Office TIFF图片解析漏洞

CVE-2013-3906

该漏洞是由李海飞发现的一个0day。相关样本随后带来一波用ActiveX控件在Open XML文档内进行堆喷射的潮流。影响了包括CVE-2015-1641CVE-2015-1642CVE-2016-7193CVE2017-11826在内的诸多漏洞的利用编写。

这是一个整数溢出漏洞。

李海飞写过两篇对该漏洞样本的分析。

此外李海飞还在一次会议上讲述了发现这个0day的过程。

我也写过一篇关于该漏洞原理的分析。

安全客上还有另一篇关于该漏洞的高质量分析,值得一看。

 

Office EPS文件解析漏洞

CVE-2015-2545

这是FireEye报给微软的第一个EPS组件0day。这个漏洞的出现为office漏洞利用打开了一扇新的大门,即在office内可以用类似浏览器脚本语言的方式进行利用编写。但由于在office 2010及以上版本EPS组件是通过一个沙箱进程(FLTLDR.EXE)去加载的,所以需要同时配合提权漏洞去使用。

这是一个UAF漏洞。

FireEye曾写过两篇关于该漏洞的分析文章。

比较有意思的是,该漏洞出现后不久就出现了完全绕过EMET的变种,这几个绕过EMET的样本在现在看来也是质量非常高的,国外的分析人员有两篇相关的分析。上面FireEye第二篇文章也涉及到了其中一个样本。

我之前尝试翻译过上述两篇文章,虽然翻译得不是很好。

2017年的滴滴安全大会上曾对该漏洞的细节有过一些补充。

此外,国内也有一些关于该漏洞的分析文章。

CVE-2017-0261

该漏洞是FireEye报给微软的第二个EPS组件0day

这也是一个UAF漏洞。

FireEye曾写过一篇关于该漏洞的分析文章。

比较有意思的是,目前公开的相关样本无法在我的office 2010环境上触发,但可以在office 2007环境上触发,读者若调试这个样本,需要注意这一点。

CVE-2017-0262

该漏洞是FireEye报给微软的第三个EPS组件0day

这是一个类型混淆漏洞。

FireEye在同一篇文章中对该漏洞做了非常精彩的分析。

比较有意思的是,目前公开的相关样本无法在我的office 2007环境上触发,但可以在office 2010环境上触发。读者若调试这个样本,需要注意这一点。

而且,office 2010上调试时会发现FLTLDR.EXE进程以Low权限启动去加载EPS组件。想要挑战自己的读者可以试着去调试一下相关样本。

 

借助Moniker加载的漏洞

CVE-2017-0199

该漏洞是FireEye报给微软的一个office 0day。这个漏洞的出现影响了之后长达一年的office漏洞利用方式。

这是一个逻辑漏洞,绕过了office所有安全缓解机制(但无法绕过保护模式),不禁让人想到2014年的沙虫漏洞。事实上,李海飞也正是从沙虫样本受到了启发,发现了该漏洞里面包含的另一个点(script那个点)。

FireEye写过两篇关于该漏洞相关样本的分析。

李海飞也做过关于该漏洞的专题演讲。

我当时也用蹩脚的英语翻译过李海飞的文章。

飞塔也对该漏洞的补丁做过一次精彩的分析。

CVE-2017-8570

该漏洞是李海飞受到CVE-2017-0199的启发后独立发现的一个漏洞,绕过了0199当时的补丁,杀伤力和CVE-2017-0199几乎一样巨大。

这是一个逻辑漏洞,也绕过了office的所有安全缓解机制(但无法绕过保护模式),李海飞并未公布相关样本,但随后李海飞的同事在一次会议上公开了关于该漏洞的更多细节,接着相关样本被构造出来并开源,目前这个漏洞也紧随公式编辑器漏洞后面,为最流行的攻击漏洞之一。

李海飞在自己个人博客上分享过该漏洞的一些细节。

随后,李海飞的同事nEINEI大牛在一次会议上分享了如下议题,里面公布了相关漏洞的更多细节。

CVE-2017-8759

该漏洞本质是一个.Net代码注入漏洞。比较巧妙的是攻击者借助Moniker去加载相关文件,显然也是受到了CVE-2017-0199的启发。当时出现时令人大开眼界。

该漏洞也是由FireEye报给微软的一个0day。

FireEye写过一篇关于该漏洞精彩的分析。

我所在团队当时跑出了相关样本,但由于其他的一些原因未能及时发现这个0day。以下是我们团队事后写的一篇分析文章。

我后续还写过一篇关于该漏洞利用新姿势的分享。

虽然这个漏洞目前已经很少被使用,但一个office样本远程加载C#文件,即时编译成一个dll动态库,并直接加载到office进程空间,整个过程实在太为巧妙,同时也绕过了office所有安全缓解机制(但无法绕过保护模式)。

值得一提的是,这个漏洞也提名了2018年的最佳客户端漏洞。虽然最终没有获奖,但其思路之巧妙,确实令人惊叹。

CVE-2018-8174

该漏洞是我所在团队发现并报给微软的一个0day。这是一个VBScriptUAF漏洞,但攻击者巧妙地借助Moniker去加载漏洞文件。这是第一次一个office样本去加载一个IE 0day,思路不可谓不清奇。

这是我所在团队当时对相关样本写的一篇分析。

卡巴斯基也写过对该漏洞的两篇分析文章。

看雪上随后也陆续公开了一些对于该漏洞的高质量分析文章。

此外还有一些其他精彩的分析文章。

这个漏洞毫无争议地成为2018年关注度最高的漏洞,我们也为发现该0day而感到自豪。

CVE-2018-8373

该漏洞是趋势科技报给微软的一个0day。这是VBScript里面另一处UAF漏洞,和CVE-2018-8174应该为同一作者。

趋势当时捕获该样本时并未发现它与office样本的关联,但我们后续发现了该样本也是通过office加载的证据。

趋势科技写过一篇对该漏洞精彩的分析。

由于我一开始手头没有相关样本,所以当时独立构造了一个exp,并对构造过程进行了分享。

后续还有一些其他研究员对该漏洞的调试,但都大同小异。

去年年末,我得到了该漏洞的原始利用样本,一番调试后发现相关样本最后有一个Bypass CFG的过程(8174原始利用没有Bypass CFG的操作),我推测8373当时的攻击目标中有Windows 10的用户。并且在一个利用中同时构造得到了超长的VBScript数组和JScript9数组,并且在利用完成后还有一个还原的过程。不禁感慨商业利用代码的品质之高。

关于上述相关细节我可能会单独写一篇分析文章。

 

其他office逻辑漏洞

CVE-2014-4114

该漏洞是由iSight Partners(已被FireEye收购)报给微软的一个office 0day

该漏洞是ppt动画播放过程中的一个逻辑漏洞,也绕过了office所有安全缓解机制(但无法绕过保护模式),当时出现时的杀伤力也是特别巨大。

关于该漏洞的分析文章也比较多。

百度安全实验室写过一篇分析。

趋势科技写过两篇分析。

Danny__Wei关于该漏洞写过一篇小结。

安天也写过一篇,不过涉及到漏洞细节部分的不多。

该漏洞的poc代码貌似后来被公开到了网上。从代码注释中可以看到相关漏洞利用早在2013年已被开发完毕。

比较有意思的是,微软第一次修补时并没有补好这个漏洞,这直接导致了CVE-2014-6352的出现。

CVE-2014-6352

该漏洞是沙虫漏洞的另一个变种,在CVE-2014-4114公开之后,李海飞也独立发现了这个漏洞。

这也是一个逻辑漏洞,和CVE-2014-4114非常相似,只在一些细节上有所不同。

李海飞写过两篇关于该漏洞的分析文章。

奇安信威胁情报团队(前天眼实验室)曾对该漏洞做过比较细致的逆向分析。

比较有意思的是,CVE-2014-6352出现后,由于可以将PE文件内嵌入文档,需要联网加载PayloadCVE-2014-4114反而被弃用了。同一趋势我们也在CVE-2017-8570出现后观测到,当时我们发现CVE-2017-8570出现后基本上没有人用CVE-2017-0199了。

CVE-2015-0097

该漏洞被公开时并不是一个0day。但是攻击者立即将当时还是1day状态的该漏洞用于攻击。

这也是一个逻辑漏洞,我并未深入调试过这个样本,感兴趣的读者可以自行调试一下。

FireEye曾写过一篇关于该漏洞的分析文章。

 

样本

读者看到这里肯定会抱怨:你上面的总结写了那么多,也给了一些调试指导,但全文未曾见任何一个样本的哈希值。

幸运的是,这方面已经有人帮大家整理了。

可能有些漏洞样本并不在这里面,但这些对于一般的分析研究已经足够。

 

结语

三年前我开始进入office漏洞分析领域的时候,没有人用本文这样的资料来指导我。上面的这些都是我在这三年里逐渐积累的,这篇文章也算是对自己过去三年工作的一个总结。

我们当时的任务是去尝试捕获一个office 0day,那时正是FireEye发现0day全盛的年代。我觉得既然要去捕获0day,第一件事就是要去研究历史0day/1day事件和历史漏洞,所以才逐渐积累了上面这些资料。以上列出的绝大所数漏洞(除了部分Flash漏洞)我都调试过。

在这个过程中我从李海飞公开的PPT中学到了很多,从binjo的分析文章中学到了很多,从奇安信威胁情报中心的文章中学到了很多。这里一并感谢他们。

希望这篇文章可以帮到大家。

 

以下为PDF版下载链接:

链接:https://pan.baidu.com/s/1CuDlpGoKYn3YWSa9kSCR2g

提取码:n0gm

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多