Si utilizas Kodi probablemente estés al tanto de que el popular repositorio holandés de add-ons para terceras partes, XvBMC, fue cerrado recientemente luego de ser advertido por no respetar las advertencias por violación de derechos de autor. Luego del cierre, hemos descubierto que el repositorio era –probablemente sin saberlo- parte de una campaña de criptominería que se remonta a diciembre de 2017. Se trata del segundo caso que se conoce de manera pública de distribución de malware a gran escala a través de adds-on para Kodi, y la primera campaña de criptominería que se lanza a través de esta plataforma. Resulta interesante que esta campaña introduce binarios específicos de Linux y/o Windows en los sistemas operativos de los usuarios de Kodi.

Para quienes no están familiarizados con la plataforma Kodi, el popular programa de reproducción multimedia no provee contenido suyo, pero los usuarios pueden ampliar las funcionalidades del programa mediante la instalación de add-ons que están disponibles en el repositorio oficial de Kodi y en repositorios de terceros. Algunos add-ons de terceros permiten a los usuarios acceder a contenido pirata, lo que generó cierta controversia alrededor de Kodi.

Últimamente, los add-ons acusados de infringir derechos de autor también fueron acusados de exponer a los usuarios a malware. Pero más allá de un incidente en el que un módulo DDoS fue añadido a un popular add-ons de Kodi de una tercera parte, no hubo evidencia de la existencia de un malware distribuido a través de add-ons de Kodi hasta ahora.

La campaña maliciosa a través de Kodi

De acuerdo a nuestra investigación, el malware que encontramos en el repositorio XvMBC fue añadido en un primer momento al popular repositorio de terceras partes Bubbles y Gaia en diciembre de 2017 y enero de 2018 respectivamente. Desde estas dos fuentes, y mediante rutinas de actualización de propietarios de repositorios desprevenidos de otras add-ons de terceras partes y builds de Kodi pre armados, el malware se propagó a través del ecosistema de Kodi.

El malware tiene una arquitectura multi-stage y emplea medidas para asegurar que el payload final –el criptominero- no puede ser rastreado fácilmente hacia el add-on malicioso. El criptominero corre en Windows y Linux y mina la criptomoneda Monero (XMR). Hasta el momento, no hemos visto una versión activa dirigida a dispositivos Android o macOS.

Las víctimas de esta campaña suelen terminar ejecutando el criptominero por alguna de estas vías:

  1. Añaden la URL de un repositorio malicioso al instalador de Kodi para descargar algún add-on. El add-on malicioso es instalado una vez que actualizan los add-ons de Kodi.
  2. Instalan builds de Kodi pre armados que incluyen la URL de un repositorio malicioso. El add-on malicioso es luego instalado cuando actualizan los add-ons de Kodi.
  3. Instalan builds de Kodi pre armados que contienen un add-on malicioso, pero sin un enlace hacia un repositorio para actualizaciones. Son comprometidos desde el inicio, aunque no reciben más actualizaciones para el add-on malicioso. Sin embargo, si el criptominero es instalado, persistirá y recibirá actualizaciones.

El top cinco de los países afectados por esta amenaza, de acuerdo a la telemetría de ESET, son: Estados Unidos, Israel, Grecia, Reino Unido y Holanda, lo cual no resulta extraño si se tiene en cuenta que todos estos países se encuentran en la lista de los países con mayor tráfico de acuerdo a estadísticas de Addon no oficiales de la comunidad de Kodi.

Figura 1 – Distribución de las detecciones de criptomineros según ESET.

A partir de esta investigación, los repositorios desde los cuales comenzó a propagarse el malware dejaron de existir (en el caso de Bubbles) o ya no están propagando el código malicioso (Gaia). Sin embargo, aquellas víctimas que lograron instalar el criptominero en sus dispositivos aún están siendo afectadas. Encima de eso, el malware todavía persiste en algunos builds de Kodi pre armados, probablemente sin que lo sepan sus creadores.

Figura 2 – Línea de tiempo de la campaña

Análisis técnico: Cómo funciona la campaña maliciosa en Kodi

Luego de que la víctima añade el repositorio malicioso dentro de la instalación de Kodi, el repositorio malicioso coloca un add-on con el nombre script.module.simplejson –; un nombre que coincide con el de un add-on legítimo utilizado por muchos otros add-ons. Sin embargo, mientras que otros repositorios solo tienen el script.module.simplejson add-on de la versión 3.4.0, el repositorio malicioso coloca este add-on con el número de versión 3.4.1.

Desde que Kodi se basa en el número de las versiones para actualizar las detecciones, todos los usuarios con la función Auto Update habilitada (que comúnmente viene configurada por defecto) automáticamente recibirán la versión 3.4.1 del script.module.simplejson desde el repositorio malicioso.

