Vous avez besoin du Cloud Computing ? Commencez dès maintenant

Tu m'as eu sur ton bonjour — Apparition du botnet NoaBot basé sur Mirai

Stiv Kupchik

écrit par

Stiv Kupchik

January 10, 2024

Stiv Kupchik

écrit par

Stiv Kupchik

Stiv Kupchik est Senior Security Researcher et est basé à Tel Aviv, en Israël.

NoaBot est un botnet de plus basé sur Mirai. Le botnet Mirai est un botnet exploitable par un ver informatique qui cible les terminaux IoT basés sur Linux.

Synthèse

  • Les chercheurs en sécurité d'Akamai ont découvert une nouvelle campagne de minage des cryptomonnaies, active depuis le début de l'année 2023.

  • Le logiciel malveillant est propagé sur le protocole SSH à l'aide d'un botnet Mirai personnalisé qui a été modifié par les acteurs malveillants.

  • Les capacités du nouveau botnet, NoaBot, comprennent un ver auto-propagatif et une porte dérobée de clé SSH pour télécharger et exécuter des binaires supplémentaires ou se propager vers de nouvelles victimes.

  • Dans le cadre de l'attaque, une version modifiée du mineur XMRig est abandonnée. Le mineur dissimule sa configuration et utilise également un pool d'exploration personnalisé pour éviter d'exposer l'adresse du portefeuille utilisée par le mineur.

  • Nous avons des preuves pour lier le botnet au ver P2PInfect, qui a été découvert par l'unité 42 en juillet 2023.

  • La dissimulation des logiciels malveillants et le code personnalisé montrent un haut niveau de sécurité des opérations, ce qui indique généralement des acteurs malveillants matures, mais le nom des binaires du logiciel malveillant et certaines de ses chaînes incluses sont assez puériles. Cela complique l'attribution.

  • Nous avons vu plus de 800 adresses IP différentes à l'origine d'attaques en 2023, réparties uniformément à travers le monde.

  • Nous avons publié des indicateurs de compromission, des requêtes, des signatures et des scripts qui peuvent être utilisés pour tester l'infection.

Introduction

NoaBot est un botnetde plus basé sur Mirai. Le botnet Mirai est un botnet exploitable par un ver informatique qui cible les terminaux Internet des objets (IoT) basés sur Linux. Il est utilisé pour les attaques par déni de service distribué (DDoS). Le botnet Mirai d'origine a été identifié en 2016, mais son code source a été rendu public, et nous pouvons aujourd'hui voir de nombreuses variantes.

Nous avons détecté la campagne NoaBot pour la première fois début 2023. Depuis lors, nous avons vu deux évolutions du logiciel malveillant, qui consistent en des dissimulations supplémentaires ou en un changement de commande et de contrôle (C2) et des domaines de pool de minage (figure 1). Nous avons également vu plusieurs incidents qui éliminent les échantillons du ver P2PInfect, ce qui laisse entendre que les deux campagnes sont liées.

Graphique de l'activité du logiciel malveillant au fil du temps. Le graphique commence un peu avant janvier 2023 et se termine un peu après novembre 2023. Figure 1 : Activité des logiciels malveillants Noabot au fil du temps

Le botnet

NoaBot possède la plupart des capacités du botnet Mirai d'origine (comme un module scanner et un module attaquant, cachant son nom de processus, etc.), mais nous pouvons également voir de nombreuses différences avec le code source d'origine de Mirai. Tout d'abord, le propagateur du logiciel malveillant est basé sur SSH, et non sur Telnet comme Mirai.

Le scanner SSH semble être fait sur mesure, et assez particulier. En effet, une fois la connexion établie, le botnet envoie simplement la chaîne « hi » (« salut » en anglais), et met fin à la connexion (figure 2). La fin rapide a du sens dans le contexte d'un scanner, car il n'a pas besoin de garder la connexion établie, il a juste besoin de vérifier qu'elle existe. Pourquoi prend-il toutefois la peine d'envoyer « hi » ? C'est un mystère.

