Les opérateurs du botnet Stantinko ont élargi leur gamme d'outils avec un nouveau moyen de tirer profit des ordinateurs sous leur contrôle. Ce botnet d'environ un demi-million de personnes - connu pour être actif depuis au moins 2012 et ciblant principalement des utilisateurs en Russie, Ukraine, Biélorussie et Kazakhstan - distribue désormais un module de cryptominage. Le minage de la cryptomonnaie Monero, dont le taux de change oscille en 2019 entre 50 et 110 $US, est la fonctionnalité de monétisation du botnet depuis au moins août 2018. Auparavant, le botnet effectuait des attaques de fraude au clic, d'injection publicitaire, de fraude sur les réseaux sociaux et de vol de mots de passe.

Dans cet article, nous décrivons le module de cryptominage de Stantinko et fournissons une analyse de ses fonctionnalités.

La caractéristique la plus notable de ce module est la façon dont il utilise l’obfuscation pour contrecarrer l'analyse et éviter la détection. En raison de l'utilisation d'obscurcissements au niveau de la source avec un grain de hasard et du fait que les opérateurs de Stantinko compilent ce module pour chaque nouvelle victime, chaque échantillon du module est unique.

Nous décrirons les techniques d'obscurcissement du module et proposerons, dans un article séparé pour les analystes de logiciels malveillants, une approche possible pour traiter certains d'entre eux.

Puisque Stantinko développe constamment de nouveaux mécanismes d’obfuscation et modules personnalisés, qui sont lourdement obscurcis, il serait éreintant de suivre chaque amélioration et changement mineur qu'il apporte. Par conséquent, nous avons décidé de ne mentionner et de décrire que ce que nous estimons être des ajustements significatifs par rapport aux échantillons précédents par rapport à l'état dans lequel le module doit être décrit. Après tout, nous avons l'intention de simplement décrire le module tel qu'il est actuellement dans cet article.

Un cryptomineur au code source ouvert modifié

Le module de cryptominage de Stantinko, qui épuise la plupart des ressources de la machine compromise en exploitant une cryptomonnaie, est une version fortement modifiée du cryptomineur open source xmr-stak. Toutes les chaînes de caractères inutiles et même des fonctionnalités entières ont été supprimées pour tenter d'échapper à la détection. Les autres chaînes et fonctions sont fortement obscurcies. Les produits de sécurité ESET détectent ce logiciel malveillant sous le nom Win{32,64}/CoinMiner.Stantinko.

Utilisation de proxy de minage

CoinMiner.Stantinko ne communique pas directement avec son pool de minage (ou mining pool), mais via des proxy dont les adresses IP sont acquises à partir du texte de description des vidéos YouTube. Une technique similaire pour cacher les données dans les descriptions des vidéos YouTube est utilisée par le logiciel malveillant bancaire Casbaneiro. Casbaneiro utilise des canaux et des descriptions beaucoup plus légitimes, mais dans le même but : stocker des C&Cs chiffrés.

La description d'une telle vidéo consiste en une chaîne de caractères composée d'adresses IP proxy minières au format hexadécimal. Par exemple, la vidéo YouTube vue dans la Figure 1 a la description « 03101f1712dec626 », qui correspond à deux adresses IP au format hexadécimal - 03101f17 correspond à 3.16.31[.]23 au format point-quad décimal, et 12dec626 est 18.222.198[.]38. Au moment de la rédaction du présent document, le format a été légèrement modifié. Les adresses IP sont actuellement incluses dans « !!!!!! », ce qui simplifie le processus même de l'analyse et empêche d'éventuels changements de la structure HTML de la vidéo YouTube rendant l'analyseur dysfonctionnel.

Figure 1. Exemple vidéo YouTube dont la description fournit une adresse IP pour la communication du module avec le pool de minage

Dans les versions antérieures, l'URL de YouTube était codée en dur dans CoinMiner.Stantinko binaire. Actuellement, le module reçoit un identificateur vidéo comme paramètre de ligne de commande à la place. Ce paramètre est ensuite utilisé pour construire l'URL de YouTube, sous la forme https://www.youtube.com/watch?v=%PARAM Le module de cryptominage est exécuté soit par le composant BEDS de Stantinko, soit par rundll32.exe via un fichier batch que nous n'avons pas capturé, le module étant chargé depuis un emplacement du système de fichiers local de la forme %TEMP%\%RANDOM%\%RANDOM_GUID%.dll.

Nous avons informé YouTube de cet abus; toutes les chaînes contenant ces vidéos ont été retirées.

Capacités de cryptominage

