2017年Office漏洞及漏洞攻击研究报告

第一节 引子

微软 Office 系统软件( Word/Excel/PowerPoint 等),一直是电脑上最为常用的办公软件之一,在国内外都拥有大量的用户。另一方面,利用 Office 系列软件的漏洞进行网络攻击已经成为黑客惯用的手段,广泛运用于 APT 攻击,抓肉鸡,传播勒索病毒等。其中一种典型的攻击方式是“鱼叉攻击”:黑客将包含漏洞的文档伪装成为一个正常的 Office 文档,并精心构造文件名,然后投递到用户邮箱,如果用户不小心打开文档,恶意代码便会悄悄执行,用户完全没有感知。

另外,随着新版本的 Office 不断发布,微软逐渐停止了对于老版本 Office 的技术支持,包括提供安全更新。 2017 10 月,微软就正式停止了对 Office 2007 的技术支持。这本是软件生命周期中不可避免的事情,但对于使用 Office 软件的用户来说,除非升级到更新的版本,否则将面临被黑客攻击的风险。然而,事实上目前仍有大量的用户选择不升级,而是继续使用老版本的 Office 软件。

针对上述情况,腾讯电脑管家安全实验室对 2017 Office 漏洞以及漏洞攻击进行了深入的分析和整理,并向全社会输出此报告,希望更多的人能够了解 Office 漏洞以及危害,进一步提高安全意识;同时也希望各家安全厂商能够同心协力,一起来为用户建设更加安全的网络环境。

第二节 Office 漏洞补丁数据及分析

截止到 10 月,微软在 2017 年一共发布了 372 Office 漏洞补丁,除了 1 月和 2 月之外,微软每个月的发布的 Office 补丁数量都在 30 个以上,其中 9 月最高,发布了 74 个补丁,每月发布的补丁具体数量详见下图:

从漏洞补丁发布的数量来看, 如果用户不及时使用 Windows Update 或者第 3 方安全软件打补丁修复漏洞,将面临极大的安全风险。

根据腾讯电脑管家的统计,目前大约有 48% 的用户仍然在使用低版本的 Office 软件,包括 Office 2007/Office 2003 等;同时,微软对于 Office 2007 以上版本的也不是完全支持:对于 Office 2010 Office 2013 来说,支持 SP2 及以上版本,对于 Office 2013 来说,支持 SP1 及以上版本。 Office 各版本用户分布如下图:

对于这些使用低版本 Office 的用户来说,他们将不再会收到任何 Office 漏洞的安全更新,即使这个漏洞已经被黑客掌握并频繁用于网络攻击。

更为糟糕的是,很多用户虽然使用的是较高版本的 Office ,可以收到 Office 漏洞的安全更新通知,但是由于安全意识的缺乏,往往选择不安装安全更新。以今年曝光的 RTF 漏洞 CVE-2017-0199 为例:

漏洞编号 漏洞曝光时长 补丁发布时间 未修复比例
CVE-2017-0199 6个月 2017年4月 23.81%

这个漏洞在网络上公开曝光的时长已经超过了 6 个月,黑客早已掌握该漏洞的利用技术,并发起了多起网络攻击;另一方面,微软在 2017 4 月份的安全更新中就发布了该漏洞的补丁,电脑管家也多次提醒用户修复该漏洞,但截止当前,仍然有超过 1/5 的用户没有选择修复该漏洞。

第三节 Office 漏洞攻击案例分析

2017 年注定是网络安全不平静的一年, WannaCry 勒索病毒利用微软 SMB “永恒之蓝”漏洞横扫全球计算机网络,让所有人都切身感受到了漏洞作为网络攻击武器的强大威力。其实在 2017 年, Office 漏洞攻击也层出不穷,对政府、企业和个人都造成了很大的威胁。下面我们针对一些典型的 Office 漏洞攻击案例来做分析。

(一)利用 Office 漏洞进行 APT 攻击

