样本分析 | CVE-2017-11882、CVE-2018-0802漏洞组合远控木马

封面

看到腾讯电脑管家在freebuf上发了一篇《NDAY漏洞CVE-2017-11882与0Day漏洞CVE-2018-0802漏洞组合传播远控木马的样本分析》,觉得这个样本很有学习意义。就根据这个样本,梳理了下相关的知识点整理成这个报告。

分析

  • rtf

分析报告中提到该样本为rtf文档类型,在rtf里面嵌入了两个ole对象,而这两个ole对象分别会触发CVE-2017-11882、CVE-2018-0802漏洞。

CVE-2017-11882、CVE-2018-0802都属于栈溢出漏洞,都是对Equation Native 数据结构处理不当导致。【腾讯电脑管家】

此外,rft文档中还嵌入了一个package对象,通过package对象释放setup.zip到临时目录下,只要ole对象中两个漏洞利用只要触发其中一个,shellcode代码就会将setup.zip拷贝到C:\Users[username]\AppData\Roaming\Microsoft\Word\STARTUP\z.wll下,只要下次word启动的时候就会自动加载z.wll,从而实现自启动。

当我们拿到样本后,可以通过rtfobj.py获取样本的ole对象情况。如前面所说的rtf样本文档中嵌入了2个ole对象,此外还嵌入了一个package对象。详情如下:

---+----------+-------------------------------+-------------------------------
id |index     |OLE Object                     |OLE Package
---+----------+-------------------------------+-------------------------------
0  |00089BB7h |format_id: 2 (Embedded)        |Filename: ''
   |          |class name: 'Package'          |Source path: ''
   |          |data size: 754732              |Temp path = ''
---+----------+-------------------------------+-------------------------------
1  |001FA4B0h |format_id: 2 (Embedded)        |Not an OLE Package
   |          |class name: '\x00\x00\x00\x00\x|
   |          |00\x00\x00\x00\x00\x00'        |
   |          |data size: 7680                |
---+----------+-------------------------------+-------------------------------
2  |001FF76Dh |format_id: 2 (Embedded)        |Not an OLE Package
   |          |class name: '\x00\x00\x00\x00\x|
   |          |00\x00\x00\x00\x00\x00'        |
   |          |data size: 7680                |
---+----------+-------------------------------+-------------------------------

将这2个ole对象和package对象dump出来,发现package对象是一个PE文件。而我看了下报告中基础知识介绍,对于rtf格式文档,如果用户单击文档内的对象,则WORD进程会将对象提取到用户的临时目录,并使用默认处理程序启动它们。

在文档关闭后,WORD进程会将用户的临时目录中提取的ole对象进行删除。也就是说恶意样本要进行恶意操作的话,需要在文档打开的时间段进行,因为在这时间段内释放出来的文件可以用系统上的其他进程。

关于OLE1 Packager格式,网上也做了总结:

OLE1 Packager格式

通过{\object … {\objdata …}}定位Object部分,其中的objdata部分为编码成16进制的字符串。对于这部分16进制字符数据通过bytearray.fromhex(data)就能将其转换回来,从而进一步观察分析。

Package结构十六进制视图

从Package结构十六进制视图中的红色框选区域看出对象为嵌入对象,嵌入数据的长度为0x000b8400(小端:高右低左)换算成十进制754688,跟我们dump出来的PE文件的大小754716基本吻合。从结构上没有看到原始路径的信息,但从dump出来的PE中我得知它的编译时间为2017-12-29,并且我们还提取到了PDB路径信息。

dump Pe 文件信息

另外两个ole对象大小都为8k,其中包含的敏感字符串信息正是前面提及到的setup.zip和z.wll这两个文件。

字符特征

我们调试word程序发现它在打开样本文档后,会将package对象那个PE写入setup.zip。我在看报告之前还以为word把packgae对象写zip压缩文件中,然后再解压出来拷贝到word启动目录下。结果到这里发现,它是直接把那个PE写成setup.zip。

