Anatomie des cryptomineurs : arrêt des botnets mineurs
Table des matières
Introduction
Bienvenue dans le dernier épisode de notre série de blogs Anatomie des cryptomineurs :
Dans notre premier article, nous avons évoqué les cryptomonnaies en général, leurs différents attributs et ce qui rend certaines d'entre elles plus attrayantes que d'autres pour les acteurs malveillants.
Dans la deuxième partie, nous avons analysé différents échantillons de cryptomonnaies dont nous avons découvert qu'ils exploitaient différentes topologies de minage.
Dans ce troisième et dernier article de blog de la série, nous allons explorer deux techniques proactives innovantes qui peuvent être utilisées pour vaincre les cryptomineurs.
En plus de ces articles de blog, nous avons publié plusieurs outils d'analyse disponibles dans notre référentiel.
Tout le monde sait que la meilleure défense est l'attaque. En raison de la nature distribuée des campagnes de cryptominage, il peut être très difficile de les interrompre.
Dans cet article de blog, nous vous montrons comment surmonter ce problème en exploitant la conception de topologies minières courantes pour arrêter efficacement le processus minier. Même si les techniques que nous décrivons ont été utilisées pour cibler les cryptomonnaies Monero, les mêmes principes peuvent également s'appliquer à d'autres cryptomonnaies.
Arrêt des opérations des cryptomineurs
Lorsqu'une opération de cryptomineur malveillante est détectée, il existe actuellement deux façons de tenter de l'arrêter :
Nous pouvons demander au service de pool d'interdire le compte de l'attaquant
Nous pouvons tenter de mettre hors service d'autres services de l'infrastructure de l'attaquant pour interférer avec la campagne
Le problème avec ces options est qu'elles peuvent devenir assez complexes et prendre beaucoup de temps, en raison de la dépendance vis-à-vis de tiers.
Nous avons trouvé une meilleure option.
Nous avons développé deux techniques en exploitant les topologies de minage et les règles de pool, qui nous permettent de réduire l'efficacité du botnet d'un cryptomineur au point de l'arrêter complètement. Le pirate est alors obligé d'apporter des modifications radicales à son infrastructure ou même d'abandonner l'ensemble de la campagne.
Ces deux techniques sont basées sur l'exploitation des communications stratum de manière à interdire les composants critiques tels que les proxys ou les portefeuilles liés aux comptes de l'opération de minage.
3,3 millions à zéro
Nous avons ciblé une opération de cryptomonnaie malveillante active depuis six ans. En interdisant le proxy de minage du pirate, point central de défaillance dans la topologie de minage, nous avons pu réduire son taux de hachage de 3,3 millions de hachages par seconde à zéro (Figure 1).
Aussi facilement que les pirates ont pu se faire de l'argent, nous avons pu mettre un point d'arrêt à leur potentiel chiffre d'affaires annuel en quelques secondes. À l'aide d'un simple ordinateur portable, nous avons fait perdre à l'opérateur de cryptomonnaie sa vache à lait de 26 000 dollars américains par an, avec un taux de hachage désormais en chute libre.
La vidéo de la Figure 2 illustre cette technique, que nous avons baptisée « mauvaises parts ». Elle présente une victime d'un cryptomineur connectée à un proxy de minage malveillant. En exécutant la technique « Mauvaises parts », nous avons pu interdire le proxy de minage du réseau, en arrêtant l'opération de minage et en faisant passer l'utilisation du processeur de la victime de 100 % à 0 %.
Fig. 2 : Application de la technique Mauvaises parts dans notre configuration de laboratoire
Si vous ne pouvez pas les battre, bannissez-les
Le cryptominage via un pool est basé sur l'envoi de calculs de hachage valides, appelés parts. Pour générer des revenus, un mineur de cryptomonnaies doit soumettre des parts au pool de minage. Lors de la réception d'une part, le pool de minage valide le résultat du hachage et sa difficulté.
La validation des parts est l'une des tâches les plus lourdes que le serveur de pool doit gérer, en particulier en cas de parts non valides. Comme partout, des erreurs sont possibles ; par exemple, un dysfonctionnement matériel peut entraîner l'envoi de parts incorrectes au pool.
La gestion des parts non valides consomme beaucoup de ressources. Par conséquent, les pools doivent se protéger contre l'effondrement sous une charge massive de soumissions de partages non valides. Par conséquent, lorsqu'une part envoyée n'est pas validée par le serveur, la plupart des pools appliquent une pénalité au mineur, généralement sous la forme d'une interdiction temporaire.
Cette interaction peut être très intéressante lorsque vous tentez d'arrêter une opération minière malveillante. Si nous pouvons créer un nœud back-end ou un pool pour interdire les mineurs attaquants (ou victimes), nous pouvons arrêter l'exploitation des ressources du cryptomineur et libérer les victimes.
Dans les sections suivantes, nous présentons ce concept en ciblant deux campagnes minières que nous avons déjà explorées, chacune représentant une topologie d'exploration différente : un proxy d'exploration et une connexion directe à un pool public.
Utilisation de la technique Mauvaises parts pour interdire le proxy de minage d'un pirate
L'une des topologies de minage les plus populaires utilisées par les cryptomineurs malveillants est un proxy de minage (Figure 3). Cette configuration améliore la confidentialité en dissimulant à la fois l'adresse du back-end et l'adresse du portefeuille des pirates, protégeant ainsi leurs identités et réduisant la traçabilité au sein du réseau.
Les proxys de minage lancent des défis uniques à la détection réseau, car ils « masquent » le pool cible auquel le mineur se connecte (généralement détectable à l'aide de l'inspection réseau). Ils cachent également l'adresse du portefeuille, ce qui réduit encore davantage la trace visible du mineur. Cependant, nous avons découvert que les proxys de minage peuvent être le talon d'Achille des cryptomineurs.
Lors du minage avec un proxy, toutes les victimes sont connectées à un seul serveur. Cela signifie qu'une interférence sur le proxy peut arrêter toute l'opération de minage. Nous avons développé une technique qui nous permet de le faire.
L'idée est simple : En nous connectant à un proxy malveillant en tant que mineur, nous pouvons envoyer des résultats de minage non valides (mauvaises parts) qui contourneront la validation du proxy et seront soumis au pool. De mauvaises parts consécutives finiront par interdire le proxy, interrompant ainsi efficacement les opérations de minage pour l'ensemble du botnet de cryptominage.
Communication avec le proxy
Le cryptomineur doit d'abord se connecter au proxy à l'aide de la méthode de connexion Stratum. Si aucune autre configuration n'a été définie, le mineur identifie x par défaut dans le serveur proxy XMRig (Figure 4).
Si la connexion réussit, cela signifie qu'il y a un écouteur à l'extrémité du proxy. Nous pouvons nous assurer qu'il s'agit bien d'un proxy de minage en analysant la réponse : une réponse valide sera un document JSON conforme au protocole Stratum et le résultat sera un job.
Bien que l'ensemble du processus d'exploitation minière soit complexe (comme décrit dans Zero to Monero), la création d'un partage personnalisé est relativement simple. Il suffit d'extraire certaines valeurs de la réponse du proxy : id : identification du mineur, job id : identification du job, et nicehash nonce : valeur unique nicehash. Ces trois valeurs permettent de suivre un minage en particulier. Par conséquent, ces champs doivent être correctement remplis si nous voulons que le proxy accepte nos mauvaises parts (Figure 5).
Lorsqu'un proxy reçoit une part d'un mineur, il la transfère au pool presque en l'état, mais avec un élément important : elle est envoyée avec l'adresse du portefeuille du pirate. C'est la raison pour laquelle nous ne pouvions jamais connaître le portefeuille ou toute autre information sur le compte du pirate ou le pool de l'échantillon du cryptomineur.
XMRogue
Il n'est pas difficile d'infiltrer le botnet du cryptomineur en tant que victime. En général, il n'existe pas d'autorisation spéciale et, dans de nombreux cas, il utilise des applications standard comme XMRig en tant que mineur et XMRig-proxy en tant que proxy d'exploration.
Cela nous a conduits à développer XMRogue. XMRogue est un outil qui nous permet d'usurper l'identité d'un mineur, de nous connecter à un proxy de minage, d'envoyer des parts invalides consécutives et d'interdire le proxy de minage du pool (Figure 6).
La validation des parts au niveau du proxy est un point important. Étant donné que nos mauvaises parts sont transmises au pool par le proxy, il peut les identifier et les supprimer.
Par exemple, le proxy populaire XMRig-proxy valide la valeur unique nicehash qu'il fournit avec le job et la difficulté du résultat. Si la valeur unique ou la difficulté est incorrecte, la part invalide ne sera pas transférée au pool back-end. À la figure 7, nous voyons la validation dans le code où les parts ayant un hachage de faible difficulté ou des valeurs nicehash incorrectes sont supprimées.
Nous pouvons contourner ces validations en analysant la demande de job et en élaborant soigneusement un « mauvais » résultat de job validé par le proxy. Nos parts sont alors transférées au pool.
Tester la théorie
Pour tester notre technique, nous avons choisi de cibler l'une des campagnes de minage que nous avons identifiées dans la deuxième partie de cette série. Nous avons pu extraire les adresses de tous les proxys miniers utilisés par la campagne choisie, ce qui nous donne un certain nombre d'informations à exploiter. Par exemple, nous pouvons voir que le proxy du pirate principal, dont le nom est très créatif : « proxy », a une évaluation maximale de Nanopool, ce qui indique une utilisation prolongée (Figure 8).
Ce proxy génère 3 millions de hachages par seconde, soit environ l''équivalent d''un revenu de 3 USD par heure, soit 26 000 USD par an. En ciblant ce proxy avec XMRogue, nous avons pu rapidement l'interdire du pool et arrêter le minage de toutes les victimes qui y étaient connectées. Si nous examinons le taux de hachage du proxy, nous pouvons voir qu'il a chuté jusqu'à atteindre zéro (Figure 9).
Si nous prenons en compte l'impact de XMRogue sur l'ensemble de la campagne de l'attaquant, nous pouvons constater une baisse substantielle de sa rentabilité. Lorsque nous avons documenté cette campagne pour la première fois, elle générait près de 50 000 USD par an. Une fois que nous l'avons interrompue et déséquilibrée, le chiffre d'affaires annuel de la campagne a diminué de 76 % pour atteindre 12 000 USD. Si des proxys supplémentaires avaient été ciblés, le chiffre d'affaires aurait pu tomber à zéro. Ce genre de coup dur pourrait facilement forcer les pirates à abandonner définitivement leur campagne ou à prendre le risque d'être identifiés en faisant des modifications sous surveillance.
Utiliser d'autres politiques de pool minier
Les pirates n'utilisent pas toujours de proxy. Dans de nombreux cas, les victimes se connectent directement au pool, ce qui signifie que la technique précédente ne sera pas applicable. L'envoi de mauvaises parts bloquera simplement notre adresse IP au niveau du pool, sans affecter les opérations de minage.
Lorsque nous avons examiné le code source du pool de minage, une autre option nous est venue à l'esprit : cibler l'adresse du portefeuille. Alors que la précédente politique relative aux parts de mauvaise qualité visait les adresses IP des mineurs, nous avons identifié une politique supplémentaire appliquée au niveau du portefeuille : le pool interdit l'adresse du portefeuille pendant une heure s'il compte plus de 1 000 mineurs.
Lors de l'utilisation d'un proxy de minage, un pirate peut intégrer son adresse de portefeuille exclusivement sur le serveur proxy, ce qui lui permet de la masquer efficacement. Mais dans les situations où l'exploitation minière directe est effectuée, l'adresse du portefeuille doit être présente sur la machine cible, ce qui nous permet de l'extraire.
Dans ce cas, il est très simple de faire interdire le pirate : nous envoyons simplement plus de 1 000 demandes de connexion simultanées à partir du portefeuille du pirate, ce qui force le pool à interdire le portefeuille du pirate. Cette technique a été ajoutée en tant que mode de fonctionnement à l'outil XMRogue.
Pour illustrer cette idée, nous avons utilisé une autre campagne que nous avons découverte et qui utilise le pool public MoneroOcean. L'état initial de la campagne était un taux de hachage de 22 kH/s (Figure 11). Cette campagne est beaucoup plus petite que celle que nous avons évoquée ci-dessus, mais la technique elle-même devrait couvrir une gamme plus large de configurations de campagnes de cryptominage.
Après le lancement de notre script, qui a lancé instantanément des milliers de connexions, nous avons constaté une chute quasi totale du taux de minage (Figure 12).
Champ d'action plus large, résultats moins définitifs
Cette tactique pourrait interrompre davantage d'opérations minières, mais ce n'est pas une solution permanente. Une fois que nous avons arrêté les connexions multiples, le taux de hachage de la campagne a été rétabli (Figure 13).
Synthèse
Les techniques présentées ci-dessus montrent comment les défenseurs peuvent efficacement arrêter les campagnes de cryptomineurs malveillants sans perturber le fonctionnement du pool légitime, en profitant des politiques du pool. Un mineur légitime sera en mesure de récupérer rapidement de ce type d'attaque, car il pourra facilement modifier son adresse IP ou son portefeuille localement.
Cette tâche serait beaucoup plus difficile pour un cryptomineur malveillant, car cela nécessiterait de modifier l'ensemble du botnet. Cependant, pour les mineurs moins chevronnés, cette défense pourrait complètement désactiver le botnet.
Conclusion de la série
Cette publication conclut notre série sur l'Anatomie des cryptomineurs. Nous avons abordé les principes de base de la cryptomonnaie et exploré l'état d'esprit des pirates, à travers la recherche de campagnes actives qui exploitent différentes topologies de minage.
Nous pensons que la menace que cnostituent les cryptomineurs continuera de croître au fil du temps. Désormais, nous pouvons combattre et perturber le fonctionnement des pirates, ce qui rend beaucoup plus difficile la monétisation efficace des cryptomineurs.