Esta no es la primera vez que la industria del juego es apuntada por los atacantes, que buscan comprometer a los desarrolladores de juegos para insertar backdoors en sus entornos de desarrollo y de esta manera tener la posibilidad de distribuir su malware como parte de un software legítimo. En abril de 2013, Kaspersky Lab reportó que un popular videojuego había sido alterado en 2011 para incluir un backdoor. Dicho ataque fue atribuido a cibercriminales que Kaspersky denominó Grupo Winnti.
Recientemente, nuevos ataques de cadena de suministro despertaron la atención de los investigadores de ESET. En esta oportunidad, dos juegos y una aplicación de plataforma de videojuegos para incluir un backdoor. Una vez logrado esto, los ataques fueron mayormente dirigidos al continente asiático y a la industria de los juegos; por lo que no debería sorprender que se trate de una obra realizada por el mismo grupo que Kaspersky describió como “Winnti – Más que un simple juego”.
Tres casos: el mismo backdoor
Aunque el malware utiliza diferentes configuraciones para cada caso, los tres productos de software afectados incluyen el mismo código de backdoor y fueron lanzados utilizando la misma máquina. Mientras que dos de los productos comprometidos ya no incluyen el backdoor, uno de los desarrolladores afectados aún sigue distribuyendo la versión troyanizada que, irónicamente, se aprovecha de un juego llamado “infestation”, que en español quiere decir “infección, y que es producido por los desarrolladores tailandeses de “Electronics Extreme”. Desde el mes de febrero hemos intentado informarles varias veces y a través de distintos canales, pero sin éxito aparente.
Observemos primero cómo está embebido el payload malicioso y luego analicemos los detalles del propio backdoor.
Embebiendo el payload
El código del payload es iniciado en una etapa muy temprana durante la ejecución del archivo ejecutable backdoreado. Justo después del punto de entrada PE, el estándar de llamada a la inicialización C Runtime (__scrt_common_main_seh en la Figura 1) está hookeada para ejecutar el payload malicioso antes que todo lo demás (Figura 2). Esto podría sugerir que los actores maliciosos cambiaron una configuración de construcción en lugar del código fuente en sí.
El código añadido al ejecutable descifra y ejecuta el backdoor en la memoria, antes de reanudar la ejecución normal del código de inicialización de C Runtime y todo el subsecuente código de la aplicación host. Los datos embebidos del payload presentan una estructura específica, que se puede apreciar en la Figura 3, la cual está parseada por el código de desempaquetado añadido.
Incluye una llave RC4 (la cual es XOReada con 0x37) que es utilizada para descifrar el nombre de un archivo y el archivo DLL embebido.
El payload malicioso
El payload malicioso actual es bastante pequeño y contiene aproximadamente 17 KB de datos y código.
Configuración
Ilustrado en la Figura 4, los datos de configuración son simplemente una lista de strings separados por espacios en blanco.
La configuración consiste en cuatro campos:
- URL del servidor C&C.
- Variable (t) utilizada para determinar el tiempo de apagado en milisegundos antes de continuar la ejecución. El tiempo de espera es elegido de manera aleatoria en el rango de 2/3 t a 5/3 t.
- Una cadena de caracteres que identifica una campaña.
- Una lista separada por punto y coma de nombres de archivos ejecutables. Si cualquiera de estos está corriendo, el backdoor detiene su ejecución.
Los investigadores de ESET han identificado cinco versiones del payload:
Truncated SHA-1 | PE Compile time (UTC) | C&C server URL |
---|---|---|
a045939f |
2018-07-11 15:45:57 | https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php |
a260dcf1 |
2018-07-11 15:45:57 | https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php |
dde82093 |
2018-07-11 15:45:57 | https://bugcheck.xigncodeservice[.]com/Common/Lib/common.php |
44260a1d |
2018-08-15 10:59:09 | https://dump.gxxservice[.]com/common/up/up_base.php |
8272c1f4 |
2018-11-01 13:16:24 | https://nw.infestexe[.]com/version/last.php |
En las primeras tres variantes, el código no fue recompilado, pero los datos de configuración fueron editados en el propio archivo DLL. El resto del contenido es una copia byte a byte.
Infraestructura C&C
Los nombres de dominio fueron cuidadosamente elegidos para que aparenten tener relación con el juego o con el autor de la aplicación. El dominio apex fue configurado para redirigir hacia un sitio legítimo importante utilizando el servicio de redirección Namecheap, mientras que el subdominio apunta al servidor malicioso C&C.
Domain name | Registration date | Redirection target |
---|---|---|
xigncodeservice.com | 2018-07-10 09:18:17 | https://namu.wiki/[w]/XIGNCODE |
gxxservice.com | 2018-08-14 13:53:41 | None or unknown |
infestexe.com | 2018-11-07 08:46:44 | https://www.facebook.com/infest.[in].[th] |
Subdomain name | IP addresses | Provider |
---|---|---|
bugcheck.xigncodeservice.com | 167.99.106[.]49, 178.128.180[.]206 | DigitalOcean |
dump.gxxservice.com | 142.93.204[.]230 | DigitalOcean |
nw.infestexe.com | 138.68.14[.]195 | DigitalOcean |
Al momento de escribir este artículo, ninguno de estos dominios resuelve y los servidores C&C no están respondiendo.
Reporte de reconocimiento
Un identificador de bot es generado desde la dirección MAC de las máquinas. El backdoor reporta información sobre la máquina, como por ejemplo, el nombre de usuario, nombre de la computadora, versión de Windows e idioma del sistema con el servidor C&C y espera para recibir instrucciones. Los datos están en cifrado XOR con la llave “*&b0i0rong2Y7un1” y codificados en base64.
Comandos
Este simple backdoor tiene cuatro comandos que pueden ser utilizados por el atacante:
- DownUrlFile
- DownRunUrlFile
- RunUrlBinInMem
- UnInstall
Los comandos son bastante autoexplicativos. Permiten al atacante correr ejecutables adicionales desde una URL dada.
El ultimo es quizás menos obvio. El comando UnInstall no remueve el malware del sistema. Después de todo, está embebido dentro de un ejecutable legítimo que aún necesita correr. Más que remover algo, lo que hace es deshabilitar el código malicioso estableciendo el siguiente valor de registro a 1:
- HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\ImageFlag
Cuando el payload inicia, el valor de registro es consultado y la ejecución es cancelada si se establece el valor correspondiente. Quizás los atacantes están intentando reducir la carga de sus servidores C&C al evitar la devolución de llamadas de víctimas que no resulten interesantes.
Segunda fase
Basados en la telemetría de ESET, uno de los payload de segunda fase enviados a la víctima es Win64/Winnti.BN. Hasta donde podemos decir, su dropper fue descargado sobre HTTPS desde api.goallbandungtravel[.]com. Lo hemos visto instalado como un servicio de Windows y como una DLL en C:\Windows\System32 utilizando los siguientes nombres de archivo:
- cscsrv.dll
- dwmsvc.dll
- iassrv.dll
- mprsvc.dll
- nlasrv.dll
- powfsvc.dll
- racsvc.dll
- slcsvc.dll
- snmpsvc.dll
- sspisvc.dll
Las muestras que analizamos eran bastante grandes, con aproximadamente 60MB cada una de ellas. Sin embargo, esto es solo para aparentar, porque el tamaño real del archivo PE es de entre 63KB y 72KB, dependiendo de la versión. Los archivos del malware tienen varios archivos limpios adjuntados. Esto es hecho probablemente por el componente que droppea e instala este servicio malicioso.
Una vez que el servicio corre, adjunta la extensión .mui a su ruta DLL, lee ese archivo y lo descifra utilizando RC5. El archivo MUI descifrado contiene código de posición independiente con desplazamiento 0. La llave RC5 es derivada desde el número de serie del disco rígido y el string f@Ukd!rCto R$. — no fuimos capaces de obtener ningún archivo MUI ni el código que los instala en primer lugar. Por lo tanto, no sabemos exactamente el propósito de este servicio malicioso.
Recientes versiones del malware incluyen un mecanismo de actualización automática mediante la utilización del servidor C&C http://checkin.travelsanignacio[.]com. Este servidor C&C entregó la última versión de los archivos MUI cifrados con una llave estática RC5. Durante nuestro análisis, el servidor C&C no estaba respondiendo.
Blancos de ataque
Comencemos por señalar aquellos que no están apuntados. Una etapa temprana en el payload, el malware revisa si el idioma del sistema es ruso o chino (Figura 5). En cualquiera de estos casos, el malware deja de correr, lo que deja bastante claro que los atacantes no están interesados en computadoras configuradas con estos idiomas.
Estadísticas de distribución
La telemetría de ESET muestra que la mayoría de las víctimas está ubicada en Asia, siendo Tailandia el país más afectado, Dada la popularidad de las aplicaciones comprometidas, que continúan siendo distribuidas por sus desarrolladores, no sería llamativo que el número de víctimas alcance cifras en el entorno de decenas o cientos de miles.
Conclusión
Los ataques de cadena de suministro son difíciles de detectar desde la perspectiva del consumidor. Es imposible comenzar analizando cada pieza de software que corremos, especialmente con todas las actualizaciones regulares que instan y/o requieren instalar. Por lo tanto, depositamos nuestra confianza en los proveedores de software y que los archivos que distribuyen no incluyen malware. Quizás esa es la razón por la que múltiples grupos apuntan a desarrolladores de software: comprometiendo los resultados del proveedor en una botnet tan popular como el software que es vulnerado. Sin embargo, existe una desventaja de utilizar esta técnica: una vez que el esquema es revelado, el atacante pierde control y las computadoras pueden limpiarse mediante actualizaciones regulares.
No sabemos los motivos de los atacantes en este punto. ¿Se trata simplemente de una ganancia económica? ¿Hay alguna razón que explique por qué los tres productos afectados son de desarrolladores de Asia y del mercado asiático? ¿Estos ataques utilizan una botnet como parte de una operación de espionaje más amplia?
Los productos de ESET detectan esta amenaza como, Win32/HackedApp.Winnti.A, Win32/HackedApp.Winnti.B; el payload como Win32/Winnti.AG, y el de segunda fase como Win64/Winnti.BN.
Indicadores de Compromiso (IoCs)
Muestra de archivos comprometidos (Win32/HackedApp.Winnti.A and B)
SHA-1 | Compile Time (UTC) | RC4 key | Payload SHA-1 |
---|---|---|---|
474b1c81de1eafe93602c297d701418658cf6feb |
Mon Jul 16 07:37:14 2018 | 207792894 |
a045939f |
47dd117fb07cd06c8c6faa2a085e0d484703f5fd |
Wed Jul 25 06:44:09 2018 | 207792894 |
a045939f |
54b161d446789c6096362ab1649edbddaf7145be |
Tue Sep 4 08:02:38 2018 | 165122939 |
a260dcf1 |
67111518fe2982726064ada5b23fd91d1eb3d48e |
Wed Sep 19 09:51:44 2018 | 17858542 |
dde82093 |
0f31ed081ccc18816ca1e3c87fe488c9b360d02f |
Fri Sep 28 05:32:30 2018 | 17858542 |
dde82093 |
5e2b7b929471ac3ba22a1dfa851fac1044a698dc |
Tue Oct 16 05:09:15 2018 | 17858542 |
dde82093 |
132e699e837698ef090e3f5ad12400df1b1e98fa |
Thu Oct 18 02:53:03 2018 | 17858542 |
dde82093 |
d4eaf47253fe59f11a06517bb9e2d5e8b785abf8 |
Thu Nov 1 07:00:55 2018 | 17858542 |
dde82093 |
7cf41b1acfb05064518a2ad9e4c16fde9185cd4b |
Tue Nov 13 10:12:58 2018 | 1729131071 |
8272c1f4 |
7f73def251fcc34cbd6f5ac61822913479124a2a |
Wed Nov 14 03:50:18 2018 | 19317120 |
44260a1d |
dac0bd8972f23c9b5f7f8f06c5d629eac7926269 |
Tue Nov 27 03:05:16 2018 | 1729131071 |
8272c1f4 |
Algunos hashes fueron redactados por solicitud de uno de los proveedores. Si por motivos particulares usted los necesita, puede contactarnos a través de: threatintel@eset.com.
Muestras del payload (Win32/Winnti.AG)
SHA-1 | C&C server URL |
---|---|
a045939f53c5ad2c0f7368b082aa7b0bd7b116da |
https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php |
a260dcf193e747cee49ae83568eea6c04bf93cb3 |
https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php |
dde82093decde6371eb852a5e9a1aa4acf3b56ba |
https://bugcheck.xigncodeservice[.]com/Common/Lib/common.php |
8272c1f41f7c223316c0d78bd3bd5744e25c2e9f |
https://nw.infestexe[.]com/version/last.php |
44260a1dfd92922a621124640015160e621f32d5 |
https://dump.gxxservice[.]com/common/up/up_base.php |
Muestras de segunda fase (Win64/Winnti.BN)
Dropper enviado por api.goallbandungtravel[.]com.
SHA-1 | Compile Time (UTC) | C&C server URL prefix |
---|---|---|
4256fa6f6a39add6a1fa10ef1497a74088f12be0 |
2018-07-25 10:13:41 | None |
bb4ab0d8d05a3404f1f53f152ebd79f4ba4d4d81 |
2018-10-10 09:57:31 | http://checkin.travelsanignacio[.]com |
Matríz de MITRE ATT&CK
ID | Description |
---|---|
T1195 | Supply Chain Compromise |
T1050 | New Service |
T1022 | Data Encrypted |
T1079 | Multilayer Encryption |
T1032 | Standard Cryptographic Protocol (RC4, RC5) |
T1043 | Commonly Used Port (80,443) |
T1009 | Binary Padding |