Dark background with blue code overlay
Blog

Kinsing évolue | Blog d'Akamai

Evyatar Saias

écrit par

Evyatar Saias

September 16, 2021

Evyatar Saias

écrit par

Evyatar Saias

Evyatar Saias est Security Researcher au sein du service Renseignement de sécurité d'Akamai. 

Introduction

Un important botnet de cryptomonnaies acharné infecte les systèmes à grande échelle sur Internet. 

La campagne a été vue pour la première fois par l'équipe SIRT d'Akamai le 16 février 2021 et semble viser à la fois les systèmes Windows et Linux. Ce botnet a retenu notre attention, car il s'est avéré très actif dans diverses régions du monde, notamment dans les Amériques, en Europe et en Asie. Le botnet fonctionne en utilisant la même adresse IP de distribution (194.38.20.199), sans avoir à effectuer de rotation depuis six mois. Auparavant, la campagne ne visait que les machines Linux, mais s'est récemment étendue aux systèmes Windows.

Infection des systèmes Windows

Pour infecter les machines Windows, le botnet exploite CVE-2020-14883, une vulnérabilité qui affecte les versions 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 et 14.1.1.0.0 d'Oracle WebLogic Server. Lorsqu'il est exploité, il permet à un cybercriminel d'effectuer une exécution de code à distance (RCE), ce qui peut entraîner un piratage d'Oracle WebLogic Server. 

L'infection commence par amener la machine victime à télécharger puis à exécuter un fichier XML appelé wbw.xml. Sur les machines Windows, le fichier XML est exécuté via la classe ClassPathXmlApplicationContext

Fig. 1) La machine victime télécharge et exécute un fichier xml distant via la classe ClassPathXmlApplicationContext, CVE-2020-14883 Fig. 1) La machine victime télécharge et exécute un fichier xml distant via la classe ClassPathXmlApplicationContext, CVE-2020-14883

 

Le fichier wbw.xml extrait contient une commande PowerShell intégrée, qui s'exécute sur la machine de la victime. La commande est :

 

Il tente de télécharger un script PowerShell appelé «  1.ps1 » sur la machine de la victime à l'aide de la méthode System.Net.WebClient.DownloadString . Il utilise également l'indicateur de contournement Set-ExecutionPolicy pour s'assurer que rien ne soit bloqué et qu'aucun message ou avertissement ne soit généré pendant l'exécution. 

Fig. 2) Le contenu du fichier wbw.xml contenant une commande PowerShell qui télécharge un script PowerShell appelé 1.ps1 sur la machine de la victime Fig. 2) Le contenu du fichier wbw.xml contenant une commande PowerShell qui télécharge un script PowerShell appelé 1.ps1 sur la machine de la victime

 

Le script 1.ps1 télécharge ensuite un exécutable de cryptomonnaie appelé xmrig.exe, ainsi qu'un fichier config.json qui contient les informations de configuration que le mineur peut utiliser,  comme les adresses de portefeuille de cryptomonnaies, les points de terminaison de la liste de cryptomonnaies et des paramètres de configuration supplémentaires. En plus de cela, le script 1.ps1 contient également une variable $miner_name qui stocke le nouveau nom avec lequel l'exécutable de cryptomonnaie xmrig.exe, sera renommé. Dans ce cas, xmrig.exe est  renommé en « sysupdate » puis exécuté. 

Fig. 3) Une partie du script PowerShell 1.ps1 Fig. 3) Une partie du script PowerShell 1.ps1
Fig. 4) Une partie du fichier config.json contenant des configurations pour l'exécutable du mineur, comme les points de terminaison de la liste d'extraction et les adresses du portefeuille de cryptomonnaies. Fig. 4) Une partie du fichier config.json contenant des configurations pour l'exécutable du mineur, comme les points de terminaison de la liste d'extraction et les adresses du portefeuille de cryptomonnaies.

 

Le script 1.ps1 le script établit la persistance sur la machine de la victime afin de mettre à jour le fichier config.json et le mineur. Il le fait en tirant parti de SchTasks.exe, ce qui permet la création, la suppression et l'exécution de tâches planifiées sur une machine locale ou distante à partir de PowerShell. Plus d'informations sur SchTasks.exe sont disponibles ici. La tâche planifiée est nommée « Service de mise à jour pour le service Windows » et il tire à nouveau parti del'indicateur de contournement ExecutionPolicy pour éviter d'afficher des avertissements ou des invites pendant l'exécution, ainsi que l'indicateur caché -windowstyle pour rester masqué.

