Office高级威胁漏洞在野利用分析
高级威胁漏洞背景
在高级威胁攻击中,黑客远程投递入侵客户端最喜欢的漏洞是office文档漏洞,就在刚刚结束不久的黑帽子大会上,最佳客户端安全漏洞奖颁给了CVE-2017-0199漏洞,这个漏洞是时下office漏洞领域最热门的安全漏洞,最佳客户端安全漏洞这个荣誉归于Ryan Hanson、Haifei li、Bing Sun以及未知的黑客。
图1
CVE-2017-0199是Office系列办公软件中的一个逻辑漏洞,和常规的内存破坏型漏洞不同,这类漏洞无需复杂的利用手法,直接就可以在office文档中运行任意的恶意脚本,使用起来稳定可靠。微软在今年4月安全更新中对CVE-2017-0199漏洞进行了修复,但安全补丁的修复及防御仍然可以绕过,在7月微软的安全更新中又修复了同样类型的新漏洞CVE-2017-8570。在Syscan360 2017西雅图安全会议上,Haifei li和Bing Sun的议题《Moniker魔法:直接在Microsoft Office中运行脚本》详细解析了这类漏洞的原理,本文就不再赘述,下面开始着重分析这些漏洞的在野利用情况。
野外利用的第一个RTF版本
CVE-2017-0199漏洞在第一次被公开时,野外最早利用的样本是以word文档的形成进行传播利用,由于office文档后缀关联的宽松解析特性,更改其他文档后缀名,攻击仍然可以成功,所以野外利用的大部分恶意文档的真实文件格式是RTF格式,但恶意文档的后缀名却是 doc 、docx等后缀,该攻击具有较强的伪装欺骗特性。在野外利用样本文件格式中有一个关键字段objupdate,这个字段的作用是自动更新对象,当受害者打开office文档时就会加载远程URL的对象,对远程服务器触发一个HTTP请求,恶意服务器会对针对客户端的http请求强制返回Content-type为application/hta响应,最终客户端office进程会将远程的文件下载当作hta脚本运行,整个攻击过程稳定且不需要受害者的任何交互操作。
图2
野外利用的第二个PPSX版本
由于RTF版本的漏洞利用大量使用,各家安全软件检出率也都比较高,攻击者开始转向另外一种office文档格式进行攻击,攻击者发现ppsx格式的幻灯片文档也可以无交互触发漏洞,该利用方式的原理是利用幻灯片的动画事件,当幻灯片的一些预定义事件触发时可以自动触发导致漏洞利用。
如下图,一个流行的攻击样本中嵌入的恶意动画事件:
图3
事件会关联一个olelink对象,原理类似rtf版本,如下xml中的字段。
图4
但对象会嵌入的是一个带有script协议头的远程地址,而url地址中的XML文件是一个恶意sct脚本。
图5
当受害者打开恶意幻灯片文档时就会自动加载远程URL的对象,对远程服务器发起一个HTTP请求将文件下载到本地,最终客户端office进程会将下载到本地的文件当作sct脚本执行。
最新流行的第三个DOCX版本
近期我们发现有部分真实文件格式是Docx格式的文档加入了CVE-2017-0199的漏洞利用,攻击者非常巧妙的将CVE-2017-0199漏洞的RTF文件作为一个源嵌入到了Docx格式的文档中,这样导致docx文件在打开时是自动去远程获取包含0199漏洞的rtf文件,再触发后面的一连串攻击行为,这样的攻击增加了安全软件的查杀难度,一些杀毒软件毫无察觉!
如下图,我们会发现docx格式的文档嵌入了一个远程的文档对象:
图6
打开文档后会自动打开远程的恶意RTF文件!
图7
我们可以看到在野利用的RTF样本在VT上的检出率为31/59。
图8
而最新流行的DOCX版本的检出率仅为5/59。
图9
最新发现的“乌龙”样本
上周我们在外界发现了多例标注为CVE-2017-8570的office幻灯片文档恶意样本,同时有安全厂商宣称第一时间捕获了最新的office漏洞,但经过分析我们发现该样本仍然是CVE-2017-0199漏洞野外利用的第二个PPSX版本,通过对一例典型样本进行分析,我们发现样本使用的payload是Loki Bot窃密类型的木马病毒,是一起有针对性的窃密攻击。
图10
该样本使用powershell下载执行shell.exe
下载地址为 hxxp://192.166.218.230:3550/ratman.exe
Shell.exe 是一个混淆的.NET程序
图11
Shell.exe会内存解密执行Loki Bot功能,这时Loki Bot木马会窃取各种软件的信息。
图12
图13
如,窃取Firefox信息
图14
窃取chrome 360Browser等浏览器信息
图 15
窃取各类FTP软件的信息
图16
最后提交窃取的相关数据到远程服务器
hxxp://www.allstroyka.eleko.by/libraries/domit/dub/fre.php
图17
“乌龙”样本IOC
url
hxxp://[www.allstroyka.eleko.by/libraries/domit/dub/fre.php](http://www.allstroyka.eleko.by/libraries/domit/dub/fre.php)
hxxp://192.166.218.230:3550/ratman.exe
hxxp://192.166.218.230:3550/logo.doc
md5:
f2260d063e3aa2275acc59687e263e9c Shell.exe
e8ad2a5650ba9b89c44389f78da205c8 ppsx
总结和漏洞防护建议
目前流行的office高级威胁漏洞趋向于稳定的逻辑漏洞,CVE-2017-0199仍然是主流利用漏洞类型,该漏洞会针对不同文档格式利用有不同变种,同时新的CVE-2017-8570漏洞也在蠢蠢欲动。面对恶意文档攻击,广大用户需要提高安全意识,不要轻易打开不明来路的office文档,同时针对如下流行的office办公软件,使用360安全卫士安装最新的安全补丁,修复CVE-2017-0199和CVE-2017-8570漏洞。
| Microsoft Office 2007 Service Pack 3 |
| --- |
| Microsoft Office 2010 Service Pack 2 (32-bit editions) |
| Microsoft Office 2010 Service Pack 2 (64-bit editions) |
| Microsoft Office 2013 RT Service Pack 1 |
| Microsoft Office 2013 Service Pack 1 (32-bit editions) |
| Microsoft Office 2013 Service Pack 1 (64-bit editions) |
| Microsoft Office 2016 (32-bit edition) |
| Microsoft Office 2016 (64-bit edition) |
- python爬虫beautifulsoup4系列2
- python爬虫beautifulsoup4系列3
- 多元回归模型
- C++ STL之min_element()与max_element()(取容器中的最大最小值)
- RESTful API 设计最佳实践
- python爬虫beautifulsoup4系列4-子节点
- 元胞自动机实现多数分类算法
- 51Nod 1289 大鱼吃小鱼(模拟,经典好题)
- 用Metaclass实现一个精简的ORM框架
- HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
- Selenium2+python自动化63-二次封装(click/send_kesy)
- Selenium2+python自动化65-js定位几种方法总结
- HDU 2502 月之数(二进制,规律)
- Tensorflow实战系列:手把手教你使用CNN进行图像分类(附完整代码)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 细品Reids的HyperLogLog数据结构
- 布隆过滤器与缓存击穿
- spring之通过注解方式配置Bean(二)
- 【python-leetcode103-树的宽度遍历】二叉树的锯齿形层次遍历
- 图卷积网络(GCN)python实现
- hadoop伪分布式之配置yarn并运行MR程序(WordCount)
- 【python-leetcode637-树的宽度遍历】二叉树的层平均值
- graphSAGE的python实现
- 【python-leetcode111-树的宽度遍历】二叉树的最小深度
- 基于TypeScript封装Axios笔记(四)
- spring之泛型依赖注入
- 【python-leetcode113-树的深度遍历】路径总和Ⅱ
- spring之为什么要使用AOP(面向切面编程)?
- useContext更佳实践
- 【论文笔记】张航和李沐等提出:ResNeSt: Split-Attention Networks(ResNet改进版本)