Los operadores de la botnet Stantinko han ampliado su conjunto de herramientas con un nuevo elemento para obtener ganancias de las computadoras bajo su control. La red de bots compuesta por aproximadamente medio millón de unidades, conocida por haber estado activa desde al menos 2012 y apuntar principalmente a usuarios en Rusia, Ucrania, Bielorrusia y Kazajstán, ahora distribuye un módulo de criptominería. Monero, una criptomoneda cuyo tipo de cambio ha oscilado en 2019 entre US $ 50 y US $ 110, ha sido la funcionalidad de monetización de la botnet desde al menos agosto de 2018. Antes de eso, la botnet realizó fraudes por clic, inyección de anuncios, fraude en redes sociales y ataques de robo de contraseñas.
En este artículo describimos el módulo de criptominería de Stantinko y proporcionamos un análisis de su funcionalidad.
La característica más notable de este módulo es la forma en que se ofusca para frustrar el análisis y evitar la detección. Debido al uso de ofuscaciones a nivel fuente con una pizca de aleatoriedad y el hecho de que los operadores de Stantinko compilan este módulo para cada nueva víctima, cada muestra del módulo es única.
Describiremos las técnicas de ofuscación del módulo y ofreceremos, en un artículo aparte dirigido a analistas de malware, un posible enfoque para tratar algunos de ellos.
Dado que Stantinko está desarrollando constantemente nuevos ofuscadores y mejorando los ofuscadores y módulos personalizados ya existentes, los cuales están fuertemente ofuscados, sería descomunal la labor de rastrear cada pequeña mejora y cambio que introduce. Por lo tanto, decidimos mencionar y describir solo lo que creemos que son ajustes significativos. Después de todo, pretendemos describir en este artículo el módulo tal como está actualmente.
Criptominero de código abierto modificado
El módulo de criptominería de Stantinko, que consume la mayoría de los recursos de la máquina comprometida para minar criptomonedas, es una versión altamente modificada del criptominero de código abierto xmr-stak. Todas las strings innecesarias, e incluso funcionalidades completas, fueron eliminadas en un intento por evadir la detección. Las strings y funciones restantes están muy ofuscadas. Los productos de seguridad de ESET detectan este malware como Win{32,64} /CoinMiner.Stantinko.
Uso de proxies de minería
CoinMiner.Stantinko no se comunica con su pool de minería de manera directa, sino que lo hace a través de proxies cuyas direcciones IP se obtienen del texto que aparece en la descripción de los videos de YouTube. El malware bancario Casbaneiro utiliza una técnica similar para ocultar datos en la descripción de los videos de YouTube, aunque Casbaneiro utiliza canales y descripciones de apariencia más legítima, pero con el mismo propósito: almacenar C&C cifrados.
La descripción de dicho video consiste en una string compuesta a partir de direcciones IP de proxy de minería en formato hexadecimal. Por ejemplo, el video de YouTube que se puede ver en la Figura 1 en la descripción "03101f1712dec626", que corresponde a dos direcciones IP en formato hexadecimal: 03101f17 corresponde a 3.16.31 [.] 23 en formato decimal de cuatro puntos y 12dec626 es 18.222.198 [.] 38. Al momento de escribir este artículo, el formato ha sido ligeramente ajustado. Las direcciones IP están actualmente contenidas en dentro de "!!!!", lo que simplifica el proceso de parseo y evita posibles cambios en la estructura HTML del video de YouTube que harían que el parser no funcione.
En versiones anteriores, la URL de YouTube estaba hardcodeada en el binario CoinMiner.Stantinko. Actualmente, en su lugar el módulo recibe un identificador de video como un parámetro de línea de comando. Este parámetro se usa para construir la URL de YouTube, en la forma https://www.youtube.com/watch?v=%PARAM%. El módulo de criptominería es ejecutado por el componente BEDS de Stantinko o por rundll32.exe a través de un archivo por lotes que no hemos capturado, con el módulo cargado desde una ubicación del sistema de archivos local de la forma %TEMP%\%RANDOM%\%RANDOM_GUID%.dll.
Informamos a YouTube de este abuso y todos los canales que contienen estos videos fueron eliminados.
Capacidades de criptominería
Hemos dividido el módulo de criptominería en cuatro partes lógicas que representan distintos conjuntos de capacidades. La parte principal realiza la criptominería real, mientras que las otras partes del módulo son responsables de las siguientes funciones adicionales:
- suspender otras aplicaciones de criptominería (es decir, la competencia)
- detectar software de seguridad
- suspender la función de criptominería si la PC funciona con batería o cuando se detecta un administrador de tareas, para evitar que el usuario lo detecte
Criptominería
En el núcleo de la función de criptominería se encuentra el proceso de hashing y la comunicación con el proxy. El método para obtener la lista de proxies de minería se describió anteriormente; CoinMiner.Stantinko establece la comunicación con el primer proxy de minería que encuentra vivo.
Su comunicación se realiza a través de TCP y está cifrada por RC4 con una clave que consta de los primeros 26 caracteres del número pi (incluido el separador decimal, hardcodeado en la string "3,141592653589793238462643") y luego codificado en base64. La misma clave se utiliza en todas las muestras que hemos visto.
El código del algoritmo de hashing se descarga desde el proxy de minería al comienzo de la comunicación y se carga en la memoria, ya sea directamente o, en versiones anteriores, desde la biblioteca libcr64.dll que primero se droppea en el disco.
La descarga del código de hashing con cada ejecución permite al grupo Stantinko cambiar este código sobre la marcha. Este cambio hace posible, por ejemplo, adaptarse a los ajustes de algoritmos en las monedas existentes y cambiar hacia la minería de otras criptomonedas para, quizás, minar la criptomoneda más rentable en el momento de la ejecución. El principal beneficio de descargar la parte central del módulo desde un servidor remoto y cargarlo directamente en la memoria es que esta parte del código nunca se almacena en el disco. Este ajuste adicional, que no está presente en la versión anterior, tiene como objetivo complicar la detección porque los patrones en estos algoritmos son triviales para que los productos de seguridad los detecten.
Todas las instancias del módulo de criptominería de Stantinko que hemos analizado minan Monero. Deducimos esto a partir de los trabajos proporcionados por el proxy de minería y el algoritmo hashing. Por ejemplo, la Figura 2 es un trabajo enviado por uno de los servidores proxy.
{"error":null,"result":{"status":"OK"}}
{"method":"job","params":"blob":"0b0
Se analizó el algoritmo de hashing utilizado y encontramos que era CryptoNight R. Dado que existen múltiples criptomonedas que hacen uso de este algoritmo, su reconocimiento por sí solo no es suficiente; simplemente reduce la lista. Se puede ver en el trabajo proporcionado que en ese momento la altura del blockchain era 1815711, por lo que tuvimos que encontrar monedas usando CryptoNight R con esta altura en exploradores de bloques dedicados, lo que nos llevó a Monero. De hecho, la disección de la string 0b0bbf
Por otra parte, el algoritmo de hashing no está ofuscado, ya que la ofuscación afectaría significativamente la velocidad del cálculo de hash y, por lo tanto, el rendimiento general y la rentabilidad.
Suspensión de otros criptomineros
El malware enumera los procesos en ejecución en busca de otros criptomineros. Si se encuentra algún competidor, Stantinko suspende todos sus hilos.
CoinMiner.Stantinko considera que un proceso corresponde a un criptominero si su línea de comando contiene una string particular, o una combinación, que varía de una muestra a otra. Por ejemplo:
- minerd
- minergate
- xmr
- cpservice
- vidservice and stratum+tcp://
- stratum://
- -u and pool
- "-u and pool
- "-u and xmr
- -u and xmr
- -u and mining
- "-u and mining
- -encodedcommand and exe
- --donate-level
- windows and -c and cfgi
- regsvr32 and /n and /s and /q
- application data and exe
- appdata and exe
Estas strings se refieren a los siguientes criptomineros legítimos: https://github.com/pooler/cpuminer, https://minergate.com/, https://github.com/xmrig, e incluso https://github.com/fireice-uk/xmr-stak, que, curiosamente, es el minero en el que se basa este módulo de Stantinko. Las strings también conducen a varias muestras de malware poco interesantes que contienen funcionalidad de criptominería.
De interés es que los operadores de Stantinko son conocidos por haber tratado de deshacerse del código de la competencia en el pasado. Sin embargo, se apoyaron en el set de herramientas legítimo conocido como AVZ Antiviral Toolkit alimentado con un script escrito en el lenguaje de scripting incorporado para esta tarea.
Prevenir la detección
CoinMiner.Stantinko suspende temporalmente la minería si detecta que la máquina no está conectada a la corriente. Esta medida, evidentemente dirigida a las computadoras portátiles, evita que la batería se agote rápidamente, lo que podría llevar a que el usuario sospeche que algo extraño está sucediendo.
Además, suspende temporalmente la extracción si se detecta que se ejecuta una aplicación de administrador de tareas (un proceso denominado procexp64.exe, procexp.exe o taskmgr.exe).
El malware también analiza los procesos en ejecución en busca de software de seguridad y nuevamente administradores de tareas. Calcula el CRC-32 del nombre del proceso y luego lo compara con una lista hardcodeada de sumas de chequeo CRC-32, que se incluye en el Apéndice. En general, esta técnica puede ayudar a evadir la detección, ya que los nombres de proceso de esos productos de seguridad no se incluyen en el binario, lo que ayuda a que pase desapercibido al no contener los nombres de proceso directamente. También hace que sea más difícil para los analistas averiguar qué buscan los autores de malware porque para ello es necesario descifrar estos hashes, lo cual técnicamente representa el mismo problema que el descifrado de contraseñas. Sin embargo, usar una lista de nombres de procesos conocidos suele ser suficiente para determinar los nombres exactos.
Si se encuentra una coincidencia CRC-32, la CRC se escribe en un archivo de registro (api-ms-win-crt-io-l1-1-0.dll). El archivo de registro es presumiblemente exfiltrado posteriormente por algún componente de Stantinko que no hemos visto, ya que no hay otra funcionalidad relacionada con él en este módulo.
Ofuscación
Además de sus características de criptominería, CoinMiner.Stantinko es notable también por sus técnicas de ofuscación destinadas a evitar la detección y frustrar el análisis. Algunas de esas técnicas son únicas y las describiremos en detalle en un artículo aparte.
Conclusión
Nuestro descubrimiento muestra que los delincuentes detrás de Stantinko continúan expandiendo las formas en que aprovechan la botnet que controlan. Sus anteriores innovaciones fueron ataques distribuidos basados en diccionario en sitios web de Joomla y WordPress que tenían como objetivo obtener credenciales de servidor, probablemente con el objetivo de venderlas a otros delincuentes.
Este módulo de criptominería configurado de forma remota, distribuido desde al menos agosto de 2018 y todavía activo al momento de escribir esta publicación, muestra que este grupo continúa innovando y ampliando sus capacidades para ganar dinero. Más allá de su funcionalidad de criptominería estándar, el módulo emplea algunas técnicas interesantes de |ofuscación que revelaremos, junto con algunas posibles contramedidas, en un próximo artículo.
Indicadores de Compromiso (IoCs)
Nombres de detección de ESET
Win32/CoinMiner.Stantinko
Win64/CoinMiner.Stantinko
SHA-1
A full list of more than 1,000 hashes is available from our GitHub repository.
00F0AED42011C9DB7807383868AF82EF5454FDD8
01504C2CE8180D3F136DC3C8D6DDDDBD2662A4BF
0177DDD5C60E9A808DB4626AB3161794E08DEF74
01A53BAC150E5727F12E96BE5AAB782CDEF36713
01BFAD430CFA034B039AC9ACC98098EB53A1A703
01FE45376349628ED402D8D74868E463F9047C30
Nombres de archivo
api-ms-win-crt-io-l1-1-0.dll
libcr64.dll
C:\Windows\TEMP\%RANDOM%\%RANDOM_GUID%.dll
Nombre de Mutex y clave RC4
“3,141592653589793238462643”
URLs de YouTube URLs con datos de configuración del proxy de minería
- https://www.youtube[.]com/watch?v=kS1jXg99WiM
- https://www.youtube[.]com/watch?v=70g4kw2iRGo
- https://www.youtube[.]com/watch?v=cAW1xEpyr7Y
- https://www.youtube[.]com/watch?v=6SSKQdE5Vjo
- https://www.youtube[.]com/watch?v=fACKZewW22M
- https://www.youtube[.]com/watch?v=FDQOa5zCv3s
- https://www.youtube[.]com/watch?v=TpyOURRvFmE
- https://www.youtube[.]com/watch?v=2fpiR4NIpsU
- https://www.youtube[.]com/watch?v=TwnD0Kp_Ohc
- https://www.youtube[.]com/watch?v=wJsbj8zPPNs
Direcciones IP de proxis de minería
• 3.16.150[.]123
• 3.16.152[.]201
• 3.16.152[.]64
• 3.16.167[.]92
• 3.16.30[.]155
• 3.16.31[.]23
• 3.17.167[.]43
• 3.17.23[.]144
• 3.17.25[.]11
• 3.17.59[.]6
• 3.17.61[.]161
• 3.18.108[.]152
• 3.18.223[.]195
• 13.58.182[.]92
• 13.58.22[.]81
• 13.58.77[.]225
• 13.59.31[.]61
• 18.188.122[.]218
• 18.188.126[.]190
• 18.188.249[.]210
• 18.188.47[.]132
• 18.188.93[.]252
• 18.191.104[.]117
• 18.191.173[.]48
• 18.191.216[.]242
• 18.191.230[.]253
• 18.191.241[.]159
• 18.191.47[.]76
• 18.216.127[.]143
• 18.216.37[.]78
• 18.216.55[.]205
• 18.216.71[.]102
• 18.217.146[.]44
• 18.217.177[.]214
• 18.218.20[.]166
• 18.220.29[.]72
• 18.221.25[.]98
• 18.221.46[.]136
• 18.222.10[.]104
• 18.222.187[.]174
• 18.222.198[.]38
• 18.222.213[.]203
• 18.222.253[.]209
• 18.222.56[.]98
• 18.223.111[.]224
• 18.223.112[.]155
• 18.223.131[.]52
• 18.223.136[.]87
• 18.225.31[.]210
• 18.225.32[.]44
• 18.225.7[.]128
• 18.225.8[.]249
• 52.14.103[.]72
• 52.14.221[.]47
• 52.15.184[.]25
• 52.15.222[.]174
Técnicas de MITRE ATT&CK
Tactic | ID | Name | Description |
---|---|---|---|
Execution | T1085 | Rundll32 | The module can be executed by rundll32.exe. |
T1035 | Service Execution | The malware can be executed as a service. | |
Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | The module deobfuscates strings in its code during the execution process. |
T1027 | Obfuscated Files or Information | The module obfuscates its code and strings in an apparent attempt to make analysis and detection difficult. | |
T1102 | Web Service | The malware acquires configuration data from description of YouTube videos. | |
Discovery | T1063 | Security Software Discovery | The malware acquires a list of running security products. |
Command and Control | T1090 | Connection Proxy | The module uses proxies between itself and the mining pool. |
T1008 | Fallback Channels | The module connects to another mining proxy if the initial one is inaccessible. | |
T1095 | Standard Non-Application Layer Protocol | The malware uses TCP for its communications. | |
T1043 | Commonly Used Port | The malware communicates over port 443. | |
T1132 | Data Encoding | The module encrypts then base64 encodes some network traffic. | |
T1032 | Standard Cryptographic Protocol | The module encrypts traffic with RC4. | |
T1071 | Standard Application Layer Protocol | Acquires configuration data from description of YouTube videos via HTTPS. | |
Impact | T1496 | Resource Hijacking | The module mines cryptocurrency. |
Apéndice
CRC-32 checksums checked by CoinMiner.Stantinko and the filenames they equate to are listed below.
0xB18362C7 | afwserv.exe |
---|---|
0x05838A63 | ashdisp.exe |
0x36C5019C | ashwebsv.exe |
0xB3C17664 | aswidsagent.exe |
0x648E8307 | avastsvc.exe |
0x281AC78F | avastui.exe |
0xAA0D8BF4 | avgcsrva.exe |
0x71B621D6 | avgcsrvx.exe |
0x7D6D668A | avgfws.exe |
0x1EF12475 | avgidsagent.exe |
0x010B6C80 | avgmfapx.exe |
0x6E691216 | avgnsa.exe |
0xB5D2B834 | avgnsx.exe |
0x36602D00 | avgnt.exe |
0x222EBF57 | avgrsa.exe |
0xF9951575 | avgrsx.exe |
0x2377F90C | avgsvc.exe |
0x37FAB74F | avgsvca.exe |
0xEC411D6D | avgsvcx.exe |
0x0BED9FA2 | avgtray.exe |
0x168022D0 | avguard.exe |
0x99BA6EAA | avgui.exe |
0x7A77BA28 | avguix.exe |
0x0D22F74A | avgwdsvc.exe |
0x98313E09 | avira.servicehost.exe |
0x507E7C15 | avira.systray.exe |
0xFF934F08 | avp.exe |
0x9AC5F806 | avpui.exe |
0xBD07F203 | avshadow.exe |
0x64FDC22A | avwebg7.exe |
0x0BC69161 | avwebgrd.exe |
0xBACF2EAC | cureit.exe |
0x8FDEA9A9 | drwagntd.exe |
0xE1856E76 | drwagnui.exe |
0xF9BF908E | drwcsd.exe |
0xC84AB1DA | drwebcom.exe |
0x183AA5AC | drwebupw.exe |
0xAC255C5E | drwupsrv.exe |
0x23B9BE14 | dwantispam.exe |
0xDAC9F2B7 | dwarkdaemon.exe |
0x7400E3CB | dwengine.exe |
0x73982213 | dwnetfilter.exe |
0x1C6830BC | dwscanner.exe |
0x86D81873 | dwservice.exe |
0xB1D6E120 | dwwatcher.exe |
0xD56C1E6F | egui.exe |
0x69DD7DB4 | ekrn.exe |
0xFB1C0526 | guardgui.exe |
0x5BC1D859 | ipmgui.exe |
0x07711AAE | ksde.exe |
0x479CB9C4 | ksdeui.exe |
0x6B026A91 | nod32cc.exe |
0xCFFC2DBB | nod32krn.exe |
0x59B8DF4D | nod32kui.exe |
0x998B5896 | procexp.exe |
0xF3EEEFA8 | procexp64.exe |
0x81C16803 | sched.exe |
0x31F6B864 | spideragent.exe |
0x822C2BA2 | taskmgr.exe |
0x092E6ADA | updrgui.exe |
0x09375DFF | wsctool.exe |