首页
社区
课程
招聘
[翻译]弥补不足:提高安全研究者大规模动态分析 macOS 恶意程序的能力
发表于: 2019-8-13 23:11 7443

[翻译]弥补不足:提高安全研究者大规模动态分析 macOS 恶意程序的能力

2019-8-13 23:11
7443

弥补不足:提高安全研究者大规模动态分析 macOS 恶意程序的能力


 

原文链接:59bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2$3L8i4u0S2P5g2)9J5k6h3y4G2L8g2)9J5c8X3y4&6j5X3g2J5i4K6u0V1M7$3g2U0N6i4u0A6N6s2W2Q4x3X3c8T1L8r3!0Y4i4K6u0r3M7%4c8W2M7s2m8A6L8X3N6Q4x3X3c8A6L8Y4c8G2i4K6u0V1N6r3S2W2i4K6u0V1j5Y4u0W2j5h3y4Z5i4K6u0V1K9h3#2H3M7X3!0$3K9h3&6Y4i4K6u0V1k6s2W2F1j5h3#2A6j5#2)9J5k6r3q4F1j5h3I4&6M7$3W2K6i4K6u0V1L8h3q4U0L8%4y4Q4x3X3c8E0j5h3I4%4j5i4u0W2i4K6u0r3

 

翻译: 看雪翻译小组 Nxe

 

校对: 看雪翻译小组 sudozhange


 

这篇博客所涉及的内容基于我在 Objective By the Sea 会议上的演讲"基于虚拟机管理程序对 macOS 恶意程序的分析"(Hypervisor-Based Analysis of macOS Malware) 你可以在这里获取演讲的幻灯片。

不断增长的威胁与工具的缺乏

相比于 Windows,macOS 平台的恶意程序只占很小一部分,但是这种威胁在不断增长。Malwarebytes 的报告显示针对于 Mac 的恶意程序的总量在2018年第四季度上升了62%,而且新的攻击手段不断出现。尽管对于普通消费者的威胁在下降,但是对基础设施和企业的威胁却在上升。

 

相比于在 Windows 平台与恶意程序奋战了几十年的同行,macOS 平台的分析人员能够使用的分析与检测 macOS 恶意程序的工具就没有那么多的选择了。尽管存在工具用来监测 macOS 进程的创建与持续,文件创建,系统调用等等,但是与 Windows 平台相比还有着巨大的差距:

  • 没有普遍地在函数调用层面跟踪程序的工具
  • 由于现在的工具需要在分析环境中运行,因此它们很容易被恶意程序检测到
  • 当前非系统的方法阻碍了自动化分析,而且需要不可接受的高水平的人工干预

此外,一些 macOS 平台的恶意程序动态分析工具不能满足日益增长的扩展性与性能的要求。面对着这些限制,即便是一些科技巨头也不得不依赖一些土方法来内部分析和探测 macOS 的恶意程序。

 

OBTS Slides - Limitations of Current macOS Malware Analysis Tools

 

图 1:旧限制,新需求

VMRay Analyzer 增加了 macOS 分析与探测的功能

VMRay 正在弥补不足。随着 VMRay Analyzer 3.0 版3.1 版中最近的更新,我们在我们成熟的框架上增加了 macOS 动态分析和检测的功能。利用深厚的专业技能和多年保护Windows环境的经验,3.1 版解决了 macOS 的独特挑战,使得研究人员和DFIR团队能够大规模地动态分析和检测恶意软件。

 

主要特点包括:

  • 通过 UI 或者 REST API 自动提交 macOS 可执行程序,应用程序包和 Java 文件来进行分析
  • 详细的函数日志,全面了解 macOS 恶意程序的行为
  • 基于恶意程序样本的行为的严重性判定(评分从0到100)
  • 针对于 macOS 的沙箱逃逸技术和持久化机制的检测
  • 详细的网络分析信息
  • YARA 规则匹配

Now, Near, Deep

VMRay 沙盒是我们 Now, Near Deep 架构 (图 2)的基础,提交的可疑 macOS 恶意程序文件会经过多层次的检测:

  • 迅速的研判引擎会判断一个文件是良性,恶意还是未知
  • 静态分析提取潜在的有害活动元素(宏,嵌入的链接)
  • 动态行为分析全方面地检测恶意程序活动,以判断威胁的严重程度

 

图 2:VMRay 的 Now, Near, Deep 架构

即时可见性与洞察恶意程序行为

沙盒提供了一个 允许执行macOS 恶意程序的隔离环境,该恶意程序的行为被监视并获得严重性评分,使得安全生态环境中其他的安全工具可以基于可疑行为做出阻止/允许的决定。使用了无代理,基于虚拟机管理程序(Hypervisor)方法的沙盒在整个分析过程中不会被检测到,这是防止恶意程序逃避检测的特性。

 

如下图3到图6所示,VMRay 的自动化,分析人员友好的报告工具提供了恶意程序行为的即时可见性,并能轻松挖掘以获取更深的理解。以下的信息摘自 ColdRoot 的实际分析,ColdRoot 是针对 macOS 的远程访问木马。

 

图3中的进程图显示了运行的ColdRoot创建文件,运行脚本,提升权限等命令的高级视图。你可以看到,恶意程序把自己伪装成一个 Apple 服务以获得持久化,并在之后启用键盘记录和远程桌面访问。

 

Process Graph ColdRoot

 

图 3:进程图提供了恶意程序行为的高级视图

 

