一个利用姿势清奇的11882格式溢出文档的分析

栏目: 编程工具 · 发布时间: 5年前

内容简介:日前无意中得到一个很有意思的rtf文档,沙箱里行为一大堆,文档本身又混淆的很清奇,所以花了一点时间分析了这个样本。大致理清样本的攻击手法和攻击链后,公开部分分析过程,样本和数据,供大家参考。特别感谢Flygend提供的情报和银雁冰在分析过程中关于shellcode解混淆的支持

一个利用姿势清奇的11882格式溢出文档的分析

日前无意中得到一个很有意思的rtf文档,沙箱里行为一大堆,文档本身又混淆的很清奇,所以花了一点时间分析了这个样本。大致理清样本的攻击手法和攻击链后,公开部分分析过程,样本和数据,供大家参考。

特别感谢Flygend提供的情报和银雁冰在分析过程中关于shellcode解混淆的支持

0x00 样本基本信息

样本是一个rtf文档,首次上传VT时间是10月24日,由位于中国的用户通过web方式上传。

一个利用姿势清奇的11882格式溢出文档的分析

使用编辑器查看样本可以得知样本嵌入的OLE对象经过混淆。

一个利用姿势清奇的11882格式溢出文档的分析

在无法使用 工具 提取OLE对象的前提下,采用银雁冰告知的方法,成功获取Equation.3对象,并在stream流中发现部分疑似shellcode的数据。

一个利用姿势清奇的11882格式溢出文档的分析

分析整理样本落地进程链如下:

Winword.exe
    EQNEDT32.EXE
        MSCLTPAA.exe
            DXDriver.dll
                _XDSFA_XVGVGGH.dmp

0x01 doc文档分析过程

首先可以看到文档的ole对象是严重混淆的。这时需要让内存加载ole对象,并dump出来,方法见下面的调试内容:

一个利用姿势清奇的11882格式溢出文档的分析

为Eqnedt32.exe注册调试器,运行rtf文档,发现doc文件会触发cve-2017-11882漏洞,具体的复制的内容见下图(红框圈出的部分会触发漏洞):

一个利用姿势清奇的11882格式溢出文档的分析

栈帧结构如下(方框和红圈圈出的部分分别为函数返回地址和压入的第一个参数):

一个利用姿势清奇的11882格式溢出文档的分析

下面的截图可以得知,strlen返回结果为0x30,而要复制到栈中的位置为ebp-0x28,所以会有8个字节的溢出,替换函数返回地址为0x410db7。而0x410db7位置的指令是ret,所以第二次弹栈,EIP被赋值为这个函数的第一个参数,也就是0x18f354.

一个利用姿势清奇的11882格式溢出文档的分析

程序运行至下图时,执行第一段shellcode。这一段的shellcode的行为是:跳转到当前esp+0x2c8(0x18f4a4)指向的内存区域(0x5a88f0)。

一个利用姿势清奇的11882格式溢出文档的分析

解密完毕后跳转到真正的shellcode

一个利用姿势清奇的11882格式溢出文档的分析

通过上图得知,shellcode在堆中,所以只有未开启dep的环境中才能运行第二段shellcode。

第二段shellcode首先进行异或解密,解密完成后,跳转到函数入口。这段shellcode硬编码了很多字符串和API地址,并进行加密。前半段通过大量的字符串拼接和填充方法,生成将要释放的文件目录以及要加载的dll名称。

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

访问注册表项,设置开机启动:

一个利用姿势清奇的11882格式溢出文档的分析

枚举进程抗调试:

一个利用姿势清奇的11882格式溢出文档的分析

释放文件:

一个利用姿势清奇的11882格式溢出文档的分析

对MSCLTLAA.exe进行string2Byte解密后,得到PE文件。

一个利用姿势清奇的11882格式溢出文档的分析

创建MSCLTPAA.exe然后写入解密的数据。

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

最后将可执行文件加入开机启动项。

一个利用姿势清奇的11882格式溢出文档的分析

至此shellcode部分分析完毕。(调试过程加过注释的部分IDA数据库可通过结尾链接获取)

0x02 MSCLTPAA.exe

