paint-brush
Comment les mutants RAT, en Python, volent des données et évitent la détectionpar@hernanortiz
3,755 lectures
3,755 lectures

Comment les mutants RAT, en Python, volent des données et évitent la détection

par Hernán Ortiz7m2023/02/02
Read on Terminal Reader

Trop long; Pour lire

Même si des packages Python malveillants sont découverts chaque jour par nos chercheurs en sécurité, un nouveau type de malware que nous appelons les mutants RAT attire notre attention. Ils ont changé et se sont adaptés au fil du temps pour être plus évasifs et dangereux. Voici l'histoire de la façon dont ils peuvent voler vos portefeuilles de crypto-monnaie et vos données personnelles, contrôler à distance votre souris et votre clavier et évoluer pour échapper à la détection.
featured image - Comment les mutants RAT, en Python, volent des données et évitent la détection
Hernán Ortiz HackerNoon profile picture



"Un ninja sage ne cherche pas un ennemi qu'il ne comprend pas complètement." - Splinter de Teenage Mutant Ninja Turtles


En tant que rédacteur technique passionné de science-fiction, l'une des parties les plus excitantes de mon travail chez Sonatype est lorsque j'ai l'opportunité de collaborer avec l'équipe de recherche en sécurité.


Depuis que nous avons trouvé  une série de packages Python le mois dernier qui correspondent à ce que nous appelons des mutants RAT, de nouveaux logiciels malveillants qui exploitent les capacités des chevaux de Troie d'accès à distance et des voleurs d'informations, nos chercheurs en sécurité ont eu une impression lancinante de déjà-vu.


Ce n'est pas rare : ils évaluent constamment des centaines de paquets suspects provenant de registres open source pour déterminer s'ils sont vraiment malveillants. Au cours de cette procédure, ils identifient des modèles familiers entre les packages et parfois, après avoir reconnu de fortes similitudes, ils mènent des recherches supplémentaires pour retrouver l'acteur / la campagne derrière eux.


Entre la dernière semaine de 2022 et le début de 2023, notre système d'IA a signalé les paquets suspects téléchargés dans le registre PyPI, notamment pyrologin , easytimestamp , discorder , discord-dev , style.py et pythonstyles . Nos chercheurs en sécurité les ont examinés et ont confirmé qu'ils étaient effectivement malveillants. Et après une analyse plus approfondie, ils ont remarqué que ces packages ajoutaient une série de fonctionnalités rarement vues dans les logiciels malveillants Python.


Dans ce qui est devenu une stratégie de facto, les mauvais acteurs cachent une charge utile dans le fichier setup[.]py afin que les développeurs n'aient qu'à utiliser une simple installation pip pour être infectés. Dans ce cas, ils lanceraient par inadvertance un script PowerShell qui télécharge un fichier ZIP pour installer des bibliothèques permettant à l'attaquant de contrôler la souris et le clavier de la victime, de prendre des captures d'écran et de créer des connexions distantes masquées. Et en plus de cela, ces packages exfiltrent également des informations sensibles telles que les mots de passe, les cookies et les données de portefeuille de crypto-monnaie, et tentent même d'installer un outil d'accès à distance. Nos conclusions étaient conformes à Rapport technique de Phylum des mêmes forfaits.


Néanmoins, le chercheur en sécurité Carlos Fernandez avait un sentiment obsédant de déjà-vu. Au cours de la semaine qui a suivi la divulgation des packages, des souvenirs d'avoir vu des versions antérieures de ce logiciel malveillant lui ont traversé l'esprit. Un acteur menaçant a peut-être fait évoluer son logiciel malveillant au fil du temps, mais nous devions nous en assurer, alors j'ai mis mon chapeau OSINT pour l'aider à voir s'il y avait du vrai dans son intuition.

L'histoire d'origine

