"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é
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 à
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.
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
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.
À 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.
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é
Cet utilisateur a téléchargé un package récemment supprimé dans PyPI appelé pystilez
, faussement crédité à BillyTheGoat dans ce qui ressemblait à
Checkmarxapicolor
(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.
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.
Carlos a récemment trouvé quatre autres colis enforenitq
, 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
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
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.
hxxp://20[.]226[.]18[.]203/inject/tCxFLYLT6ViY9ZnP
hxxp://20[.]226[.]18[.]203/clip
hxxp://20[.]226[.]18[.]203/rat