近期,有安全人员发文称,Hacking Team 的RCS植入安装程序中使用了苹果的加密二进制库:
去年黑帽大会上,安全人员Patrick Wardle曾发表过一篇名为“Writing Bad @$$Malware for OS X”的演讲,提供了一些OS X恶意软件改进的建议,其中就提到了使用苹果自带的加密机制来保护恶意软件二进制库的方法,如下图。而今年Hacking Team用来东山再起的恶意软件中正是使用了这种方法。
借助TaskExplorer(枚举并列出全球范围内的加密二进制库的工具),精确地检测出了该恶意软件。由此也可以确定,真的有人使用了苹果的加密机制来保护恶意软件。
植入安装程序(Dropper)安全人员获取了二进制库的哈希值(sha256:58e4e4853c6cfbb43afd49e5238046596ee5b78eca439c7d76bd95a34115a273),使用VirusTotal对其进行检测,结果如下图:
在分析过程中,首先可以确定的是该二进制库确实使用的是苹果自带的OS X加密机制。确定的方法为:检查二进制库中的_TEXT段的load命令标志是否设置为SG_PROTECTED_VERSION_1 (0×8):
$ otool -l install
Load command 1
cmd LC_SEGMENT
cmdsize 328
segname __TEXT
vmaddr 0x00001000
vmsize 0x00004000
fileoff 0
filesize 16384
maxprot 0x00000007
initprot 0x00000005
nsects 4
flags 0x8
使用IDA Pro进行反汇编时,系统会提示:
由于该植入安装程序是加密的,只有解密后才能对其进行分析。苹果的加密机制使用的是对称加密算法(Blowfish),利用静态密钥就可以轻易破解。另外,Classdump工具中也包含一个解密器的开源实现方案。通过编译该解密器的代码,解密了植入安装程序:
./deprotect install installDecrypted
$ otool -l installDecrypted
Load command 1
cmd LC_SEGMENT
cmdsize 328
segname __TEXT
vmaddr 0x00001000
vmsize 0x00004000
fileoff 0
filesize 16384
maxprot 0x00000007
initprot 0x00000005
nsects 4
flags 0x0
现在可以对解密的植入安装程序进行深入分析?答案是否定的,它虽然已经解密,但仍然是封装的。通过查看IDA的反编译代码(标志位仍为0×0),或使用TaskExplorer的过滤器进行筛选(选择#packed):
调查发现,HackingTeam更倾向于使用自定义的封装器,那么可以利用内存转储的方式实现在IDA Pro中的分析。在内存转储的过程中遇到一些问题。首先,不能强制lldb(苹果的调试器)忽略EXC_BAD_ACCESS异常。也就是说,如果解封的代码遇到类似的异常,并且不会再交付给调试器。以下为错误信息:
$ lldb installDecrypted
Current executable set to 'installDecrypted' (i386).
(lldb) process launch
Process 714 launched: '/Users/user/Desktop/installDecrypted' (i386)
Process 714 stopped
* thread #1: tid = 0x39e1, 0x0000709d installDecrypted, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS
其他的内存转储工具需要进程正在运行,而该植入安装程序一旦完成便会立刻终止。因此,研究人员决定编写一个可注入的动态库(如下图)解决该问题。
加载植入安装程序后,解封,然后暂停,连接lldb并转储已解封的二进制库代码:
$ ps aux | grep [i]nstallDecrypted
user 519 1.9 0.8 658408 17276 s000
$ lldb -p 519
...
(lldb) memory read --outfile /tmp/dumped.txt 0x7000 0xBFFFF --force
跳回IDA Pro,加载该内存转储文件并进行深入分析:
由于使用的是转储的内存片段,所以IDA分析并不会非常全面。通过静态分析和动态分析的结合,使用fs_usage,可以清晰地得到进程的细节:
$ sudo fs_usage -w -f filesystem | grep install
execve /Users/user/Library/Preferences/8pHbqThW/_9g4cBUb.psr
open /Users/user/Library/Preferences/8pHbqThW/Bs-V7qIU.cYL
write F=8 B=0x8f0
植入程序在永久性植入到~/Library/Preferences/8pHbqThW/_9g4cBUb.psr文件并执行后,其加密的数据文件Bs-V7qIU.cYL也会同时放入~/Library/Preferences/8pHbqThW/目录中。
永久性植入(RCS)永久性植入(_9g4cBUb.psr, sha256:14f4a490be8e4f4aaf672c7e0db8f5bfdda0bbcf78031f5db543879f40156d19)一旦保存在磁盘中并执行,它就会成为用户的启动代理:
$ sudo fs_usage -w -f filesystem | grep _9g4cBUb.psr
lstat64 /Users/user/Library/LaunchAgents/com.apple.FinderExtAvt.plist
HFS_update /Users/user/Library/LaunchAgents
WrData[A] /Users/user/Library/LaunchAgents/.dat.nosync028d.8bNgne
rename /Users/user/Library/LaunchAgents/.dat.nosync0289.8bNgne
使用BlockBlock工具可以检查并阻止这种永久性安装:
使用KnockKnock工具也可以发现持久性安装的二进制库:
通过在转储的内存中运行字符串方向,该植入程序确实为HackingTeams RCS:
$ ps aux | grep [_]9g4cBUb.psr
user 649 1.9 0.8 658408 17276 s000 Users/user/Library/Preferences/8pHbqThW/_9g4cBUb.psr
$ sudo ./readmem -p 649 -m -o dumped.bin
---------------------------------
Readmem v0.6 - (c) 2012, 2013 fG!
---------------------------------
[DEBUG] Found main binary mach-o image @ 0x1000!
[DEBUG] Executing get_image_size
[DEBUG] Executing dump_binary
[DEBUG] Dumping __TEXT at 1000 with size 6b000 (buffer:38000)
[DEBUG] Dumping __DATA at 6c000 with size 38000 (buffer:a3000)
[DEBUG] Dumping __OBJC at a4000 with size 7000 (buffer:db000)
[DEBUG] Dumping __LINKEDIT at ab000 with size 6608 (buffer:e2000)
[OK] Full binary dumped to dumped.bin!
总结
随着黑客技术的发展,可能会有越来越多的OS X恶意软件使用苹果自带的OS X机密机制。用户可能通过查看~/Library/Preferences/8pHbqThW/ containing _9g4cBUb.psr and/orBs-V7qIU.cYL目录来检查设备是否被感染,如果感染,可以通过删除整个目录并删除~/Library/LaunchAgents/com.apple.FinderExtAvt.plist文件来解决。
由于传统的反病毒解决方案不能阻止该恶意软件,因此用户可以使用一些其他的工具,例如BlockBlock、KnockKnock和TaskExplorer等。