# CVE-2014-6352漏洞及定向攻击样本分析

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-06-15T03:06:00Z
Canonical: https://wepostx.com/topics/309

> 乌云历史资料归档
>
> **原始作者：** 360安全卫士
> **原始编号：** superkieran-wooyundrops:1250
> **原始发布时间：** 2016-06-15 11:06
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

Author：360天眼实验室

# 0x00 引子

人在做，天在看。
近期360天眼实验室捕获到一例针对印度的定向攻击样本，样本利用了沙虫漏洞的补丁绕过漏洞CVE-2014-6352，经分析确认后我们认为这是趋势科技在今年三月份发布的名为“Operation C-Major”APT攻击活动的新样本。关于C-Major行动的相关内容，有兴趣的读者可以在文后的参考链接中查看。
本文主要对CVE-2014-6352漏洞做基本的分析并剖析一个现实中利用此漏洞执行定向攻击的案例。

# 0x01 漏洞分析

样本利用的漏洞为CVE-2014-6352，该漏洞是CVE-2014-4114的补丁绕过（MS14-060）问题,在管理员模式或者关闭UAC的情况下可以实现不弹出警告窗运行嵌入的恶意程序。与CVE-2014-4114的利用样本相比，CVE-2014-6352样本的特点是没有嵌入inf，只有一个嵌入PE的OLE对象。从攻击者的角度看，这类样本可以说有利有弊。在管理员模式下，可以无警告窗执行PE文件，绕开MS14-060的补丁。但是如果不是在管理员模式下，就算受害者没有安装MS14-060的补丁，也会弹窗提示是否要执行嵌入的EXE文件。
我们知道CVE-2014-4114漏洞的成因在于packager.dll的CPackage::Load方法加载对应的OLE复合文档对象时，对不同类型的复合文档有不同的处理流程，其中对某些复合文档嵌入的不可信来源文件没有经过处理，从而使得攻击者可以通过伪造OLE复合文档的CLSID来达到执行特定文件的效果：

![原文图片](/media/2016/06/659f95e765abe6959948c1dce030f32e)

packager!Cpackage:: Load方法中处理不同类型复合文档的分支
在MS14-060这个补丁中，微软通过添加MarkFileUnsafe函数来弥补这个漏洞：

![原文图片](/media/2016/06/d06c72ece67dfc4b4237788636d2fc23)

ms14-060补丁中的packager!Cpackage:: EmbedReadFromStream方法

![原文图片](/media/2016/06/62dc639b96bd8078ebcad59ba1e27afe)

未安装ms14-060的packager!Cpackage:: EmbedReadFromStream方法
MarkFileUnsafe()通过调用IZoneIdentifier::SetId来设置文件的Security Zone，传入的参数3对应的是设置URLZONE_INTERNET，从而标明此文件来自于其他计算机，运行时会弹出警告窗口：

![原文图片](/media/2016/06/e8de2728ab21596b4e23789040f55f20)

![原文图片](/media/2016/06/e0ddbfd4c2f51a74756e553251c5f3eb)

然而漏洞并不仅仅只是未对不可信来源的文件处理，攻击者还可以通过伪造OLE复合文档的CLSID和XML中的OLE Verb来改变执行流程。问题还在于对一个exe文件来说，即使被标记了URLZONE_INTERNET之后，右键点击以管理员权限运行时，将不会再弹窗提示该文件来自于其他计算机，而是以UAC的提示窗弹出：

![原文图片](/media/2016/06/1faad699fd508d40fa65a3046ea78dfe)

所以只需要构造特定的CLSID和OLE Verb，使执行流程来到右键界面的第二项管理员权限运行EXE程序，那么在关闭UAC或者管理员权限的情况下，就能绕过MS14-060补丁施加的限制。下面我们结合这次从外面捕获到的样本来展示一下整个漏洞利用的过程。

# 0x02 样本分析

首先我们拿到了一个名为vedio.ppsx的PPT文件，MD5为b6a1ee16de885c70682a7a8e4c1b556c ，从VirusTotal的上传来源看为来自印度。对这个ppsx解压处理，可以看到其内嵌了一个OLE对象，嵌入的是一个PE文件：

![原文图片](/media/2016/06/c5d0be211ea11936a3ae9574a5e3b3c5)

![原文图片](/media/2016/06/9ea53cab46cde27ee9a345f7660ee3d7)

在video.ppsx\ppt\slides\slide1.xml中，指定了嵌入的对象id = rId3