Fig. 5) Le script PowerShell 1.ps1 établit la persistance en créant une tâche planifiée appelée « Service de mise à jour pour le service Windows » pour transmettre les mises à jour au fichier de configuration et à l'exécutable du mineur Fig. 5) Le script PowerShell 1.ps1 établit la persistance en créant une tâche planifiée appelée « Service de mise à jour pour le service Windows » pour transmettre les mises à jour au fichier de configuration et à l'exécutable du mineur

Infection des systèmes Linux

La campagne tire parti de plusieurs CVE pour atteindre l'exécution de code à distance (RCE) afin d'infecter les systèmes Linux. En plus du logiciel malveillant Kinsing, qui contient un mineur de cryptomonnaie, les charges utiles Linux ont également  un cheval de Troie d'accès à distance (RAT). Les services ciblés incluent Oracle WebLogic Server, Redis, Apache Solr, PHPUnit et Supervisor XML-RPC.

Oracle WebLogic Server CVE-2020-14883 est également utilisé par cette campagne sur les systèmes Linux. Cependant, contrairement à la version Windows de cette vulnérabilité, où le RCE se produit via la classe  ClassPathXmlApplicationContext , sur Linux, cela se produit via la classe FileSystemXmlApplicationContext . Le fichier XML malveillant est appelé wb.xml et télécharge un script bash au lieu du précédent wbw.xml pour Windows qui télécharge un script PowerShell.

Fig. 6) La machine victime télécharge et exécute un fichier xml distant via la classe FileSystemXmlApplicationContext, CVE-2020-14883 Fig. 6) La machine victime télécharge et exécute un fichier xml distant via la classe FileSystemXmlApplicationContext, CVE-2020-14883
Fig. 7) Le contenu du fichier wb.xml, contenant une commande bash qui télécharge puis exécute un script bash appelé wb.sh sur la machine de la victime Fig. 7) Le contenu du fichier wb.xml, contenant une commande bash qui télécharge puis exécute un script bash appelé wb.sh sur la machine de la victime

 

Sur les systèmes Linux, l'infection commence par l'obtention d'une RCE à l'aide de l'un des CVE indiqués dans le tableau ci-dessous pour télécharger un fichier script bash sur la machine de la victime.

Fig. 8) Les CVE mis à profit par la campagne pour infecter les victimes Fig. 8) Les CVE mis à profit par la campagne pour infecter les victimes

 

Même si le nom du fichier de script bash varie entre s.sh , p.sh, sup.sh, d.sh, ex.sh, r.sh, spr.sh, tf.sh ou wb.sh , ils font tous à peu près la même chose.

Le script bash élimine tous les mineurs concurrents qui pourraient déjà exister sur le système et désactive les fonctions de sécurité et de journalisation. Il télécharge ensuite le logiciel malveillant Kinsing (écrit en langage Go), établit la persistance à l'aide de crontab, puis commence à miner des cryptomonnaies.

Fig. 9) Une partie du script bash malveillant qui télécharge le mineur de cryptomonnaie Kinsing sur la machine Linux de la victime Fig. 9) Une partie du script bash malveillant qui télécharge le mineur de cryptomonnaie Kinsing sur la machine Linux de la victime

 

Une fois exécuté sur la machine de la victime, le logiciel malveillant Kinsing crée un deuxième processus appelé kdevtmpfsi dans le répertoire /tmp, qui est le mineur de cryptomonnaie xmrig, et l'exécute. Le logiciel malveillant Kinsing surveille en permanence le processus kdevtmpfsi pour s'assurer qu'il fonctionne.

Décodage adresse IP Contrôle & Commande 

La façon dont le logiciel malveillant communique avec le serveur C2 est de décoder l'adresse IP C2 au moment de l'exécution à l'aide d'une fonction appelée getActiveC2CUrl. La fonction getActiveC2CUrl utilise un chiffrement de flux RC4 vers des données hexadécimales de texte brut XOR avec une clé de texte brut qui sont tous deux stockés dans le binaire. 

En raison de la façon dont les chaînes sont stockées dans un binaire de langage Go,  où toutes les chaînes statiques sont généralement concaténées les unes avec les autres, entraînant une grande série de chaînes, la clé de texte clair et les données hexadécimales peuvent être facilement masquées dans la chaîne volumineuse. Après une certaine inversion de la fonction getActiveC2CUrl , l'emplacement en mémoire et la longueur de la clé et des données hexadécimales peuvent être trouvés.

Fig. 10) L'emplacement en mémoire et la longueur des données hexadécimales C2 en texte clair et de la clé de chiffrement sont indiqués. Fig. 10) L'emplacement en mémoire et la longueur des données hexadécimales C2 en texte clair et de la clé de chiffrement sont indiqués.