Nous avons divisé le module de cryptominage en quatre parties logiques, qui représentent des ensembles distincts de capacités. La partie principale effectue la cryptominage proprement dite; les autres parties du module sont responsables des fonctions supplémentaires :

  • suspendre d'autres applications de cryptominage (c'est-à-dire concurrentes)
  • détecter les logiciels de sécurité
  • suspendre la fonction de cryptominage si le PC est alimenté par batterie ou lorsqu'un gestionnaire de tâches est détecté, pour éviter d’être découvert par l'utilisateur.

Cryptominage

Au cœur même de la fonction de cryptominage se trouve le processus de hachage et de communication avec le proxy. La méthode pour obtenir la liste des procurations minières est décrite ci-dessus; CoinMiner.Stantinko établit la communication avec la première procuration minière qu'il trouve vivante.

Sa communication se fait par TCP et est chiffrée par RC4 avec une clé composée des 26 premiers caractères du nombre pi (y compris le séparateur décimal, codé en dur dans la chaîne 3,141592653589793238462643) et ensuite codée en base64; la même clé est utilisée dans tous les échantillons que nous avons observés.

Le code de l'algorithme de hachage est téléchargé depuis le proxy minier au début de la communication et chargé en mémoire - soit directement, soit, dans les versions antérieures, depuis la bibliothèque libcr64.dll qui est d'abord déposée sur le disque.

Le téléchargement du code de hachage à chaque exécution permet au groupe Stantinko de modifier ce code à la volée. Ce changement permet, par exemple, de s'adapter aux ajustements d'algorithmes dans les monnaies existantes et de passer à l'extraction d'autres cryptomonnaies afin, peut-être, d'extraire la cryptomonnaies la plus rentable au moment de l'exécution. Le principal avantage de télécharger la partie centrale du module à partir d'un serveur distant et de le charger directement en mémoire est que cette partie du code n'est jamais stockée sur disque. Cet ajustement supplémentaire, qui n'est pas présent dans la version précédente, vise à compliquer la détection parce que les modèles de ces algorithmes sont triviaux pour les produits de sécurité à détecter.

Toutes les instances du module de cryptominage de Stantinko que nous avons analysé minaient des Monero. Nous l'avons déduit des emplois fournis par le proxy minier et l'algorithme de hachage. Par exemple, la figure 2 est un travail envoyé par l'une des procurations.

{"error":null,"result":{"status":"OK"}}
{"method":"job","params":"blob":"0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018","job_id":"281980000000000a10","target":"67d81500","height":1815711}}

 Figure 2. Exemple de tâche de minage reçue d'un proxy de pool minier

Nous avons analysé l'algorithme de hachage utilisé et constaté qu'il s'agissait de CryptoNight RCryptoNight R. Comme plusieurs cryptomonnaies utilisent cet algorithme, sa reconnaissance seule n'est pas suffisante; elle réduit la liste. On peut voir dans le travail fourni que la taille de la chaîne de blocs était 1815711 à l'époque, nous avons donc dû trouver des devises utilisant CryptoNight R avec cette hauteur sur des explorateurs de blocs dédiés qui nous mènent à Monero. La dissection de la chaîne 0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018 révèle que le hachage du bloc précédent (67042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664) et l’horodateur (1555590859) correspondent bien au blockchain de Monero en taille 1815711. On peut trouver la structure du blob en examinant sa fonction de générateur dans le code source de Monero . La fonction générateur expose une autre structure appelée block header, qui contient à la fois le hachage du bloc précédent et l'horodatage.

Contrairement au reste de CoinMiner.Stantinko, l'algorithme de hachage n'est pas obscurci, puisque l'obscurcissement réduirait considérablement la vitesse de calcul du hachage et donc la performance et la rentabilité globales. Cependant, les auteurs ont tout de même veillé à ne pas laisser de cordes ou d'artefacts significatifs derrière eux.

Suspension de tout autre cryptomineur

Le logiciel malveillant énumère les processus en cours d'exécution à la recherche d'autres cryptomineurs. Si des concurrents sont trouvés, Stantinko suspend toutes leurs tâches.

CoinMiner.Stantinko considère qu'un processus est un cryptomineur si sa ligne de commande contient une chaîne de caractères particulière, ou une combinaison, qui varie d'un échantillon à l'autre. Voici quelques exemples :

  • minerd
  • minergate
  • xmr
  • cpservice
  • vidservice et stratum+tcp://
  • stratum://
  • -u et pool
  • "-u et pool
  • "-u et xmr
  • -u et xmr
  • -u et mining
  • "-u et mining
  • -encodedcommand et exe
  • --donate-level
  • windows et -c et cfgi
  • regsvr32 et /n et /s et /q
  • application data et exe
  • appdata et exe

