8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png
2017年Office漏洞及漏洞攻击研究报告
aiyun 2017-11-15

第一节    引子

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

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

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

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

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

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

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

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

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

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

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

漏洞编号漏洞曝光时长补丁发布时间未修复比例
CVE-2017-01996个月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-87592017年曝光的Office0Day漏洞之一,在漏洞曝光后的几天内,我们就捕获到了攻击样本。攻击载体是一个名为《香港记者 ***.doc》的    Word文档,通过钓鱼邮件发动鱼叉攻击。文档中嵌入了恶意载荷,触发CVE-2017-8759漏洞后执行,会从指定 URL下载一个名为whoamifile.jpeg    hta文件:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第四节    漏洞原理分析

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

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

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

这个漏洞的利用非常简单,不同于内存破坏漏洞,它不需要做内存布局,不需要绕过微软采用的一系列诸如ASLRDEP之类的漏洞缓解措施,就能实现从远程服务器下载执行任意代码,而且成功率非常高,同时影响 office所有版本。在    2017BlackHat黑帽大会上,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)的全局唯一标识符,由 3216    进制字符组成。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文档中可以嵌入各种格式的图片,例如GIFJPG PNG等等,也可以嵌入EPS图片,每种图片都有对应的处理模块,例如    GIF图片由GIFIMP32.FLT 处理,EPS图片由EPSIMP32.FLT处理。在打开Office    文档时,会创建一个 FLTLDR.EXE的进程,加载各种图片的处理模块,当文档中嵌入EPS图片时,EPSIMP32.FLT会被加载进来,用于渲染 EPS    图片。

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

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

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

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

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

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

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

由于脚本语言的灵活性,微软的一些漏洞缓解机制如ASLRDEP等相继被绕过,这使得微软在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 代码,其中部分代码如下所示:

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

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

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

这个函数功能很简单,将解析得到的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

image027.png        

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

image029.png        

我们可以看到注释符//只注释了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最终生成如下的代码:

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

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

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

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

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

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

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

第五节    漏洞防御

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

1、绝大多数被黑客利用的Office漏洞,比如早些年的CVE-2012-0158 CVE-2015-1641,以及2017            年的CVE-2017-11826,都属于内存破坏型的漏洞。这类漏洞无一例外都要用到未开启 ASLRDLL来执行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-0199CVE-2017-8570 .Net漏洞CVE-2017-8759            ,由于不涉及到二进制层面的漏洞利用,直接Bypass掉了微软以及安全软件对于漏洞利用的缓解和防御机制。针对这类漏洞,腾讯电脑管家加强了 Office进程的主动防御逻辑,包括根据Office进程的关系链制定拦截规则,禁止            Office创建高风险进程等。

第六节    结语

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

转载至freebuf网站:freebuf

最新回复 (0)
    • Ai云
      2
        立即登录 立即注册
返回