公式编辑器漏洞利用样本分析
公式编辑器漏洞利用分析
在3月30号的发现了一起
CVE-2017-1182漏洞利用的告警事件。经过分析,该告警事件是利用了公式编辑器的漏洞,通过执行精心构造好的shellcode,来下载远控并运行。
经过溯源分析对比,发现该事件所涉及的样本在近期刚刚开始活跃。VirusTotal、AnyRun沙箱收录该样本的时间都为3月30号前后,如图:

样本执行流程
该样本原文件名为PassWord.xlsx,将其打开后便会有伪造的提示图片提示该文件是被保护的,如图:

启用编辑后,便会调用公式编辑器进程,执行shellcode下载并运行恶意样本。整体流程如图:

关于CVE-2017-11882
CVE-2017-11882漏洞是属于缓冲区溢出类型的漏洞,攻击者可利用此漏洞实现任意代码执行,并且隐蔽性极高。该漏洞通杀目前被广泛使用的Office 2003到2016的所有版本。漏洞产生的原因主要是由于EQNEDT32.EXE(Office自带的公式编辑器)在读入包含MathType的ole数据时,拷贝公式名称(Font Name 数据)没有对名称长度进行校验,导致了缓冲区溢出,最终将函数返回地址覆盖为恶意代码的地址处,从而实现了任意代码执行。
漏洞产生原因
由于公式编辑器在没有打补丁的情况下,并没有开启ASLR以及DEP保护,并且在函数sub_41160F在对字符串进行拷贝时,没有对要拷贝的字符串参数长度进行校验,从而导致了可能发生栈溢出的问题。发生栈溢出的位置,如图:

文档格式分析
该样本是经过 Excel 加密过的复合文档(CDFV2-Encrypted)。使用加密的有效负载是规避防病毒软件的常用方法,因为加密的有效负载会根据使用的密钥不同而发生变化。该加密的复合文档的文件目录如图:

将加密的复合文档进行解密(office有默认密码VelvetSweatshop,然后可以通过脚本msoffcrypto-tool对其进行解密),解密完之后可以得到一个正常的 xlsx 文档文件。并从其xl\embeddings中可见其包含了两个对象,分别为 docm 宏对象(只是一张图片并不含宏)和 oleObject1.bin(公式编辑器对象)。如图:

根据我们对CVE-2017-1182的理解,该漏洞通常是利用.rtf文件格式,是因为其可以添加自动更新标签来实现自动打开Ole对象来执行 shellcode。而 xlsx 以及 docx 文档文件默认是不会自动加载或更新 oleObject 对象的,而该病毒样本却能直接打开公式编辑器对象。最终经过分析,该病毒在\xl\worksheets目录下的sheeet1.xml设置了自动加载 oleObject 对象属性,只需要将autoLoad的值置为1,就可以在打开 Excel 表的同时自动加载公式编辑器对象,如图:

详细分析
shellcode分析
查看 shellcode
查看公式编辑器对象中的Data数据,可看到大量篇幅的 shellcode 以及栈溢出时要覆盖函数返回地址的数据0x444C9F5,如图:

覆盖函数返回地址
由于漏洞CVE-2017-11882,发生栈异常的位置是在0x411658处,便在该地址处下断点。在执行过拷贝后,便会发生栈溢出将返回地址覆盖掉,拷贝前后的对比图:

跳转到栈中执行shellcode
覆盖的函数返回地址的值为0x44C9F5,该地址处的指令为retn。当函数执行到返回时,便会跳转到该地址处执行retn指令,跳转到当前栈顶数据12F350中去执行第一部分的 sehllcode ,如图:

此时的栈顶的值12F350正是指向是要拷贝的字符串中的第一部分 shellcode 数据(oleObject1.bin对象覆盖返回地址前的数据)。跳转到第一部分 shellcode 中执行:
首先从公式编辑器的全局变量固定地址
45BD3C中取出栈地址,并从该栈地址处取出指向存放公式编辑器对象的Data数据段(存放着第二部分shellcode数据)的堆地址的指针。再计算出公式编辑器固定IAT地址
4667B0,从该地址处获取函数Globallock地址,并锁定上一步获取到的堆地址。最后在将堆基质加上偏移
5BBFD,跳转过去执行第二部分 shellcode ,如图:

