Si vous utilisez Kodi, vous avez peut-être remarqué qu'un dépôt néerlandais populaire pour les add-ons (aussi appelés extensions) tiers, XvBMC, a récemment été fermé pour violation de copyright. Après la fermeture, nous avons découvert que le dépôt faisait partie - probablement sans le savoir - d'une campagne de cryptominage malveillante remontant à décembre 2017. Il s'agit du deuxième cas publiquement connu de distribution à grande échelle de logiciels malveillants via des extensions Kodi, et de la première campagne de cryptominage publiquement connue à avoir été lancée via la plateforme Kodi.

Fait à noter, cette campagne propulse des binaires spécifiquement pour Linux ou Windows aux fans de Kodi utilisant ces systèmes d’opération.

Pour les personnes qui ne seraient pas familières avec la plateforme Kodi, ce populaire logiciel de lecteur multimédia n’offre pas de contenu en soi. Cependant, les utilisateurs peuvent étendre les fonctionnalités du logiciel en installant des extensions, qu’on peut trouver dans le répertoire officiel de Kodi et sur divers répertoires de tiers-parties. Certains de ces répertoires tiers permettent aux usagers d’accéder à du contenu piraté, ce qui a généré une controverse entourant Kodi.

Récemment, des add-ons contrevenant au droit d’auteur ont aussi été accusés d’exposer leurs utilisateurs à des logiciels malveillants, mais à part un incident au cours duquel un module DDoS a été ajouté à un add-on Kodi populaire provenant d’une tierce-partie, aucune évidence de distribution de logiciel malveillant via les extensions de Kodi n’avait été mise en lumière jusqu’à aujourd’hui.

La campagne

Selon nos recherches, le logiciel malveillant que nous avons trouvé dans le répertoire XvMBC a d’abord été ajouté aux répertoires d’extensions tierces Bubbles et Gaia (une ramification de Bubbles), respectivement en décembre 2017 et janvier 2018. À partir de ces deux sources, et grâce à des mises-à-jour de routine auprès de de propriétaires non-méfiants d'autres dépôts tiers d’extensions et des compilations prêtes à l’emploi pour Kodi, le logiciel malveillant s’est propagé à travers l’écosystème de Kodi.

Le logiciel malveillant possède une architecture à plusieurs étapes et emploie des mesures pour s'assurer que sa charge utile finale - le cryptomineur - ne peut être facilement retracée jusqu'à l'extension malveillante. Le cryptomineur fonctionne sous Windows et Linux et exploite la cryptomonnaie Monero (XMR). Nous n'avons pas vu de version de ce logiciel malveillant ciblant les appareils utilisant Android ou MacOS dans la nature.

Les victimes de cette campagne se retrouvent affectées par le cryptomineur illicite de l'une des trois façons suivantes :

  1. Ils ajoutent l'URL d'un dépôt malveillant à leur installation Kodi afin de télécharger quelques add-ons. Le module complémentaire malveillant est ensuite installé chaque fois qu'ils mettent à jour leurs modules complémentaires Kodi.
  2. Ils installent une compilation Kodi prête à l'emploi qui inclut l'URL d'un dépôt malveillant. Le module complémentaire malveillant est ensuite installé chaque fois qu'ils mettent à jour leurs modules complémentaires Kodi.
  3. Ils installent une compilation Kodi prête à l'emploi contenant une extension malveillante mais aucun lien vers un référentiel pour les mises à jour. Ils sont initialement compromis, mais ne reçoivent aucune autre mise à jour en provenance de l'add-on malveillant. Cependant, si le cryptomineur est installé, il sera persistant et recevra les mises à jour.

Les cinq pays les plus touchés par cette menace, selon la télémétrie de l'ESET, sont les États-Unis, Israël, la Grèce, le Royaume-Uni et les Pays-Bas. Ce n'est pas surprenant, puisque tous ces pays figurent sur la liste des « pays à trafic élevé », selon les récentes statistiques communautaires non officielles de Kodi Addon. D'autres explications possibles pour les distributions géographiques sont les compilations Kodi spécifiques à chaque pays contenant les dépôts malveillants, ou les dépôts malveillants avec des bases d'utilisateurs dans les pays en question, par exemple le répertoire néerlandais susmentionné XvBMC.

Figure 1 - Distribution des détections ESET du cryptomineur