Ces chaînes font référence aux cryptomineurs légitimes suivants : https://github.com/pooler/cpuminerhttps://minergate.com/https://github.com/xmrig, et même https://github.com/fireice-uk/xmr-stak. Fait intéressant, ce dernier est le mineur sur lequel ce module Stantinko est basé. Les chaînes de caractères mènent également à divers échantillons de logiciels malveillants inintéressants contenant des fonctionnalités de cryptominage.

Il est intéressant de noter que les opérateurs de Stantinko sont connus pour avoir essayé de se débarrasser de code concurrent dans le passé. Cependant, ils utilisaient alors la boîte à outils antivirale légitime d'AVZ, alimentée par un script écrit dans son langage et intégré pour cette tâche.

Prévention de la détection

Stantinko suspend temporairement l'exploitation s'il détecte qu'il n'y a pas d'alimentation électrique connectée à la machine. Cette mesure, évidemment destinée aux ordinateurs portables, permet d'éviter un déchargement rapide de la batterie... qui pourrait susciter la suspicion de l'utilisateur.

De plus, il suspend temporairement le minage si une application de gestion des tâches (un processus nommé procexp64.exe, procexp.exe et taskmgr.exe) en exécution est détectée.

Le logiciel malveillant analyse également les processus en cours d'exécution pour trouver les logiciels de sécurité et les gestionnaires de tâches. Il calcule le CRC-32 du nom du processus et le compare ensuite à une liste codée en dur des sommes de contrôle du CRC-32, qui est incluse dans l'annexe. En général, cette technique peut aider à échapper à la détection, puisque les noms de processus de ces produits de sécurité ne sont pas inclus dans le binaire - ajoutant un peu plus de furtivité en ne contenant pas directement les noms de processus. Il est également plus difficile pour les analystes de savoir ce que recherchent les auteurs de logiciels malveillants parce qu'il faut craquer ces hachages, ce qui est techniquement le même problème du craquage de mot de passe. Cependant, l'utilisation d'une liste de noms de processus connus suffit généralement pour déterminer les noms exacts.

Si une correspondance CRC-32 est trouvée, le CRC est écrit dans un fichier journal (api-ms-win-crt-io-l1-1-0.dll). Le fichier journal est probablement exfiltré plus tard par un composant Stantinko que nous n'avons pas vu, puisqu'il n'y a pas d'autre fonctionnalité liée dans ce module.

Obfuscation

Outre ses caractéristiques de cryptominage, CoinMiner.Stantinko est également remarquable pour ses techniques d'obscurcissement visant à éviter la détection et à contrecarrer l'analyse. Certaines de ces techniques sont uniques et nous les décrirons en détail dans un article de suivi.

Conclusion

Notre découverte montre que les criminels à l'origine de Stantinko continuent d'étendre leur influence sur le réseau de zombies qu'ils contrôlent. Leurs innovations précédentes étaient des attaques distribuées basées sur des dictionnaires sur les sites Web Joomla et WordPress visant à recueillir les informations d'identification des serveurs, probablement dans le but de les vendre à d'autres criminels.

Ce module de cryptominage configuré à distance, distribué depuis au moins août 2018 et toujours actif au moment d'écrire ces lignes, montre que ce groupe continue d'innover et d'étendre ses capacités de génération de revenus. En plus de sa fonctionnalité standard de cryptominage, le module utilise des techniques d'obscurcissement intéressantes que nous dévoilerons, ainsi que quelques contre-mesures possibles, dans un prochain article.

Indicateurs de compromission (IoC)

Noms de détection d'ESET

Win32/CoinMiner.Stantinko
Win64/CoinMiner.Stantinko

SHA-1

Une liste complète de plus de 1000 hashes est disponible dans notre dépôt GitHub.

00F0AED42011C9DB7807383868AF82EF5454FDD8
01504C2CE8180D3F136DC3C8D6DDDDBD2662A4BF
0177DDD5C60E9A808DB4626AB3161794E08DEF74
01A53BAC150E5727F12E96BE5AAB782CDEF36713
01BFAD430CFA034B039AC9ACC98098EB53A1A703
01FE45376349628ED402D8D74868E463F9047C30

Noms de fichier

api-ms-win-crt-io-l1-1-0.dll
libcr64.dll
C:\Windows\TEMP\%RANDOM%\%RANDOM_GUID%.dll

Nom Mutex et clé RC4

3,141592653589793238462643

URLs de YouTube avec les données de configuration du proxy minier

Adresses IP des proxy de minage

• 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

Techniques 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.

Appendice

Les checksums CRC-32 vérifiées par CoinMiner.Stantinko et les noms de fichiers correspondant sont listés ci-dessous.

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