远程下载执行
第二部分 shellcode:
- 首先执行自解密操作。
- 然后再遍历PEB,获取
kernel32.dll的基址,再根据基址遍历其导出表获取函数LoadLibraryW和GetProcAddress - 再用
GetProcess获取所需API,最终从域名prodigorganizationalgroupoffrdy1company.duckdns[.]org下载并运行vbc.exe

捕获到的Shellcode中涉及的关键信息

经分析,vbc.exe为编译打包后的AutoIt可执行程序

执行过程中会提取嵌在资源中的AutoIt脚本并执行

创建傀儡进程

挂起方式启动Regsvcs.exe

接下来向该Regsvcs.exe的内存空间进行写入,创建傀儡进程
将内存中的PE文件Dump下来进行分析

经去混淆后可以看到大量解密操作

监控用户操作

读取注册表

监控用户进程

对特定软件(Mozilla, Postbox, Thunderbird, Seamonkey等)的文件读取

连接到C&C服务器ike2020[.]xyz进行数据接收与上传
该程序会对用户的剪贴板,注册表,进程列表,浏览器文件,电子邮件数据等关键信息进行读取,并与C&C服务器进行通信。执行过程中主体为Regsvcs.exe,较难被用户察觉,也能规避部分安全软件的检测。
持久化
为实现持久化,执行过程中写入了3个文件:
在startup目录下写入LogonUI.url, 指向LogonUI.vbs

在%USERPROFILE%/LogonUI目录下写入LogonUI.vbs和imjpuexc.exe, 其中前者用于启动后者,后者是恶意程序vbc.exe的拷贝。

通过三个文件的写入,用户每次开机时恶意程序都会通过“接力”的方式实现自启动,达到长期驻留,持续窃取用户隐私的目的。
关联分析
通过关联性分析可以发现文件的活跃日期及关联家族信息
- 由文件的远程下载地址追踪到关联的IOC信息,可以看到发布日期为3月30日,与日志告警信息一致


由注入的PE文件名
aMpRkoIodsSOGyZREnbQhMVVAJQOtPScNV.exe关联到其他样本
文件名 bads.exe 文件大小 1814016 bytes MD5 824302d921cb9c615d5e45efe2d1f614 对该样本
bads.exe进行分析,发现除文件名的的差异外与vbc.exe有相同的执行逻辑与恶意行为由文件对应的C&C服务器从源头进行查找

发现该服务器关联到大量利用手法相同,行为相似的恶意程序且在持续更新,该服务器值得进一步的监测与关注,若发现主机与相关服务器通信应保持警惕。
IOCs
| 文件名 | 文件大小 | 文件类型 | MD5 |
|---|---|---|---|
| Passwords.xlsx | 579072 bytes | CDFV2 Encrypted | CD3A44680F1DC942597F1CC866BCB43E |
| vbc.exe | 1904128 bytes | PE(EXE) | 0A3C56BE44A9B0A25FD25AD8DA0A6D64 |
| aMpRkoIodsSOGyZREnb-QhMVVAJQOtPScNV.exe | 298496 bytes | PE(EXE) | 4843D3A562165BAC6464C3150F0A825E |
| LogonUI.url | 64 bytes | URL | 7C8D625461524CC3CFBCFF0A30064EDA |
| LogonUI.vbs | 128 bytes | VB Script | A902608B53909A3CDB8AFD9D12990043 |
| imjpuexc.exe | 1904128 bytes | PE(EXE) | 0A3C56BE44A9B0A25FD25AD8DA0A6D64 |
| bads.exe | 1814016 bytes | PE(EXE) | 824302D921CB9C615D5E45EfE2D1F614 |
| C&C服务器1 | ike2020[.]xyz |
|---|---|
| C&C服务器2 | prodigorganizationalgroupoffrdy1company.duckdns[.]org |
| 互斥量 | Global.net clr networking |
总结
此次日志告警事件揭露了一起近期开始活跃,通过精心构造的文件进行用户数据窃取的黑客组织攻击,对用户的数据安全发起了巨大的挑战。