La única parte del script.module.simplejson de la versión 3.4.1 que presenta modificaciones con respecto a la versión 3.4.0 son sus metadatos –el archivo addon.xml contiene una línea adicional de <requires>:

Esto le indica a Kodi que descargue e instale un add-on cuyo nombre es script.module.python.requests, en su versión 2.16.0 o superior. El add-on  script.module.python.requests es servido por el repositorio malicioso únicamente. Es una modificación del add-on script.module.requests legítimo que contiene adicionalmente unas líneas de código malicioso en Pyhton.

El código en Python descarga y ejecuta según convenga, un binario de Windows o Linux. Este ejecutable es un downloader que llama y ejecuta el payload final: un criptominero ejecutable. Si la instalación del criptominero es exitosa, el código malicioso en Python pasa a una etapa de autoeliminación y se borra.

Figura 3 – Los malware.

Código malicioso en Python

En la muestra que analizamos aquí, el código malicioso ofuscado está colocado las líneas 846-862 del archivo script.module.python.requests\lib\requests\packages\urllib3\connectionpool.py.

Figura 4 – Código malicioso ofuscado en connectionpool.py

Cuando es desofuscado y comentado, el código se torna mucho más legible, como se puede apreciar en la Figura 5.

Figura 5. Código malicioso después de la desofuscación (comentario añadido por el investigador)

El código es claramente escrito por alguien con un buen conocimiento de Kodi y de la arquitectura de los add-on. El script detecta qué sistema operativo se está ejecutando (solo soporta Windows y Linux), lo conecta con su servidor C&C y descarga y ejecuta un módulo downloader binario apropiado según sea el sistema operativo.

El binario de Windows es esrito para
:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\TrustedInstaller.exe, mientras que el binario de Linux es escrito para /tmp/systems/systemd.

Luego de recuperar y correr el módulo downloader binario, el script en Python - connectionpool.py –corre la rutina de eliminación. Mirando hacia atrás la Figura 4, podemos ver que el código malicioso está entre corchetes con los marcadores especiales #-+- y  #-_-#. El código corre luego de que la exitosa ejecución del módulo downloader abra el archivo Python, encuentre estos marcadores especiales y los elimine, así como también todo lo que esté en el medio de ambos. El archivo Python limpio es entonces guardado. Como resultado, la instalación del criptominero no puede ser fácilmente rastreada hacia el add-on para Kodi.

Figura 6. Autoeliminación en código Python (comentarios añadidos por el investigador)

Criptominero ejecutable

El módulo downloader (archive 64-bit EXE para Windows, 64-bit ELF para Linux) recuperado por el código Python contiene una configuración del criptominero cifrada y enlaces de descarga para el payload de segunda fase –los actuales binarios del criptominero.

El downloader binario entrega el payload de segunda fase apropiado según el sistema operativo (binarios de criptominero para diferentes GPUs y un módulo lanzador/actualizador malicioso) en archivos ZIP protegidos con contraseña. Estos binarios son compilados tanto para Windows 64-bit como para Linux 64-bit y se basan en el software para criptominería de código abierto XMRStak.

La configuración para el criptominero es la siguiente:

{"monero":{"default":{"wallet":"49WAk6TaCMX3HXN22nWPQAfBjP4J3ReUKg9tu3FoiPugcJs3fsnAvyGdrC41HZ4N6jcHEiwEGvH7z4Sn41PoZtLABFAVjm3","password":"","name":"","email":"","weight":1,"format":{"rig":"","address":"%w%.%n%/%e%","password":"%p%"}},"pools":[{"host":"xmr-us-east1.nanopool.org:14444"},{"host":"xmr-eu1.nanopool.org:14444"},{"host":"xmr-asia1.nanopool.org:14444"}]}}

¿Mi dispositivo fue comprometido? ¿Cómo lo limpio?

Si estás utilizando Kodi en un dispositivo con Windows o Linux y tienes instalados add-ons de repositorios de terceras parte o un build de Kodi pre armado, hay posibilidades de que hayas sido infectado por esta campaña de criptominería.

Para corroborar si tu dispositivo fue o no comprometido, revísalo con una solución de seguridad confiable. Los productos de ESET detectan y bloquean estas amenazas como Win64/CoinMiner.II y Win64/CoinMiner.MK en Windows y como Linux/CoinMiner.BC, Linux/CoinMiner.BJ, Linux/CoinMiner.BK, y Linux/CoinMiner.CU en Linux. Para Windows puedes utilizar el Explorador Online y Gratuito de ESET y en Linux la prueba gratuita del Antivirus ESET NOD32 para escritorio de Linux y de esta manera podrás revisar si existe la presencia de esta amenaza en tu computadora y remover cualquier cosa que sea detectada. Aquellos que ya tengan soluciones de ESET en sus dispositivos están protegidos automáticamente.

