购物车

您的购物车目前是空的

商品分类
  1. 嘶货 首页
  2. 企业动态

对2019全年的Mac恶意软件的全面分析(BirdMiner,Netwire,Mokes.B)

360截图16280722417859.jpg

OSX.BirdMiner(OSX.LoudMiner)

BirdMiner(LoudMiner)提供了基于Linux的cryptominer,可通过QEMU仿真在macOS上运行。

感染媒介:盗版软件

BirdMiner是通过“VST Crack”网站上的盗版(破解)应用程序传播的,Mac恶意软件分析师已经在高端音乐制作软件Ableton Live的破解安装程序中发现了Bird Miner。

ESET也分析了恶意软件,并讨论了它的感染机制。具体来说,他们的研究发现了将近100个与数字音频/虚拟演播室技术(VST)有关的盗版应用程序,例如,破解的Ableton Live软件包可能包含BirdMiner恶意软件。

当然,下载并安装了这些盗版应用程序的用户将被恶意软件感染。

请注意,下载的软件包(Ableton Live Suite 10.1.pkg)是未签名的,因此将被macOS阻止:

33.png

但有趣的是,Instructions.txt文件明确告诉用户如何手动绕过这个保护。不过你有可能受到以下消息:

1.无法打开,因为它来自身份不明的开发人员。

2.进入:“系统偏好设置”>“安全性和隐私”>“常规”,然后通过“始终打开”来“允许”安装。

持久性攻击的能力来自启动守护程序

被OSX.BirdMiner感染的盗版应用程序之一是Ableton Live,它是macOS的数字音频工作站。被感染的应用程序作为标准磁盘映像传播; Ableton.Live.10.Suite.v10.1.dmg

当安装磁盘映像并执行应用程序安装程序(Ableton Live Suite 10.1.pkg)时,它将首先请求用户的凭据:

34.png

现在,具有根权限的BirdMiner可以持久化多个启动守护进程。这可以通过Objective-See的FileMonitor实用工具观察到:

{
  "event": "ES_EVENT_TYPE_NOTIFY_CREATE",
  "timestamp": "2019-12-03 06:36:21 +0000",
  "file": {
    "destination": "/Library/LaunchDaemons/com.decker.plist",
    "process": {
      "pid": 1073,
      "path": "/bin/cp",
      "uid": 0,
      "arguments": [],
      "ppid": 1000,
      "ancestors": [1000, 986, 969, 951, 1],
      "signing info": {
        "csFlags": 603996161,
        "signatureIdentifier": "com.apple.cp",
        "cdHash": "D2E8BBC6DB7E2C468674F829A3991D72AA196FD",
        "isPlatformBinary": 1
      }
    }
  }
}

...

{
  "event": "ES_EVENT_TYPE_NOTIFY_CREATE",
  "timestamp": "2019-12-03 06:36:21 +0000",
  "file": {
    "destination": "/Library/LaunchDaemons/com.tractableness.plist",
    "process": {
      "pid": 1077,
      "path": "/bin/cp",
      "uid": 0,
      "arguments": [],
      "ppid": 1000,
      "ancestors": [1000, 986, 969, 951, 1],
      "signing info": {
        "csFlags": 603996161,
        "signatureIdentifier": "com.apple.cp",
        "cdHash": "D2E8BBC6DB7E2C468674F829A3991D72AA196FD",
        "isPlatformBinary": 1
      }
    }
  }
}

属性列表的名称(com.decker.plist,com.tractableness.plist)和它们持久保存的文件的名称是随机生成的。有关更多详细信息,请参见此文

com.decker.plist启动守护程序将持久保存一个名为vicontiel的文件(位于/ usr / local / bin /中):

# defaults read /Library/LaunchDaemons/com.decker.plist 
{
    KeepAlive = 1;
    Label = "com.decker.plist";
    ProgramArguments =     (
        "/usr/local/bin/vicontiel"
    );
    RunAtLoad = 1;
}

同样,com.tractableness.plist启动守护程序会保留一个名为Tortulaceae的文件(同样在/ usr / local / bin /中):