En regardant notre base de données, le 25 septembre 2022, un package appelé pygradient a été téléchargé sur le référentiel PyPI. Notre IA l'a signalé comme suspect et nos chercheurs en sécurité ont confirmé qu'il contenait des logiciels malveillants et qu'il regroupait les sources d'un autre package appelé pystyle . Les deux bibliothèques ont été rédigées par billythegoat356 , alias BillyTheGoat, alias BillyV3 (avec des contributions de loTus04 et BlueRed). Cet auteur français (du moins c'est ce que suggèrent sa localisation sur GitHub et la langue parlée via ses canaux Discord) est crédité comme la personne derrière Hypérion , un obfuscateur Python que nous avons souvent trouvé dans les logiciels malveillants récemment téléchargés, ainsi que l'un des créateurs de Voleur W4SP , un voleur d'informations actif depuis juillet dans un attaque en cours de la chaîne d'approvisionnement ouvrir des registres.


Le voleur W4SP bénéficie de la persistance (il est réactivé chaque fois que les utilisateurs redémarrent le PC), de l'obscurcissement (l'auteur promet qu'il est totalement indétectable) et des techniques de stéganographie pour masquer les charges utiles polymorphes et hautement obscurcies dans un fichier image. Le logiciel malveillant renvoie tous les comptes Discord, les cartes de crédit, les mots de passe et les portefeuilles cryptographiques de la victime à l'attaquant via une adresse Webhook Discord codée en dur. De mauvais acteurs intéressés par ce malware l'ont acheté en payant environ 20 USD en crypto.



Après avoir décodé l'image, un code Python obscurci en base64 caché est révélé.



À l'origine, pystyle n'avait pas de nature malveillante - un package inoffensif pour styliser et colorer la sortie de la console afin d'améliorer la lisibilité et l'expérience utilisateur. Mais selon les recherches de Phylum, une fois qu'il est devenu populaire (le package est toujours actif sur PyPI et il accumule plus de 40 000 téléchargements chaque mois), ils ont décidé d'ajouter le malware W4SP dans quelques versions.


Les packages open source comme pystyle peuvent agir comme agents dormants pendant des mois pour être activés plus tard par leur propre auteur à des fins malveillantes. Une décision risquée, car leur package populaire peut être découvert par des chercheurs en sécurité comme nous qui le signaleront comme malveillant et le supprimeront pour toujours. C'est pourquoi ils créent souvent de nouveaux packages à la place où ils incluent le code source d'une bibliothèque inoffensive, ajoutent un type de charge utile malveillante et le téléchargent sous un nouveau nom : quelque chose de générique, à consonance bénigne, d'apparence innocente. Un nom tel que pygradient .


Après avoir examiné de plus près avec Carlos, nous avons découvert que ce malware mutant proto-RAT manquait de certaines fonctionnalités des versions de décembre : même s'il lançait également un script PowerShell et exfiltrait des données sensibles, il n'utilisait pas de charges utiles encodées en base64 ni de liste d'autorisation. txt pour éviter l'auto-infection. D'une certaine manière, c'était une variante plus douce et moins sophistiquée.


Mais ensuite, nous avons examiné les packages téléchargés début novembre, notamment paintpy , devicespoof et devicespoofer , et après avoir approfondi nos connaissances, nous avons trouvé la confirmation de nos soupçons : le malware évoluait vraiment.

Un imitateur à la poursuite des logiciels malveillants

Même si BillyTheGoat n'a pas été actif sur GitHub depuis novembre, nous trouvons toujours des logiciels malveillants basés sur ses créations ou les volant directement, principalement par un utilisateur apparemment basé au Portugal appelé zeeckt .


Cet utilisateur a téléchargé un package récemment supprimé dans PyPI appelé pystilez , faussement crédité à BillyTheGoat dans ce qui ressemblait à StartJacking - une technique pour augmenter la réputation de leur nouveau package en le liant à une bibliothèque GitHub populaire, s'associant ainsi à ses centaines d'étoiles et de fourchettes.


Checkmarx a suivi ce mauvais acteur après avoir trouvé une attaque W4SP dans un package appelé apicolor (ainsi que des variantes portant le même nom) qui incluait un lien de serveur Discord dans leur code malveillant. Le profil d'administrateur était lié à un compte Steam vérifié et le nom "zeeckt" apparaissait comme l'un des alias Steam de l'attaquant.


Point de contrôle a également signalé que cet acteur menaçant créait de faux utilisateurs en copiant les profils de comptes GitHub populaires pour accroître sa légitimité. Et l'une de leurs victimes a décidé de créer une vidéo YouTube avertissant les gens de cette attaque après être tombés amoureux de l'un de leurs faux profils.


Un chercheur en sécurité a publié l'une des charges utiles de zeeckt à des fins éducatives et il a reçu une réponse intéressante du co-auteur du voleur W4SP :




Quelle ironie que votre voleur soit volé.


Le même auteur, apparemment un développeur Python de 17 ans, réitère sa frustration dans un fichier README sur son profil GitHub :



Nous ne savons pas exactement quel code malveillant zeeckt a volé à d'autres acteurs malveillants, mais une chose est certaine : ce nom continue d'apparaître dans les campagnes de logiciels malveillants dans les registres open source.


Des variantes plus sournoises rongent votre richesse en crypto

Carlos a récemment trouvé quatre autres colis en zeeckt : forenitq , forenith , forenity et forenitz . Après une enquête plus approfondie, il les a marqués comme malveillants et les a signalés à PyPI pour qu'ils soient supprimés. Le cas le plus rapide a mis environ 20 minutes entre la publication et la suppression.


En regardant setup[.]py dans forenitq , Carlos a trouvé la charge utile de première étape suivante :




L'attaquant crée trois fichiers temporaires qui téléchargent et exécutent des binaires Windows à partir d'URL spécifiques à l'aide de la commande "start". Même si les slugs /rat et /clip suggèrent une intention malveillante, nous ne pouvions pas confirmer cette hypothèse sans regarder sous le capot.


Au moment d'écrire ces lignes, la page hébergée à hxxp://20[.]226[.]18[.]203 est toujours active et ne montre qu'un lien vers une invitation Discord déjà expirée ou privée.


Carlos a remarqué que le paquet se faisait passer pour le populaire Colorama package, en utilisant leurs métadonnées pour une éventuelle tentative de StarJacking.


Après avoir désobscurci le fichier RAT, il a trouvé une ligne qui charge un éventuel pirate de presse-papiers, mais les détails de celui-ci étaient encodés en base64 :


Lors du décodage, nous obtenons un code Python conçu pour détourner le presse-papiers d'une victime pour remplacer l'adresse de portefeuille de crypto-monnaie prévue par l'adresse de l'attaquant :


Il recherche des modèles spécifiés comme bitcoin (bc1), Ethereum (0x), Monero (4) et l itecoin (L ou M ou 3), et lorsqu'un modèle est trouvé, il remplace l'adresse prévue par l'adresse du portefeuille de crypto-monnaie de l'attaquant. .


Le code utilise le trombone bibliothèque pour copier et coller les données du presse-papiers. Il installera la bibliothèque si elle n'est pas déjà installée, puis copiera l'adresse du portefeuille de crypto-monnaie dans le presse-papiers. Le code est ensuite défini sur une boucle continue pour surveiller le presse-papiers pour les modèles d'adresse de portefeuille.


De plus, nous avons découvert d'autres techniques que ce mutant RAT utilise pour échapper à la détection : une charge utile de première étape ajoutée au fichier forenitq/ansi[.]py au lieu de setup[.]py et une charge utile polymorphe de deuxième étape qui change à chaque fois que vous exécutez le binaire.


L'attaquant a également ajouté une nouvelle commande et un nouveau contrôle avec un menu d'aide très complet, et cette fois se fala português :



Comme vous pouvez le voir, les acteurs malveillants sont impatients de voler vos fonds cryptographiques et vos identifiants système pour pénétrer davantage votre infrastructure. Leur malware RAT continue de muter pour être plus évasif et plus dommageable pour les développeurs. Donc, si vous ne protégez pas votre chaîne d'approvisionnement logicielle aujourd'hui, envisagez de prendre des mesures pour le faire dès que possible.


IOC (indicateurs de compromis)

hxxp://20[.]226[.]18[.]203/inject/tCxFLYLT6ViY9ZnP

hxxp://20[.]226[.]18[.]203/clip

hxxp://20[.]226[.]18[.]203/rat