深入挖掘,VMRay Analyzer(图4)生成的函数日志揭示了哪个 API 调用对应着进程图中描述的某些行为。利用Accessibility API,AuthorizationExecuteWithPrivileges() 被用来启用增强的系统访问和安装一个 root 权限的持久化守护进程。

// enable Accessibility API
[0050.862] AuthorizationExecuteWithPrivileges (authorization=0x539eb0,
    pathToTool="/usr/bin/touch", options=0x0,
    arguments=([0]="/private/var/db/.AccessibilityAPIEnabled"),
    communicationsPipe=0x0) returned 0

// run script which will add ColdRoot to the Accessibility DB
[0051.460] AuthorizationExecuteWithPrivileges (authorization=0x539eb0,
    pathToTool="/bin/sh", options=0x0,
    arguments=([0]="/private/var/tmp/runme.sh"),
    communicationsPipe=0x0) returned 0

// copy LaunchDaemon definition
[0052.844] AuthorizationExecuteWithPrivileges (authorization=0x539eb0,
    pathToTool="/bin/cp", options=0x0,
    arguments=([0]="/Users/jdoe/Downloads/com.apple.audio.driver2.app/Contents/MacOS/com.apple.audio.driver.plist", [1]="/Library/LaunchDaemons"),
    communicationsPipe=0x0) returned 0

// load and start LaunchDaemon
[0053.218] AuthorizationExecuteWithPrivileges (authorization=0x539eb0,
    pathToTool="/bin/launchctl", options=0x0,
    arguments=([0]="load", [1]="/Library/LaunchDaemons/com.apple.audio.driver.plist"),
    communicationsPipe=0x0) returned 0
...
[0053.683] AuthorizationExecuteWithPrivileges (authorization=0x539eb0,
    pathToTool="/bin/launchctl", options=0x0,
    arguments=([0]="start", [1]="/Library/LaunchDaemons/com.apple.audio.driver.plist"),
    communicationsPipe=0x0) returned 0

图 4:函数日志为视图添加细节(添加了注释)

 

下面两个分析日志显示了 ColdRoot 产生的函数调用:通过安装 SLEventTap(图5)来激活键盘记录以及利用SLDisplayCreateImage()(图6)启动远程桌面访问。

// install event tap (SL == SkyLight == CoreGraphics)
[0034.621] SLEventTapCreate (tap=0x1, place=0x0, options=0x0, eventsOfInterest=0x1c00,
                              callback=0x6a3d0, userInfo=0x0) returned 0x509d50
[0034.805] CFMachPortCreateRunLoopSource (allocator=0x0, port=0x509d50, order=0) returned 0x50ff20
[0034.805] CFRunLoopGetCurrent () returned 0x5123c0
[0034.806] CFRunLoopAddSource (rl=0x5123c0, source=0x50ff20, mode="kCFRunLoopCommonModes") 
[0034.807] SLEventTapEnable (tap=0x509d50, enable=1) 
[0034.807] CFRunLoopRun () 

// on keypress: get keycode
[0088.346] SLEventGetIntegerValueField (event=0x53a580, field=0x9) returned 36
[0088.346] SLEventKeyboardGetUnicodeString (event=0x53a580, maxStringLength=0xa, 
                                            actualStringLength=0xb0579d48, unicodeString=0xb0579d4e) 

// write to log
[0088.349] open (path="/private/var/tmp/adobe_logs.log", oflag=9) returned 3
[0088.350] __ioctl (fildes=3, request=0x402c7413) returned -1
[0088.350] bcopy (src=0x31b704c, dst=0xb0579bc0, len=0xa) 
[0088.350] __write_nocancel (fildes=3, buf=0xb0579bc0*, nbyte=0xa) returned 10
[0088.350] __close_nocancel (fildes=3) returned 0

图 5:键盘记录所使用的函数调用(添加了注释)

 

如果是远程访问,如下图所示,时间戳显示了 ColdRoot 首先开启了一个连接 C2 服务器的次级 TCP 连接,然后每隔半秒截图并利用新创建的套接字发送给 C2 服务器。要注意的是一个相当大的缓冲区("length=0x3beec")被传给了第二个 send() 调用,表明它可能是一个图像文件,经过查看发送的数据(如下所示)证实了猜测。

// take screenshot using SkyLight (aka CoreGraphics)
[0038.037] SLMainDisplayID () returned 0x5b81c5c0
[0038.042] SLDisplayCreateImage (displayID=0x5b81c5c0) returned 0x53c800
[0038.155] CGImageGetHeight (image=0x53c800) returned 0x360
[0038.155] CGImageGetWidth (image=0x53c800) returned 0x480

// send to C2
[0037.851] socket (domain=2, type=1, protocol=0) returned 4
[0037.857] connect (sockfd=4, addr=0xb1189df0*(sin_len=0x10, sin_family=0x2,
                    sin_port=0x3419, sin_addr=""), addrlen=0x10) returned 0
<…>
[0040.638] send (socket=4, buffer=0x320f028*, length=0x4, flags=0) returned 4
<…>
[0040.640] send (socket=4, buffer=0x35a2d18*, length=0x3beec, flags=0) returned 245484
00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 00 00 01  |......JFIF......|
00000010  00 01 00 00 ff db 00 43  00 01 01 01 01 01 01 01  |.......C........|
00000020  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|

图 6:远程桌面访问所使用的函数调用(添加了注释)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 1426
活跃值: (204)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
感谢楼主翻译分享
2019-8-20 19:24
0
游客
登录 | 注册 方可回帖
返回