内容简介:日前无意中得到一个很有意思的rtf文档,沙箱里行为一大堆,文档本身又混淆的很清奇,所以花了一点时间分析了这个样本。大致理清样本的攻击手法和攻击链后,公开部分分析过程,样本和数据,供大家参考。特别感谢Flygend提供的情报和银雁冰在分析过程中关于shellcode解混淆的支持
日前无意中得到一个很有意思的rtf文档,沙箱里行为一大堆,文档本身又混淆的很清奇,所以花了一点时间分析了这个样本。大致理清样本的攻击手法和攻击链后,公开部分分析过程,样本和数据,供大家参考。
特别感谢Flygend提供的情报和银雁冰在分析过程中关于shellcode解混淆的支持
0x00 样本基本信息
样本是一个rtf文档,首次上传VT时间是10月24日,由位于中国的用户通过web方式上传。
使用编辑器查看样本可以得知样本嵌入的OLE对象经过混淆。
在无法使用 工具 提取OLE对象的前提下,采用银雁冰告知的方法,成功获取Equation.3对象,并在stream流中发现部分疑似shellcode的数据。
分析整理样本落地进程链如下:
Winword.exe
EQNEDT32.EXE
MSCLTPAA.exe
DXDriver.dll
_XDSFA_XVGVGGH.dmp
0x01 doc文档分析过程
首先可以看到文档的ole对象是严重混淆的。这时需要让内存加载ole对象,并dump出来,方法见下面的调试内容:
为Eqnedt32.exe注册调试器,运行rtf文档,发现doc文件会触发cve-2017-11882漏洞,具体的复制的内容见下图(红框圈出的部分会触发漏洞):
栈帧结构如下(方框和红圈圈出的部分分别为函数返回地址和压入的第一个参数):
下面的截图可以得知,strlen返回结果为0x30,而要复制到栈中的位置为ebp-0x28,所以会有8个字节的溢出,替换函数返回地址为0x410db7。而0x410db7位置的指令是ret,所以第二次弹栈,EIP被赋值为这个函数的第一个参数,也就是0x18f354.
程序运行至下图时,执行第一段shellcode。这一段的shellcode的行为是:跳转到当前esp+0x2c8(0x18f4a4)指向的内存区域(0x5a88f0)。
解密完毕后跳转到真正的shellcode
通过上图得知,shellcode在堆中,所以只有未开启dep的环境中才能运行第二段shellcode。
第二段shellcode首先进行异或解密,解密完成后,跳转到函数入口。这段shellcode硬编码了很多字符串和API地址,并进行加密。前半段通过大量的字符串拼接和填充方法,生成将要释放的文件目录以及要加载的dll名称。
访问注册表项,设置开机启动:
枚举进程抗调试:
释放文件:
对MSCLTLAA.exe进行string2Byte解密后,得到PE文件。
创建MSCLTPAA.exe然后写入解密的数据。
最后将可执行文件加入开机启动项。
至此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注册表项并写入相应键值。
释放压缩包到临时目录下,命名为DXDriver.dll
带参数加载dll导出函数
部分动态调试细节如下:
释放压缩文件
调用expand.exe 进行压缩包解压
创建Google Service注册表项,用于配置后面的dropper
主机杀软检测:枚举进程,查找是否有avgui.exe,avastSvc.exe,bka.exe和诺顿的杀毒进程
移动临时文件中的dll
调用Rundll32执行dll的导出函数。
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
导出函数如下:
根据父进程传进的参数,看一下sub_10002232。这个函数的行为是重新加载自身到10000000虚拟地址,并带参数”{SKALXCDJKWJS-123K-XFKQ-PAOS-DJSKAXSDFSQKWJ}”执行到处函数。如图:
加载自身后带参数重新执行flush导出函数。
参数不同,所以执行另一个分支,创建新线程。
ThreadProc的行为是:
1. 枚举Bka进程(bkav的杀软进程)和系统服务进程 2. 获取系统版本 3. 带参数执行父进程释放的_XDSFA_XVGVGGH.dmp的“BeginApp”导出函数。
静态分析结果如下:
加载dll的代码如下:
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互斥量保证系统唯一实例运行。
获取主机信息并进行MD5散列,这个hash会作为上线包的一部分。
Dll同样会加载自身:
这个dll执行过程中基本上都是利用虚表和硬编码API进行跳转的
跳转到kernel32.dll中,生成http头部信息,并调用InternetOpen函数
然后获取http api的地址
发送上线包是虚表跳转的方式,寻址到之前获取的API地址,进行跳转的。比如调用InternetSetOptionW函数。
上线包
url数据如下
发送上线包
根据代码逻辑,如果成功连接服务端,会下载压缩包,命名为”_Google_Cloud.TMP”,判断下载数据为压缩格式后,写入本地文件,并执行expand.exe解压文件。
然后将对应文件路径写入注册表当中,上层函数的参数为“SEC_COMP”
从代码逻辑上来看,payload应该是一个dll,因为成功释放文件后,代码会通过注册表项查找payload路径,并且获取“PythonThreadStart”导出函数的地址,并且运行执行这个函数。
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恶意软件如何躲避基于特征的静态检测
以上所述就是小编给大家介绍的《一个利用姿势清奇的11882格式溢出文档的分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 缓冲区溢出(栈溢出)
- Linux kernel 4.20 BPF 整数溢出-堆溢出漏洞及其利用
- 缓冲区溢出实战教程系列(一):第一个缓冲区溢出小程序
- 小议缓冲区溢出
- Nginx栈溢出分析
- HEVD池溢出分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Music Recommendation and Discovery
Òscar Celma / Springer / 2010-9-7 / USD 49.95
With so much more music available these days, traditional ways of finding music have diminished. Today radio shows are often programmed by large corporations that create playlists drawn from a limited......一起来看看 《Music Recommendation and Discovery》 这本书的介绍吧!