Office 漏洞常常用于 APT 攻击,对于高价值目标,甚至会使用未公开的 Office 0Day 漏洞。 2017 年就曝光了数个 Office0Day 漏洞野外攻击样本,而我们也捕获了一些利用 Office 漏洞的 APT 攻击样本。

CVE-2017-8759 2017 年曝光的 Office0Day 漏洞之一,在漏洞曝光后的几天内,我们就捕获到了攻击样本。攻击载体是一个名为《香港记者 ***.doc 》的 Word 文档,通过钓鱼邮件发动鱼叉攻击。文档中嵌入了恶意载荷,触发 CVE-2017-8759 漏洞后执行,会从指定 URL 下载一个名为 whoamifile.jpeg hta 文件:

whoamifile.jpeg 文件的功能是下载指定服务器上的 youcandowhat.jepg 文件到临时目录并执行,该文件是一个远程控制木马 LameRat 的安装包。 LameRat 能够检测数十种国内外主流安全软件,并进行相应的绕过安装,适配当前主流的 windows 操作系统。

LameRat 主要功能都通过下发各种插件完成,分析发现该木马下发的插件多大数十种,能够实现各种复杂的定向功能:

(二)利用 Office 漏洞传播僵尸网络

僵尸网络的主要传播路径为海量发送钓鱼邮件。随着民众安全意识的提高,直接发送可执行文件的钓鱼文件被成功打开的几率变得越来越低,而发送文档类型的文件则能大大提高点击率,因此 Office 漏洞也成了僵尸网络传播者的最常用的手段之一。在 CVE-2017-0199 漏洞曝光后,我们就拦截到了大量利用该漏洞的钓鱼邮件,邮件附件中携带了 CVE-2017-0199 漏洞利用程序,一旦收件人在未打补丁的电脑上打开附件中的 Doc 文件,就会感染 Loki Bot 僵尸网络木马:

传播的 Loki Bot 僵尸网络,会盗取大量帐号密码。

(三)利用Office漏洞传播勒索病毒

勒索病毒是近年来互联网安全面临的主要威胁之一。除了 WannaCry Petya 等知名勒索病毒之外,迄今我们已经发现了数百种的勒索病毒及其变种,而 Office 漏洞也成为了勒索病毒传播的主要手段之一。以下是我们近期拦截到的利用 CVE-2017-0199 打包的敲诈者病毒邮件:

漏洞触发后释放的木马是一个敲诈者病毒,能够加密电脑中的多种文档类型文件,并且用到 RSA2048 非对称加密,理论上无法破解,木马还会根据加密文件的数量和大小等来判断要勒索的比特币数量。

越来越多的攻击者更加倾向于利用 Office 漏洞文档来进行恶意行为,相比传统的可执行程序更具有迷惑性。若攻击者使用鱼叉或水坑攻击方式,并结合社会工程学手段,精心构造文档名及伪装内容,安全意识薄弱的用户很容易中招。

第四节 漏洞原理分析

2017 年曝光了好几个 Office 漏洞以及漏洞的利用方法,这一定程度上导致了 Office 漏洞攻击的泛滥。接下来将从技术角度去揭露这些漏洞的原理,以及漏洞修复的思考。我们相信,只有深入理解这些漏洞,才有可能做出更好的防御。

(一)逻辑漏洞CVE-2017-0199、CVE-2017-8570

CVE-2017-0199 Microsoft Office OLE 处理机制实现上存在的一个逻辑漏洞,此漏洞的成因主要是 word 在处理内嵌 OLE2LINK 对象时,通过网络更新对象时没有正确处理 Content-Type 所导致的一个逻辑漏洞。攻击者可利用这个漏洞构造恶意 Office 文件,当用户打开特殊构造的恶意 Office 文件后,无需其他的操作,就可以实现在用户系统上执行任意命令,从而控制用户系统。

这个漏洞的利用非常简单,不同于内存破坏漏洞,它不需要做内存布局,不需要绕过微软采用的一系列诸如 ASLR DEP 之类的漏洞缓解措施,就能实现从远程服务器下载执行任意代码,而且成功率非常高,同时影响 office 所有版本。在 2017 BlackHat 黑帽大会上, CVE-2017-0199 获得了最佳客户端安全漏洞奖。