Conclusión

A pesar de que los principales repositorios de add-on que inicialmente introducían este malware en el ecosistema de Kodi están cerrados o eliminaron la amenaza, esto no cambia el hecho de que muchos dispositivos ya ejecutaron los add-ons maliciosos. Como se puede ver en la Figura 7, varios dispositivos aún están minando Monero para los cibercriminales que están detrás de esta campaña.

Figura 7. Pagos que recibieron los autores del malware

Según estas estadísticas de la billetera de Monero de los autores del malware, aportada por Nanopool, al menos 4774 víctimas aún están siendo afectadas actualmente por el código malicioso y han generado 62,57 XMR (aproximadamente 5700 euros o 6700 dólares americanos) hasta la presente semana.

Además de ser el segundo malware y el primer criptominero distribuido a través de la popular plataforma Kodi, para esta campaña maliciosa se empleó un compromiso técnico interesante. Al utilizar las complejas funcionalidades de código que utilizan los add-ons de Kodi, que trabajan entre sistemas operativos que Kodi soporta (Android, Linux, macOS y Windows) los cibercriminales detrás de esta campaña se dirigieron fácilmente a Kodi para Windows y Linux.

Probablemente los responsables de esta campaña eran capaces de atacar dispositivos en más sistemas operativos. Ya sea mediante la construcción de versiones nativas de sus criptomoneros para estos otros sistemas operativos o creando payloads alternativos más ajustados a la plataforma (por ejemplo, payloads menos intensos en cuanto a energía para dispositivos alimentados a través de una batería) podrían haber comprometido más sistemas operativos que soporta Kodi.

En la medida de que las disposiciones de seguridad de los sistemas operativos se sigan ajustando, la búsqueda de oportunidades en aplicaciones del tipo add-on y/o de funcionalidades que se apoyan en código, tal como eran las que fueron explotadas aquí, parece que se convertirá en algo cada vez más recurrente por parte de los cibercriminales. Con los macros de Visual Basic en aplicaciones para Microsoft Office hemos visto esto mismo en el pasado y también recientemente. Los add-ons de Jodi puede que no vayan a ser “los próximos VBA”, pero los pasos que se vieron aquí podrían ser un indicador de cosas que vendrán.

Indicadores de compromise (IoCs)

Add-ons maliciosos de Kodi

Desde que los repositorios que originalmente contenían los add-ons maliciosos (Bubbles y Gaia) fueron eliminados o limpiados, estamos proporcionando ejemplos de enlaces a repositorios similares que aún contienen código malicioso, y también enlaces de ejemplo para unos pocos builds de Kodi maliciosos elegidos de manera aleatoria.

Es importante tener presente que es muy probable que los propietarios de estas fuentes secundarias de archivos maliciosos que se detallan a continuación estén propagando estas amenazas sin siquiera saberlo.

Example mirror of Bubbles
github[.]com/yooperman17/trailerpark/blob/master/repository/repository.bubbles.3/repository.bubbles.3-4.2.0[.]zip
github[.]com/yooperman17/trailerpark/blob/master/repository/common/script.module.urllib.3/script.module.urllib.3-1.22.3[.]zip
Example mirror of Gaia
github[.]com/josephlreyes/gaiaorigin/blob/master/common/script.module.python.requests/script.module.python.requests-2.16.1[.]zip
github[.]com/josephlreyes/gaiaorigin/blob/master/common/script.module.simplejson/script.module.simplejson-3.4.1[.]zip
Malicious files previously available on XvBMC repository
github[.]com/XvBMC/repository.xvbmc/tree/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/script.module[.]simplejson
github[.]com/XvBMC/repository.xvbmc/tree/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/script.module.python[.]requests
github[.]com/XvBMC/repository.xvbmc/blob/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/zips/script.module.python.requests/script.module.python.requests-2.16.3[.]zip
github[.]com/XvBMC/repository.xvbmc/blob/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/zips/script.module.simplejson/script.module.simplejson-3.4.1[.]zip
Sampling of malicious Kodi builds
archive[.]org/download/retrogamesworld7_gmail_Kodi_20180418/kodi[.]zip
archive[.]org/download/DuggzProBuildWithSlyPVRguideV0.3/DuggzProBuildWithSlyPVRguideV0.3[.]zip
ukodi1[.]xyz/ukodi1/builds/Testosterone%20build%2017[.]zip