La fonction hexadécimale getActiveC2CUrl décode les données hexadécimales C2, puis, avec la clé, elles sont toutes deux transmises à une deuxième fonction appelée RC4. La fonction personnalisée RC4 utilise la fonction func (c *Cipher) XORKeyStream(dst, src []byte) en interne à partir du paquet rc4 en Go pour générer l'adresse IP C2.

Maintenant que les données hexadécimales C2 et la clé sont récupérées, la fonction getActiveC2CUrl peut être remaniée et réécrite dans Go afin de calculer l'adresse IP C2 active.

Fig. 11) La fonction getActiveC2CUrl() est réécrite en Go avec les données hexadécimales C2 obtenues et la clé pour générer l'adresse IP C2 active. Fig. 11) La fonction getActiveC2CUrl() est réécrite en Go avec les données hexadécimales C2 obtenues et la clé pour générer l'adresse IP C2 active.

Fonctions RAT

Le logiciel malveillant Kinsing possède des fonctionnalités de cheval de Troie d'accès à distance (RAT) que l'on trouve dans une fonction appelée doTask() dans le binaire. La fonction doTask contient quelques appels de fonction intéressants qu'elle exécute en fonction d'une entrée donnée

  • runTaskWithScan()

  • updateTask()

  • startCmd()

  • execTaskOut()

  • masscan()

  • socks()

  • backconnect()

  • runTaskWithHttp()

  • downloadAndExecute()

 

L'une de ces fonctions intéressantes est startCmd() cela permet d'exécuter une commande arbitraire sur la machine de la victime.

 

Fig. 12) La fonction doTask() sous forme décompressée montre les capacités RAT du logiciel malveillant. La fonction startCmd() intégrée est mise en évidence et permet l'exécution d'une commande arbitraire sur la machine de la victime. Fig. 12) La fonction doTask() sous forme décompressée montre les capacités RAT du logiciel malveillant. La fonction startCmd() intégrée est mise en évidence et permet l'exécution d'une commande arbitraire sur la machine de la victime.

Communication Commande & Contrôle

Le logiciel malveillant communique avec le C2,185.154.53.140, via HTTP.  Il envoie régulièrement les requêtes HTTP C2, reçoit des instructions à exécuter et fournit des contrôles d'intégrité simples.

La machine infectée envoie les informations C2 avec chaque requête HTTP sur son état actuel et ses ressources système, comme le nombre de cœurs, la mémoire, le système d'exploitation, le fait que des privilèges root ont été obtenus ou non, etc.  Tous ces paramètres sont fournis au serveur C2 à l'aide d'en-têtes HTTP personnalisés.

 Fig. 13) Une demande POST effectuée à partir d'une machine infectée au C2, qui contient des informations sur les ressources système de la victime et les privilèges obtenus Fig. 13) Une demande POST effectuée à partir d'une machine infectée au C2, qui contient des informations sur les ressources système de la victime et les privilèges obtenus

Un point de terminaison demandé constamment par la machine infectée pour recevoir des instructions est  /get. Lorsqu'une machine infectée fait une demande GET au point de terminaison /get du C2, le logiciel malveillant tente immédiatement de télécharger de nouveaux scripts shell malveillants supplémentaires à partir de l'IP de distribution 194.38.20.199 d'origine.

Fig. 14) La machine infectée fait une demande GET au point de terminaison /get du C2 et extrait ainsi de nouveaux scripts shell de l'IP de distribution d'origine 194.38.20.199 Fig. 14) La machine infectée fait une demande GET au point de terminaison /get du C2 et extrait ainsi de nouveaux scripts shell de l'IP de distribution d'origine 194.38.20.199

 

Les scripts bash qui sont ensuite téléchargés à partir de l'IP de distribution 194.38.20.199 d'origine suite à l'atteinte du point de terminaison /get du C2 sont appelés ph.sh et spre.sh. Ces deux fichiers sont différents du script bash initial à l'origine de l'infection que nous avons examiné précédemment. Ils ont chacun un but différent et contiennent des vecteurs d'infection supplémentaires.


Nous allons d'abord examiner le script ph.sh , il télécharge un rootkit appelé libsystem.so à partir du point de terminaison 194.38.20.199/libsystem.so en plus du logiciel malveillant Kinsing existant sur la machine de la victime. Le script ph.sh précharge ensuite ce rootkit dans /etc/ld.so.preload

Fig. 15) Une partie du script bash ph.sh qui précharge le rootkit libsystem.so extrait dans /etc/ld.so.preload Fig. 15) Une partie du script bash ph.sh qui précharge le rootkit libsystem.so extrait dans /etc/ld.so.preload

 