Au moment d'écrire ces lignes, les dépôts à partir desquels le logiciel malveillant a commencé à se propager sont soit dissous (Bubbles), soit ne servent plus le code malveillant (Gaia). En revanche, les victimes involontaires, sur les appareils desquels le cryptomineur est installé, sont probablement encore affectées. Qui plus est, le logiciel malveillant figure toujours dans d'autres répertoires et dans certaines versions prêtes à l'emploi de Kodi, très probablement à l'insu de leurs auteurs.

Figure 2 – Chronologie de la campagne

Analyse technique

Comment ça fonctionne

Une fois que les victimes ont ajouté le répertoire malveillant à leur installation Kodi, ce répertoire utilise un add-on nommé script.module.simplejson - dont le nom correspond à une extension légitime utilisée par plusieurs autres add-on. Cependant, alors que d’autres répertoires disposent de l’extension script.module.simplejson uniquement dans la version 3.4.0, ce répertoire malveillant utilise cet add-on avec la version 3.4.1.

Puisque Kodi se fie aux numéros de version pour la détection des mises à jour, tous les utilisateurs avec la fonction Auto Update activée (qui est un paramètre par défaut courant) recevront automatiquement la version script.module.simplejson 3.4.1 du dépôt malveillant.

La seule partie de la version 3.4.1 de script.module.simplejson qui différe par rapport à la version 3.4.0 est ses métadonnées – le fichier addon.xml comprend une ligne additionnelle <requires> :

Celle-ci indique à Kodi de télécharger et d’installer une extension nommée script.module.python.requests, en version 2.16.0 ou ultérieure. L’add-on script.module.python.requests est exclusivement utilisée par le répertoire malveillant. Il s’agit d’une modification de l’extension légitime script.module.requests, qui inclut du code Python supplémentaire malveillant.

Ce code Python télécharge, le cas échéant, un binaire Windows ou Linux et exécute ce dernier. Cet exécutable est un downloader qui récupère et exécute la charge utile finale, un cryptomineur exécutable. Si l'installation du cryptomineur est réussie, le code Python malveillant passe à une phase d’autodestruction et se supprime.

Figure 3 – Le modèle d’exécution du logiciel malveillant

Le code Python

Dans l’échantillon analysé ici, le code malveillant obscurci se trouve dans le fichier script.module.python.requests\lib\requests\packages\urllib3\connectionpool.py, lignes 846-862.

Figure 4 – Le code malveillant obscurci dans connectionpool.py

Une fois désobscurci et commenté, le code devient beaucoup plus lisible, comme on peut le voir à la Figure 5.

Figure 5 – Le code malveillant après désobscurcissement (commentaires ajoutés par le chercheur)

Ce code a clairement été rédigé par une personne ayant une bonne connaissance de Kodi et de son architecture d’extensions. Le script détecte le système d’opération utilisé (seules Windows et Linux sont supportés; Android et macOS sont ignorés), se connecte au serveur C&C, télécharge et exécute un module de téléchargement binaire correspondant selon l’OS.

Le binaire Windows est écrit à l’adresse C:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\TrustedInstaller.exe, alors que le binaire Linux se trouve dans /tmp/systems/system.

Après avoir récupéré et exécuté le module de téléchargement binaire, le script Python – ici connectionpool.py - démarre sa routine d’autodestruction. En observant la Figure 4, on constate que le code malveillant est encadré par les marqueurs spéciaux #-+- et #-_-#. Le code s’exécute après que l’exécution du téléchargeur binaire soit réussie, ouvre son fichier Python, trouve ces marqueurs spécifiques et les supprime, ainsi que tout ce qui se trouve entre ceux-ci. Le fichier Python nettoyé est alors sauvegardé. Résultat : l’installation du cryptomineur ne peut pas être facilement retracé, et il est difficile de remonter à l’extension Kodi responsable.

Figure 6 – Autodestruction du code Python (commentaires ajoutés par le chercheur)

Cryptomineur exécutable

Le module de téléchargement (EXE 64 bits pour Windows, fichier ELF 64 bits pour Linux) récupéré par le code Python contient une configuration chiffrée du cryptomineur et des liens de téléchargement pour la charge utile de la deuxième étape - les binaires du cryptomineur.

Les téléchargeurs binaires récupèrent les charges utiles de deuxième étape appropriées à l'OS (binaires du cryptomineur pour différents GPU et un module malveillant pour le lancement et la mise à jour) dans des fichiers ZIP protégés par mot de passe. Ces binaires sont compilés pour Windows 64 bits et Linux 64 bits et sont basés sur le logiciel open-source de chiffrement XMRStak.

La configuration de ce cryptomineur va comme suit :

{"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"}]}}