向setup.zip写入

接下来就是看漏洞利用的地方,也就是触发漏洞的EQNEDT32.EXE这个程序。我无法得知EQNEDT32.EXE这个程序是什么时候启动起来的,一开始我以为是word创建了它,后来发现没有成功断下来。

只好用附加的方法,而这里附加的方法是通过设置注册表KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\EQNEDT32.EXE将Debugger设置成我们的调试器,当EQNEDT32.exe进程启动的时候我们就能够接管过来。

Image File Execution Options 项 设置调试

附加EQNEDT32.EXE程序后在关键API下断点,发现它将setup.zip拷贝到word启动目录下并命名为z.wll。

CopyFile

当word再次启动的时候,它会加载启动目录下的z.wll文件。接着创建"%ALLUSERSPROFILE%\NetWork\ 目录,写入数据到tmp.exe并将其执行。

image.png
  • tmp.exe

主要行为:

  1. 通过获取ComputerName拼接字符串,大概就是Global\\Net[ComputerName]_这样。随后,创建互斥体防止程序多次执行。

    互斥体创建

  2. 提升进程权限,这也算常见的提权。主要是通过获取了当前进程的id后,利用OpenProcessToken、LookupPrivilegeValueW、AdjustTokenPrivileges完成权限的提升。


    提升权限
  3. 通过创建线程执行接下来的恶意行为,但是线程代码未能够被IDA识别出来。而在程序跑起来后,它通过读取这线程代码进行XOR 0x6b进行解密。


    解密前
解密后
  1. 检测窗口字符串是否匹配“检测到安全风险”、“Symantec Endpoint Protection”、“防火墙问题”、“防火墙警报”等,部分是情况是为了通过匹配窗口字符串成功,通过模拟键盘键值输入来进行对抗安全检测。

比如说当匹配到“检测到安全风险”后,模拟键盘输入顺序为 [TAB] [TAB] [TAB] [Enter]


检测到安全风险

而匹配到“防火墙警报”后,模拟键盘输入顺序为[TAB] [UP] [UP] [UP] [TAB] [TAB] [TAB] [TAB] [ENTER]

image.png
  1. 在C:\Documents and Settings\All Users\NetWork目录下创建servernet.exe
  2. 对路径进行比较,如果是当前运行的程序是servicenet.exe,则拷贝自身到servicenet.exe,通过cmd加载。随后通过批处理文件删除自身。
批处理文件内容
cmd加载执行servicenet.exe
  • servicenet.exe

