Sandworm Attack小结
这个漏洞刚出来时就分析过,当时大致弄明白了原理,但对很多细节和原理还是一知半解。后来开始找工作……今天终于有时间来把欠的这部分功课补上。
这个漏洞网上的各种中英文分析已经很多了,因此这里我只根据自己的情况做一个小的整理和总结,并将参考的各种相关资料贴上来供自己温故知新。
1. CVE-2014-4114
首先,CVE-2014-4114这个逻辑漏洞的核心在于当PPT调用IPersistStorage接口的Load方法来加载storage对象(OLE复合文档)对应的OLE复合文档对象时,未对所有类型的复合文档进行MOTW(Mark On The Web)处理导致的。从而使得攻击者可以通过伪造OLE复合文档的CLSID来绕过MOTW保护。其执行过程如下图所示:
图1 执行路径[1]
CVE-2014-4114攻击样本中复合文档对应的CLSID [2]如图所示:
图2 CLSID
通过查询注册表,{00022602-0000-0000-C000-000000000046} 对应的是Video Clip。由图1可见,CPackage::Load调用了ReadClassStg来获取复合文档的文件类型,并根据CLSID分两类处理。
而样本中两个文档的类型都为0x22602(对应_CLSID_AVIFile),因此CPackage::Load调用LoadMMSStorage进一步处理。LoadMMSStorage内部根据具体类型,调用CPackage::OLE2SoundRecReadFromStream --> CPackage::CreateTempFileName --> CopyStreamToFile最终将文件写入临时目录。
由图1可见,CopyFileW和CopyStreamToFile之后,未将读取到文件进行MOTW处理,即未调用MarkFileUnsafe。
图3 MarkFileUnsafe
---------------------------------------------------------------------------------------------------
MarkFileUnsafe
MarkFileUnsafe的作用是通过调用IZoneIdentifier::SetId来设置文件的Security Zone。此处设置的URLZONE值为3,即URLZONE_INTERNET类型(图4),从而标明此文件来自于其他计算机(图5)。
图4 URLZONE
图5 Security Zone
注意,Security Zone是通过NTFS文件系统的Alternate Data Streams (ADS)特性实现的,而不属于Windows的ACL机制。它通过给文件创建一个名为Zone.Identifier:$DATA的Alternate Streams来保存Zone信息。如图6所示。
图6 Zone.Identifier:$DATA
随后,当用户试图运行、安装此类文件时,Windows会检测文件的Zone信息,阻塞执行并弹出一个警告提示,提示用户将有不可信的文件执行。
图7 安全警告
---------------------------------------------------------------------------------------------------
最终,写入临时目录的slides.inf和slide1.gif未经MOTW处理,如图8所示。
图8 样本释放的文件
随后,PPT通过OLE复合文档对象IOleObject接口的DoVerb方法来响应终端用户的动作。这里PPT根据幻灯片xml的定义,调用DoVerb方法(iVerb == 3)。如下图所示
图9 slide1.xml
IOleObject::DoVerb()内部根据iVerb的值进行不同的处理。当iVerb大于等于3时,执行流程来到图10所示的位置。其功能与“右键单击文件,在Popup菜单中选择第2个(3-2=1)选项来运行文件”一致,而对于inf文件,其Popup菜单第二个选项刚好为“安装”(如图11所示),因此最终通过InfDefaultInstall.exe安装了inf。
图10 IOleObject::DoVerb() with iVerb=3 [3]
图11 Popup菜单
2. CVE-2014-6352
MS14-060发布3天后,就爆出补丁依旧可以被绕过,并在野外发现了相应的样本。随后微软发布了临时解决方案Fix it (Security Advisory 3010060)在MS14-064发布前缓解漏洞利用。
首先,看一下MS14-060补丁的修补方案,通过二进制对比工具可以发现MS14-060只完善了所有类型复合文档的MOTW处理,如下图所示。
图12 添加MOTW保护 [1]
然而,本次漏洞的问题不止这一处,前面的分析已经指出攻击者可以同时通过操控“OLE复合文档的CLSID”和“xml中的OLE Verb”来改变执行流程。
但问题在于并不是所有被“MOTW保护”标记的文件在打开时都会弹出警告窗口。例如从网上下载的docx、pdf、zip等等文件,打开它们时并不会被提示安全警告(注:docx等office文件会在保护视图模式下打开)。
图13 “MOTW保护”标记的文件
当安装相关的软件后,会在右键Popup菜单中注册快捷方式方便用户操作,如图14所示,当安装python后,针对*.py文件的Popup菜单第二项便为Edit with IDLE。当攻击者操控“xml中的OLE Verb”为3来使用“edit with IDLE”编辑打开*.py时,并不会得到安全警告。Mcafee的研究人员通过这种方法实现了漏洞利用,详情请参考[4],这里不再重复。
图14 针对*.py文件的Popup菜单
另外,在野外捕获到的攻击样本中,也有攻击者直接将exe嵌入ppt,并通过操控“xml中的OLE Verb”为3来使用“管理员权限”运行exe,如图15所示。此时,若受害者使用了管理员账户登录系统或关闭了UAC,也将得不到任何安全警告。若受害者使用标准用户账户登录系统或未关闭UAC,则将得到UAC警告对话框。
图15 以管理员身份运行
3. 其他
可以通过Jon Erickson在BlackHat 2014 Asia上的报告《Persist It Using and Abusing Microsoft’s Fix It Patches》来学习、分析微软在本次Sandworm Attack中发布的fix it。
在CVE-2014-4114曝出后不久就出现了直接嵌入文件(而非最早的UNC下载)的利用样本[5],我通过CVE-2014-4114生成器源代码修改了一份嵌入方式的生成器,但在保证复合文档类型为0x22602的情况下,inf并未按照预期安装(MS14-060补丁前),精力有限就没再去跟踪调试原因了。
4. 参考文献
[1] Timeline of Sandworm Attacks
http://blog.trendmicro.com/trendlabs-security-intelligence/timeline-of-sandworm-attacks/
[2] Microsoft Compound Document File Format.
http://www.openoffice.org/sc/compdocfileformat.pdf
[3] Bypassing Microsoft’s Patch for the Sandworm Zero Day: a Detailed Look at the Root Cause
http://blogs.mcafee.com/mcafee-labs/bypassing-microsofts-patch-sandworm-zero-day-root-cause
[4] Bypassing Microsoft’s Patch for the Sandworm Zero Day: Even ‘Editing’ Can Cause Harm
[5] Xecure lab discovers new variant of CVE-2014-4114 in Taiwan APT attacks
http://blog.xecure-lab.com/2014/10/cve-2014-4114-pptx-apt-xecure-lab.html
Sandworm Attack小结的更多相关文章
- fastbin attack学习小结
fastbin attack学习小结 之前留在本地的一篇笔记,复习一下. 下面以glibc2.23为例,说明fastbin管理动态内存的细节.先看一下释放内存的管理: if ((unsigned ...
- SSH小结
工作有一段时间了,经常用SSH登录远程机器,但对原理一直不是很了解,所以查阅了一些资料,写个小结. 一. SSH是什么? SSH的全称是Secure Shell, 是一种"用来在不安全的网络 ...
- python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)
一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...
- 对最近java基础学习的一次小结
开头想了3分钟,不知道起什么名字好,首先内容有点泛,但也都是基础知识. 对之前所学的java基础知识做了个小结,因为我是跟着网上找的黑马的基础视频看跟着学的,10天的课程硬生生给我看了这么久,也是佛了 ...
- 转:xxe attack学习
小结 1.http包发送类型:content-type:text/xml2.xxe漏洞非常危险, 因为此漏洞会造成服务器上敏感数据的泄露,和潜在的服务器拒绝服务攻击.要去校验DTD(document ...
- ARP Poisoning Attack and Mitigation Techniques ARP欺骗 中间人攻击 Man-In-The-Middle (MITM) attack 嗅探 防范 Can one MAC address have two different IP addresses within the network?
小结: 1. ARP缓存投毒,窃听中毒者之间的通信: 2. ARP Poisoning Attack and Mitigation Techniques - Ciscohttps://www.cisc ...
- parse_url小结
本篇文章对parse_url进行一个小结 0x01:parse_url $url = "/baidu.com:80"; $url1 = "/baidu.com:80a&q ...
- Fastbin attack 总结
Fastbin attack 本文参考了ctf-wiki 和glibc 要了解fastbin attack,我们先要了解fastbin的机制.由于libc2.26后加入了tcache机制,我们这里就只 ...
- House_of_orange 学习小结
House_of_orange学习小结 house_of_orange最早出现在2016年hitcon的一道同名题目,其利用效果,是当程序没有free函数的时候,我们可以通过一些方法,来让chunk被 ...
随机推荐
- Robot Framework自动化测试四(分层思想)
谈到Robot Framework 分层的思想,就不得不提“关键字驱动”. 关键字驱动: 通过调用的关键字不同,从而引起测试结果的不同. 在上一节的selenium API 中所介绍的方法其实就是关 ...
- 修改Tomcat使用的JVM内存大小
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- 针对浏览器不支持JavaScript的简单处理
简单的思路是这样的: 在网页中显示某些内容,作为不支持JS的提示, 然后在页面载人的时候执行一段JS代码,代码的功能就是隐藏那个提示不支持JS的代码 具体内容看例子: <html> < ...
- hdu 1460 完数
注意:num1和num2的大小未知,需比较! 有两种方法: 法一:素数打印+素数分解(求因数和公式) #include<iostream> #include<cstring> ...
- 使用webpack2.0 搭建react.js项目
最近一段时间没有写react.js,发现webpack已经完全升级为2.0了,升级后导致以前的项目不能正常编译,只能重新实践一番 关于webpack2.0和1.x的区别概括起来就是tree shaki ...
- Windows Server 2008 R2系统上安装SQLServer2012集群(简略)
4台服务器(1台AD.2台SQL服务器.1台iSCSI存储服务器) 9个IP(1个AD的IP.2个SQL服务器的IP.2个心跳IP.1个iSCSI存储服务器的IP.1个集群IP.1个DTC的IP.1个 ...
- css样式美化 下拉框 select 样式
<span class="setleft wid80"><span class="fyhbx">*</span>入库类型 : ...
- Linux必会必知
一.前言 Linux作为一个开源系统,被极客极力推崇,作为程序员不来了解一下,那就亏了 Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次 ...
- springboot1.5.10兼容高版本6.1.1elasticsearch
1.引入依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elastic ...
- svn的使用总结
在网上看到了以前介绍非常全的svn的文章,拿来分享 原文网址 http://www.cnblogs.com/jx270/archive/2013/03/04/2943595.html 还有一篇更基础 ...