ESET Research heeft een cluster kwaadaardige Python-projecten ontdekt die worden verspreid PyPI, de officiële Python-pakketrepository. De dreiging richt zich zowel op Windows- als Linux-systemen en levert meestal een aangepaste achterdeur op. In sommige gevallen is de uiteindelijke lading een variant van de beruchte W4SP-stealer, of een eenvoudige klembordmonitor om cryptocurrency te stelen, of beide. In mei 2023 hebben wij gerapporteerd op een ander cluster van pakketten die we op PyPI vonden en die malware voor het stelen van wachtwoorden en cryptocurrency leveren, maar de twee clusters lijken verschillende campagnes te zijn.
Kernpunten van deze blogpost:
- ESET Research ontdekte 116 kwaadaardige pakketten in PyPI, de officiële opslagplaats van software voor de programmeertaal Python, geüpload in 53 projecten.
- Slachtoffers hebben deze pakketten meer dan 10,000 keer gedownload.
- Sinds mei 2023 bedraagt de downloadsnelheid ongeveer 80 per dag.
- De malware levert een achterdeur die opdrachten op afstand kan uitvoeren, exfiltreren en schermafbeeldingen kan maken.
- De backdoor-component is geïmplementeerd voor zowel Windows, in Python, als Linux, in Go.
- In sommige gevallen wordt in plaats daarvan de W4SP Stealer of een klembordmonitor geleverd die cryptocurrency steelt, of beide.
PyPI is populair onder Python-programmeurs voor het delen en downloaden van code. Omdat iedereen kan bijdragen aan de repository, kan daar malware verschijnen, die zich soms voordoet als legitieme, populaire codebibliotheken. We hebben 116 bestanden (brondistributies en wielen) gevonden van 53 projecten die malware bevatten. Sommige pakketnamen lijken op andere, legitieme pakketten, maar wij zijn van mening dat de belangrijkste manier waarop ze door potentiële slachtoffers worden geïnstalleerd niet via typosquatting is, maar via social engineering, waarbij de slachtoffers doorlopend worden doorlopen. pip install {pakketnaam} om om welke reden dan ook gebruik te kunnen maken van het “interessante” pakket.
Het afgelopen jaar hebben slachtoffers deze bestanden meer dan 10,000 keer gedownload; zie figuur 1.
PyPI besmet
PyPI-pakketten kunnen twee vormen aannemen: bronpakketten, die alle projectbroncode bevatten en na installatie worden gebouwd, en vooraf gebouwde pakketten (zogenaamde wielen), die gecompileerde modules kan bevatten voor een specifiek besturingssysteem of een Python-versie. Interessant is dat in sommige gevallen de Python-code in de brondistributie verschilt van de gebouwde distributie. De eerste is schoon, terwijl de laatste de kwaadaardige code bevat. Python's pakketbeheerder, pit, geeft de voorkeur aan een wiel als het beschikbaar is, in plaats van aan een brondistributie. Als gevolg hiervan wordt de kwaadwillende geïnstalleerd, tenzij uitdrukkelijk anders wordt gevraagd.
We hebben gezien dat de operators achter deze campagne drie technieken gebruikten om kwaadaardige code in Python-pakketten te bundelen.
Schadelijke test.py-module
De eerste techniek is het plaatsen van een “test”-module met licht versluierde code in het pakket. Figuur 2 toont een test.py bestand met een functie genaamd grijpen gedefinieerd en vervolgens aangeroepen. Merk op dat de functie zowel Windows- als Linux-systemen verwerkt.
Deze testmodule wordt geïmporteerd in het midden van de broncode van de hoofdmodule van het pakket (__init__.py), zodat de kwaadaardige code wordt uitgevoerd wanneer het pakket wordt geïmporteerd. Figuur 3 toont een module die zich voordoet als een screenshotter en de kwaadwillende importeert test.py.
PowerShell in setup.py
De tweede techniek is het insluiten van PowerShell-code in het setup.py bestand, dat doorgaans automatisch wordt uitgevoerd door pakketbeheerders zoals pit om Python-projecten te helpen installeren.
Figuur 4 toont een PowerShell-script dat de volgende fase downloadt en uitvoert.
Dit PowerShell-script wordt gedownload overdracht[.]sh/eyRyPT/Updater.zip naar een tijdelijke map als update.zip. Het script decomprimeert vervolgens het ZIP-bestand in C: ProgramData en verwijdert het uit de tijdelijke map. Vervolgens voert het script de pit programma om afhankelijkheden te installeren. Ten slotte voert het de Python-code uit C: ProgramDataUpdaterserver.pyw.
Deze techniek werkt alleen op Windows en zal Linux-systemen niet besmetten.
In de pakketmetadata uit Figuur 4 is het je misschien opgevallen dat de auteur van het pakket dat is billythegoat356. Er zijn talloze rapporten geweest die deze bijnaam in verband brachten met kwaadaardige activiteiten, waaronder een artikel uit Phylum, waar ze Billy's potentiële link met W4SP Stealer onthullen.
Gewoon malware...
Bij de derde techniek doen de operators geen moeite om legitieme code in het pakket op te nemen, zodat alleen de kwaadaardige code aanwezig is, in een lichtelijk versluierde vorm. Figuur 5 toont twee stukjes kwaadaardige code voor Windows die in tijdelijke bestanden worden geschreven en vervolgens worden uitgevoerd pythonw.exe, dat wordt gebruikt in plaats van python.exe zodat de code wordt uitgevoerd zonder een consolevenster te openen.
De volgende fasen zijn Python-pakketten, scripts of binaire bestanden die worden gedownload van Dropbox of transfer.sh.
Volharding
Op Windows wordt persistentie meestal bereikt via een VBScript-gecodeerd (VBE)-bestand, een gecodeerd VBScript-bestand waarnaar wordt geschreven %APPDATA%/Pythonenv/pythenenv.vbe. Figuur 6 laat zien cmd.exe het verbergen van de map %APPDATA%/Pythonenv, Actief pythenenv.vbeen vervolgens plannen dat het VBE-bestand elke vijf minuten onder de taak wordt uitgevoerd MicrosoftWinRaRUtilityTaskB.
Op Linux wordt persistentie bereikt door een kwaadaardig bestand te plaatsen bureaubladinvoer, mate-user-share.desktop, in de ~ / .config / autostart / map, zoals te zien in Figuur 7. Bestanden die zich in de automatische start directory worden uitgevoerd bij elke systeemopstart. Het bureaubladitem gebruikt de naam van a MATE subproject vanwege de bestandsnaam, maar het is alleen bedoeld om de verdenking te verminderen, omdat het niets te maken heeft met de desktopomgeving.
Figuur 7 toont ook de moduledownloads dl.dropbox[.]com/s/u3yn2g7rewly4nc/proclean naar ~/.config/.kde/.kdepath. Dit is waarschijnlijk een poging om een configuratiemap voor de KDE Plasma-GUI voor Linux.
Lancering van de mate-user-share.desktop bestand voert op zijn beurt het gedownloade bestand uit .kdepad bestand, het uitvoerbare Linux-bestand dat de achterdeurcomponent bevat.
Laatste lading
Meestal is de uiteindelijke payload een aangepaste achterdeur die het uitvoeren van opdrachten op afstand, het exfiltreren van bestanden mogelijk maakt en soms de mogelijkheid biedt om schermafbeeldingen te maken. Op Windows is de backdoor geïmplementeerd in Python.
Figuur 8 toont de achterdeur waarmee een TCP-socketverbinding wordt gemaakt blazywound.ignorelist[.]com op poort 6001. Na het verzenden van de hostnaam, het MAC-adres en de gebruikersnaam naar de C&C-server, zal de achterdeur direct enkele opdrachten afhandelen of een ander commando in een afzonderlijk proces uitvoeren en de opdrachtuitvoer en eventuele foutinformatie terugsturen naar de server.
Op Linux is de achterdeur geïmplementeerd in Go; zie Figuur 9.
In sommige gevallen is de lading in plaats van de achterdeur een variant van de beruchte W4SP-stealer, of een eenvoudige klembordmonitor die cryptocurrency steelt, of beide. Figuur 10 toont een klembordmonitor die zich richt op de cryptocurrencies Bitcoin, Ethereum, Monero en Litecoin. De malware maakt gebruik van de legitieme pyperclip pakket om de inhoud van het klembord te controleren op portemonnee-adressen. Indien gevonden, kopieert de malware een door de aanvaller gecontroleerd adres naar het klembord in de hoop dat het slachtoffer dit adres in plaats daarvan plakt in een toekomstige cryptocurrency-transactie.
ESET-producten detecteren de kwaadaardige Python-pakketten als varianten van Python/Agent en Python/TrojanDownloader, en de achterdeur als Python/Agent.AOY of Linux/Spy.Agent.BB.
De meeste pakketten waren ten tijde van dit onderzoek al door PyPI verwijderd. ESET communiceerde met PyPI om actie te ondernemen tegen de overgebleven pakketten en alle bekende kwaadaardige pakketten zijn nu offline. De volledige lijst met 116 pakketten vindt u in onze GitHub-repository.
Het is vermeldenswaard dat malware in een PyPI-projectrepository geen beveiligingsprobleem is met PyPI zelf. In feite was de software waarop PyPI draaide dat wel onlangs gecontroleerd door een extern bedrijf dat oordeelde dat PyPl “voldeed aan algemeen aanvaarde best practices”.
Conclusie
PyPI wordt nog steeds misbruikt door cyberaanvallers om de apparaten van Python-programmeurs in gevaar te brengen. Deze campagne toont een verscheidenheid aan technieken die worden gebruikt om malware in Python-pakketten op te nemen. Python-ontwikkelaars moeten de code die ze downloaden grondig onderzoeken, vooral op deze technieken letten. vaardigheden installeren op hun systemen. Naast het misbruik van de open-source W4SP Stealer, hebben de operators ook een eenvoudige, maar effectieve achterdeur ingezet. We verwachten dat dergelijk misbruik van PyPI zal voortduren en adviseren voorzichtigheid bij het installeren van code uit een openbare softwareopslagplaats.
Neem voor vragen over ons onderzoek gepubliceerd op WeLiveSecurity contact met ons op via: bedreigingintel@eset.com.
ESET Research biedt privé APT-inlichtingenrapporten en datafeeds. Voor vragen over deze service kunt u terecht op de ESET-bedreigingsinformatie pagina.
IoC's
Bestanden
SHA-1 |
Bestandsnaam |
Opsporing |
Omschrijving |
439A5F553E4EE15EDCA1CFB77B96B02C77C5C388 |
cache.py |
Python/Agent.AGL |
Linux backdoor-downloader.. |
B94E493579CC1B7864C70FAFB43E15D2ED14A16B |
coloramma-0.5.4-py3-none-any.whl |
Python/Agent.AGU |
Pakket met Linux backdoor-installatieprogramma. |
AE3072A72F8C54596DCBCDE9CFE74A4146A4EF52 |
coloramma-4.5-py3-none-any.zip |
Python/Agent.AOY |
Pakket met Windows-achterdeur. |
70C271F79837B8CC42BD456A22EC51D1261ED0CA |
junk.py |
Python/Agent.AGM |
Windows persistentie-installatieprogramma. |
B0C8D6BEEE80813C8181F3038E42ADACC3848E68 |
proschoon |
Linux/Spy.Agent.BB |
Linux-achterdeur. |
07204BA8D39B20F5FCDB9C0242B112FADFFA1BB4 |
prov.py |
Python/Agent.AGL |
Linux backdoor-downloader. |
EF59C159D3FD668C3963E5ADE3C726B8771E6F54 |
tmp |
Linux/Spy.Agent.BB |
Linux-achterdeur. |
Zie onze GitHub voor een volledige lijst met kwaadaardige pakketten malware-ioc-opslagplaats.
Netwerk
Domeinnaam |
IP-adres |
Eerst gezien |
Omschrijving |
blazywound.ignorelist[.]com |
204.152.203[.]78 |
2022-11-21 |
C&C-server voor backdoor-component. |
MITRE ATT&CK-technieken
Deze tafel is gemaakt met behulp van versie 14 van het MITRE ATT&CK-raamwerk.
Tactiek |
ID |
Naam |
Omschrijving |
Eerste toegang |
Compromis van de toeleveringsketen: compromissen tussen softwareafhankelijkheden en ontwikkelingstools |
Malware wordt verspreid via de PyPl-pakketbeheerservice van Python. |
|
Volharding |
Geplande taak/taak: geplande taak |
In Windows wordt persistentie bereikt met behulp van een geplande taak. |
|
Autostart-uitvoering bij opstarten of aanmelden: XDG Autostart-invoer |
Op Linux wordt een autostart-item gemaakt om de achterdeur te starten wanneer de gebruiker inlogt. |
||
verdediging ontduiking |
Maskerade: match legitieme naam of locatie |
Op Linux hebben persistente bestanden namen die lijken op legitieme software |
|
Toegang tot inloggegevens |
Inloggegevens uit wachtwoordopslag: inloggegevens uit webbrowsers |
W4SP steelt wachtwoorden van de geïnstalleerde webbrowsers. |
|
Collectie |
Klembordgegevens |
Om geld te stelen tijdens een cryptocurrency-transactie worden klembordgegevens vervangen. |
|
Command and Control |
Niet-toepassingslaagprotocol |
De achterdeur maakt gebruik van een niet-gecodeerd binair protocol via TCP. |
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoData.Network Verticale generatieve AI. Versterk jezelf. Toegang hier.
- PlatoAiStream. Web3-intelligentie. Kennis versterkt. Toegang hier.
- PlatoESG. carbon, CleanTech, Energie, Milieu, Zonne, Afvalbeheer. Toegang hier.
- Plato Gezondheid. Intelligentie op het gebied van biotech en klinische proeven. Toegang hier.
- Bron: https://www.welivesecurity.com/en/eset-research/pernicious-potpourri-python-packages-pypi/
- : heeft
- :is
- :waar
- 000
- 1
- 10
- 116
- 14
- 152
- 2023
- 7
- 8
- 80
- 9
- a
- vermogen
- in staat
- Over
- misbruik
- aanvaard
- bereikt
- Actie
- activiteiten
- adres
- adressen
- adviseren
- Na
- tegen
- Agent
- Alles
- toestaat
- al
- ook
- onder
- an
- en
- Nog een
- elke
- iedereen
- verschijnen
- APT
- ZIJN
- AS
- geëvalueerd
- At
- auteur
- webmaster.
- Beschikbaar
- terug
- achterdeur
- BE
- omdat
- geweest
- achter
- wezen
- geloofd wie en wat je bent
- BEST
- Bitcoin
- zowel
- browsers
- bebouwd
- Bundel
- maar
- by
- Dit betekent dat we onszelf en onze geliefden praktisch vergiftigen.
- Campagne
- Campagnes
- CAN
- in staat
- gevallen
- voorzichtigheid
- keten
- controle
- controleren
- schoon
- TROS
- code
- COM
- gecommuniceerd
- gecompileerd
- bestanddeel
- compromis
- Configuratie
- versterken
- troosten
- contact
- bevatten
- bevat
- content
- voortzetten
- blijft
- voortgezette
- bijdragen
- aangemaakt
- Wij creëren
- Geloofsbrieven
- cryptocurrencies
- cryptogeld
- gewoonte
- gegevens
- dag
- gedefinieerd
- geleverd
- levert
- afhankelijkheden
- ingezet
- desktop
- opsporen
- ontwikkelaars
- Ontwikkeling
- systemen
- anders
- direct
- ontdekt
- displays
- verdeeld
- distributie
- Uitkeringen
- do
- beneden
- Download
- downloaden
- downloads
- dropbox
- gedurende
- elk
- effectief
- inspanning
- beide
- insluiten
- ingebed
- Engineering
- toegang
- Milieu
- fout
- vooral
- ethereum
- Alle
- uitgevoerd
- Voert uit
- uitvoering
- exfiltratie
- verwachten
- uitdrukkelijk
- extern
- feit
- FAIL
- gunsten
- Figuur
- Dien in
- Bestanden
- finale
- Tot slot
- Stevig
- Voornaam*
- vijf
- Voor
- formulier
- Voormalig
- formulieren
- gevonden
- Achtergrond
- oppompen van
- vol
- functie
- fondsen
- toekomst
- GitHub
- Go
- handvat
- Handvaten
- Hebben
- hulp
- hoop
- HTTPS
- if
- beeld
- uitvoering
- geïmplementeerd
- importeren
- invoer
- in
- omvatten
- omvat
- Inclusief
- berucht
- informatie
- vragen
- binnen
- installeren
- installatie
- geïnstalleerd
- installeren
- verkrijgen in plaats daarvan
- Intelligentie
- in
- kwestie
- IT
- HAAR
- zelf
- bekend
- taal
- lancering
- lagen
- rechtmatig
- minder
- bibliotheken
- licht
- LINK
- linux
- Lijst
- Litecoin
- gelegen
- Kijk
- Mac
- Hoofd
- maken
- malware
- management
- manager
- Managers
- Match
- Mei..
- Medium
- Metadata
- Midden
- minuten
- Module
- Modules
- Monero
- monitor
- meer
- meest
- naam
- namen
- volgende
- geen
- niets
- Merk op..
- opmerkend
- nu
- vele
- of
- Aanbod
- officieel
- offline
- on
- EEN
- degenen
- Slechts
- open source
- opening
- werkzaam
- besturingssysteem
- exploitanten
- or
- Overige
- anders-
- onze
- uitgang
- over
- pakket
- Paketten
- pagina
- Wachtwoord
- wachtwoorden
- verleden
- voor
- volharding
- stukken
- plaats
- plaatsing
- Plasma
- Plato
- Plato gegevensintelligentie
- PlatoData
- dan
- punten
- Populair
- potentieel
- PowerShell
- presenteren
- privaat
- waarschijnlijk
- Producten
- Programmeurs
- Programming
- project
- projecten
- protocol
- publiek
- gepubliceerde
- PYPL
- Python
- tarief
- liever
- reden
- verminderen
- resterende
- vanop
- vervangen
- Rapporten
- bewaarplaats
- onderzoek
- resultaat
- onthullen
- lopen
- lopend
- loopt
- gepland
- scheduling
- screenshots
- script
- scripts
- Tweede
- veiligheid
- zien
- gezien
- sturen
- verzending
- apart
- server
- service
- setup
- delen
- moet
- Shows
- gelijk
- Eenvoudig
- sinds
- So
- Social
- Social engineering
- Software
- sommige
- soms
- bron
- broncode
- specifiek
- Stadium
- stadia
- startup
- steals
- winkels
- dergelijk
- system
- Systems
- tafel
- Nemen
- ingenomen
- het nemen
- targeting
- doelen
- Taak
- techniek
- technieken
- tijdelijk
- proef
- neem contact
- dat
- De
- De Bron
- hun
- harte
- Er.
- Deze
- ze
- Derde
- dit
- grondig
- bedreiging
- drie
- Door
- niet de tijd of
- keer
- naar
- transactie
- BEURT
- twee
- typisch
- voor
- geüpload
- op
- us
- .
- gebruikt
- Gebruiker
- toepassingen
- gebruik
- doorgaans
- Variant
- variëteit
- versie
- VET
- via
- Slachtoffer
- slachtoffers
- Bezoek
- wandelde
- Portemonnee
- was
- Manier..
- we
- web
- web browsers
- GOED
- waren
- wat
- Wiel
- wanneer
- telkens als
- welke
- en
- wijd
- Breedte
- wil
- venster
- ruiten
- Met
- zonder
- Bedrijven
- waard
- geschreven
- jaar
- You
- zephyrnet
- Postcode