LoudMiner: minero multiplataforma oculto en programas VST crackeados | WeLiveSecurity

LoudMiner: minero multiplataforma oculto en programas VST crackeados

Investigadores de ESET revelan detalles de un inusual minero que viene junto a copias piratas de programas VST de audio y que mina criptomonedas en máquinas virtuales

Investigadores de ESET revelan detalles de un inusual minero que viene junto a copias piratas de programas VST de audio y que mina criptomonedas en máquinas virtuales

LoudMiner es un caso inusual de un minero de criptomonedas persistente distribuido para macOS y Windows desde Agosto de 2018. Utiliza programas de virtualización –QEMU en macOS y VirtualBox en Windows- para minar criptomonedas en una máquina virtual Tiny Core Linux, logrando que sea multiplataforma. Viene junto a copias piratas de programas VST (del inglés Virtual Studio Technology). El minero en sí está basado en XMRig (Monero) y utiliza un pool de minería, por lo que es imposible rastrear potenciales transacciones.

Distribución

Al momento de escribir este artículo, existen 137 plugins VST (42 son para Windows y 95 para macOS) disponibles en un único sitio web creado en WordPress con un dominio registrado el 24 de Agosto de 2018.

El primero de los programas VST (Kontakt Native Instruments 5.7 para Windows) fue cargado el mismo día. El tamaño de las aplicaciones hace que sea prácticamente imposible de analizar, aunque consideramos que podemos asumir con seguridad que todas están troyanizadas.

Las aplicaciones en sí no están alojadas en el sitio basado en WordPress, sino en 29 servidores externos, los cuales pueden encontrarse en la sección IoCs. Los administradores del sitio también actualizaron con frecuencia las aplicaciones con versiones más nuevas, haciendo que sea más difícil rastrear la primera de las versiones del minero.

Independientemente de la naturaleza de las aplicaciones apuntadas por los cibercriminales, es interesante observar que su propósito está relacionado a la producción de audio. En este sentido, las computadoras en las que están instaladas estas aplicaciones VST deberían contar con un buen poder de procesamiento, por lo que altos niveles de consumo del CPU no es algo que sorprenda a los usuarios de estos equipos. Además, estas aplicaciones son generalmente complejas, por lo que no resulta algo inesperado para los usuarios que sean archivos de gran tamaño. Asimismo, los atacantes utilizan esto en beneficio propio para camuflar las imágenes de máquina virtual (VM, por sus siglas en inglés). Cabe destacar que la decisión de utilizar máquinas virtuales, en lugar de una solución de aprendizaje, es un punto a remarcar y no es algo que vemos con frecuencia.

Los siguientes son algunos ejemplos de programas VST, así como algunos comentarios que se pueden encontrar en el sitio web.

  • Propellerhead Reason
  • Ableton Live
  • Sylenth1
  • Nexus
  • Reaktor 6
  • AutoTune

Figura 1: Comentario #1 del “administrador”

Figura 2: Comentario #2 del “administrador”

Reportes de usuarios

Hemos visto varios hilos en foros en los que los usuarios se quejan acerca del proceso qemu-system-x86_64, ya que utiliza el 100% de su CPU en Mac:

Figura 3: Reporte de usuario #1 (https://discussions.apple.com/thread/250064603)

Figure 4: User report #2 (https://toster.ru/q/608325)

