银雁冰 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-2014-1761分析笔记
- ms14-017(cve-2014-1761)学习笔记 (里面有提到如何配置正确的环境)
安全客上也有关于该漏洞的一篇高质量分析。
此外,韩国的安博士也发过一篇关于这个漏洞的报告。
调试这个漏洞时需要注意的地方是该漏洞的某些样本对触发环境比较苛刻,上述文章里面有提到如何构造相关实验环境。
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年的滴滴安全大会上曾对该漏洞的细节有过一些补充。
关于该漏洞的其他一些分析文章总结如下。
- office CVE-2017-11826杂谈
- Exploiting Word: CVE-2017-11826 (这篇文章详细介绍了利用编写过程)
- CVE–2017–11826 样本分析报告(包含补丁分析)
- Open XML标签解析类漏洞分析思路
- CVE-2017-11826 Exploited in the Wild with Politically Themed RTF Document
- Analyzing Microsoft Office Zero-Day Exploit CVE-2017-11826: Memory Corruption Vulnerability
这个漏洞可以和CVE-2015-1641
, CVE-2016-7193
一起进行调试,漏洞原理和利用手法上都有一定相似之处。
ActiveX控件解析问题
CVE-2012-0158
这也是一个栈溢出漏洞,时至今日依然在被使用。
关于该漏洞,我曾写过一篇比较详细的分析。
安全客上有另一篇对该漏洞的分析文章。
推荐阅读一篇有关该漏洞的论文。
上面几篇文章对该漏洞的原因已经分析清楚了。
关于利用部分,这么多年下来已经发展出形形色色的手法,网上也有形形色色的文章,这里不再列出,感兴趣的读者可以自行查找。
CVE-2012-1856
这是一个UAF
漏洞。
看雪上有一篇关于该漏洞的精彩分析,算是写得比较清楚了。
CVE-2015-1642
该漏洞公布时也是一个0day
。这是一个UAF
漏洞。
MWR
实验室的Yong Chuan, Koh
当时也独立发现了该漏洞,他写过一篇关于该漏洞的分析。
NCCGroup
的Dominic 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
。
这是漏洞发现者写的分析文章。
以下几篇分析文章也值得一看。
- Did Microsoft Just Manually Patch Their Equation Editor Executable? Why Yes, Yes They Did. (CVE-2017-11882)
- 漏洞分析一百篇-05-WindowsOLE应用程序EQBEDT32上栈溢出漏洞
- 利用了Office公式编辑器特殊处理逻辑的最新免杀技术分析(CVE-2017-11882) (强烈建议好好阅读一下这篇)
CVE-2018-0798
该漏洞即CheckPoint报给微软的CVE-2018-0802
漏洞,在分类上微软这次应该是乌龙了,毕竟当时有大量公式编辑器漏洞报给MSRC
。我问过一个报了这个漏洞的小伙伴,他告诉我这个漏洞应该是CVE-2018-0798
。
这也是公式编辑器的一个栈溢出漏洞。它的优势在于无论在打11882
的补丁的机器上还是没打11882
补丁的机器上都能用。所以近来也一直受攻击者青睐。
首先列举CheckPoint
对该漏洞的一篇分析。
关于该漏洞我也写过一篇分析文章。
CVE-2018-0802
该漏洞是我所在团队报给微软的一个0day
。
这也是公式编辑器的一个栈溢出漏洞。相关样本Bypass ASLR
的方式可以说是教科书级别的。
我当时写过一篇关于该漏洞的分析。
以下为该漏洞的其他一些分析文章。
- The Bug That Killed Equation Editor – How We Found, Exploited And Micropatched It (CVE-2018-0802)
- 威胁预警:2018年微软修复的首个Office 0day漏洞(CVE-2018-0802)
Office TIFF图片解析漏洞
CVE-2013-3906
该漏洞是由李海飞发现的一个0day
。相关样本随后带来一波用ActiveX
控件在Open XML
文档内进行堆喷射的潮流。影响了包括CVE-2015-1641
,CVE-2015-1642
,CVE-2016-7193
和CVE2017-11826
在内的诸多漏洞的利用编写。
这是一个整数溢出漏洞。
李海飞写过两篇对该漏洞样本的分析。
- McAfee Labs Detects Zero-Day Exploit Targeting Microsoft Office
- Solving the Mystery of the Office Zero-Day Exploit and DEP
此外李海飞还在一次会议上讲述了发现这个0day
的过程。
我也写过一篇关于该漏洞原理的分析。
安全客上还有另一篇关于该漏洞的高质量分析,值得一看。
Office EPS文件解析漏洞
CVE-2015-2545
这是FireEye
报给微软的第一个EPS
组件0day
。这个漏洞的出现为office
漏洞利用打开了一扇新的大门,即在office
内可以用类似浏览器脚本语言的方式进行利用编写。但由于在office 2010
及以上版本EPS
组件是通过一个沙箱进程(FLTLDR.EXE
)去加载的,所以需要同时配合提权漏洞去使用。
这是一个UAF
漏洞。
FireEye
曾写过两篇关于该漏洞的分析文章。
- Two for One: Microsoft Office Encapsulated PostScript and Windows Privilege Escalation Zero-Days
- The EPS Awakens
比较有意思的是,该漏洞出现后不久就出现了完全绕过EMET
的变种,这几个绕过EMET
的样本在现在看来也是质量非常高的,国外的分析人员有两篇相关的分析。上面FireEye
第二篇文章也涉及到了其中一个样本。
- CVE-2015-2545 ITW EMET Evasion
- HOW THE EPS FILE EXPLOIT WORKS TO BYPASS EMET (CVE-2015-2545) – A TECHNICAL EXPLORATION
我之前尝试翻译过上述两篇文章,虽然翻译得不是很好。
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-0199: In the Wild Attacks Leveraging HTA Handler
- CVE-2017-0199 Used as Zero Day to Distribute FINSPY Espionage Malware and LATENTBOT Cyber Crime Malware
李海飞也做过关于该漏洞的专题演讲。
我当时也用蹩脚的英语翻译过李海飞的文章。
飞塔也对该漏洞的补丁做过一次精彩的分析。
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
。这是一个VBScript
的UAF
漏洞,但攻击者巧妙地借助Moniker
去加载漏洞文件。这是第一次一个office
样本去加载一个IE 0day
,思路不可谓不清奇。
这是我所在团队当时对相关样本写的一篇分析。
卡巴斯基也写过对该漏洞的两篇分析文章。
看雪上随后也陆续公开了一些对于该漏洞的高质量分析文章。
此外还有一些其他精彩的分析文章。
- CVE-2018-8174:从UAF到任意地址读写
- Windows VBScript引擎远程执行代码漏洞 CVE-2018-8174分析与利用
- An Analysis of the DLL Address Leaking Trick used by the “Double Kill” Internet Explorer Zero-Day exploit (CVE-2018-8174)
这个漏洞毫无争议地成为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
所有安全缓解机制(但无法绕过保护模式),当时出现时的杀伤力也是特别巨大。
关于该漏洞的分析文章也比较多。
百度安全实验室写过一篇分析。
趋势科技写过两篇分析。
- An Analysis of Windows Zero-day Vulnerability ‘CVE-2014-4114’ aka “Sandworm”
- Timeline of Sandworm Attacks
Danny__Wei
关于该漏洞写过一篇小结。
安天也写过一篇,不过涉及到漏洞细节部分的不多。
该漏洞的poc
代码貌似后来被公开到了网上。从代码注释中可以看到相关漏洞利用早在2013
年已被开发完毕。
比较有意思的是,微软第一次修补时并没有补好这个漏洞,这直接导致了CVE-2014-6352
的出现。
CVE-2014-6352
该漏洞是沙虫漏洞的另一个变种,在CVE-2014-4114
公开之后,李海飞也独立发现了这个漏洞。
这也是一个逻辑漏洞,和CVE-2014-4114
非常相似,只在一些细节上有所不同。
李海飞写过两篇关于该漏洞的分析文章。
- Bypassing Microsoft’s Patch for the Sandworm Zero Day: a Detailed Look at the Root Cause
- Bypassing Microsoft’s Patch for the Sandworm Zero Day: Even ‘Editing’ Can Cause Harm
奇安信威胁情报团队(前天眼实验室)曾对该漏洞做过比较细致的逆向分析。
比较有意思的是,CVE-2014-6352
出现后,由于可以将PE
文件内嵌入文档,需要联网加载Payload
的CVE-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
发表评论
您还未登录,请先登录。
登录