ESET Research a découvert un groupe de projets Python malveillants distribués dans PyPI, le référentiel officiel des packages Python. La menace cible à la fois les systèmes Windows et Linux et propose généralement une porte dérobée personnalisée. Dans certains cas, la charge utile finale est une variante du fameux Voleur W4SP, ou un simple moniteur de presse-papiers pour voler de la crypto-monnaie, ou les deux. En mai 2023, nous rapporté sur un autre groupe de packages que nous avons trouvé sur PyPI et qui fournit des logiciels malveillants volant des mots de passe et des crypto-monnaies, mais les deux clusters semblent être des campagnes différentes.
Points clés de cet article de blog :
- ESET Research a découvert 116 packages malveillants dans PyPI, le référentiel officiel de logiciels pour le langage de programmation Python, téléchargés dans 53 projets.
- Les victimes ont téléchargé ces packages plus de 10,000 XNUMX fois.
- Depuis mai 2023, le rythme de téléchargement est d'environ 80 par jour.
- Le malware offre une porte dérobée capable d’exécuter des commandes à distance, d’exfiltrer et de prendre des captures d’écran.
- Le composant de porte dérobée est implémenté pour Windows, en Python, et Linux, dans Go.
- Dans certains cas, le W4SP Stealer ou un moniteur de presse-papiers qui vole des crypto-monnaies, ou les deux, est fourni à la place.
PyPI est populaire parmi les programmeurs Python pour le partage et le téléchargement de code. Puisque n’importe qui peut contribuer au référentiel, des logiciels malveillants – se faisant parfois passer pour des bibliothèques de codes légitimes et populaires – peuvent y apparaître. Nous avons trouvé 116 fichiers (distributions sources et roues) provenant de 53 projets contenant des logiciels malveillants. Certains noms de paquets ressemblent effectivement à d'autres paquets légitimes, mais nous pensons que la principale façon dont ils sont installés par les victimes potentielles n'est pas le typosquattage, mais l'ingénierie sociale, où les victimes sont guidées en courant. pip install {nom du package} pouvoir utiliser le package « intéressant » pour quelque raison que ce soit.
Au cours de la dernière année, les victimes ont téléchargé ces fichiers plus de 10,000 1 fois ; voir la figure XNUMX.
Infester PyPI
Les packages PyPI peuvent prendre deux formes : les packages source, qui contiennent tout le code source du projet et sont construits lors de l'installation, et les packages prédéfinis (appelés Les roues molles), qui peut contenir des modules compilés pour un système d'exploitation spécifique ou une version de Python. Fait intéressant, dans certains cas, le code Python de la distribution source diffère de la distribution construite. Le premier est propre, tandis que le second contient le code malveillant. Le gestionnaire de paquets de Python, pépin, privilégie une roue lorsqu’elle est disponible plutôt qu’une distribution source. En conséquence, le logiciel malveillant est installé, sauf demande contraire explicite.
Nous avons observé les opérateurs derrière cette campagne utiliser trois techniques pour regrouper le code malveillant dans des packages Python.
Module test.py malveillant
La première technique consiste à placer un module « test » avec du code légèrement obscurci à l'intérieur du package. La figure 2 montre un test.py fichier avec une fonction appelée grappin étant défini puis appelé. Notez que la fonction gère à la fois les systèmes Windows et Linux.
Ce module de test est importé au milieu du code source du module principal du package (__init__.py), afin que le code malveillant s'exécute à chaque fois que le package est importé. La figure 3 montre un module qui se fait passer pour un capture d'écran et importe les fichiers malveillants. test.py.
PowerShell dans setup.py
La deuxième technique consiste à intégrer du code PowerShell dans le configuration.py fichier, qui est généralement exécuté automatiquement par les gestionnaires de packages tels que pépin pour aider à installer des projets Python.
La figure 4 montre un script PowerShell qui télécharge et exécute l'étape suivante.
Ce script PowerShell télécharge transfert[.]sh/eyRyPT/Updater.zip dans un répertoire temporaire comme update.zip. Le script décompresse ensuite le fichier ZIP en C: ProgramData et le supprime du répertoire temporaire. Ensuite, le script exécute le pépin programme pour installer les dépendances. Enfin, il exécute le code Python dans C:ProgramDataUpdaterserver.pyw.
Cette technique ne fonctionne que sous Windows et ne parviendra pas à infester les systèmes Linux.
Dans les métadonnées du package de la figure 4, vous avez peut-être remarqué que l'auteur du package est BillytheGoat356. De nombreux rapports associent ce pseudo à des activités malveillantes, notamment un article de Phylum, où ils révèlent le lien potentiel de Billy avec W4SP Stealer.
Juste des logiciels malveillants…
Dans la troisième technique, les opérateurs ne font aucun effort pour inclure du code légitime dans le package, de sorte que seul le code malveillant soit présent, sous une forme légèrement masquée. La figure 5 montre deux morceaux de code malveillant pour Windows écrits dans des fichiers temporaires puis exécutés avec pythonw.exe, qui est utilisé à la place de python.exe afin que le code s'exécute sans ouvrir de fenêtre de console.
Les étapes suivantes sont des packages Python, des scripts ou des fichiers binaires téléchargés depuis Dropbox ou transfer.sh.
Persistence
Sous Windows, la persistance est obtenue la plupart du temps via un VBScript codé (VBE), qui est un fichier VBScript codé, écrit dans %APPDATA%/Pythonenv/pythenenv.vbe. La figure 6 montre cmd.exe cacher le répertoire %APPDATA%/Pythonenv, En cours d'exécution pythenenv.vbe, puis en planifiant l'exécution du fichier VBE toutes les cinq minutes sous la tâche MicrosoftWinRaRUtilityTaskB.
Sous Linux, la persistance est obtenue en plaçant un fichier malveillant entrée de bureau, mate-user-share.desktop, Dans le ~ / .config / autostart / répertoire, comme le montre la figure 7 . Fichiers situés dans le Autostart répertoire sont exécutés à chaque démarrage du système. L'entrée de bureau utilise le nom d'un MATE sous-projet pour son nom de fichier, mais c'est uniquement pour réduire les soupçons car cela n'a rien à voir avec l'environnement de bureau.
La figure 7 montre également les téléchargements de modules dl.dropbox[.]com/s/u3yn2g7rewly4nc/proclean à ~/.config/.kde/.kdepath. Il s'agit probablement d'une tentative d'usurper l'identité d'un répertoire de configuration pour le KDE Interface graphique Plasma pour Linux.
Lancer le mate-user-share.desktop le fichier exécute à son tour le fichier téléchargé .kdepath fichier, qui est le fichier exécutable Linux contenant le composant de porte dérobée.
Charge utile finale
En règle générale, la charge utile finale est une porte dérobée personnalisée qui permet l'exécution de commandes à distance, l'exfiltration de fichiers et inclut parfois la possibilité de prendre des captures d'écran. Sous Windows, la porte dérobée est implémentée en Python.
La figure 8 montre la porte dérobée créant une connexion par socket TCP vers blazywound.ignorelist[.]com sur le port 6001. Après avoir envoyé le nom d'hôte, l'adresse MAC et le nom d'utilisateur au serveur C&C, la porte dérobée gérera directement certaines commandes ou exécutera toute autre commande dans un processus séparé et renverra le résultat de la commande et toute information d'erreur au serveur.
Sous Linux, la porte dérobée est implémentée dans Go ; voir la figure 9 .
Dans certains cas, au lieu de la porte dérobée, la charge utile est une variante du fameux Voleur W4SP, ou un simple moniteur de presse-papiers qui vole de la crypto-monnaie, ou les deux. La figure 10 montre un moniteur de presse-papiers ciblant les crypto-monnaies Bitcoin, Ethereum, Monero et Litecoin. Le malware utilise le légitime cyberclip package pour vérifier le contenu du presse-papiers pour les adresses de portefeuille. S’il est trouvé, le malware copie une adresse contrôlée par l’attaquant dans le presse-papiers dans l’espoir que la victime colle cette adresse dans une future transaction de crypto-monnaie.
Les produits ESET détectent les packages Python malveillants comme des variantes de Python/Agent et Python/TrojanDownloader, et la porte dérobée comme Python/Agent.AOY ou Linux/Spy.Agent.BB.
La plupart des packages étaient déjà supprimés par PyPI au moment de cette recherche. ESET a communiqué avec PyPI pour prendre des mesures contre les packages restants et tous les packages malveillants connus sont désormais hors ligne. La liste complète des 116 forfaits se trouve dans notre GitHub référentiel.
Il convient de noter que les logiciels malveillants présents dans un référentiel de projet PyPI ne constituent pas un problème de sécurité avec PyPI lui-même. En fait, le logiciel exécutant PyPI était récemment audité par une société externe qui a évalué que PyPl « était conforme aux meilleures pratiques largement acceptées ».
Conclusion
PyPI continue d'être utilisé par des cyberattaquants pour compromettre les appareils des programmeurs Python. Cette campagne présente diverses techniques utilisées pour inclure des logiciels malveillants dans les packages Python. Les développeurs Python doivent examiner minutieusement le code qu'ils téléchargent, en particulier en vérifiant ces techniques. before l'installer sur leurs systèmes. En plus de continuer à abuser du W4SP Stealer open source, les opérateurs ont également déployé une porte dérobée simple mais efficace. Nous nous attendons à ce qu'un tel abus de PyPI se poursuive et nous conseillons d'être prudent lors de l'installation de code à partir d'un référentiel de logiciels public.
Pour toute question concernant nos recherches publiées sur WeLiveSecurity, veuillez nous contacter à menaceintel@eset.com.
ESET Research propose des rapports d'intelligence APT privés et des flux de données. Pour toute demande concernant ce service, rendez-vous sur Intelligence des menaces ESET .
IoCs
Fichiers
SHA-1 |
Nom de fichier |
Détection |
Description |
439A5F553E4EE15EDCA1CFB77B96B02C77C5C388 |
cache.py |
Python/Agent.AGL |
Téléchargeur de porte dérobée Linux.. |
B94E493579CC1B7864C70FAFB43E15D2ED14A16B |
coloramma-0.5.4-py3-none-any.whl |
Python/Agent.AGU |
Package avec programme d'installation de porte dérobée Linux. |
AE3072A72F8C54596DCBCDE9CFE74A4146A4EF52 |
coloramma-4.5-py3-none-any.zip |
Python/Agent.AOY |
Package avec porte dérobée Windows. |
70C271F79837B8CC42BD456A22EC51D1261ED0CA |
indésirable.py |
Python/Agent.AGM |
Programme d'installation de persistance Windows. |
B0C8D6BEEE80813C8181F3038E42ADACC3848E68 |
proclean |
Linux/Spy.Agent.BB |
Porte dérobée Linux. |
07204BA8D39B20F5FCDB9C0242B112FADFFA1BB4 |
prov.py |
Python/Agent.AGL |
Téléchargeur de porte dérobée Linux. |
EF59C159D3FD668C3963E5ADE3C726B8771E6F54 |
tmp |
Linux/Spy.Agent.BB |
Porte dérobée Linux. |
Pour une liste complète des packages malveillants, consultez notre GitHub référentiel malware-ioc.
Réseau
Nom de domaine |
IP dédiée |
Vu la première fois |
Description |
blazywound.ignorelist[.]com |
204.152.203[.]78 |
2022-11-21 |
Serveur C&C pour composant de porte dérobée. |
Techniques d'ATT&CK D'ONGLET
Ce tableau a été construit avec Version 14 du cadre MITRE ATT&CK.
Tactique |
ID |
Nom |
Description |
Accès initial |
Compromis de la chaîne d'approvisionnement : compromission des dépendances logicielles et des outils de développement |
Les logiciels malveillants sont distribués à l’aide du service de gestion de packages PyPl de Python. |
|
Persistence |
Tâche/Tâche planifiée : Tâche planifiée |
Sous Windows, la persistance est obtenue à l'aide d'une tâche planifiée. |
|
Exécution de démarrage automatique au démarrage ou à la connexion : entrées de démarrage automatique XDG |
Sous Linux, une entrée de démarrage automatique est créée pour lancer la porte dérobée lorsque l'utilisateur se connecte. |
||
Évasion défensive |
Masquage : correspond à un nom ou à un emplacement légitime |
Sous Linux, les fichiers persistants portent des noms similaires à ceux de logiciels légitimes |
|
Accès aux informations d'identification |
Informations d'identification des magasins de mots de passe : informations d'identification des navigateurs Web |
W4SP vole les mots de passe des navigateurs Web installés. |
|
Collection |
Données du Presse-papiers |
Pour voler des fonds lors d’une transaction de crypto-monnaie, les données du presse-papiers sont remplacées. |
|
Commander et contrôler |
Protocole de couche non applicative |
La porte dérobée utilise un protocole binaire non crypté sur TCP. |
- Contenu propulsé par le référencement et distribution de relations publiques. Soyez amplifié aujourd'hui.
- PlatoData.Network Ai générative verticale. Autonomisez-vous. Accéder ici.
- PlatoAiStream. Intelligence Web3. Connaissance Amplifiée. Accéder ici.
- PlatonESG. Carbone, Technologie propre, Énergie, Environnement, Solaire, La gestion des déchets. Accéder ici.
- PlatoHealth. Veille biotechnologique et essais cliniques. Accéder ici.
- La source: https://www.welivesecurity.com/en/eset-research/pernicious-potpourri-python-packages-pypi/
- :possède
- :est
- :où
- 000
- 1
- 10
- 116
- 14
- 152
- 2023
- 7
- 8
- 80
- 9
- a
- capacité
- Capable
- A Propos
- abus
- accepté
- atteint
- Action
- d'activités
- propos
- adresses
- conseiller
- Après
- à opposer à
- Agent
- Tous
- permet
- déjà
- aussi
- parmi
- an
- ainsi que le
- Une autre
- tous
- chacun.e
- apparaître
- APT
- SONT
- AS
- évalué
- At
- auteur
- automatiquement
- disponibles
- RETOUR
- détourné
- BE
- car
- était
- derrière
- va
- CROYONS
- LES MEILLEURS
- Bitcoin
- tous les deux
- navigateurs
- construit
- Pack de blanchiment
- mais
- by
- appelé
- Campagne
- Campagnes
- CAN
- capable
- cas
- prudence
- chaîne
- vérifier
- vérification
- espace extérieur plus propre,
- Grappe
- code
- COM
- communiqué
- compilé
- composant
- compromis
- configuration
- connexion
- Console
- contact
- contiennent
- contient
- contenu
- continuer
- continue
- continue
- contribuer
- créée
- La création
- Lettres de créance
- cryptocurrencies
- crypto-monnaie
- Customiser
- données
- journée
- défini
- livré
- offre
- dépendances
- déployé
- à poser
- détecter
- mobiles
- Développement
- Compatibles
- différent
- directement
- découvert
- affiche
- distribué
- distribution
- distributions
- do
- down
- download
- téléchargement
- téléchargements
- Dropbox
- pendant
- chacun
- Efficace
- effort
- non plus
- enchâsser
- intégré
- ENGINEERING
- entrée
- Environment
- erreur
- notamment
- Ethereum
- Chaque
- réalisé
- Exécute
- exécution
- exfiltration
- attendre
- explicitement
- externe
- fait
- FAIL
- faveurs
- Figure
- Déposez votre dernière attestation
- Fichiers
- finale
- finalement
- Ferme
- Prénom
- cinq
- Pour
- formulaire
- Ancien
- document
- trouvé
- Framework
- De
- plein
- fonction
- fonds
- avenir
- GitHub
- Go
- manipuler
- Poignées
- Vous avez
- vous aider
- d'espérance
- HTTPS
- if
- image
- la mise en oeuvre
- mis en œuvre
- l'importation
- importations
- in
- comprendre
- inclut
- Y compris
- infâme
- d'information
- Messages
- à l'intérieur
- installer
- installation
- Installé
- installer
- plutôt ;
- Intelligence
- développement
- aide
- IT
- SES
- lui-même
- connu
- langue
- lancer
- couche
- légitime
- moins
- bibliothèques
- légèrement
- LINK
- linux
- Liste
- Litecoin
- situé
- Style
- mac
- Entrée
- a prendre une
- malware
- gestion
- manager
- Gestionnaires
- Match
- Mai..
- moyenne
- Métadonnées
- Milieu
- Minutes
- Module
- Modules
- Monero
- Surveiller
- PLUS
- (en fait, presque toutes)
- prénom
- noms
- next
- aucune
- rien
- Remarquer..
- notant
- maintenant
- nombreux
- of
- Offres Speciales
- officiel
- direct
- on
- ONE
- et, finalement,
- uniquement
- open source
- ouverture
- d'exploitation
- le système d'exploitation
- opérateurs
- or
- Autre
- autrement
- nos
- sortie
- plus de
- paquet
- Forfaits
- page
- Mot de Passe
- mots de passe
- passé
- /
- persistance
- pièces
- Place
- placement
- Plasma
- Platon
- Intelligence des données Platon
- PlatonDonnées
- veuillez cliquer
- des notes bonus
- Populaire
- défaillances
- PowerShell
- représentent
- Privé
- Probablement
- processus
- Produits
- Programmeurs
- Programmation
- Projet
- projets
- protocole
- public
- publié
- PYPL
- Python
- Tarif
- plutôt
- raison
- réduire
- restant
- éloigné
- remplacé
- Rapports
- dépôt
- un article
- résultat
- révéler
- Courir
- pour le running
- fonctionne
- prévu
- ordonnancement
- screenshots
- scénario
- scripts
- Deuxièmement
- sécurité
- sur le lien
- vu
- envoyer
- envoi
- séparé
- serveur
- service
- installation
- partage
- devrait
- Spectacles
- similaires
- étapes
- depuis
- So
- Réseaux sociaux
- Ingénierie sociale
- Logiciels
- quelques
- parfois
- Identifier
- code source
- groupe de neurones
- Étape
- étapes
- Commencez
- vole
- STORES
- tel
- combustion propre
- Système
- table
- Prenez
- tâches
- prise
- ciblage
- objectifs
- Tâche
- technique
- techniques
- temporaire
- tester
- que
- qui
- La
- La Source
- leur
- puis
- Là.
- Ces
- l'ont
- Troisièmement
- this
- complètement
- menace
- trois
- Avec
- fiable
- fois
- à
- transaction
- TOUR
- deux
- typiquement
- sous
- téléchargé
- sur
- us
- utilisé
- d'utiliser
- Utilisateur
- Usages
- en utilisant
- d'habitude
- Variante
- variété
- version
- VET
- via
- Victime
- victimes
- Visiter
- marcha
- Wallet
- était
- Façon..
- we
- web
- Navigateurs Web
- WELL
- ont été
- quelle que soit
- Jante
- quand
- chaque fois que
- qui
- tout en
- largement
- largeur
- sera
- fenêtre
- fenêtres
- comprenant
- sans
- vos contrats
- vaut
- code écrit
- an
- Vous n'avez
- zéphyrnet
- Zip