Mon appareil a-t-il été compromis? Comment puis-je le nettoyer?

Si vous utilisez Kodi sur un appareil utilisant Windows ou Linux et avez installé des extensions provenant de dépôts de tiers-parties, ou de compilations prêtes à l’emploi pour Kodi, vous pourriez avoir été affecté par cette campagne de cryptominage.

Pour vérifier si votre appareil a été compromis, utilisez une solution anti logiciel malveillant fiable pour scanner l’appareil. Les produits ESET détectent et bloquent ces menaces sous les noms Win64/CoinMiner.II et Win64/CoinMiner.MK sous Windows et Linux/CoinMiner.BC, Linux/CoinMiner.BJ, Linux/CoinMiner.BK et Linux/CoinMiner.CU sous Linux. Si vous utilisez Windows, vous pouvez utiliser le scanner en ligne gratuit ESET Free Online Scanner, et si vous utilisez sur Linux, la version d’essai gratuite de l’antivirus ESET NOD32 Antivirus for Linux Desktop, afin de balayer votre ordinateur pour détecter la présence de ces menaces et de supprimer toutes les menaces détectées. Les clients d’ESET sont automatiquement protégés.

Conclusion

Bien que les principaux répertoires d'add-on qui ont initialement introduit ce logiciel malveillant dans l'écosystème Kodi soient maintenant fermés ou nettoyés, cela ne concerne pas les nombreux périphériques qui avaient déjà exécuté les add-ons malveillants. Comme on peut le voir à la Figure 7, de nombreux appareils exploitent encore Monero pour les cybercriminels derrière cette campagne.

Figure 7 - Paiements reçus par les auteurs du logiciel malveillant

Selon ces statistiques du portefeuille Monero des auteurs de ce logiciel malveillant, fournies par Nanopool, un minimum de 4774 victimes sont affectées par le logiciel malveillant au moment d'écrire ces lignes, et ont généré 62,57 XMR (environ 5700 EUR ou 6700 USD) à ce jour.

En plus d'être le deuxième logiciel malveillant, et le premier cryptomineur, distribué par le populaire lecteur multimédia Kodi, cette campagne de logiciels malveillants a employé une technique de compromission intéressante. En utilisant la fonctionnalité de scriptage complexe des add-ons Kodi, qui fonctionne sur tous les OS supportés par Kodi - Android, Linux, macOS et Windows - les cybercriminels derrière cette campagne ont facilement ciblé Kodi sous Linux et Windows.

Aussi difficile que cela puisse paraître, ils ont peut-être pu cibler des périphériques sur un plus grand nombre de systèmes d'exploitation. En construisant des versions natives de leur cryptomineur pour ces OS, ou en fournissant des charges utiles alternatives plus adaptées à la plateforme (par exemple, des charges utiles moins gourmandes en énergie pour les appareils alimentés par batterie), ils ont peut-être compromis davantage les OS que Kodi supporte. Alors que les mesures de sécurité des systèmes d'exploitation continuent de se resserrer, les opportunités offertes par les fonctionnalités d'ajout d'applications et de scriptage, telles que celles qui ont été exploitées ici, semblent susceptibles de devenir des cibles de plus en plus populaires auprès des cybercriminels. Nous l'avons vu dans le passé, puis recyclé plus récemment, avec les macros Visual Basic dans les applications Microsoft Office. Les extensions Kodi ne constituent peut-être pas « la prochaine VBA », mais ces mesures prises ici pourraient représenter une indication de ce qui nous attend.

Indicateurs de compromission (IoCs)

Extensions Kodi malveillantes

Puisque les dépôts d'origine contenant des add-ons malveillants (Bubbles et Gaia) sont déjà supprimés, nous fournissons des exemples de liens vers des dépôts miroirs qui contiennent encore du code malveillant, et des exemples de liens vers quelques constructions malveillantes de Kodi choisies de manière aléatoire.

Il convient de noter que les propriétaires des sources secondaires de fichiers malveillants, ci-dessous, les propagent très probablement sans le savoir.

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 detects the malicious Python code as Python/CoinMiner.W.

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

ESET détecte le cryptomineur ainsi que des modules de cryptominage et de téléchargement comme étant Win64/CoinMiner.II et Win64/CoinMiner.MK. Notre télémétrie montre plus de 100 haches distincts pour ce nom de détection.

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

ESET détecte la version Linux des modules de cryptominage et de téléchargement comme étant Linux/CoinMiner.BC, Linux/CoinMiner.BJ, Linux/CoinMiner.BK, et Linux/CoinMiner.CU.