# defaults read /Library/LaunchDaemons/com.tractableness.plist 
{
    KeepAlive = 1;
    Label = "com.tractableness.plist";
    ProgramArguments =     (
        "/usr/local/bin/Tortulaceae"
    );
    RunAtLoad = 1;
}

由于两个属性列表文件中的RunAtLoad都设置为1(true),因此,每次重新启动受感染的系统时,操作系统都会自动(重新)启动持久文件(vicontiel和Tortulaceae)。

功能:挖矿

这两个文件(vicontiel和Tortulaceae,尽管记得这些名称是随机生成的)都是bash脚本:

# file /usr/local/bin/vicontiel

/usr/local/bin/vicontiel: Bourne-Again shell script text executable, ASCII text

如果用户正在运行“活动监视器”(可能是出于隐身原因),那么vicontiel脚本将卸载com.tractableness.plist启动守护程序;否则,将加载plist:

# less /usr/local/bin/viridian
...

pgrep "Activity Monitor"
if [ $? -eq 0 ]; then
 
 launchctl unload -w /Library/LaunchDaemons/com.tractableness.plist
 sleep 900

else

 launchctl load -w /Library/LaunchDaemons/com.tractableness.plist

fi

如果活动监视器正在运行,则Tortulaceae(由com.tractableness.plist执行)也将卸载plist。但是,如果没有,它将执行以下命令: /usr/local/bin/voteen -m 3G -accel hvf,thread=multi -smp cpus=2 --cpu host /usr/local/bin/archfounder -display none

经过研究,它实际上是开源模拟器QEMU!

$ strings -a /usr/local/bin/voteen

QEMU emulator version 4.0.92 (v4.1.0-rc2-dirty)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

...

QEMU能够通过仿真在非Linux系统(例如macOS)上执行Linux二进制文件。这就引出了一个问题,它在执行什么?

file命令提供了答案:

$ file /usr/local/bin/archfounder 

/usr/local/bin/archfounder: QEMU QCOW Image (v3), 527400960 bytes

传递到QEMU(voteen)中的archfounder文件是QEMU QCOW映像,它是可启动的[Tiny Core] Linux系统。

现在,已经确定了一个永久的macOS启动守护进程,该守护进程正在执行bash脚本,该脚本(通过QEMU)正在引导Linux系统。但为什么?因为 thebootlocal.sh文件包含在启动期间自动执行的命令的xmrig:

1#!/bin/sh
2# put other system startup commands here
3/mnt/sda1/tools/bin/idgenerator 2>&1 > /dev/null
4/mnt/sda1/tools/bin/xmrig_update 2>&1 > /dev/null
5/mnt/sda1/tools/bin/ccommand_update 2>&1 > /dev/null
6/mnt/sda1/tools/bin/ccommand 2>&1 > /dev/null
7/mnt/sda1/tools/bin/xmrig

因此,Tiny Core系统一旦启动,xmrig便会启动,无需用户登录。

有xmrig的macOS构建,这意味着攻击者可以简单地坚持这样的构建,从而跳过了此攻击的整个QEMU / Linux方面。

OSX.Netwire

Netwire是功能齐全的持久后门,有趣的是,虽然几年前Netwire.A已经被苹果关注,但它直到2019年才公开出现。

感染媒介:浏览器0day

攻击开始于发送的一封电子邮件,该电子邮件来自一位拥有加密货币的Mac用户,显然是通过浏览器0day感染的!有研究人员发现了一个未知的Firefox 0day,它以某种方式删除了一个二进制文件并在该用户的Mac(10.14.5)上执行了该文件。此外,用户能够提供包含恶意网站链接的电子邮件副本(people.ds.cam.ac.uk),比如:

尊敬的XXX:

我叫尼尔·莫里斯(Neil Morris)。我是亚当斯奖的举办者之一。每年,我们都会更新独立专家团队,他们可以评估竞争项目的质量我们的同事推荐你作为该领域的资深专家。我们需要你的协助来评估多个项目,以获得亚当斯奖。

期待收到你的答复。

最好的祝福,

尼尔·莫里斯

不幸的是,在我们进行分析时,链接(people.ds.cam.ac.uk/nm603/awards/Adams_Prize)返回了404 Not Found:

$ curl http://people.ds.cam.ac.uk/nm603/awards/Adams_Prize
404 Not FoundNot FoundThe requested URL /nm603/awards/Adams_Prize was not found on this server.Apache/2.4.7 (Ubuntu) Server at people.ds.cam.ac.uk Port 80

几天后,Coinbase的一位安全研究员Philip Martin在Twitter上发布了一个有趣的话题,详细介绍了同样的攻击:

5/ Hashes (sha1):
b639bca429778d24bda4f4a40c1bbc64de46fa79
23017a55b3d25a2597b7148214fd8fb2372591a5
C2 IPs:
89.34.111.113:443
185.49.69.210:80

这个(Firefox)0day版本的漏洞已经被修补,并被定义为CVE-2019-11707,并在各种文章中进行了介绍,例如:

1.“ Mozilla修补了在野外滥用的Firefox零日漏洞”;

2.“ Mozilla在主动攻击下修补了Firefox的严重缺陷”;

有关此浏览器漏洞的技术细节的更多信息,请查看此篇博客

由于该漏洞被利用为0day漏洞,因此,如果任何用户通过Firefox访问了恶意站点people.ds.cam.ac.uk(甚至已完全修补!),该页面就会“抛出”该漏洞,并自动感染Mac计算机,且无需其他用户交互!

有了下载和执行任意有效载荷的能力,攻击者可以安装任何他们想要的macOS恶意软件!他们选择安装的有效载荷之一是OSX.Netwire(在其他系统上,攻击者选择安装OSX.Mokes)。

文件隔离或看门人呢?不幸的是,只有当二进制或应用程序包含“隔离属性”时,这些保护机制才会起作用。通过漏洞利用,攻击者可以确保他们的有效载荷,当然,不包含这个属性(从而巧妙地绕开了守门人)。

44.png

有关文件隔离或看门人的详细信息,请参阅:“看门人的漏洞”。

还请注意,在macOS 10.15(Catalina)中,文件隔离或看门人的漏洞已经修补,因此现在可能会阻止此攻击媒介!

持久性攻击的能力来自登录项和Launch Agent

快速浏览一下恶意软件的反汇编,就会发现直接嵌入二进制文件中的Launch Agentplist:

memcpy(esi, "\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\n\t\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n\n\n    Label\n    %s\n    ProgramArguments\n\n        %s\n    \n    RunAtLoad\n    \n    KeepAlive\n    \n\n");

...        
eax = getenv("HOME");
eax = __snprintf_chk(&var_6014, 0x400, 0x0, 0x400, "%s/Library/LaunchAgents/", eax);

...
eax = __snprintf_chk(edi, 0x400, 0x0, 0x400, "%s%s.plist", &var_6014, 0xe5d6);

假设该恶意软件将作为Launch Agent继续存在似乎是合理的,但是,它似乎还包含可以保留为登录项的逻辑(请注意对LSSharedFileListInsertItemURL API的调用):

eax = __snprintf_chk(&var_6014, 0x400, 0x0, 0x400, "%s%s.app", &var_748C, &var_788C);
eax = CFURLCreateFromFileSystemRepresentation(0x0, &var_6014, eax, 0x1);
...

eax = LSSharedFileListCreate(0x0, **_kLSSharedFileListSessionLoginItems, 0x0);

...
eax = LSSharedFileListInsertItemURL(eax, **_kLSSharedFileListItemLast, 0x0, 0x0, edi, 0x0, 0x0);

执行恶意软件(在VM中)表明该恶意软件持续存在两次!首先作为Launch Agent(com.mac.host.plist),然后作为登录项。

让我们来看看Launch Agent plist, com.mac.host.plist:

$ cat ~/Library/LaunchAgents/com.mac.host.plist
{
    KeepAlive = 0;
    Label = "com.mac.host";
    ProgramArguments =     (
        "/Users/user/.defaults/Finder.app/Contents/MacOS/Finder"
    );
    RunAtLoad = 1;
}

由于RunAtLoad项设置为1(true),因此,每次用户登录时,操作系统都会自动启动ProgramArguments数组(〜/ .defaults / Finder.app / Contents / MacOS / Finder)中指定的二进制文件。