C&C URLs
openserver[.]eu/ax.php
kodinet.atspace[.]tv/ax.php
kodiupdate.hostkda[.]com/ax.php
kodihost[.]rf.gd/ax.php
updatecenter[.]net/ax.php
stearti.atspace[.]eu/ax.php
mastercloud.atspace[.]cc/ax.php
globalregistry.atspace.co[.]uk/ax.php
meliova.atwebpages[.]com/ax.php
krystry.onlinewebshop[.]net/ax.php

Downloader module (Windows)
openserver[.]eu/wib
kodinet.atspace[.]tv/wib
kodiupdate.hostkda[.]com/wib
kodihost.rf[.]gd/wib
updatecenter[.]net/wib
bitbucket[.]org/kodiserver/plugin.video.youtube/raw/HEAD/resources/lib/wib
gitlab[.]com/kodiupdate/plugin.video.youtube/raw/master/resources/lib/wib
www.dropbox[.]com/s/51fgb0ec9lgmi0u/wib?dl=1&raw=1

Downloader module (Linux)
openserver[.]eu/lib
kodinet.atspace[.]tv/lib
kodiupdate.hostkda[.]com/lib
kodihost.rf[.]gd/lib
updatecenter[.]net/lib
bitbucket[.]org/kodiserver/plugin.video.youtube/raw/HEAD/resources/lib/lib
gitlab[.]com/kodiupdate/plugin.video.youtube/raw/master/resources/lib/lib
www.dropbox[.]com/s/e36u2wxmq1jcjjr/lib?dl=1&raw=1

Cryptominer binaries (Windows)
updatecenter[.]net/wub
openserver[.]eu/wub
glocato.atspace[.]eu/wub
oraceur.hostkda[.]com/wub
dilarti.1free-host[.]com/wub
utudict.vastserve[.]com/wub
encelan.atspace[.]cc/wub

Cryptominer binaries (Linux)
updatecenter[.]net/lub
openserver[.]eu/lub
glocato.atspace[.]eu/lub
oraceur.hostkda[.]com/lub
dilarti.1free-host[.]com/lub
utudict.vastserve[.]com/lub
encelan.atspace[.]cc/lub

Hashes of malicious add-ons
B8FD019D4DAB8B895009B957A7FEBAEFCEBAFDD1
BA50EAA31441D5E2C0224B9A8048DAF4015735E7
717C02A1B040187FF54425A64CB9CC001265C0C6
F187E0B6872B096D67C2E261BE41910DAF057761
4E2F1E9E066D7D21CED9D690EF6119E59CF49176
53E7154C2B68EDBCCF37FB73EEB3E042A1DC7108
FF9E491E8E7831967361EDE1BD26FCF1CD640050
3CC8B10BDD5B98BEA94E97C44FFDFB1746F0C472
389CB81D91D640BA4543E178B13AFE53B0E680B5
6DA595FB63F632EE55F36DE4C6E1EB4A2A833862
9458F3D601D30858BBA1AFE1C281A1A99BF30542
B4894B6E1949088350872BDC9219649D50EE0ACA
79BCC4F2D19A394DD2DB2B601208E1D1EA57565B
AAAEDE03F6C014CEE8EC0D9C0EA4FC7B0E67DB59
C66B5ADF3BDFA87B0731512DD2654F4341EBAE5B
F0196D821381248EB8717F47C70D8C235E83A12E
7CFD561C215DC04B702FE40A199F0B60CA706660

ESET detecta ek código malicioso de Python como Python/CoinMiner.W.

Hashes of cryptominers and downloader modules (Windows)
08406EB5A8E75F53CFB53DB6BDA7738C296556D6
2000E2949368621E218529E242A8F00DC8EC91ED
5B1F384227F462240178263E8F2F30D3436F10F5
B001DD66780935FCA865A45AEC97C85F2D22A7E2
C6A4F67D279478C18BE67BEB6856F3D334F4AC42
EE83D96C7F1E3510A0D7D17BBF32D5D82AB54EF3

ESET detecta tanto el criptominero como el módulo downloader como Win64/CoinMiner.II y/o Win64/CoinMiner.MK. Nuestra telemetría muestra más de 100 hashes distintos para los nombres de detección.

Hashes of cryptominers and downloader modules (Linux)
38E6B46F34D82BD23DEACD23F3ADD3BE52F1C0B6
90F39643381E2D8DFFF6BA5AB2358C4FB85F03FC
B9173A2FE1E8398CD978832339BE86445ED342C7
D5E00FB7AEA4E572D6C7C5F8D8570DAB5E1DD156
D717FEC7E7C697D2D25080385CBD5C122584CA7C
DF5433DC7EB272B7B837E8932E4540B216A056D8

ESET detecta las versiones del criptominero y del módulo downloader para Linux como Linux/CoinMiner.BC, Linux/CoinMiner.BJ, Linux/CoinMiner.BK, y Linux/CoinMiner.CU.