Los operadores de la botnet Stantinko han ampliado su conjunto de herramientas con un nuevo medio de obtener ganancias de las computadoras bajo su control. La red de bots de aproximadamente medio millón de unidades, conocida por haber estado activa desde al menos 2012 y dirigida principalmente a usuarios en Rusia, Ucrania, Bielorrusia y Kazajstán, ahora distribuye un módulo de criptominería. La minerí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 un grano de aleatoriedad y al 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 separado para otros analistas de malware, un posible enfoque para tratar algunos de ellos.
Dado que Stantinko está constantemente desarrollando nuevos y mejorando sus ofuscadores y módulos personalizados existentes, que están muy ofuscados, sería descomunal rastrear cada pequeña mejora y cambio que introduce. Por lo tanto, decidimos mencionar y describir solo lo que creemos que son ajustes significativos en comparación con muestras anteriores en relación con el estado en el que se describirá el módulo. Después de todo, pretendemos describir el módulo tal como está actualmente en este artículo.
Criptominer de código abierto modificado
El módulo de criptominería de Stantinko, que agota la mayoría de los recursos de la máquina comprometida al extraer una criptomoneda, es una versión altamente modificada del criptominer de código abierto xmr-stak . Todas las cadenas innecesarias e incluso funcionalidades completas se eliminaron en intentos de evadir la detección. Las cadenas 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 mineros
CoinMiner.Stantinko no se comunica con su grupo de minería directamente, sino a través de servidores proxy cuyas direcciones IP se obtienen del texto descriptivo de los videos de YouTube. El malware bancario Casbaneiro utiliza una técnica similar para ocultar datos en las descripciones de los videos de YouTube . Casbaneiro utiliza canales y descripciones mucho más legítimos, pero con el mismo propósito: almacenar C&C encriptados.
La descripción de dicho video consiste en una cadena compuesta de direcciones IP de proxy de minería en formato hexadecimal. Por ejemplo, el video de YouTube que se ve en la Figura 1 tiene la descripción «03101f1712dec626», que corresponde a dos direcciones IP en formato hexadecimal: 03101f17 corresponde a 3.16.31 [.] 23 en formato de cuatro puntos decimal y 12dec626 es 18.222.198 [.] 38. Al momento de escribir, el formato ha sido ligeramente ajustado. Las direcciones IP están actualmente encerradas en «!!!!», lo que simplifica el proceso mismo de análisis y evita posibles cambios en la estructura HTML del video de YouTube que hace que el analizador no funcione.
Figura 1. Ejemplo de video de YouTube cuya descripción proporciona una dirección IP para la comunicación del módulo con el grupo de minería
En versiones anteriores, la URL de YouTube estaba codificada en el binario CoinMiner.Stantinko. Actualmente, 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; 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; Las otras partes del módulo son responsables de funciones adicionales:
- suspender otras aplicaciones de criptominería (es decir, competir)
- detección de 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 revele
Criptominería
En el núcleo de la función de criptominería se encuentra el proceso de hash y la comunicación con el proxy. El método para obtener la lista de proxies de minería se describe 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á encriptada por RC4 con una clave que consta de los primeros 26 caracteres del número pi (incluido el separador decimal, codificado en la cadena » 3,141592653589793238462643 «) y luego codificado en base64; Se utiliza la misma clave en todas las muestras que hemos visto.
El código del algoritmo de hash 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 deja caer en el disco.
La descarga del código hash 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 a extraer otras criptomonedas para, quizás, extraer 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 versiones anteriores, 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 hemos analizado el mío Monero. Deducimos esto de los trabajos proporcionados por el proxy de minería y el algoritmo hash. Por ejemplo, la Figura 2 es un trabajo enviado por uno de los servidores proxy.
Se analizó el algoritmo de hash utilizado y encontramos que era CryptoNight R . Dado que hay múltiples criptomonedas que usan este algoritmo, su reconocimiento por sí solo no es suficiente; solo acorta la lista. Se puede ver en el trabajo proporcionado que la altura de la cadena de bloques era 1815711 en ese momento, por lo que tuvimos que encontrar monedas usando CryptoNight R con esta altura en exploradores de bloques dedicados que nos llevan a Monero. Disección de la cadena 0b0bbf dee 1e5 056 704 2dc fdf e96 018 227 f25 672 544 521 f8e e25 64c f8b 4c3 139A6A 88c 5f0 b32 664 000 000 a1c8 EE5 c18 5ed2 661 daa B9D 0C4 54f d40 e9f 53f 026 7fe 391 bdb 4EB 469 039 5de b36 018 revela que el hash del bloque anterior ( 670 42d CFD FE9 601 822 7f2 567 254 452 1F8 EE2 564 cf8 b4c 313 9a6 a88 c5f 0b3 2664 ) y la marca de tiempo ( 1555590859 ) de hecho encajan en la cadena de bloques de Monero a la altura de 1815711. Uno puede encontrar la estructura del blob examinando su función generadora en el código fuente de Monero. La función de generador expone otra estructura llamada encabezado de bloque que contiene tanto el hash del bloque anterior como la marca de tiempo.
A diferencia del resto de CoinMiner.Stantinko, el algoritmo de hash 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. Sin embargo, los autores aún se aseguraron de no dejar cadenas o artefactos significativos.
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 es un criptominer si su línea de comando contiene una cadena particular, o una combinación, que varía de una muestra a otra; por ejemplo:
- minero
- Minergate
- xmr
- cpservice
- vidservice y stratum + tcp: //
- estrato://
- -u y piscina
- «-U y piscina
- » -U y xmr
- -u y xmr
- -u y minería
- «-U y minería
- -comando codificado y exe
- –Nivel de donación
- windows y -c y cfgi
- regsvr32 y / n y / s y / q
- datos de la aplicación y exe
- appdata y exe
Estas cadenas 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 Stantinko. Las cadenas también conducen a varias muestras de malware poco interesantes que contienen funcionalidad de criptominería.
De interés es que se sabe que los operadores de Stantinko han tratado de deshacerse del código de la competencia en el pasado. Sin embargo, confiaron en el kit de herramientas antivirales AVZ legítimo alimentado con un script escrito en su lenguaje de script incorporado para esta tarea.
Prevención de detección
CoinMiner.Stantinko suspende temporalmente la minería si detecta que no hay una fuente de alimentación conectada a la máquina. Esta medida, evidentemente dirigida a las computadoras portátiles, evita que la batería se agote rápidamente … lo que podría generar sospechas del usuario.
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 para encontrar software de seguridad y nuevamente administradores de tareas. Calcula el CRC-32 del nombre del proceso y luego lo compara con una lista codificada de sumas de verificación 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 agrega un poco más de sigilo 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 uno tiene que descifrar estos hashes, que técnicamente es 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 extraído 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 de seguimiento.
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 innovaciones anteriores fueron ataques distribuidos basados en diccionarios en sitios web de Joomla y WordPress destinados a obtener credenciales de servidor, probablemente con el objetivo de venderlos a otros delincuentes.
Este módulo de criptominería configurado de forma remota, distribuido desde al menos agosto de 2018 y aún activo en el momento de la escritura, muestra que este grupo continúa innovando y ampliando sus capacidades para ganar dinero. Además de su funcionalidad estándar de criptominería, 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 (IoC)
Nombres de detección de ESET
Win32 / CoinMiner.Stantinko
Win64 / CoinMiner.Stantinko
SHA-1
Una lista completa de más de 1,000 hashes está disponible en un repositorio de GitHub .
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 Mutex y clave RC4
“ 3,141592653589793238462643 ”
URL de YouTube con datos de configuración de 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 servidores proxy 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 MITRE ATT y CK
Táctica | CARNÉ DE IDENTIDAD | Nombre | Descripción |
---|---|---|---|
Ejecución | T1085 | Rundll32 | El módulo puede ser ejecutado por rundll32.exe . |
T1035 | Servicio de ejecución | El malware se puede ejecutar como un servicio. | |
Evasión de defensa | T1140 | Desobuscar / decodificar archivos o información | El módulo desobusca cadenas en su código durante el proceso de ejecución. |
T1027 | Archivos o información ofuscados | El módulo ofusca su código y cadenas en un aparente intento de dificultar el análisis y la detección. | |
T1102 | Servicio web | El malware adquiere datos de configuración de la descripción de videos de YouTube. | |
Descubrimiento | T1063 | Descubrimiento de software de seguridad | El malware adquiere una lista de productos de seguridad en ejecución. |
Comando y control | T1090 | Proxy de conexión | El módulo usa proxies entre sí mismo y el grupo de minería. |
T1008 | Canales de reserva | El módulo se conecta a otro proxy de minería si no se puede acceder al inicial. | |
T1095 | Protocolo estándar de capa sin aplicación | El malware usa TCP para sus comunicaciones. | |
T1043 | Puerto de uso común | El malware se comunica a través del puerto 443. | |
T1132 | Codificación de datos | El módulo encripta y luego base64 codifica parte del tráfico de red. | |
T1032 | Protocolo criptográfico estándar | El módulo cifra el tráfico con RC4. | |
T1071 | Protocolo de capa de aplicación estándar | Adquiere datos de configuración de la descripción de videos de YouTube a través de HTTPS. | |
Impacto | T1496 | Secuestro de recursos | El módulo extrae criptomonedas. |
Apéndice
Las sumas de verificación CRC-32 verificadas por CoinMiner.Stantinko y los nombres de archivo a los que equivalen se enumeran a continuación.
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 |
Fuente: welivesecurity.com