公式编辑器漏洞利用样本分析
公式编辑器漏洞利用分析
在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 |
总结
此次日志告警事件揭露了一起近期开始活跃,通过精心构造的文件进行用户数据窃取的黑客组织攻击,对用户的数据安全发起了巨大的挑战。