Un usuario llamado “Malconi” (https://discussions.apple.com/thread/8602989) dijo lo siguiente:

“Desafortunadamente, tuve que reinstalar OSX, el problema fue que Ableton Live 10, el cual descargué de un sitio de Torrent y no del sitio oficial, también instala un minero que corre en segundo plano causando esto”. El mismo usuario adjunto capturas de pantalla del Activity Monitor de macOS en el que se indican 2 procesos – qemu-system-x86_64 y tools-service – utilizando el 25% de los recursos del CPU y corriendo como root”.

Análisis de las aplicaciones pirateadas

La idea general de los análisis tanto para macOS como Windows arrojan lo mismo:

  1. Una aplicación empaquetada junto a un programa de virtualización, una imagen Linux y otros archivos adicionales son utilizados para lograr persistencia.
  2. Los usuarios descargan las aplicaciones y siguen las instrucciones adjuntas acerca de cómo instalar estos programas VST.
  3. LoudMiner se instala primero y luego el plugin VST.
  4. LoudMiner se esconde y se vuelve persistente en el arranque.
  5. La máquina virtual de Linux es ejecutada y el proceso de minado comienza.
  6. Scripts dentro de la máquina virtual pueden contactar el servidor C&C para actualizar el minero (configuración y binarios).

Mientras analizábamos las diferentes aplicaciones VST, identificamos cuatro versiones del minero, mayormente basado en cómo es empaquetado junto al actual programa, el dominio del servidor C&C, y algo que creemos es un string de versión creado por el autor.

macOS

Hasta el momento hemos identificado tres versiones para macOS de este malware. Todas ellas incluyen la necesidad de correr QEMU en installerdata.dmg desde donde todos los archivos copiados sobre /usr/local/bin y tiene los permisos apropiados que fueron siendo establecidos durante el camino. Cada versión del minero puede ejecutar dos imágenes a la vez, cada una tomando 128 MB de RAM y un núcleo del CPU. La persistencia es lograda al añadir archivos plist en /Library/LaunchDaemons con RunAtLoad configurado en true. También cuentan con KeepAlive configurado en true, asegurándose de que el proceso se reiniciará en caso de ser detenido.

Cada una de las versiones cuenta con los siguientes componentes:

  1. Imágenes QEMU de Linux.
  2. Scripts de shell utilizados para ejecutar las imágenes QEMU.
  3. Daemons utilizados para iniciar los scripts de shell en el arranque y mantenerlos corriendo.
  4. Un script de shell para monitorear el CPU junto con un daemon que lo acompaña y que puede iniciar/detener el minado según el uso del CPU y si el proceso Activity Monitor se está ejecutando.

El script de monitoreo del CPU puede iniciar y detener el minado mediante la carga y remoción del daemon. Si el proceso Activity Monitor está corriendo, el minado se detiene. De lo contrario, verifica durante cuánto tiempo el sistema ha estado inactivo en segundos:

Si ha sido mayor a los 2 minutos, comienza con el minado. Si ha sido menor a los 2 minutos, verifica el uso del CPU.

…divide eso por el número de núcleos del CPU:

…y si es superior que 85%, detiene el minado. El script en sí mismo presenta algunos cambios entre las distintas versiones, pero la idea general se mantiene igual.

Una vez que la instalación finalizó, todos los archivos de instalación que tengan alguna relación con el minero son eliminados.

Figura 5: Instalación de Polyverse.Music.Manipulator.v1.0.1.macOS.dmg

Figura 6: instrucciones de configuración de Polyverse.Music.Manipulator.v1.0.1.macOS.dmg

Versión 1

Los archivos del minero en el paquete de las aplicaciones VST descargadas no están ofuscados ni están ubicados en otro paquete; están instalados junto al programa VST en las siguientes ubicaciones:

  • /Library/Application Support/.Qemusys
    • qemu-system-x86_64 – – limpia el binario QEMU
    • sys00_1-disk001.qcow2 – Imagen Linux (primera)
    • qemuservice sript de shell que ejecuta la primera imagen a través del binario qemu-system-x86_64  (ver listado de Script 1)
  • /Library/Application Support/.System-Monitor
    • system-monitor.daemon – ejecuta la primera imagen a través del binario system-monitor
  • /usr/local/bin
    • .Tools-Service
      • sys00_1-disk001.qcow2 – Imagen Linux (segunda)
      • tools-service.daemon –ejecuta la segunda imagen a través del binario tools-service
    • cpumonitor –inicia/detiene el minado según el tiempo de inactividad y el uso del CPU
    • system-monitor –copia del binario qemu-system-x86_64
    • tools-service –copia del binario qemu-system-x86_64
  • /Library/LaunchDaemons
    • buildtools.system-monitor.plist – ejecuta system-monitor.daemon
    • buildtools.tools-service.plist – ejecuta tools-service.daemon
    • modulesys.qemuservice.plist – ejecuta qemuservice
    • systools.cpumonitor.plist – ejecuta cpumonitor

Script 1: shell script qemuservice

Una vez copiadas las dependencias, todos los daemons relacionados con el minero son ejecutados y, a continuación, se instala el software real:

  • qemuservice no iniciará la iamgen si el proceso Activity Monitor se está ejecutando. De hecho, si se está ejecutando, descargará el plist que lanzó.
  • tools-service.daemon lanzará la imagen solo cuando el proceso qemu-system-x86_64 no se esté ejecutando y después de suspenderse durante 45 minutos.
  • System-monitor.daemon ejecutará la imagen solo si se detecta la CPU Intel i5, i7 o i9.

Estos scripts utilizan el mismo comando para iniciar la imagen QEMU, pero solo se diferencian en los nombres y en la ruta de la imagen.

Hemos encontrado las siguientes capturas de pantalla relacionadas a la versión 1 del minero:

Figura 7: consumo del CPU de QEMU con Little Snitch (source: https://imgur.com/a/sc3u6kk)

La imagen de Little Snitch indica que algunas conexiones del proceso qemu-system-x86_64 fueron bloqueadas. Específicamente, hopto[.]org (un servicio de nombre de host gratuito) es un C&C utilizado por la versión 1 del minero

Versión 2

Los archivos del minero están en data_installer.pkg dentro del paquete de la aplicación descargada. Primero se instala data_installer.pkg y luego el software VST. Antes de la instalación, la versión 1 del minero se elimina junto con la ejecución del comando:

Como se ve en el listado en el Script 2, solo lo hace cuando detecta un proceso qemu-system-x86_64 en ejecución

Script 2: data_installer.pkg script de preinstalación que elimina la versión

Los siguientes archivos temporales son creados:

  • /Users/Shared
    • z1 – binario QEMU
    • z1.daemon – ejecuta la imagen QEMU con el binario QEMU
    • z1.qcow2 – imagen QEMU
    • z1.plist – ejecuta z1.daemon
    • z3 – Script de monitoreo del CPU, pequeño cambio respecto de la versión 1 cpumonitor
    • z3.plist – utilizado para ejecutar z3
    • randwd – genera nombres aleatorios

Una vez copiadas las dependencias, se instala el minero. Esta vez, los nombres de los binarios QEMU, plist y directorios de QEMU son aleatorios mediante el script randwd. La instalación del minero crea dos copias de z1, z1.daemon, z1.qcow2 y z1.plist . Para cada copia, sucede lo siguiente:

  • Se crea un directorio con un nombre aleatorio en /Library/Application Support
  • El binario QEMU z1 lleva el mismo nombre que el directorio y es copiado en /usr/local/bin
  • z1.daemon (ver listado en Script 3) y z1.qcow2 son copiados en este directorio bajo los nombres aleatorios
  • z1.plist es copiado con el mismo com.<random_name>.plist en /Library/LaunchDaemons

Los archivos z1.daemon, z1.plist, z3 y z3.plist sirven como plantillas.  En estos archivos, las referencias a otros scripts, binarios, plist, etc. son reemplazadas por su correspondiente nombre aleatorio generado.

También es elegido un nombre aleatorio para el script de shell para monitorear el CPU y para el archivo plist que lo acompaña. z3 es copiado en /usr/local/bin y el plist en /Library/LaunchDaemons bajo el nombre com.<random_name>.plist.

Script 3. shell script z1.daemon 

La versión 2 es un poco más limpia y/o simple que la versión 1. Solo hay una imagen QEMU, con dos copias realizadas; lo mismo para los scripts para ejecutar imágenes, los daemons y el cpumonitor. Aunque la versión 2 aleatoriza sus nombres de archivos y directorios, solo se puede instalar una vez porque la instalación verifica los procesos en ejecución con accel = hvf en su línea de comandos.

De las aplicaciones de la versión 2 que hasta ahora hemos revisado, el hash SHA1 del data_installer.pkg siempre es 39a7e86368f0e68a86cce975fd9d8c254a86ed93.

Versión 3

Los archivos del minero están en un archivo DMG cifrado llamado do.dmg, dentro del paquete de la aplicación. El DMG está montado con el siguiente comando

El minero DMG contiene un solo paquete: datainstallero.pkg. Esto y el paquete del software son instalados.

El contenido del paquete de datainstallero.pkg y data_installer.pkg de la versión 2 son más o menos iguales, pero datainstallero.pkg agrega dos scripts ofuscados (clearpacko.sh e installpacko.sh) y ofusca un script existente – randwd:

  • clearpacko.sh elimina la versión 1 del minero al igual que lo hace la versión 2.
  • installpacko.sh instala el minero de la misma manera que lo hace la versión 2, excepto los comentarios que han sido removidos del script.

El SHA1 del do.dmg sigue siendo el mismo: b676fdf3ece1ac4f96a2ff3abc7df31c7b867fb9

Ejecutando la imagen Linux

Todas las versiones utilizan múltiples scripts shell para ejecutar la imagen. Los scripts de shell son ejecutados por plists en el arranque y se mantienen vivos.

  • Versión 1 ejecuta los siguientes binarios (copias de qemu-system-x86_64) para ejecutar las imágenes QEMU: qemu-system-x86_64, system-monitor, tools-service.
  • La versión 2 y 3 utilizan el mismo comando, pero tanto el nombre de archivo del binario, el directorio en Application Support y el nombre de archivo de QEMU es aleatorizado.

Todas las versiones utilizan los siguientes interruptores:

  • M accel=hvf para utilizar el frameweork Hypervisor como un acelerador. HVF fue introducido con OS X 10.10 y el soporte para HVF fue añadido en QEMU 2.12, el cual fue lanzado en abril de 2018.
  • -display none por lo que la máquina virtual se ejecuta sin una interfaz gráfica.

Debido a que la imagen es ejecutada sin especificar la cantidad de RAM y números de núcleos de CPU, los valores por defecto utilizados son: 1 núcleo CPU y 128MB de RAM. Todas las versiones pueden ejecutar 2 imágenes.

Windows (versión 4)

A partir del string que extrajimos de la aplicación, definimos a la versión 4 como la única que hemos visto hasta ahora para Windows. Como dijimos anteriormente, la lógica es muy similar a la versión para macOS. Cada aplicación para Windows está empaquetada como un instalador MSI que instala la aplicación “creackeada”, y la Figura 8 muestra la ventana emergente por la instalación del driver de VirtualBox cuando corre el instalador de un VST “creackeado” desde vstcrack[.]com.

Figura 8: Ventana emergente para un driver de ViretualBox al momento de ejecutar la instalación de una aplicación de vstcrack[.]com

VirtualBox se instala en su nombre de carpeta habitual (C: \ Archivos de programa \ Oracle); sin embargo, los atributos del directorio se configuran como “ocultos”. Luego, el instalador copia la imagen de Linux y VBoxVmService (un servicio de Windows utilizado para ejecutar una máquina virtual VirtualBox como un servicio) en C: \ vms , que también es un directorio oculto. Una vez que se completa la instalación, el instalador ejecuta un script por lotes compilado con BAT2EXE (vea la lista desempaquetada en Script 4) para importar la imagen de Linux y ejecutar VmServiceControl.exe para iniciar la máquina virtual como un servicio.

Script 4: Script de lotes utilizado para ejecutar la máquina virtual de Linux como servicio

Este método es utilizado para asegurar la persistencia del minero luego del reinicio. De hecho, el servicio VboxVmService viene con un archivo de configuración (ver Script 5) en el cual es posible habilitar la opción AutoStart para que la máquina virtual sea ejecutada automáticamente junto con el arranque

Script 5: Archivo de configuración para VBoxVmService con  AutoStart habilitado

El archivo OVF incluido en la imagen Linux describe la configuración del hardware de la máquina virtual (ver Script 6): utiliza 1GB de RAM y 2 núcleos CPU (con un uso máximo de 90%).

Script 6: Configuración del hardware de la imagen Linux

Imagen Linux

La imagen Linux es Tiny Core Linux 9.0 configurada para correr XMRig, así como algunos archivos y scripts para mantener el minero actualizado de forma continua. Los archivos más interesantes son:

  • /root/.ssh/{id_rsa, id_rsa.pub} – el par de claves SSH utilizadas para actualizar el minero desde el servidor C&C utilizando SCP.
  • /opt/{bootsync.sh, bootlocal.sh} –los comandos de inicio de sistema que intentan actualizar el minero desde el servidor C&C y ejecutarlo (ver Scripts 7 y 8):

Script 7. bootsync.sh

Script 8. bootlocal.sh

  • /mnt/sda1/tools/bin – principales archivos y scripts utilizados para actualizar y ejecutar el minero.
  • /mnt/sda1/tools/xmrig –  contiene el código fuente de XMRIG (del repositorio de GitHub).

La configuración del minero se guarda en /mnt/sda1/tools/bin/config.json y contiene principalmente el nombre de dominio y el puerto utilizado para el pool de minería, el cual puede diferir según la versión (consulte los ejemplos en la sección IoC).

El mecanismo de actualización es llevado adelante a través de SCP (Secure File Copy) por tres scripts diferentes:

  • xmrig_update – uactualiza la configuración del minero (config.json);
  • ccommand – actualiza ccommand_update, xmrig_update (see Script 9), updater.sh, xmrig;
  • ccommand_update – actualiza ccommand;

De acuerdo a lo que hemos visto, la configuración del minero se actualiza una vez por día.

Script 9. xmrig_update

Con el fin de identificar una sesión de minería en particular, un archivo que contiene la dirección IP de la máquina y la fecha en la que es creado por el script idgenerator junto a su salida, es enviado al servidor C & C mediante updater.sh.

Protección

Obviamente, la mejor recomendación para estar protegido ante este tipo de amenazas es no descargar copias piratas de programas pagos. Sin embargo, hay algunos aspectos que pueden ayudarlo a identificar cuando una aplicación contiene un código no deseado:

  • Una ventana emergente de un inesperado instalador “adicional” (en este caso el adaptador de red de Oracle).
  • Alto consumo del CPU por un proceso que no has instalado (QEMU o VirtualBox en este caso).
  • Un nuevo servicio añadido a la lista de servicios de inicio (Windows) o un nuevo Daemon de Ejecución (macOS).
  • Conexiones de red hacia nombres de dominio extraños (tales como system-update[.]info o system-check[.]services).

Indicadors de Compromiso (IoCs)

Hashes

Aplicaciones para macOS “crackeadas” (versiones 1-3)

SHA-1FilenameESET detection nameVersion number
71030028c4e1b844c85138bd77ddea96a190ec2cVirtual_DJ_8_Pro_Infinity_macOS.pkgOSX/LoudMiner.A1
32c80edcec4f7bb3b494e8949c6f2014b7f5db65Native Instruments Massive Installer.pkgOSX/LoudMiner.A1
7dc9f8ca07cd8e0247cf15cd8d2da2190a02fc90Massive_v1.5.5_Installer_macOS.dmgOSX/LoudMiner.B2
0b40bd0754637d5be2ada760ff0ecfda7afe03d7Native_Instruments_Effects_Series_Mod_Pack.dmgOSX/LoudMiner.B2
88efc767a32299e922f1b41f82c8d584585e2161Spectrasonics_Omnisphere_2.5_OSx.dmgOSX/LoudMiner.C3
e9c9d17d006fb03d67b736c0826df0af8ca6d5fdLennar_Digital_Sylenth1_2.2.1.dmgOSX/LoudMiner.C3

Aplicaciones para Windows “crackeadas” (versiones 4)

SHA-1FilenameESET detection name
23faacfc23cfef65504d7fa20854030b96a9df91Ableton.Live.Suite.10.0.6.Multilingual.x64.WIN.zipWin32/LoudMiner.A
5a8682eae69b2e11d45980941a972bd734630207Infected-Mushroom-Manipulator-V1.0.3.zipWin32/LoudMiner.A
60a8f1d4a028153271093e815e8267bd25fde852Sonic_Academy_ANA_2.0.3_x86_x64.msiWin32/LoudMiner.A
7c7876058783da85d5502b9406f7fb4d26f66238SoundToys_5.0.1_x64-SetupFiles.rarWin32/LoudMiner.A
a1a1dc7876d71749a8bc5690c537451770ef4ab8Valhalla-DSP-Full-Bundle-setupfiles.zipWin32/LoudMiner.A

Imágenes Linux

SHA-1FilenameVersion number
dd9b89a3c5a88fb679f098e2c2847d22350e23b1sys00_1-disk001.qcow21
d1e42e913da308812dd8da1601531b197c1a09a1sys00_1-disk001.qcow21
39a7e86368f0e68a86cce975fd9d8c254a86ed93z1.qcow2 (renamed with a randomized name)2
59026ffa1aa7b60e5058a0795906d107170b9e0fz1.qcow2 (renamed with a randomized name)3
fcf5c3b560295ee330b97424b7354fd321757cc6sys00_1.ova4
fc60431a0172d5b8cf4b34866567656467cf861csys00_1.ova4

Nombres de archivo

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)

Técnicas MITRE ATT&CK

TacticIDNameDescription
ExecutionT1035Service ExecutionOn Windows, the Linux image is run as a service with VboxVmService.
PersistenceT1050New ServiceInstall the Linux virtual machine as a service with VboxVmService.
T1062HypervisorInstall a type-2 hypervisor on the host (VirtualBox or QEMU) to run the miner.
T1160Launch DaemonThe macOS versions use a Launch Daemon to ensure the persistence.
Defense EvasionT1027Obfuscated Files or InformationSome shell scripts are obfuscated, and some installers are encrypted in macOS versions.
T1045Software PackingUse BAT2EXE to pack batch script in Windows versions.
T1158Hidden Files and DirectoriesThe VirtualBox installation folder and the directory containing the Linux image are hidden.
Command and ControlT1043Commonly Used PortUse TCP ports 443 and 8080 for mining pool communication.
T1105Remote File CopyUse SCP (port 22 or 5100) to copy files from/to the C&C server.
ImpactT1496Resource HijackingUse victim machines to mine cryptocurrency (Monero).
and

Discusión