CVE-2017-0199 涉及到两个危险的 COM 对象:

CLSID_SCRIPTLET ={06290bd3-48aa-11d2-8432-006008c3fbfc}

CLSID_HTA ={3050f4d8-98b5-11cf-bb82-00aa00bdce0b}

CLSID_HTA 是一个表示 Microsoft HTML Application (文件后缀 .hta )的全局唯一标识符,由 32 16 进制字符组成。 scriptlet 又称为 Windows Script Component WSC ),其设计目的是执行 Javascript VBScript 以及 PerlScript 等脚本语言,同样也可以执行 XML 文件中的脚本代码。

微软在 4 月份发布补丁修复了 CVE-2017-0199 ,分成两部分,一部分是针对 Office 的补丁,修改了 MSO.dll ,一部分是针对 Windows 的补丁,修改了 ole32.dll ,需要 office 补丁和 Windows 补丁两者结合一起,才能完整修复这个漏洞。微软在补丁中加入了一套过滤机制,在 office 尝试初始化这两个危险的 COM 对象时,直接拒绝掉。

单纯地过滤 COM 对象的 GUID 很容易,但是可以寻找另外的 COM 对象来绕过补丁,这导致了另外一个漏洞: CVE-2017-8570 的诞生,安全研究人员另外找到了一个 GUID {06290BD2-48AA-11D2-8432-006008C3FBFC} COM 对象,它和之前的 GUID 非常类似:

{06290BD3-48AA-11D2-8432-006008C3FBFC}

{06290BD2-48AA-11D2-8432-006008C3FBFC}

可以看到两者只相差一位。这个新的 GUID 绕过了微软针对 CVE-2017-0199 的补丁,微软不得不继续添加过滤列表,在 8 月份继续发布补丁封堵了这个新的 GUID 。在可以想象的将来,预计这个过滤列表会继续增加下去。

(二) EPS 漏洞 CVE-2017-0261、CVE-2017-0262

EPS 是封装的 PostScript(Encapsulated PostScript) 格式。 PostScript 语言是 Adobe 公司设计用于向任何支持 PostScript 语言的打印机打印文件的页面描述语言。 EPS 图片实际上就是一个 PostScript 程序。

Office 文档中可以嵌入各种格式的图片,例如 GIF JPG PNG 等等,也可以嵌入 EPS 图片,每种图片都有对应的处理模块,例如 GIF 图片由 GIFIMP32.FLT 处理, EPS 图片由 EPSIMP32.FLT 处理。在打开 Office 文档时,会创建一个 FLTLDR.EXE 的进程,加载各种图片的处理模块,当文档中嵌入 EPS 图片时, EPSIMP32.FLT 会被加载进来,用于渲染 EPS 图片。

CVE-2017-0261 是一个 EPS UAF 漏洞, PostScript 中,本地 VM 中的对象分配和对本地 VM 中的现有对象的修改由称为 save restore 的功能完成,它们可以用来封装位于本地 VM 中的 PostScript 语言程序的相关代码。 restore 能够释放新建的对象,并撤消从相应的 save 操作后对现有对象的修改,回收从 save 操作后所分配的内存。当与 forall 运算符组合时,攻击者就可以实施类似 Use-After-Free 的漏洞攻击了,下图显示了利用 save restore 操作的伪代码:

通过操作 save 操作符之后的操作,攻击者能够操纵内存布局,并将 UAF 漏洞转换为读 / 写原语。攻击者创建了一个字符串,利用漏洞将它的长度设置为 0x7fffffff ,基数为 0 。此时,攻击者拥有了读写任意用户内存的能力, EPS 图片中的 PostScript 脚本可以进一步搜索 gadgets 来构建 ROP 链,使用 ROP 链来修改存放 shellcode 的内存块为可执行。这样恶意的 shellcode 就能够在 FLTLDR.EXE 进程中运行了。