Le script ph.sh établit également un second mécanisme de persistance, en plus des tâches cron déjà existantes qui ont été précédemment injectées par le script initial. Pour ce faire, il enregistre un service système qui réinfectera périodiquement l'hôte.

Fig. 16) Partie du script bash ph.sh qui crée un service système pour établir la persistance et réinfecte périodiquement l'hôte. Fig. 16) Partie du script bash ph.sh qui crée un service système pour établir la persistance et réinfecte périodiquement l'hôte.

 

Si vous souhaitez en savoir plus sur le rootkit libsystem.so que le script ph.sh installe et son fonctionnement interne, Trend Micro a rédigé un blog formidable sur ce rootkit spécifique, disponible ici

Le deuxième fichier de script bash intéressant qui est extrait en raison d'une réponse /get du point de terminaison C2 est spre.sh. Son but est de propager l'infection à des hôtes supplémentaires en trouvant des informations d'identification ssh pour tous les hôtes auxquels la victime a accès en examinant  ~/.ssh/config , ~/.bash_history,  et  .ssh/known_hosts. Le script spre.sh tente alors d'insérer ssh dans les hôtes découverts en utilisant les identifiants récupérés qu'il a trouvés et de les infecter aussi.

 

Fig. 17) Le script bash spre.sh transmet l'infection à des hôtes supplémentaires à l'aide de ssh en recherchant les identifiants ssh dans ~/.ssh/config ~/.bash_history et .ssh/known_hosts Fig. 17) Le script bash spre.sh transmet l'infection à des hôtes supplémentaires à l'aide de ssh en recherchant les identifiants ssh dans ~/.ssh/config ~/.bash_history et .ssh/known_hosts

 

Un autre point de terminaison C2 intéressant auquel la machine infectée demande des instructions est le point de terminaison /mg . Lorsque la machine infectée fait une demande GET au point de terminaison /mg , le C2 répond par quelques caractères, puis immédiatement la machine infectée commence à communiquer avec une adresse IP tierce, 95.181.179.88, qui semble être responsable de la transmission des commandes d'exploration à la machine infectée sous la forme d'une charge utile JSON-RPC sur HTTP.

Fig. 18) La machine infectée effectue une demande GET au point de terminaison /mg du C2 Fig. 18) La machine infectée effectue une demande GET au point de terminaison /mg du C2

Que faire ?

Pour atténuer ces menaces, le SIRT d'Akamai vous conseille de surveiller les processus de vos systèmes, afin de détecter une consommation de ressources anormalement élevée et une activité réseau suspecte. Une utilisation anormalement élevée du processeur pour un processus donné peut être un indicateur d'activité de minage de cryptomonnaies.

Le SIRT d'Akamai vous recommande également de vérifier fréquemment les tâches cron enregistrées sous les crontabs de vos systèmes pour vous assurer que les tâches cron ne communiquent pas avec des adresses IP inconnues, ce qui est une technique courante pour les logiciels malveillants Linux afin d'établir la persistance, et la campagne que nous évoquons ne fait pas exception.

Pour les systèmes Windows, il faut procéder de même avec PowerShell à l'aide de SchTasks.exe /Query afin d'afficher toutes les tâches planifiées qui auraient pu être créées par cette campagne. Vérifiez également les processus en cours d'exécution sur vos systèmes Linux et assurez-vous que les processus portant le nom de kinsing ou kdevtmpfsi ne sont pas en cours d'exécution et qu'un processus appelé sysupdate n'est pas en cours d'exécution sur vos systèmes Windows.

Ajoutez une authentification forte à vos systèmes lorsque cela est possible, les mots de passe faibles peuvent être facilement forcés. Assurez-vous également que les services ciblés par la campagne dont il est question, notamment Oracle WebLogic Server, Redis, Apache Solr, PHPUnit et Supervisor XML-RPC, ne sont pas exposés à Internet si ce n'est pas nécessaire, ce qui réduit fortement le risque d'infection de ces services. Par exemple, si une instance Redis est utilisée uniquement par des systèmes internes, elle n'a pas besoin d'être exposée à Internet. 

Le SIRT d'Akamai vous recommande également de comparer vos systèmes par rapport aux indications de compromis (IOC) fournies dans la section IoCs ci-dessous pour vous assurer que vos systèmes ne sont pas déjà infectés.  De plus, effectuez régulièrement des correctifs sur vos systèmes et suivez les meilleures pratiques.

Indications de compromis (IOC)

Adresses IP

Adresse IP

Description

185.154.53.140

Commande & Contrôle 

194.38.20.199

Distribution de logiciels malveillants 

95.181.179.88