文件名称: MSCLTPAA.exe
文件大小: 263 KB (269,824 字节)
文件时间: 2018-10-31 16:45:45
时 间 戳: 5B6DDABC->2018-08-11 02:34:36
文件 MD5: 019A56601EF675D1E8BDF6DB8B3BD195
文件 CRC: E81E80FD
文件SHA1: 38C45F8F4902A9E30F4E7610AD9E8744E3EB53E8

MSCLTPAA.exe是UPX加壳,脱壳后进行分析,主要行为如下:

解密并释放”压缩包文件名+_XDSFA_XVGVGGH.dmp”然后创建Google Service注册表项并写入相应键值。

一个利用姿势清奇的11882格式溢出文档的分析

释放压缩包到临时目录下,命名为DXDriver.dll

一个利用姿势清奇的11882格式溢出文档的分析

带参数加载dll导出函数

一个利用姿势清奇的11882格式溢出文档的分析

部分动态调试细节如下:

释放压缩文件

一个利用姿势清奇的11882格式溢出文档的分析

调用expand.exe 进行压缩包解压

一个利用姿势清奇的11882格式溢出文档的分析

创建Google Service注册表项,用于配置后面的dropper

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

主机杀软检测:枚举进程,查找是否有avgui.exe,avastSvc.exe,bka.exe和诺顿的杀毒进程

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

移动临时文件中的dll

一个利用姿势清奇的11882格式溢出文档的分析

调用Rundll32执行dll的导出函数。

一个利用姿势清奇的11882格式溢出文档的分析

0x03 DXDriver.dll

文件名称: DXDriver.dll
文件大小: 77 KB (78,848 字节)
文件时间: 2018-08-10 11:13:20
时 间 戳: 5B6DD5BE->2018-08-11 02:13:18
文件 MD5: 333CA047BC6738121EB70DACCDB0EF2C
文件 CRC: D832D38
文件SHA1: 8EDC25E62932B726E4E81F80A1681700918E001E

导出函数如下:

一个利用姿势清奇的11882格式溢出文档的分析

根据父进程传进的参数,看一下sub_10002232。这个函数的行为是重新加载自身到10000000虚拟地址,并带参数”{SKALXCDJKWJS-123K-XFKQ-PAOS-DJSKAXSDFSQKWJ}”执行到处函数。如图:

一个利用姿势清奇的11882格式溢出文档的分析

加载自身后带参数重新执行flush导出函数。

一个利用姿势清奇的11882格式溢出文档的分析

参数不同,所以执行另一个分支,创建新线程。

一个利用姿势清奇的11882格式溢出文档的分析

ThreadProc的行为是:

1.    枚举Bka进程(bkav的杀软进程)和系统服务进程
2.    获取系统版本
3.    带参数执行父进程释放的_XDSFA_XVGVGGH.dmp的“BeginApp”导出函数。

静态分析结果如下:

一个利用姿势清奇的11882格式溢出文档的分析

加载dll的代码如下:

一个利用姿势清奇的11882格式溢出文档的分析

0x04 _XDSFA_XVGVGGH.dmp

文件名称: ~D76154_tmp_XDSFA_XVGVGGH.dmp
文件大小: 155 KB (158,720 字节)
文件时间: 2018-08-10 11:13:20
时 间 戳: 5B6DD5BF->2018-08-11 02:13:19
文件 MD5: 18BAA05DC4AE90ACA0F30EAEAA6ECB44
文件 CRC: 1CB67B0F
文件SHA1: 4E04C04A690AFA1843B294BD23AB225C6D57A513

Dll被加载时,会复制CWorkerThread类的虚表,并创建名称为NULL的事件,创建Google Download Service互斥量保证系统唯一实例运行。

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

获取主机信息并进行MD5散列,这个hash会作为上线包的一部分。

一个利用姿势清奇的11882格式溢出文档的分析

Dll同样会加载自身:

一个利用姿势清奇的11882格式溢出文档的分析

这个dll执行过程中基本上都是利用虚表和硬编码API进行跳转的

一个利用姿势清奇的11882格式溢出文档的分析