![原文图片](/media/2016/06/511a9b3bc6865d24c7eca14a8cab4dd2)

在video.ppsx \ppt\slides\_rels\ slide1.xml.rels中指定了rId3对应的是前面提到的oleObject1.bin

![原文图片](/media/2016/06/1f8e560637270e4b5298111ccf57d71d)

复合文档对应的CLSID 如下图，是{0003000c-0000-0000-c000-000000000046}，对应的是CLSID_OldPackage，那么根据上面的分析，CPackage::Load调用CPackage::PackageReadFromStream进一步处理，PackageReadFromStream会通过CPackage::EmbedReadFromStream在临时目录释放嵌入的PE文件。

![原文图片](/media/2016/06/00ba056d8a7c47c005bd1fb64922fad5)

packager!CPackage::EmbedReadFromStream中调用了 packager!CopyStreamToFile这个函数，将嵌入的PE释放到temp目录下的putty.exe，并通过MarkFileUnsafe设置文件标记：

![原文图片](/media/2016/06/34202769ce07504eff5d406b65c247e0)

然后，通过CPackage::DoVerb方法来响应终端用户的动作，在 CPackage::DoVerb中，会先对第二个参数进行判断，这个参数在video.ppsx\ppt\slides\slide1.xml中指定：

![原文图片](/media/2016/06/83d1c7fa0258b8f6b5dfc5d89761ad7f)

![原文图片](/media/2016/06/8d6407fd61c1b691f3c20549ffce0b33)

样本中构造的参数是3，所以进入使用popup菜单命令执行操作的流程：

![原文图片](/media/2016/06/73aec6d1a86e12e2ac74d6e6a2b5bd7b)

调用GetMenuItemInfo时，第二个参数uItem代表菜单的位置，这里参数为1，也就是右键菜单的第二项，对于exe文件，右键菜单的第二项是“以管理员权限运行”

![原文图片](/media/2016/06/af2886eadf4f7d1ec77f3edf6e12f358)

最终调用了SHELL32!CDefFolderMenu::InvokeCommand方法，这时就会以试图管理员权限运行putty.exe，在关闭了UAC或者管理员模式下，就绕过了MS14-060的保护静默地执行了一个PE文件。

# 0x03 所释放程序的分析

## putty.exe
ppt文件释放出来的putty.exe实际上是一个改名后的经过混淆的.NET 程序，MD5为 78fab9978ae4de4f684908f47fdc2333 ，这个程序其实是一个Dropper。
经过去混淆后，我们可以清楚地看到其程序代码，首先遍历是否有杀软进程：

![原文图片](/media/2016/06/af71b976dadfdecd755eb8e2318ae7a3)

样本在这里其实不是一次遍历查找，而是分成多次遍历穿插在功能代码中，每次查找一到两款杀软的进程，查找的杀软进程如下：
ekrn.exe（ESET）
guardxkickoff.exe（IKARUS）
AvastSvc.exe
btagent.exe
bdagent.exe（BitDefender）
avgui.exe。
然后从资源中读取数据，并解密为一个PE文件

![原文图片](/media/2016/06/1b66f6e71551c12801a295696bfbe8c0)

启动cmd进程，将自身拷贝成%temp%\net\health.exe并添加注册表启动项

![原文图片](/media/2016/06/36f6e0adab87d0af32277abd472a8c46)

![原文图片](/media/2016/06/bf2ed7ce07c7767391e876aed527f0de)

HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Windows - load这个值可以指定在用户登录后自动运行的程序文件名。
然后将RegAsm.exe拷贝为%temp%\svhost.exe

![原文图片](/media/2016/06/0bb5d84d296330aedcf330025e980ba4)

![原文图片](/media/2016/06/c1feaa107e149687ec5abfe8694b0421)

![原文图片](/media/2016/06/fc217de7fd311293dfba24446ee35042)

接着以Suspend方式启动svhost.exe，将之前解密出来的PE注入，并恢复线程。

![原文图片](/media/2016/06/46968ea4a7a49d5ab54c079c1a932dcf)

最后在%temp%/net/目录下写入health.exe.bat文件并执行

![原文图片](/media/2016/06/7e178b08075c1433b039faa6709621d5)

health.exe.bat的代码如下，作用是不断遍历进程查看svhost.exe是否启动，没有启动的话则将其启动。

![原文图片](/media/2016/06/e204e4ebe1b26e51814c792977245387)

## svhost.exe
在HKEY_CURRENT_USER中设置一个值di用于判断是否已经感染过该系统：

