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

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

**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来达到执行特定文件的效果:

![](http://drops.javaweb.org/uploads/images/7cbeda387888f63046ee521bd25973767b50327f.jpg)

`packager!Cpackage:: Load`方法中处理不同类型复合文档的分支

在MS14-060这个补丁中,微软通过添加`MarkFileUnsafe`函数来弥补这个漏洞:

![](http://drops.javaweb.org/uploads/images/94afd8c314a8802151100e7630fe8dcbeacd8eb2.jpg)

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

![](http://drops.javaweb.org/uploads/images/4487c29d7be1d65a0b8a0e24316f8ff5aea5b35d.jpg)

未安装ms14-060`的packager!Cpackage:: EmbedReadFromStream`方法

`MarkFileUnsafe()`通过调用`IZoneIdentifier::SetId`来设置文件的Security Zone,传入的参数3对应的是设置URLZONE_INTERNET,从而标明此文件来自于其他计算机,运行时会弹出警告窗口:

![](http://drops.javaweb.org/uploads/images/66f62bb19d092670c1bf2a2b8bfc30a1ad3fae98.jpg)

![](http://drops.javaweb.org/uploads/images/2cc67615b2e11885723c04197c5c6bd802e9c7b0.jpg)

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

![](http://drops.javaweb.org/uploads/images/df4963d442b788011d7f3bdf37a77721ebab07c0.jpg)

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

0x02 样本分析
=========

* * *

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

![](http://drops.javaweb.org/uploads/images/9ad0f01c27b133a2fb141bd24676c77bbe8891a8.jpg)

![](http://drops.javaweb.org/uploads/images/2af9ad63e6e39260cbc3a8cf37a3100dab52748e.jpg)

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

![](http://drops.javaweb.org/uploads/images/2852d06f12867dcca005d0c1a456a936e2163b9e.jpg)

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

![](http://drops.javaweb.org/uploads/images/6ac5e5c38d604ef77094d7d5790328ab40066ecb.jpg)

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

![](http://drops.javaweb.org/uploads/images/6aeb9110c69ad9ed5279656195c51d27cc933657.jpg)

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

![](http://drops.javaweb.org/uploads/images/afdc2e6540d306dd296af78ac85b8e05009ebbec.jpg)

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

![](http://drops.javaweb.org/uploads/images/df10eb994608f008f65b39af52ae12c598ebf917.jpg)

![](http://drops.javaweb.org/uploads/images/eb20ba84398682fe40d6a185464b60235a45c5f1.jpg)

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

![](http://drops.javaweb.org/uploads/images/57f0658da55faa0eacbe1a23220468d8569eb3e3.jpg)

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

![](http://drops.javaweb.org/uploads/images/03373914f687b61f86afb4debec59baac7660d12.jpg)

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

0x03 所释放程序的分析
=============

* * *

putty.exe
———

ppt文件释放出来的putty.exe实际上是一个改名后的经过混淆的.NET 程序,MD5为 78fab9978ae4de4f684908f47fdc2333 ,这个程序其实是一个Dropper。

经过去混淆后,我们可以清楚地看到其程序代码,首先遍历是否有杀软进程:

![](http://drops.javaweb.org/uploads/images/952015b59d84779c29d9ad3e6f546725d354b434.jpg)

样本在这里其实不是一次遍历查找,而是分成多次遍历穿插在功能代码中,每次查找一到两款杀软的进程,查找的杀软进程如下:

ekrn.exe(ESET)

guardxkickoff.exe(IKARUS)

AvastSvc.exe

btagent.exe

bdagent.exe(BitDefender)

avgui.exe。

然后从资源中读取数据,并解密为一个PE文件

![](http://drops.javaweb.org/uploads/images/be958789d1950a31ac61ca1df95bd47bcdaf054e.jpg)

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

![](http://drops.javaweb.org/uploads/images/5e6cfbc6eaae26f3d2981659a35b245cc8356890.jpg)

![](http://drops.javaweb.org/uploads/images/69cad4a6aa518d8a5271c55ea2e15b93ea66af87.jpg)

**HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Windows – load**这个值可以指定在用户登录后自动运行的程序文件名。

然后将RegAsm.exe拷贝为`%temp%\svhost.exe`

![](http://drops.javaweb.org/uploads/images/e14b5c1505c30a687edd70ba538a38b09e490bf7.jpg)

![](http://drops.javaweb.org/uploads/images/9f7f5c35ed92bc34e7aa2ba9fa798ce4ff309da3.jpg)

![](http://drops.javaweb.org/uploads/images/39e909412ee787cb97ad0f0e691182a9535a70c2.jpg)

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

![](http://drops.javaweb.org/uploads/images/ee399b53a2aff15a117caa3acf878b9a65f4ce64.jpg)

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

![](http://drops.javaweb.org/uploads/images/ea24e9ed9d2da3ea864d41e50a8a8bf4abd2b12a.jpg)

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

![](http://drops.javaweb.org/uploads/images/d011c912af3e035d0740ccb5c7dbbb9c2749970e.jpg)

svhost.exe
———-

在HKEY_CURRENT_USER中设置一个值di用于判断是否已经感染过该系统:

![](http://drops.javaweb.org/uploads/images/c31a915be643dbfbfa65e0ef36ed61fbb93b24e5.jpg)

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

![](http://drops.javaweb.org/uploads/images/0ce43054c0f626c8aa3119ec5d6f599c6d1f6a97.jpg)

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

![](http://drops.javaweb.org/uploads/images/eb30eaa5e579181e67a2f78e015b53dcdf5b868d.jpg)

命令行如下

“`
netsh firewall add allowedprogram “C:\Users\***\AppData\Local\Temp\svhost.exe” ” svhost.exe” ENABLE

“`

申请一片内存空间用于存放接收/发送的数据,开始网络连接:

![](http://drops.javaweb.org/uploads/images/bd1e7c18a903598ea148c3127acc61eef52ad101.jpg)

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

![](http://drops.javaweb.org/uploads/images/7aee553761a92e0da1502eaffa84f98587163b00.jpg)

端口号: 5552

![](http://drops.javaweb.org/uploads/images/d0c88d4e2250a2fbc34ce5faffa5439c8d71d80d.jpg)

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

![](http://drops.javaweb.org/uploads/images/f6e2f3756138a1d6ee005c173f7e8ece2947b496.jpg)

然后开启一个线程循环查询socket是否可读(接收命令):

![](http://drops.javaweb.org/uploads/images/f4fe9d877c97a95f47ebb27e0fedd1a17c2ae680.jpg)

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

![](http://drops.javaweb.org/uploads/images/dd4043341c6cb4148e0cc770d5c61f5caf1e6c9d.jpg)

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

![](http://drops.javaweb.org/uploads/images/5abf9a09551e49f8393d887817258fc40166371c.jpg)

![](http://drops.javaweb.org/uploads/images/dbac75fa5903b357f0968ebfe4efb826c3a916a9.jpg)

设置自启动项:

![](http://drops.javaweb.org/uploads/images/fd5d49664c50c1bf1a4be2a3485e02f01cc7404c.jpg)

![](http://drops.javaweb.org/uploads/images/949d54bb672cd729be0373162ddc6aa74e81e741.jpg)

接收命令后,对命令做出相应的处理,在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)

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容