漏洞挖掘前言
OFFICE OLE2LINK(CVE-2017-0199)
TFD XJL 2018 年 12 月 20 日 星期四
目录
OFFICE OLE2LINK(CVE-2017-0199)
第一部分 OFFICE漏洞简介
1.1 微软office漏洞背景
微软Office系统软件(Word/Excel/PowerPoint等),一直是电脑上最为常用的办公软件之一,在国内外都拥有大量的用户。另一方面,利用Office系列软件的漏洞进行网络攻击已经成为黑客惯用的手段,广泛运用于APT攻击,抓肉鸡,传播勒索病毒等。其中一种典型的攻击方式是“鱼叉攻击”:黑客将包含漏洞的文档伪装成为一个正常的Office文档,并精心构造文件名,然后投递到用户邮箱,如果用户不小心打开文档,恶意代码便会悄悄执行,用户完全没有感知。
另外,随着新版本的Office不断发布,微软逐渐停止了对于老版本Office的技术支持,包括提供安全更新。2017 年10月,微软就正式停止了对 Office 2007的技术支持。这本是软件生命周期中不可避免的事情,但对于使用Office 软件的用户来说,除非升级到更新的版本,否则将面临被黑客攻击的风险。然而,事实上目前仍有大量的用户选择不升级,而是继续使用老版本的Office软件。
1.2 OFFICE OLE2LINK漏洞简介
CVE编号:CVE-2017-0199 危害等级:超危
发布时间: 2017-04-13 威胁类型:远程
Microsoft Office是美国微软(Microsoft)公司开发的一款办公软件套件产品。常用组件有Word、Excel、Access、Powerpoint、FrontPage等。
多款Microsoft产品中存在远程代码执行漏洞。远程攻击者可借助特制的文本文件利用该漏洞执行任意代码。以下产品和版本受到影响:
Microsoft Office 2007 SP3; Microsoft Office 2010 SP2;
Microsoft Office 2013 SP1; Microsoft Office 2016;
Microsoft Windows Vista SP2; Windows Server 2008 SP2;
Windows 7 SP1; Windows 8.1。
图1-漏洞修复统计图(数据时间截止2017年10月)
这个漏洞在网络上公开曝光的时长已经超过了6个月,黑客早已掌握该漏洞的利用技术,并发起了多起网络攻击;另一方面,微软在2017年4月份的安全更新中就发布了该漏洞的补丁,电脑管家也多次提醒用户修复该漏洞,但截止当前,仍然有超过 1/5的用户没有选择修复该漏洞。
第二部分 OFFICE OLE2LINK漏洞分析
2.1 漏洞原理简单分析
该漏洞利用OFFICE OLE对象链接技术,将包裹的恶意链接对象嵌在文档中,OFFICE调用URL Moniker(COM对象)将恶意链接指向的HTA文件下载到本地, 当用户打开包含嵌入式漏洞的文档时,winword.exe 会向远程服务器发出 HTTP 请求,以检索恶意 HTA 文件,服务器返回的文件时一个带有嵌入式恶意脚本的假 RTF 文件,winword.exe 通过 COM 对象查找 application/hta 的文件处理程序,这会导致 Microsoft HTA 应用程序(mshta.exe),加载恶意攻击者下载并执行包含 PowerShell 命令的 Visual Basic 脚本。
2.2 漏洞攻击原理简单图解
图2-漏洞攻击原理简图
2.3 相关知识介绍
HTA是HTML Application的缩写(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,与VB、C++等程序语言所设计的软件界面没什么差别。一般情况下,hta可以用vbscript与jscript编写,vbs功能更强大。 hta可以操作数据库,界面用html+css就可以实现,很方便写一些简单的应用。
OLE(Object Linking and Embedding,对象连接与嵌入)。是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM)。OLE不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为组件对象模型(Component Object Model),简称COM。OLE可以用来创建复合文档,复合文档包含了创建于不同源应用程序,有着不同类型的数据,因此它可以把文字、声音、图像、表格、应用程序等组合在一起。
第三部分 攻击代码分析
3.1 ms.rtf
new ActiveXObject("wscript.shell") 启动创建对象的应用程序。一旦对象被创建,就可以用定义的对象变量在代码中引用它。
a.Run("%SystemRoot%\\system32\\calc.exe") 运行计算器。%systemroot%是系统中的一个变量,表示的是windows系统启动文件夹位置。System32是系统文件夹下的一个子文件夹,而计算器的应用正是在此文件夹下。
3.2 配置文件
对于rtf文件,服务器的Content-type会返回application/rtf
对于rtf文件,服务器的Content-type会返回application/hta,所以word将返回对象以hta脚本的方式执行
此处关键点在于添加objupdate标签,这个标签的作用是可以自动更新对象,因此加了这一处后就无需用户交互即可执行恶意代码。
第四部分 利用复现过程
Step1:在网站根目录下构造ms.rtf文档
在网站根目录下新建一个 rtf 文件, 内容任意,如(Dong&Li test)保存命名 ms.rtf。
打开Apache,用浏览器访问网站根目录,可以看见根目录下的文件(如图)
Step2:构建发送给受害者的恶意文档exp.rtf
接着新建一个 word 文档,插入 => 对象 => 由文件创建 => 链接到文件 =>ms.rtf 的地址,然后将 word 另存为rtf格式,文件名为 exp.rtf。
在我们的实验中ms.rtf的地址为本机IP+文件名(如:http://192.168.80.1/ms.rtf)。
对象插入成功后,文档内容如下
此时如果我们双击“Dong&Li test”,会正常弹出文档ms.rtf内容。
Step3:改写ms.rtf
此时将网站根目录下的 ms.rtf 用记事本打开,在文档添加如下代码:
Step4:修改配置文件
此时在apache配置文件conf/mime.types中把
修改成
Step5:删除浏览器缓存
打开ie浏览器,删除浏览器缓存
Step6:验证攻击
重启服务器。打开 exp.rtf, 双击内容,即可弹出计算器
Step7:修改文档,实现自动攻击
这样的poc还是需要用户双击对象进行交互的,我们可以进一步做成自动弹出计算器。这里我们先使用记事本把exp.rtf打开。
将 \ object\objautlink\rsltpict 修改为 \ object\objautlink\objupdate\rsltpict
Step8:验证自动攻击
保存修改后,此时若再打开exp.rtf,就会直接弹出计算机,不需要用户手动点击。
第五部分 攻击总结
漏洞CVE-2017-0199允许攻击者远程执行恶意VBScript脚本。这是一个逻辑漏洞,而且目前大多数安全缓解方案都无法处理针对这种漏洞的攻击活动。当恶意脚本运行之后,它会下载并执行恶意Payload,并向用户显示一个钓鱼文档。我们所检测到的两个恶意文档都会执行相应的恶意Payload,其中一个包含LATENTBOT,而另一个则包含WingBird/FinFisher。虽然恶意文档中仅包含一个指向攻击者服务器的链接地址,但MVX引擎仍然成功检测到了这种多阶段的攻击活动,不过微软公司已经发布了相应的更新补丁,所以尽快对自己的Office软件进行升级是十分必要的。
该漏洞利用OFFICE OLE对象链接技术,将包裹的恶意链接对象嵌在文档中,OFFICE调用URL Moniker(COM对象)将恶意链接指向的HTA文件下载到本地, URL Moniker通过识别响应头中content-type的字段信息最后调用mshta.exe将下载到的HTA文件执行起来。
微软提供的COM/OLE技术犹如一把双刃剑,在为开发人员提供方便的同时,也为攻击者进行恶意攻击提供了机会。此次漏洞便是一个很好的说明。攻击者巧妙的利用了OLE link object、URL Moniker和Windows在执行HTA文件时会匹配搜索数据流的特性,构造了包含恶意链接的RTF文档,绕过大多数的防御措施,实现自己的恶意行为。
参考资料
http://www.zerokeeper.com/penetration/cve20170199-office-rtf-replication-process.html