![原文图片](/media/2016/06/58fa83cdb5066bc229ec64819e695fa9)

设置HKEY_CURRENT_USER\Environment\SEE_MASK_NOZONECHECKS的值为1，这是用于关闭附件管理器检查的：

![原文图片](/media/2016/06/5ea699dfcf395059df6c89826f3ea33a)

然后用命令行启动netsh.exe，添加防火墙规则，允许其通过防火墙

![原文图片](/media/2016/06/8cfeb851a170d2bdfac0840a70c3a56b)

命令行如下

```text
#!shell netsh firewall add allowedprogram "C:\Users\***\AppData\Local\Temp\svhost.exe" " svhost.exe" ENABLE
```
申请一片内存空间用于存放接收/发送的数据，开始网络连接：

![原文图片](/media/2016/06/89e4baf051eed40f201e16ae28c70168)

C&C地址： [191.101.23.190](https://www.virusbook.cn/ip/191.101.23.190)

![原文图片](/media/2016/06/65b8b11f31d71f1e7c7db076f92b2800)

端口号： 5552

![原文图片](/media/2016/06/b7e7ed36ca3625b11c9f24df49b6f523)

收集受害者的系统信息，包括上线时间、系统版本、系统位数、磁盘信息、当前用户等等，并发送出去：

![原文图片](/media/2016/06/94e46fdfa199e6a373999667dcae3bdf)

然后开启一个线程循环查询socket是否可读（接收命令）：

![原文图片](/media/2016/06/f9463d4b49137c4158fc60344a54e0a6)

读取命令后，开启新线程根据指令执行对应的操作：

![原文图片](/media/2016/06/ce910059344babde8ad51c4b3c436475)

开启键盘记录线程，并将记录信息保存在注册表HKEY_CURRENT_USER\SoftWare\ ce99f8fa1676b15364293a0db3d6a707中：

![原文图片](/media/2016/06/a7b75a08f31f069e08a52bce2d1ce41a)

![原文图片](/media/2016/06/d55da5a6d3d60cc143461520ba847296)

设置自启动项：

![原文图片](/media/2016/06/1a41c6fed43020e3ec01bb670fa7b372)

![原文图片](/media/2016/06/b25b94207afdb0e4dd4e38784053c355)

接收命令后，对命令做出相应的处理，在switch中根据命令执行对应的功能，这里就不再详细分析，下面给出部分功能与对应的命令，如下：

- rn 下载/执行文件

- CAP 屏幕监控

- un 自删除、启动和终止进程

- up 在线更新

- Ex 加载插件

- GTV 获取注册表HKEY_CURRENT_USER\SoftWare\ ce99f8fa1676b15364293a0db3d6a707中的键盘记录信息

- STV 设置注册表HKEY_CURRENT_USER\SoftWare\ ce99f8fa1676b15364293a0db3d6a707开始键盘记录

- …

# 0x04 IOC

类型值
C&C[191.101.23.190:5552](https://www.virusbook.cn/ip/191.101.23.190)
Downloader URL[http://pcdopune.com/ad/video.ppsx](https://www.virusbook.cn/domain/pcdopune.com)

# 0x05 总结

在网上公开的IOC平台中发现，该C&C地址与趋势科技在今年三月份发布的“Operation C-Major”报告中的一个C&C完全一致。另外，样本下载的域名pcdopune.com关联到的其他样本中，也出现了与报告中几乎一样的恶意宏样本，由此我们认为这是与C-Major相关的攻击行动。
根据360威胁情报中心的数据，我们发现本文所涉及的样本仅仅只是C-Major行动中使用的多种Dropper中的一种类型，CVE-2010-3333、CVE-2012-0158等漏洞也被利用来做恶意代码的植入，不仅如此，甚至还利用了宏和脚本，所使用的PE样本更是灵活多变。从这些迹象来看C-Major行动背后团伙非常积极地利用所能得到各种植入手段，极有可能是专业的有背景及一定技术能力的组织。

## 参考链接

- [http://documents.trendmicro.com/assets/pdf/Indian-military-personnel-targeted-by-information-theft-campaign-cmajor.pdf](http://documents.trendmicro.com/assets/pdf/Indian-military-personnel-targeted-by-information-theft-campaign-cmajor.pdf)

- [http://www.cnblogs.com/Danny-Wei/p/4161539.html](http://www.cnblogs.com/Danny-Wei/p/4161539.html)

- [http://www.openoffice.org/sc/compdocfileformat.pdf](http://www.openoffice.org/sc/compdocfileformat.pdf)

## Replies