Capture d'écran de l'écran du paquet Wireshark pour le paquet « hi » SSH. Figure 2 : Paquet SSH avec la chaîne « hi ». Il ne s'agit pas d'un paquet SSH valide, donc Wireshark le marque comme mal formé.

Une autre originalité du malware est qu'il contient des paroles de chanson. Des précédents échantillons du botnet comportaient des paroles de la chanson « Who's Ready for Tomorrow » de Rat Boy et IBDY (figure 3). Nous n'avons trouvé aucune utilité à ces paroles. Les échantillons ultérieurs ne les avaient pas.

Une décompilation à partir de IDA des paroles de chanson intégrées dans l'échantillon du botnet. Figure 3 : Les paroles de chansons intégrées qui semblent ne servir à rien.

D'autres changements par rapport à Mirai sont que le botnet utilise un dictionnaire d'informations d'identification différent pour son scanner SSH, et inclut de nombreuses capacités post-intrusion, telles que l'installation d'une nouvelle clé autorisée SSH comme porte dérobée pour télécharger et exécuter des binaires supplémentaires ou se propager vers de nouvelles victimes (figure 4).

Une décompilation du cas de commutation des différentes commandes post-infection prises en charge par le botnet. Figure 4 : Cas de commutation de commande du botnet

Par ailleurs, contrairement à Mirai, qui est généralement compilé avec GCC (au moins selon son code source et le guide de l'auteur), NoaBot est compilé avec uClibc, ce qui semble changer la façon dont les moteurs antivirus détectent le logiciel malveillant. Alors que d'autres variantes de Mirai sont généralement détectées avec une signature Mirai, les signatures antivirus de NoaBot sont celles d'un scanner SSH ou d'un cheval de Troie générique (figure 5).

Le logiciel malveillant est également compilé statiquement et dépouillé de tout symbole. Cela, en plus d'être une compilation non standard, a généré beaucoup plus de frustrations lors de la rétro-ingénierie du logiciel malveillant.

De plus, dans les échantillons plus récents du botnet, la chaîne était dissimulée au lieu d'être enregistrée en texte brut. Cela a rendu plus difficile l'extraction des détails du binaire ou la navigation dans les parties du démontage, mais l'encodage lui-même était peu sophistiqué et simple à analyser. 

Nous avons également vu l'ajout d'arguments de ligne de commande au fil du temps. Le plus intéressant est l'indicateur « noa », qui a permis au botnet d'installer une méthode de persistance sous la forme d'une entrée crontab à exécuter après un redémarrage.

Par coïncidence, il semble que cet indicateur ait été fortement utilisé dans la nature, car certaines des détections antivirus pour les échantillons de botnet avaient le préfixe « Noa- ».

Les opérations post-intrusion, que vous pouvez voir à la figure 4, constituent une autre évolution. Celles-ci n'étaient pas présentes dans les échantillons précédents que nous avons étudiés.

À gauche : détections NoaBot de VirusTotal. La plupart des détections ressemblent à « Trojan.Linux.Generic » ou « SSHScan » À droite : détections d'échantillons de variante Mirai de VirusTotal. La plupart des détections mentionnent Mirai spécifiquement. Figure 5 : Détections NoaBot (à gauche) par rapport à une autre variante Mirai (à droite)

Le mineur (et pourquoi nous n'avons pas pu trouver son adresse de portefeuille)

Le mineur lui-même est beaucoup moins compliqué. C'est le mineur XMRig standard, bien qu'il ait également été auto-compilé, et les acteurs malveillants ont ajouté du code avant l'exécution du mineur pour extraire la configuration de minage au lieu de la fournir via la ligne de commande ou de l'enregistrer dans le binaire en texte brut (figure 6).

Une décompilation de la fonction principale du mineur. Cela commence par plusieurs appels de fonction, puis par divers signaux. Figure 6 : Fonction principale du mineur

Nous pouvons voir qu'il y a d'autres appels de fonction avant l'appel de fonction pour construire la configuration XMRig. Si cela échoue, le mineur met fin à l'opération, mais sinon, il passe à la logique de mineur XMRig standard. (Vous pouvez comparer la décompilation ci-dessus au code source XMRig réel.) Pourquoi, en tant que chercheurs, nous soucions-nous de la configuration XMRig ? Généralement, elle contient des détails sur le pool de minage auquel il se connecte, ainsi que l'adresse du portefeuille pour recevoir les paiements de minage. En obtenant l'adresse du portefeuille et en suivant les paiements qui lui sont versés (qui sont généralement suivis par des pools publics), nous pouvons estimer à quel point cette campagne de minage de cryptomonnaie est rentable.

Cette fois, cependant, les attaquants avaient une longueur d'avance sur nous. Alors, allons un peu plus loin dans la construction de la configuration. Dans le code open source XMRig, les mineurs peuvent accepter des configurations de deux manières : soit par le biais de la ligne de commande, soit par des variables d'environnement. Dans notre cas, les acteurs malveillants ont choisi de ne pas modifier le code d'origine XMRig, et ont ajouté des éléments avant la fonction principale. Pour contourner le besoin d'arguments de ligne de commande (qui peuvent constituer un indicateur de compromission et des défenseurs d'alerte), les acteurs malveillants ont demandé au mineur de remplacer sa propre ligne de commande (en termes techniques, de remplacer argv) par des arguments plus « significatifs » avant de transmettre le contrôle au code XMRig. Le botnet exécute le mineur avec (tout au plus) un argument qui lui dit d'imprimer ses journaux.

Avant de remplacer sa ligne de commande, cependant, le mineur doit construire sa configuration. Tout d'abord, il copie les arguments de base qui sont stockés en texte brut (l'indicateur RIG-ID), qui identifie le mineur avec trois lettres aléatoires, les indicateurs de threads et un espace réservé pour l'adresse IP du pool (figure 7).

Curieusement, étant donné que les configurations sont chargées par le biais des registres xmm, IDA manque en fait les deux premiers arguments chargés, qui sont le nom binaire et l'espace réservé IP du pool.

Une décompilation de la construction du nouvel argv pour le mineur. Il charge les décalages des chaînes de configuration, puis alloue un nouveau tableau de chaînes et copie dedans en boucle. Figure 7 : Copie de la configuration de base du mineur

Ensuite, le mineur déchiffre le nom de domaine du pool. Le nom de domaine est stocké, chiffré, dans quelques blocs de données qui sont déchiffrés par des opérations XOR. Bien que XMRig puisse fonctionner avec un nom de domaine, les attaquants ont décidé d'aller encore plus loin et ont mis en place leur propre fonction de résolution DNS. Ils communiquent directement avec le serveur DNS de Google (8.8.8.8) et analysent sa réponse pour résoudre le nom de domaine en une adresse IP.

La dernière partie de la configuration est également chiffrée de la même manière, et c'est la clé d'accès pour que le mineur se connecte au pool. Dans l'ensemble, la configuration totale du mineur ressemble à quelque chose comme ceci :

<miner_binary_name> -o <pool_ip> --rig-id <random_id> --threads <cpus> –pass espana*tea

Vous avez détecté un élément manquant ? En effet, il n'y a pas d'adresse de portefeuille.

Nous pensons que les acteurs malveillants ont choisi de gérer leur propre pool privé au lieu d'un pool public, éliminant ainsi la nécessité de spécifier un portefeuille (leur pool, leurs règles !). Cependant, dans nos échantillons, nous avons observé que les domaines du mineur ne se résolvaient pas avec le DNS de Google, donc nous ne pouvons pas vraiment prouver notre théorie ou recueillir plus de données du pool, puisque les domaines que nous avons ne sont plus résolvables. Nous n'avons vu aucun incident récent qui élimine le mineur, il se pourrait donc que les acteurs malveillants soient partis vers d'autres horizons.

Mirai est trop vieux

Les incidents les plus récents que nous avons vus avaient également des échantillons de P2PInfect, un ver auto-répliquant P2P écrit en Rust. Alors que P2PInfect est apparu pour la première fois en juillet 2023, nous voyons l'activité de NoaBot depuis janvier 2023, ce qui signifie qu'il est un peu antérieur à P2PInfect. Pourquoi passer de Mirai à autre chose ? Pour passer à quelque chose qui pourrait même être personnalisé ? Nous n'avons pas de réponse claire, mais plusieurs hypothèses.

Tout d'abord, il est plus difficile d'effectuer une rétro-ingénierie sur du code personnalisé que sur du code réutilisé, parce qu'il est modifié. Deuxièmement, les acteurs malveillants semblent assez technophiles, il se pourrait donc qu'ils s'essaient au développement de logiciels malveillants par simple curiosité ou par ennui (ou les deux). Enfin, étant donné que P2PInfect cible les serveurs Redis, il pourrait s'agir simplement de différents outils à des fins différentes.

Comment savons-nous qu'il s'agit des mêmes acteurs malveillants, et pas seulement d'une sorte de collaboration ? Nous n'en sommes pas encore absolument certains, mais nous avons une très bonne piste. Tout réside dans le professionnalisme technique du logiciel malveillant, associé au niveau de maturité d'un adolescent en termes de blagues qu'il comporte, notamment l'insertion de blagues dans le nom du mineur, l'intégration de paroles de chansons pop de jeu vidéo dans les binaires du logiciel malveillant, et l'envoi de « hi » tout en recherchant les ports ouverts. 

P2PInfect perpétue cette tradition. Il ressemble à un outil sophistiqué, mais il utilise un socket Unix et l'appelle « NunzombiE » (figure 8). Et alors que NunzombiE est dissimulé et décodé pendant l'exécution, le ver dispose aussi de chaînes intégrées pour « fast_vuln_file » et « slow_vuln_file », qui sont des chaînes parfaitement légitimes dans un exécutable. Il n'y a rien d'alarmant ici.

13904 socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3 13904 bind(3, {sa_family=AF_UNIX, sun_path=@"NunzombiE"}, 12) = 0 Figure 8 : Strace du ver P2PInfect créant un socket Unix appelé NunzombiE

Victimologie

Il existe 849 adresses IP sources différentes qui ont attaqué nos pots de miel en 2023. En regardant leur géolocalisation, nous pouvons voir une répartition assez uniforme de l'activité à travers le monde. Cela a du sens, puisque le logiciel malveillant est exploitable par un ver, de sorte que chaque nouvelle victime devient un attaquant elle-même. Cependant, un point chaud d'activité se démarque et il se trouve en Chine. Il représente près de 10 % de toutes les attaques que nous avons vues en 2023. C'est le point chaud le plus important sur la figure 9.

Carte thermique géographique des sources d'attaque NoaBot. Les niveaux d'activité sont uniformes en Europe, aux États-Unis, en Amérique du Sud et en Asie. Le seul endroit où l'activité est accrue se trouve en Chine centrale. Figure 9 : Carte thermique de géolocalisation globale des sources d'attaque NoaBot

Atténuation, détection, émulation

La méthode de mouvement latéral du logiciel malveillant consiste en de simples attaques par dictionnaire d'identifiants SSH.

Restreindre l'accès SSH Internet arbitraire à votre réseau diminue considérablement les risques d'infection. En outre, l'utilisation de mots de passe forts (non générés par défaut ou aléatoirement) rend également votre réseau plus sécurisé, car le logiciel malveillant utilise une liste de mots de passe de base devinables. Nous avons partagé les ensembles d'informations d'identification utilisés par le logiciel malveillant dans notre référentiel GitHub.

Il n'y a pas grand-chose à dire sur la détection du logiciel malveillant, au-delà de la recherche de ses noms binaires. Le fait qu'il s'exécute à partir d'un dossier généré aléatoirement sous /lib, laisse penser que les noms de processus sont probablement une bonne voie à suivre. Il devrait également être possible de détecter sa tâche cron, si une telle tâche a été installée. Un fichier CSV d'indicateurs de compromission est également disponible dans notre référentiel, ainsi que quelques signatures YARA pour la mine.

Si vous souhaitez tester votre environnement par rapport au propagateur SSH du botnet, nous avons créé un fichier de configuration pour Infection Monkey, notre plateforme open source d'émulation adversaire (nous avons inclus une brève explication sur la façon d'utiliser Infection Monkey en annexe). Gardez à l'esprit que puisque le logiciel malveillant utilise un très grand ensemble d'informations d'identification, il serait peu pratique pour nous de toutes les tester (contrairement à nous, le logiciel malveillant ne se soucie pas des coûts de calcul ou de temps). Au lieu de cela, nous avons choisi d'inclure uniquement les informations d'identification les plus courantes dans la configuration. Si vous souhaitez inclure plus d'informations d'identification (ou d'autres informations d'identification), n'hésitez pas à vous appuyer sur cette configuration et à inclure vos propres modifications.

Cette configuration Infection Monkey ajoute également une chaîne masquée qui déclenchera nos signatures YARA sur la charge utile de l'agent Monkey, de sorte que vous pouvez l'utiliser pour tester cette détection.

Une fois que Infection Monkey aura fini de tester votre environnement, il créera un rapport de toutes les machines dans lesquelles il a réussi à s'introduire. Si vous souhaitez faire passer la simulation d'attaque au niveau supérieur et tester des informations d'identification plus solides, vous pouvez également utiliser son plug-in de cryptojacking. 

Résumé

En apparence, NoaBot n'est pas une campagne très sophistiquée. Il s'agit « juste » d'une variante de Mirai et d'un mineur de cryptomonnaies XMRig, et il en existe bon nombre de nos jours. Cependant, les dissimulations ajoutées au logiciel malveillant et les ajouts au code source d'origine brossent un tableau très différent des capacités des acteurs malveillants. Malgré les compétences techniques des acteurs malveillants, ceux-ci semblent avoir des conventions de dénomination immatures (un socket Unix appelé « NunzombiE », par exemple) qui persistent même dans différents échantillons de logiciels malveillants et binaires. Nous avons utilisé cette caractéristique pour associer NoaBot à P2PInfect, et peut-être que cet indice de détection sera valable pour les futures campagnes de logiciels malveillants.

Annexe : Utilisation de Infection Monkey pour tester votre environnement

  1. Installez Infection Monkey conformément à votre système d'exploitation :

    1. Windows

    2. Linux

    3. Docker

  2. Suivez les instructions de configuration.

  3. Téléchargez le plug-in d'exploitation SSH à partir de la page des plug-ins dans l'interface utilisateur Infection Monkey.

L'écran du plug-in Infection Monkey. Il dispose de trois onglets de commutation pour les plug-ins disponibles, les plug-ins installés et le téléchargement de nouveaux plug-ins. La page se trouve sur l'onglet de plug-ins disponibles. Figure 10 : Écran du plug-in Infection Monkey. Utilisez la barre de recherche pour rechercher le plug-in d'exploitation SSH et le télécharger.
  1. Importez le fichier de configuration pour émuler NoaBot.

L'écran de configuration de Infection Monkey Island. Il existe une section d'exploiteurs et une liste d'exploiteurs activés. Elle est vide. Figure 11 : Écran de configuration Infection Monkey. Pour importer la configuration que nous fournissons, appuyez sur le bouton « Importer config ».
  1. Configurez les cibles sur lesquelles tenter une attaque dans l'onglet "Analyse réseau" de la page de configuration.

  2. Exécutez Monkey.

  3. Accédez à la page de carte pour observer l'attaque. 

  4. Si, à tout moment, vous souhaitez arrêter la simulation, appuyez simplement sur le bouton "Tuer tous les singes" pour mettre fin à l'attaque.



Stiv Kupchik

écrit par

Stiv Kupchik

January 10, 2024

Stiv Kupchik

écrit par

Stiv Kupchik

Stiv Kupchik est Senior Security Researcher et est basé à Tel Aviv, en Israël.