主要行为:

  1. 检测servicenet.exe目录是不是为C:\Users[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,这个目录是windows下的开机启动目录。

  2. 通过模拟鼠标操作对抗bkav、赛门铁克安全产品,以及通过模拟键盘输入来绕过防火墙检测,而这些操作都是程序通过创建线程来实现。

  3. 在线程中加载执行C:\Documents and Settings\All Users\NetWork目录下的servernet.exe

加载执行servernet.exe
  1. 通过cmd命令关闭PcaSvc服务
"sc stop PcaSvc"    程序兼容性助手(PCA)提供支持
"sc config PcaSvc start= disabled"
  1. 判断系统是否为64位,根据系统版本位数拷贝数据大小也不一样,32位0x1E00u、64位0xFA00u。

  2. 检测程序是否存在于“「开始」菜单\程序\启动”、“AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”下。

  3. 遍历进程列表,检测杀软。检测列表如下:

    • avp.exe
    • QQPCTray.exe
    • TMBMSRV.exe
    • ptSessionAgent.exe
    • ccSvcHst.exe
    • AvastSvc.exe
    • egui.exe
    • ekrn.exe
    • Avira.ServiceHost.exe
    • avguard.exe
    • avgnt.exe
    • 360sd.exe、360tray.exe、360rps.exe
    • NS.exe
    • kxetray.exe
    • KSafeTray.exe
  4. 联网通信

    • 83.166.242.122:443
    • 109.237.110.10:81
  5. 根据检测不同的进程执行的对抗行为也不一样。

    • 如果检测到进程中存在avp.exe、QQPCTray.exe,就会将servernet.exe拷贝到启动目录下。
    • 如果检测到进程中存在TMBMSRV.exe、ptSessionAgent.exe、ccSvcHst.exe、360sd.exe、360tray.exe、360rps.exe等其中一款产品,且根据对应的系统版本的情况释放文件的同时再去执行不同的行为。
  • servernet.exe

执行servicenet.exe
  • Srvlic.dll / msTracer.dll

这两个文件的MD5是一样的,只是情况不同所以命名不一样。它们的主要功能也是为了加载执行执行servicenet.exe


执行servicenet.exe
  • MemRunExe

绕过系统的UAC账户控制

(腾讯分析报告有说,我:emmmmm 哈哈哈哈 我懒)

  • HookMessageBox.dll

MessageBoxA、MessageBoxW函数hook成空函数,这样做估计是为了反正一些敏感弹窗出现,暴露木马迹象被电脑使用的人察觉。

hook MessageBox
  • SandboxieBITS.exe \ sbiedll.dll

这两个文件使用的套路算是目前远控木马中比较主流的白加黑。SandboxieBITS.exe是一个白文件,但是它并没有对需要加载sbiedll.dll进行校验,导致被恶意利用。

SandboxieBITS 签名信息

通过PE工具就可以看到SandboxieBITS.exe导入表中存在sbiedll.dll。

导入表

在sbiedll.dll的SbieDll_Hook里我们可以看到它的主要行为有:

  1. 提升进程权限
  2. 加密字符串,通过 XOR 0x5u 可以解密出字符串;然后会检测系统进程列表中是否存在360tray.exe、360sd.exe。
解密前 解密后
635qwd|+`}` 360tray.exe
635va+`}` 360sd.exe
360rps.exe 635wuv+`}`

第三个解密的字符串是反的,导致后门检测进程的时候检测的字符串是635wuv+`}`。

image.png
  1. 创建计划任务,在系统启动的时候加载执行servernet.exe,计划任务名称为task1。
创建计划任务
计划任务窗口
  1. 加载HookMessageBox.dll,将MessageBoxA、MessageBoxW函数hook成空函数。
加载 HookMessageBox.dl

分析到这里我们得知,牧马人试图通过各种方式将servicenet.exe执行起来。而这个木马的功能模块和普通的木马基本相似,主要有文件操作、注册表操作、木马端更新\卸载、提取、清除日志、管道等功能。

最后

这个样本确实很有意思,分析下来能够了解到很多攻击者的攻击思路。

譬如:

  • 像类似的doc样本,如果攻击目标比较明确的情况下,攻击前可能会为“水坑攻击”做些准备。
  • 利用CVE-2017-11882、CVE-2018-0802漏洞,双漏洞“补位进攻”。
  • “草丛三兄弟”潜伏加载,很多木马为了常驻目标设备,都想尽办法驻留。该样本也试图通过白加黑、windows启动目录、dll加载这些方式,试图潜伏在设备机器里。
  • 对抗法师的“沉默”,HookMessageBox沉默了一些本该让木马暴露的弹窗。

参考链接

APT恶意软件分析系列之从WORD中提取EXE的分析技术
https://www.secpulse.com/archives/3792.html
剖析RTF文件中的Anti-Analysis技术
http://www.freebuf.com/articles/terminal/102018.html
NDAY漏洞CVE-2017-11882与0Day漏洞CVE-2018-0802漏洞组合传播远控木马分析
http://www.freebuf.com/vuls/160252.html
OLE工具套件分析OFFICE宏恶意样本
https://www.cnblogs.com/KevinGeorge/p/7868881.html
CVE-2015-1641浅析-word类型混淆漏洞
http://blog.csdn.net/qq_32400847/article/details/75196251

推荐阅读更多精彩内容