CVE-2017-0262 是一个 EPS 的类型混淆漏洞,由 forall 操作符引发的,它可以改变执行流程,允许攻击者控制栈上的值。攻击者继而利用了两个数组对象,实现了 EPSIMP32.FLT 的基址泄漏和任意地址读写:

然后进一步构造 ROP 链,通过 ROP 实现了 shellcode 的执行。

这两个漏洞最终都实现了在 FLTLDR.EXE 进程中执行任意代码,但它是一个沙箱进程,权限很低,所以攻击者还需要利用内核提权漏洞来实现沙箱逃逸,获取到系统的最高控制权。

由于脚本语言的灵活性,微软的一些漏洞缓解机制如 ASLR DEP 等相继被绕过,这使得微软在 5 月份的 office 补丁中做出了很激进的修复措施,直接禁止了 EPSIMP32.FLT 的加载,也就是说, office 不再支持 EPS 图片格式,一劳永逸地杜绝了所有的 EPS 漏洞。

(三).NET Framework 漏洞 CVE-2017-8759

CVE-2017-8759 本质上是一个 .Net Framework 漏洞,影响所有主流的 .NET Framework 版本。现在主流的 windows 7 windows 10 等操作系统中都默认安装了 .NET Framework ,任何使用 SOAP 服务的软件都能通过 .NET Framework 触发,当然它也可以集成到 office 文档中,用户只要双击打开 office 文档,无需其他操作,即可触发该漏洞,实现任意代码执行。漏洞位于:

http://referencesource.microsoft.com/#System.Runtime.Remoting/metadata/wsdlparser.cs

中的 PrintClientProxy 函数中,该函数用于将解析 wsdl 文件后得到的信息格式化成 .cs 代码,其中部分代码如下所示:

soap:address 中的 location 指定了 SOAP URL 地址,在 6142 行、 6149 行中,调用了 WsdlParser.IsValidUrl() 函数来格式化 location 指定的 URL 地址,这个函数代码如下所示:

这个函数功能很简单,将解析得到的 URL 地址前面加上 @” ,末尾再加上 ,就返回了,例如, string value 输入的 URL 地址是 http://guanjia.qq.com ,会被格式化成 @” http://guanjia.qq.com 返回给调用者。 6148 行、 6149 行、 6150 行三行代码会格式化成如下所示的代码:

// base.ConfigureProxy(this.GetType(),@”” http://guanjia.qq.com

一个 wsdl 文件中可以指定多个 location ,从以上代码中可以看到,只有第一个 location 才是有效的,从第二个开始,会加上注释符 // ,整个 URL 地址会被当作注释内容输出到 .cs 代码中,然后会创建 csc.exe 进程,由它编译生成一个名字类似于 http*****.dll ,这个 DLL 会被加载到 office 进程中,由于最终编译生成的 .dll 里面不会包含注释的 URL 地址,在正常情况下,这里不会有任何问题。但是 WsdlParser.IsValidUrl() 函数中没有考虑输入的 string value 会包含一个换行符的情况,例如,我们捕获的攻击样本中指定了如下所示的一个 location

WsdlParser.IsValidUrl() 函数格式化后,会生成如下的代码:

我们可以看到注释符 // 只注释了 base.ConfigureProxy(this.GetType(), @”; ,由于换行符的存在,它不会注释掉接下来的 4 行代码,这些代码会被编译到最后生成的 http*****.dll 中,被 office 进程加载后执行。

在样本中,通过代码:

System.Diagnostics.Process.Start(_url.Split('?')[1],_url.Split('?')[2]);

创建了 mshta.exe 进程,通过 _url.Split(‘?’)[2] 指定让 mshta.exe 从攻击者控制的远程服务器中拉取到一个 .db 文件,里面嵌入了一段 VBScript 脚本,会由 mshta.exe 解析执行,进一步从攻击者控制的远程服务器中拉取远控木马下载执行。

微软在 9 月份的补丁中修改了 WsdlParser.IsValidUrl() 函数,它循环遍历 location 中指定的每一个字符,对于换行符这样的特殊符号,不会输出它,对于不是数字也不是字母的字符,打印成 u**** 十六进制形式输出,例如,上述攻击者指定的有问题的 location 最终生成如下的代码:

这样就有效避免了最终生成的代码中出现换行符的情况,也确保了注释符 // 能注释掉 location 中指定的内容。

(四)类型混淆漏洞>CVE-2017-11826

CVE-2017-11826 是一个类型混淆漏洞, Microsoft Word OOXML 解析器在处理 docx 文档的 word/document.xml 时,没有正确地验证标签对象是否闭合,造成类型混淆,通过精心构造标签和内存布局,最终可以造成任意代码执行。这个漏洞影响所有版本的 word 。下图是我们捕获到的一个利用该漏洞的 RTF 样本:

RTF 首先会进行堆喷,做内存布局,然后释放一个带 CVE-2017-11826 漏洞的 .docx 文档,触发漏洞后,借助 word 中一个没有启用 ASLR msvbvm60.dll ,构造 ROP 链,把 shellcode 所在的内存区设为可执行,实现在 word 中执行任意代码。

微软在 10 月份的补丁中修复了这个漏洞,在处理没有闭合的标签时做了额外的判断,不会出现之前的类型混淆问题。

第五节 漏洞防御

由于很多用户仍然在使用低版本的 Office ,同时很多用户并没有养成及时打补丁的习惯,腾讯电脑管家除了推送漏洞补丁之外,对于利用 Office 漏洞进行的攻击,也做了针对性的防御方案,供同行参考和指正:

1 、绝大多数被黑客利用的 Office 漏洞,比如早些年的 CVE-2012-0158 CVE-2015-1641 ,以及 2017 年的 CVE-2017-11826 ,都属于内存破坏型的漏洞。这类漏洞无一例外都要用到未开启 ASLR DLL 来执行 ROP ,突破 DEP 。针对这点,腾讯电脑管家对 Office 系列软件的进程做了特殊处理,每当进程加载一个 DLL 时,会判断该 DLL 是否开启了 ASLR ,如果没有的话,会强制该 DLL 加载到另外一个随机的地址上去,这样硬编码的 ROP 就会失效,从而有效防御这类漏洞;

2 、对于 EPS 漏洞,比如早些年的 CVE-2015-2545 2017 年的 CVE-2017-0261 CVE-2017-0262 ,虽然也属于内存破坏型的漏洞,但是由于能够执行 EPS 脚本,灵活性非常大,精心构造的话有可能绕过 ASLR+DEP 。微软为了根治这个问题,已经在今年 4 月份的 Office 补丁中禁用了 EPS ,管家针对一些没有安装 EPS 漏洞补丁的 Office 也做了同样的处理,禁止了处理 EPS 图片的 EPSIMP32.FLT 模块加载;

3 、对于逻辑型漏洞,比如 CVE-2017-0199 CVE-2017-8570 .Net 漏洞 CVE-2017-8759 ,由于不涉及到二进制层面的漏洞利用,直接 Bypass 掉了微软以及安全软件对于漏洞利用的缓解和防御机制。针对这类漏洞,腾讯电脑管家加强了 Office 进程的主动防御逻辑,包括根据 Office 进程的关系链制定拦截规则,禁止 Office 创建高风险进程等。

第六节 结语

在本研究报告撰写的同时,利用 OfficeDDE (动态数据交换)特性的一种新型攻击手段已经在网络扩散。虽然该攻击需要用户交互,但由于安全意识的缺乏,仍然有不少用户中招。这无疑又给我们敲了一次警钟:无论过去,现在,还是将来, Office 漏洞攻击仍然会不断持续,也会不断出现新的攻击手段。作为安全从业者,我们一方面需要不断加强用户安全教育,提高用户安全意识,另一方面,也需要不断加强自身产品的安全能力。任重道远,与诸君共勉!

*本文作者:腾讯电脑管家;转载请注明来自 FreeBuf.COM

FreeBuf稿源:FreeBuf (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合技术 » 2017年Office漏洞及漏洞攻击研究报告

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录