样本分析 | CVE-2017-11882、CVE-2018-0

作者: 皆明 | 来源:发表于2018-01-27 16:47 被阅读248次
    封面

    看到腾讯电脑管家在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

    相关文章

      网友评论

        本文标题:样本分析 | CVE-2017-11882、CVE-2018-0

        本文链接:https://www.haomeiwen.com/subject/oxwooxtx.html