公式编辑器漏洞利用样本分析

公式编辑器漏洞利用分析

3月30号的发现了一起CVE-2017-1182漏洞利用的告警事件。经过分析,该告警事件是利用了公式编辑器的漏洞,通过执行精心构造好的shellcode,来下载远控并运行。

经过溯源分析对比,发现该事件所涉及的样本在近期刚刚开始活跃。VirusTotal、AnyRun沙箱收录该样本的时间都为3月30号前后,如图:

image-20200405192300626

样本执行流程

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

image-20200406182157946

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

流程图

关于CVE-2017-11882

CVE-2017-11882漏洞是属于缓冲区溢出类型的漏洞,攻击者可利用此漏洞实现任意代码执行,并且隐蔽性极高。该漏洞通杀目前被广泛使用的Office 2003到2016的所有版本。漏洞产生的原因主要是由于EQNEDT32.EXE(Office自带的公式编辑器)在读入包含MathType的ole数据时,拷贝公式名称(Font Name 数据)没有对名称长度进行校验,导致了缓冲区溢出,最终将函数返回地址覆盖为恶意代码的地址处,从而实现了任意代码执行。

漏洞产生原因

由于公式编辑器在没有打补丁的情况下,并没有开启ASLR以及DEP保护,并且在函数sub_41160F在对字符串进行拷贝时,没有对要拷贝的字符串参数长度进行校验,从而导致了可能发生栈溢出的问题。发生栈溢出的位置,如图:

image-20200406163945429

文档格式分析

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

image-20200406211426113

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

image-20200406164941595

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

image-20200406172548551

详细分析

shellcode分析

查看 shellcode

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

image-20200406171626082

覆盖函数返回地址

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

image-20200406173924159

跳转到栈中执行shellcode

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

image-20200406175220745

此时的栈顶的值12F350正是指向是要拷贝的字符串中的第一部分 shellcode 数据(oleObject1.bin对象覆盖返回地址前的数据)。跳转到第一部分 shellcode 中执行:

  • 首先从公式编辑器的全局变量固定地址45BD3C中取出栈地址,并从该栈地址处取出指向存放公式编辑器对象的Data数据段(存放着第二部分shellcode数据)的堆地址的指针。

  • 再计算出公式编辑器固定IAT地址4667B0,从该地址处获取‬函数Globallock地址,并锁定上一步获取到的堆地址。

  • 最后在将堆基质加上偏移 5BBFD,跳转过去执行第二部分 shellcode ,如图:

image-20200407110722326

远程下载执行

第二部分 shellcode

  • 首先执行自解密操作。
  • 然后再遍历PEB,获取kernel32.dll的基址,再根据基址遍历其导出表获取函数LoadLibraryWGetProcAddress
  • 再用GetProcess获取所需API,最终从域名prodigorganizationalgroupoffrdy1company.duckdns[.]org下载并运行vbc.exe

image-20200405193308773

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

image-20200406112854039

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

image-20200405184810620

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

image-20200405191330871

创建傀儡进程

image-20200406114121867

挂起方式启动Regsvcs.exe

image-20200406115822151

接下来向该Regsvcs.exe的内存空间进行写入,创建傀儡进程

将内存中的PE文件Dump下来进行分析

image-20200406164058541

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

image-20200406164513934

监控用户操作

image-20200406170505933

读取注册表

image-20200406170605708

监控用户进程

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

image-20200406171639603

连接到C&C服务器ike2020[.]xyz进行数据接收与上传

该程序会对用户的剪贴板,注册表,进程列表,浏览器文件,电子邮件数据等关键信息进行读取,并与C&C服务器进行通信。执行过程中主体为Regsvcs.exe,较难被用户察觉,也能规避部分安全软件的检测。

持久化

为实现持久化,执行过程中写入了3个文件:

在startup目录下写入LogonUI.url, 指向LogonUI.vbs

image-20200406174645145

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

image-20200406173639573

通过三个文件的写入,用户每次开机时恶意程序都会通过“接力”的方式实现自启动,达到长期驻留,持续窃取用户隐私的目的。

关联分析

通过关联性分析可以发现文件的活跃日期及关联家族信息

  1. 由文件的远程下载地址追踪到关联的IOC信息,可以看到发布日期为3月30日,与日志告警信息一致

image-20200406181344368

image-20200406181633261

  1. 由注入的PE文件名aMpRkoIodsSOGyZREnbQhMVVAJQOtPScNV.exe关联到其他样本

    image-20200406182740502

    文件名 bads.exe
    文件大小 1814016 bytes
    MD5 824302d921cb9c615d5e45efe2d1f614

    对该样本bads.exe进行分析,发现除文件名的的差异外与vbc.exe有相同的执行逻辑与恶意行为

  2. 由文件对应的C&C服务器从源头进行查找

    image-20200406184317771

    发现该服务器关联到大量利用手法相同,行为相似的恶意程序且在持续更新,该服务器值得进一步的监测与关注,若发现主机与相关服务器通信应保持警惕。

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

总结

此次日志告警事件揭露了一起近期开始活跃,通过精心构造的文件进行用户数据窃取的黑客组织攻击,对用户的数据安全发起了巨大的挑战。