传送门
【漏洞分析】CVE-2017-0199:分析 Microsoft Office RTF 漏洞
漏洞概述
微软在4月份的例行补丁(4月12日)中对一个Office远程命令执行漏洞(CVE-2017-0199)进行了修补,但事实上在补丁发布之前已有多个利用此漏洞的攻击在野外被发现,其中包含分发银行恶意软件的案例。360天眼实验室也在之前得到相关的漏洞利用样本,分析确认为一个对中国做持续APT攻击的团伙的针对性攻击,这是与已知的其他安全厂商公布的不同来源的攻击,由此可见在此漏洞被修补之前已经在地下扩散到了非常大的范围。随着漏洞相关的技术细节的公开,由于漏洞影响大量的Office版本,利用此漏洞的攻击极有可能开始泛滥,需要引起高度重视。
该漏洞利用OFFICE OLE对象链接技术,将包裹的恶意链接对象嵌在文档中,OFFICE调用URL Moniker(COM对象)将恶意链接指向的HTA文件下载到本地, URL Moniker通过识别响应头中content-type的字段信息(图1)最后调用mshta.exe将下载到的HTA文件执行起来。
图1
利用此漏洞的通常攻击场景,用户收到一个包含恶意代码的Office文件(不限于RTF格式的Word文件,可能为PPT类的其他Office文档),点击尝试打开文件时会从外部网站下载特定的恶意HTA程序执行,从而使攻击者获取控制。
漏洞细节
这里基于Hash为5ebfd13250dd0408e3de594e419f9e01的样本文件对漏洞的利用细节做进一步的深入分析。
5ebfd13250dd0408e3de594e419f9e01是RTF格式的文件,内嵌的OLE对象类型被设置为OfficeDOC,嵌入形式是包裹进一个链接类型OLE对象,类型为ole2link(OLE对象中,其数据流偏移4的位置,如果为2则为包裹类型,如果是1的话则为链接类型)。链接形式的OLE对象本身不包含在文档本身中,而是位于文档之外,其中链接的对象可以在本机,也可以在远程服务器上,这是COM组件的一个特性,因为OLE本身就是COM组件的一部分。
下图为5ebfd13250dd0408e3de594e419f9e01中对象的结构信息
图2
URL Monkiler是COM对象,在RTF文件中,它的CLSID存放顺序与实际是部分颠倒的:
E0 C9 EA 79 F9 BA CE 11 8C82-00AA004BA90B (红色部分)。Office通过URL Moniker来发送远程请求,下载 http://46.102.152.129/template.doc ,MD5: 3c01c4d68ddcf1e4ecd1fa1ca3024c54,下载的文件是一个RTF文件,其中包含了VBS脚本(如图3)。之后URL Moniker通过content-type识别为HTA,最后调用mshta.exe加载。mstha.exe在匹配到脚本数据之后,执行其中包含的VBS(图4),可以看到这个VBS做了一些简单的混淆。
图3
图4
VBS脚本功能:
1. 执行powershell命令结束winword.exe进程
2. 下载http://hyoeyeep.ws/sp.exe文件,写入%appdata%MicrosoftWindowsStart MenuProgramsStartupwinword.exe,这样实现了自启动
3. 下载http://hyoeyeep.ws/sp.doc写入%temp%document.doc
4. 清空注册表键值Word versions 15.0 and 16.0 Resiliency子键与键值。这样winword可以正常的启动
5. 运行%appdata%MicrosoftWindowsStart MenuProgramsStartupwinword.exe。
6. 调用winword打开document.doc。这是个正常文件,目的当然是造成正常处理文件的假象
sp.exe(a9e0d7e94f555dc3a2db5e59e92ed778)属于Dridex家族,是网银类的后门。这里就不详细分析了。下图是VirusTotal上的扫描结果:
图5
mshta执行template.doc的过程还值得提一下:
因为下载回来的template.doc文件格式是RTF,里面嵌入了vbscript,mshta会搜索文件数据,匹配可执行的脚本。mshta先会加载mshtml.dll并调用RunHtmlApplication这个导出函数,然后在CCHtmScriptParseCtx::Execute()中匹配脚本文件的标签,获取脚本对象,如图6。0x1fa2120为某数据对象,0x68C173A0处是该类对象的类函数,如图7。我们可以看到0x678128处是RTF文件的内容,0x4910为VBS脚本开始的偏移。经过匹配之后找到脚本数据,最后调用vbscirpt.dll执行脚本。
图6
图7
相关思考
COM/OLE技术是微软的一大技术亮点,但为开发人员提供了很大的便利同时,其组件的丰富特性也造成了许多的安全隐患,关于OLE所造成的安全漏洞可以参考《Attacking Interoperability: An OLE Edition》文档。对于CVE-2017-0199来说,其绕过了Office执行脚本的安全措施,OLE机制的3个特性组合下导致了这个漏洞:
1. OLE link object特性,本身提供了非常灵活的数据存储和操作架构。
2. URL Moniker特性,Office没有将请求对象类型与content-type做校验是导致HTA脚本执行的一个重要原因,远程请求文件根据content-type来运行对应程序,加载执行数据。
3. Windows在执行HTA文件的时候,会匹配搜索数据流,直到发现有脚本数据流。
这三个特性单个来看都不存在明显的安全隐患,都是为了尽可能实现正常功能,但是这些特性的组合造就了这个漏洞。正好应验了那句话,功能越强大组合方式越多存在安全问题的可能性就会越大。同时像CVE-2017-0199这种典型的利用Windows特性,实现攻击效果,对安全研究人员提出了新的考验,相信以后这种类型的机制组合漏洞还会出现。
参考资料
1.https://msdn.microsoft.com/en-us/library/ms775149(v=vs.85).aspx
2. https://www.fireeye.com/blog/threat-research/2017/04/cve-2017-0199-hta-handler.html
3. https://msdn.microsoft.com/en-us/library/dd942265.aspx
传送门