登录项还将确保启动恶意软件,但是,登录项会显示在UI中,从而明显降低了恶意软件的隐蔽性。

48.png

持久性两次比持久性一次更好吗?并非如此,特别是如果你正在运行Objective-See的工具(例如BlockBlock),它可以检测到两种持久性尝试:

49.png

有关持久保留为登录项以及backgroundTaskManagementAgent的角色的详细信息,请参见我们最近的博客文章:“如何阻止登录项”。

功能:是一个功能齐全的后门

通过Firefox 0day,攻击者使用OSX.Netwire远程感染了macOS系统。持续安装恶意软件(Finder.app)可为攻击者提供对受感染系统的完全远程访问。在这里,我们简要讨论OSX.Netwire.A后门的特定功能。

有关Netwire的详细技术分析,请点此参考。

从加密的(嵌入式)配置文件中提取其命令和控制服务器的地址后,Netwire将连接到所述服务器以执行任务。

$ lldb Finder.app

(lldb) process launch --stop-at-entry
(lldb) b 0x00007658
Breakpoint 1: where = Finder`Finder[0x00007658], address = 0x00007658

(lldb) c
Process 1130 resuming
Process 1130 stopped (stop reason = breakpoint 1.1)

(lldb) x/100xs 0x0000e2f0 --force
0x0000e2f0: ""
...
0x0000e2f8: "89.34.111.113:443;"
0x0000e4f8: "Password"
0x0000e52a: "HostId-%Rand%"
0x0000e53b: "Default Group"
0x0000e549: "NC"
0x0000e54c: "-"
0x0000e555: "%home%/.defaults/Finder"
0x0000e5d6: "com.mac.host"
0x0000e607: "{0Q44F73L-1XD5-6N1H-53K4-I28DQ30QB8Q1}"

尽管此服务器(89.34.111.113)现在处于脱机状态,但静态分析显示该恶意软件期望响应包含任务数据,包括要执行的命令的整数值,该整数用于将所支持的命令编入数组(0x0000d1b0):

mov        dl, byte [esp+ecx+0x78ac+dataFromServer] 

...

dec        dl
cmp        dl, 0x42
ja         loc_6a10

...

movzx      eax, dl
jmp        dword [switch_table_d1b0+eax*4]

通过静态分析此数组中引用的代码,我们可以发现Netwire的功能。

例如,“command” 0x1A (26d) 将重命名文件:

0x00004f37         push       ebx 
0x00004f38         push       edi
0x00004f39         call       imp___symbol_stub__rename

而 “command” 0x1B (27d)将通过unlink API删除一个文件:

0x00004f5e         sub        esp, 0xc                                          
0x00004f61         push       esi
0x00004f62         mov        edi, ecx
0x00004f64         call       imp___symbol_stub__unlink

还可以远程分配OSX.Netwire的权限以与进程进行交互,例如列出它们(“command” 0x42, 66d):

; case 0x42,
...
push       esi
push       edi
push       0x0
push       0x1
call       imp___symbol_stub__proc_listpids

或组织它们(“command” 0x2C, 44d):

; case 0x2C,
...
0x000056fa         push       0x9
0x000056fc         push       eax
0x000056fd         call       imp___symbol_stub__kill

通过“command” 0x19 (25d),恶意软件将调用帮助程序方法,0x0000344c,该方法将派生然后执行一个进程:

eax = fork();
if (((eax == 0xffffffff ? 0x1 : 0x0) != (eax <= 0x0 ? 0x1 : 0x0)) && (eax == 0x0)) {
        execv(esi, &var_18);
        eax = exit(0x0);
}

该恶意软件还可以与UI交互,例如捕获屏幕截图。当恶意软件收到 “command” 0x37 (55d)时,它将调用CGMainDisplayID和CGDisplayCreateImage来创建用户桌面的映像:

0x0000622c         movss      dword [esp+0x34ac+var_101C], xmm0
0x00006235         call       imp___symbol_stub__CGMainDisplayID
0x0000623a         sub        esp, 0xc
0x0000623d         push       eax
0x0000623e         call       imp___symbol_stub__CGDisplayCreateImage

有趣的是,似乎还可以远程控制OSX.Netwire以生成合成的键盘和鼠标事件。

具体来说,当从c&c服务器接收到“command”0x34 (52d)时,将创建并发布合成键盘事件。为了创建和发布事件,恶意软件调用CGEventCreateKeyboardEvent和CGEventPost api。

合成鼠标事件(即单击、移动等)是响应“command”0x35 (53d)生成的:

void sub_9a29() {
  edi = CGEventCreateMouseEvent(0x0, edx, ...);
  CGEventSetType(edi, edx);
  CGEventPost(0x0, edi);
  return;
}

最后,通过“command”0x7可以远程指示恶意软件进行自我卸载,注意,调用unlink删除启动代理plist和恶意软件的二进制映像,调用LSSharedFileListItemRemove删除登录项:

__snprintf_chk(&var_284C, 0x400, 0x0, 0x400, 
              "%s/Library/LaunchAgents/%s.plist", getenv("HOME"), 0xe5d6);
eax = unlink(&var_284C);

if (getPath() != 0x0) {
   unlink(esi);
}

LSSharedFileListItemRemove(var_34A4, esi);

OSX.Mokes.B

Mokes.B是Mokes恶意软件的新变种,并且是一个功能齐全的macOS后门。

感染媒介:浏览器0day

在我们先前对OSX.NetWire的讨论中,我们注意到Coinbase研究人员Philip Martin在推特上发布了以下内容,内容涉及利用Firefox 0day攻击macOS用户的攻击:

5/ Hashes (sha1):
b639bca429778d24bda4f4a40c1bbc64de46fa79
23017a55b3d25a2597b7148214fd8fb2372591a5
C2 IPs:
89.34.111.113:443
185.49.69.210:80

他提到的(第一个)哈希b639bca429778d24bda4f4a40c1bbc64de46fa79原来是Mokes的新变种,我们将其命名为OSX.Mokes.B:

60.png

有关Firefox 0day的更多详细信息,请参见我们上文在OSX.Netwire上的讨论。

持久性攻击的来源:Launch Agent

执行后,OSX.Mokes.B继续作为Launch Agent(quicklookd.plist):

61.png

$ defaults read  ~/Library/LaunchAgents/quicklookd.plist 
{
    KeepAlive = 1;
    Label = quicklookd;
    ProgramArguments =     (
        "/Users/user/Library/Dropbox/quicklookd"
    );
    RunAtLoad = 1;
}

由于Launch Agent(quicklookd.plist)的RunAtLoad项设置为(1),因此,每次用户登录时,操作系统都会自动启动指定的二进制文件(/ Users / user / Library / Dropbox / quicklookd),这提供了恶意软件持久性。

有趣的是,直接嵌入Mokes的是plist和(已安装的)恶意软件的其他名称。它似乎随机地动态地选择这些名称,很可能是为了使基于签名的检测复杂化。

62.png

例如,将(分析)虚拟机还原到原始状态并(重新)运行恶意软件,导致恶意软件选择其他字符串对(例如App Store / storeaccountd)进行安装和持久化:

63.png

功能:功能齐全的后门

我们之前注意到此示例是OSX.Mokes的新变体,原始的OSX.Mokes是跨平台,功能齐全的后门程序,由卡巴斯基于2016年发现。该文章详细介绍了OSX.Mokes的安装,持久性,网络通讯和相当不错的功能,例如屏幕捕获,音频捕获,文档发现和渗透等。

尽管原始的Mokes样本和OSX.Mokes.B之间存在一些差异,但是它们的功能在很大程度上重叠。这些功能包括:

1.捕获屏幕、麦克风、相机;

2.搜索(办公室)文件;

3.监视可移动媒介,例如USB设备;

4. 在受感染的系统上,执行任意命令;

64.png

为了记录用户的行为,该恶意软件利用了流行的QT框架。此跨平台框架包含特定于macOS的网络摄像头记录代码:

65.png


联系我们

010-62029792

在线咨询: 点击这里给我发消息

电子邮箱:info@4hou.com

工作时间:09:00 ~ 18:00