跳转到kernel32.dll中,生成http头部信息,并调用InternetOpen函数

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

然后获取http api的地址

一个利用姿势清奇的11882格式溢出文档的分析

发送上线包是虚表跳转的方式,寻址到之前获取的API地址,进行跳转的。比如调用InternetSetOptionW函数。

一个利用姿势清奇的11882格式溢出文档的分析

上线包

一个利用姿势清奇的11882格式溢出文档的分析

url数据如下

一个利用姿势清奇的11882格式溢出文档的分析

发送上线包

一个利用姿势清奇的11882格式溢出文档的分析

一个利用姿势清奇的11882格式溢出文档的分析

根据代码逻辑,如果成功连接服务端,会下载压缩包,命名为”_Google_Cloud.TMP”,判断下载数据为压缩格式后,写入本地文件,并执行expand.exe解压文件。

一个利用姿势清奇的11882格式溢出文档的分析

然后将对应文件路径写入注册表当中,上层函数的参数为“SEC_COMP”

一个利用姿势清奇的11882格式溢出文档的分析

从代码逻辑上来看,payload应该是一个dll,因为成功释放文件后,代码会通过注册表项查找payload路径,并且获取“PythonThreadStart”导出函数的地址,并且运行执行这个函数。

一个利用姿势清奇的11882格式溢出文档的分析

0x04 小结

从沙箱跑的结果看,样本好像还嵌入了可以出发CVE-2018-0802漏洞的Equation对象,这部分内容后续确定。

这个样本的漏洞利用方法,存在一定的局限性,在开启了DEP的windows环境中,这个样本就无法顺利执行,但是同以往11882的漏洞利用姿势来看,还是有一些新意的,至少从shellcode的布局来看,作者对公式编辑器解析Equation.3对象的流程十分熟稔。由于C2失活,无法取得更深层次的payload。但是截至到最后的这个dropper部分,这个样本从文档混淆的方法,到对抗杀软和调试的耐心都是可圈可点的。另外,C2的IP地址,根据我所知的情报渠道,并没有查到这个IP有发送垃圾邮件的迹象,而’отлаживать ‘这个俄语单词,好像也能说明一些问题。同时,从样本针对的杀软来看,不像是针对国内普通用户的,更像是针对采购了avast,bkav和诺顿等厂商杀软的用户。至于是不是针对性的攻击,由于暂时不能获取更多信息,就无从得知了。

由于时间有限,并没能够完全理解样本作者设计混淆Equation.3对象的思路,只是把攻击链条做了部分还原,在调试过程中耐着性子找API地址,虽然有些费时,但是也是一件很有意思的事情。因为代码静态分析难度比较大,所以分享了一部分样本的IDA数据库,在结尾的参考链接中。

根据VT情报,该文档首次由中国的用户在10月24日提交,大约记得彼时只有BitDefender,kaspersky和360这三家引擎能够查杀。如果最早获取此样本的人能够看到这篇文章,希望他能够结合自身所处环境,对主机进行深层次的病毒扫描,排除威胁吧。

0x05 部分IoC和参考链接

180.150.226.18

参考链接:

注释后的IDA数据库:

https://github.com/rofmia/IDB_Share

[翻译]RTF恶意软件如何躲避基于特征的静态检测

https://bbs.pediy.com/thread-224222.htm


以上所述就是小编给大家介绍的《一个利用姿势清奇的11882格式溢出文档的分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

法律论证理论

法律论证理论

罗伯特·阿列克西 / 舒国滢 / 中国法制出版社 / 2002-12-01 / 30.00

阿列克西的著作探讨的主要问题是如法律裁决之类的规范性陈述如何以理性的方式证立。阿列克西将规范性陈述的证立过程看作实践商谈或“实践言说”,而将法律裁决的证立过程视为“法律言说” 。由于支持法律规范的法律商谈是普遍实践言说的特定形式,所以法律论证理论应当立基于这种一般理论。 在阿列克西看来,如果裁决是理性言说的结果,那么这一规范性陈述就是真实的或可接受的。其基本观念在于法律裁决证立的合理性取决于......一起来看看 《法律论证理论》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具