Gère les opérations de minage de cryptomonnaies

195.3.146.118

Distribution des logiciels malveillants de sauvegarde

 

Fichiers

SHA-256

Nom

Description

8ca0229fb64e3f1819375cf1daf32104c37c0d0923bdc35cb6bea655ecd1a6a4

s.sh

194.38.20.199/s.sh, script bash qui télécharge le logiciel malveillant Kinsing

ede8fdb68d777efcc0538b465d640cbb2c061bd49461f76d65f68c135ff8bbb6

p.sh

194.38.20.199/p.sh, script bash qui télécharge le logiciel malveillant Kinsing

0e79ec7b00c14a4c576803a1fd2e8dd3ea077e4e98dafa77d26c0f9d6f27f0c9

d.sh

194.38.20.199/d.sh, script bash qui télécharge le logiciel malveillant Kinsing

6e35b5670953b6ab15e3eb062b8a594d58936dd93ca382bbb3ebdbf076a1f83b

spr.sh        

194.38.20.199/spr.sh, script bash qui télécharge le logiciel malveillant Kinsing

818179ac928027a5c26c9b13d3d830b7331c3e4c46ba1e305867e3d4accaf3ef

r.sh

194.38.20.199/r.sh, script bash qui télécharge le logiciel malveillant Kinsing

56ac2321e481708ea72e2bf7710e66c3455afa729b24f6a6ba9065ae0cca8fb3

ex.sh

194.38.20.199/ex.sh, script bash qui télécharge le logiciel malveillant Kinsing

05e5ad89443b58805ae2eb2628d3eef1d6cbcc338bced23f422abe5ce60ff82d

tf.sh

194.38.20.199/tf.sh, script bash qui télécharge le logiciel malveillant Kinsing

274b11542fcb30065c4cc0976ce33252ba2812756f7e22f6d80fae1acadf5c4c

wb.sh

194.38.20.199/wb.sh, script bash qui télécharge le logiciel malveillant Kinsing

6e25ad03103a1a972b78c642bac09060fa79c460011dc5748cbb433cc459938b

kinsing

194.38.20.199/kinsing, binaire du logiciel malveillant Kinsing

7d31843ce5231c95ce07a609cb4473fe53b95a8d0685df9d666de348d17c69ff

config.json

194.38.20.199/config.json, json config pour XMRIG miner

c38c21120d8c17688f9aeb2af5bdafb6b75e1d2673b025b720e50232f888808a

libsystem.so

194.38.20.199/libsystem.so, binaire rootkit

5e5b5171a95955ecb0fa8f9f1ba66f313165044cc1978a447673c0ac17859170

xmrig.exe

194.38.20.199/xmrig.exe,

XMRIG Miner pour Windows

49ff0329b9ad42c7fb17e6a2d80b316ed6b759ab5dfd04a5aba42b97225494cf

wbw.xml

194.38.20.199/wbw.xml, fichier xml qui télécharge un script powershell pour infecter les systèmes Windows

25b545dc3423d5c3c0181f559486643a7097b5fd87b32f0347ed667cbf3fb38e

wb.xml

194.38.20.199/wb.xml, fichier xml qui télécharge un script bash pour infecter les systèmes Linux

6b9e23cb675be370a18a0c4482dc566be28920d4f1cd8ba6b4527f80acf978d3

curl-amd64

194.38.20.199/curl-amd64 , binaire curl

fecd30cd7802f8ac4137a2d0659b3052411a99d809a5aefb48f8b821905100f3

al.sh

194.38.20.199/al.sh, script bash qui arrête le service aegis 

cb2ca16246a687b34fa1ba76015cb4aa3b50b4ecca4550478eb580c4725ab48f

cron.sh

194.38.20.199/cron.sh, script bash qui met à jour crontab

d7cda9e427d0848352a1158c68a2577c1600965fb9dbb32bc1e10af1a442d284

ph.sh

194.38.20.199/ph.sh, script bash qui télécharge le logiciel malveillant Kinsing et le rootkit libsystem.so

f4c319e43296ab323615ac4bd4b7601991218ecb6d6043b1c040a96f1a33f14f

spre.sh

194.38.20.199/sbre.sh, script bash qui transmet l'infection à d'autres hôtes via ssh

dd603db3e2c0800d5eaa262b6b8553c68deaa486b545d4965df5dc43217cc839  

kdevtmpfsi

Le processus Kinsing de minage de cryptomonnaies



Evyatar Saias

écrit par

Evyatar Saias

September 16, 2021

Evyatar Saias

écrit par

Evyatar Saias

Evyatar Saias est Security Researcher au sein du service Renseignement de sécurité d'Akamai.