ESET Research a descoperit un grup de proiecte Python rău intenționate în care sunt distribuite PyPI, depozitul oficial de pachete Python. Amenințarea vizează atât sistemele Windows, cât și Linux și, de obicei, oferă o ușă în spate personalizată. În unele cazuri, sarcina utilă finală este o variantă a infamului W4SP Stealer, sau un simplu monitor clipboard pentru a fura criptomonede, sau ambele. În mai 2023, noi raportate pe un alt grup de pachete pe care l-am găsit pe PyPI, care oferă programe malware care fură parole și criptomonede, dar cele două grupuri par a fi campanii diferite.
Puncte cheie ale acestei postări pe blog:
- ESET Research a descoperit 116 pachete rău intenționate în PyPI, depozitul oficial de software pentru limbajul de programare Python, încărcat în 53 de proiecte.
- Victimele au descărcat aceste pachete de peste 10,000 de ori.
- Din mai 2023, rata de descărcare este mai mult sau mai puțin de 80 pe zi.
- Malware-ul oferă o ușă din spate capabilă să execute comenzi de la distanță, să exfiltreze și să facă capturi de ecran.
- Componenta backdoor este implementată atât pentru Windows, în Python, cât și pentru Linux, în Go.
- În unele cazuri, este livrat W4SP Stealer sau un monitor clipboard care fură criptomonede, sau ambele.
PyPI este popular printre programatorii Python pentru partajarea și descărcarea codului. Deoarece oricine poate contribui la depozit, programele malware – uneori prezentându-se drept biblioteci de coduri legitime și populare – pot apărea acolo. Am găsit 116 fișiere (distribuții sursă și roți) din 53 de proiecte care conțin malware. Unele nume de pachete arată similar cu alte pachete legitime, dar credem că principalul mod în care sunt instalate de către potențiale victime nu este prin typosquatting, ci prin inginerie socială, în care victimele sunt ghidate prin rulare. pip install {nume-pachet} pentru a putea folosi pachetul „interesant” din orice motiv.
În ultimul an, victimele au descărcat aceste fișiere de peste 10,000 de ori; vezi Figura 1.
Infestarea PyPI
Pachetele PyPI pot lua două forme: pachete sursă, care conțin tot codul sursă al proiectului și sunt construite la instalare și pachete preconstruite (numite roţi), care poate conține module compilate pentru un anumit sistem de operare sau versiune Python. Interesant este că, în unele cazuri, codul Python din distribuția sursă diferă de distribuția construită. Primul este curat, în timp ce al doilea conține codul rău intenționat. Managerul de pachete Python, țâfnă, preferă o roată atunci când este disponibilă, mai degrabă decât o distribuție sursă. Drept urmare, cel rău intenționat este instalat, dacă nu se solicită în mod explicit altfel.
Am observat operatorii din spatele acestei campanii folosind trei tehnici pentru a include cod rău intenționat în pachetele Python.
Modulul test.py rău intenționat
Prima tehnică este de a plasa un modul de „test” cu cod ușor obscurcat în interiorul pachetului. Figura 2 prezintă a test.py fișier cu o funcție numită graby fiind definite şi apoi numite. Observați că funcția se ocupă de sistemele Windows și Linux.
Acest modul de testare este importat în mijlocul codului sursă al modulului principal al pachetului (__init__.py), astfel încât codul rău intenționat să ruleze ori de câte ori pachetul este importat. Figura 3 arată un modul care se mascadă ca un screenshotter și importă răul test.py.
PowerShell în setup.py
A doua tehnică este să încorporați codul PowerShell în fișierul setup.py fișier, care este de obicei rulat automat de managerii de pachete, cum ar fi țâfnă pentru a ajuta la instalarea proiectelor Python.
Figura 4 prezintă un script PowerShell care descarcă și execută etapa următoare.
Acest script PowerShell se descarcă transfer[.]sh/eyRyPT/Updater.zip într-un director temporar ca update.zip. Scriptul decomprimă apoi fișierul ZIP în C: ProgramData și îl șterge din directorul temporar. Apoi, scriptul rulează țâfnă program pentru a instala dependențe. În cele din urmă, rulează codul Python C:ProgramDataUpdaterserver.pyw.
Această tehnică funcționează numai pe Windows și nu va infesta sistemele Linux.
În metadatele pachetului din Figura 4, este posibil să fi observat că autorul pachetului este billythegoat356. Au existat numeroase rapoarte care asociază această poreclă cu activități rău intenționate, inclusiv un articol din Phylum, unde dezvăluie potențiala legătură a lui Billy cu W4SP Stealer.
Doar malware...
În cea de-a treia tehnică, operatorii nu fac nici un efort să includă cod legitim în pachet, astfel încât să fie prezent doar codul rău intenționat, într-o formă ușor ofuscată. Figura 5 arată două bucăți de cod rău intenționat pentru Windows care sunt scrise în fișiere temporare și apoi rulate cu pythonw.exe, care este folosit în loc de python.exe astfel încât codul să se execute fără a deschide o fereastră de consolă.
Următoarele etape sunt pachetele Python, scripturile sau fișierele binare descărcate fie din Dropbox, fie transfer.sh.
Persistență
Pe Windows, persistența este obținută de cele mai multe ori prin a Cod VBScript (VBE), care este un fișier VBScript codificat, scris în %APPDATA%/Pythonenv/pythenenv.vbe. Figura 6 arată cmd.exe ascunderea directorului %APPDATA%/Pythonenv, alergare pythenenv.vbe, și apoi programarea fișierului VBE să fie rulat la fiecare cinci minute în cadrul sarcinii MicrosoftWinRaRUtilityTaskB.
Pe Linux, persistența se obține prin plasarea unui malware intrare pe desktop, mate-user-share.desktop, În ~ / .config / autostart / director, așa cum se vede în Figura 7. Fișierele aflate în autostart directorul sunt executate la fiecare pornire a sistemului. Intrarea pe desktop folosește numele a MATE subproiect pentru numele său de fișier, dar este doar pentru a reduce suspiciunea pentru că nu are nimic de-a face cu mediul desktop.
Figura 7 arată, de asemenea, descărcările modulelor dl.dropbox[.]com/s/u3yn2g7rewly4nc/proclean la ~/.config/.kde/.kdepath. Acesta este probabil un efort de a uzurpa identitatea unui director de configurare pentru KDE Plasma GUI pentru Linux.
Lansarea mate-user-share.desktop fișierul la rândul său execută fișierul descărcat .kdepath fișier, care este fișierul executabil Linux care conține componenta backdoor.
Sarcina utilă finală
De obicei, sarcina utilă finală este o ușă din spate personalizată care permite executarea comenzilor de la distanță, exfiltrarea fișierelor și, uneori, include capacitatea de a face capturi de ecran. Pe Windows, ușa din spate este implementată în Python.
Figura 8 arată ușa din spate care creează o conexiune la socket TCP blazywound.ignorelist[.]com pe portul 6001. După ce a trimis numele de gazdă, adresa MAC și numele de utilizator către serverul C&C, ușa din spate va gestiona direct unele comenzi sau va rula orice altă comandă într-un proces separat și va trimite înapoi ieșirea comenzii și orice informații despre eroare către server.
Pe Linux, ușa din spate este implementată în Go; vezi Figura 9.
În unele cazuri, în loc de ușa din spate, sarcina utilă este o variantă a infamului W4SP Stealer, sau un simplu monitor clipboard care fură criptomonede, sau ambele. Figura 10 prezintă un monitor clipboard care vizează criptomonedele Bitcoin, Ethereum, Monero și Litecoin. Malware-ul folosește legitimitatea pyperclip pachet pentru a verifica conținutul clipboard-ului pentru adresele portofelului. Dacă este găsit, malware-ul copiază o adresă controlată de atacator în clipboard, în speranța că victima va lipi această adresă într-o viitoare tranzacție cu criptomonede.
Produsele ESET detectează pachetele Python rău intenționate ca variante ale Python/Agent și Python/TrojanDownloader, iar ușa din spate ca Python/Agent.AOY sau Linux/Spy.Agent.BB.
Majoritatea pachetelor au fost deja eliminate de PyPI la momentul acestei cercetări. ESET a comunicat cu PyPI pentru a lua măsuri împotriva celor rămase, iar toate pachetele rău intenționate cunoscute sunt acum offline. Lista completă a 116 pachete poate fi găsită în nostru GitHub depozit.
Merită remarcat faptul că programele malware dintr-un depozit de proiect PyPI nu reprezintă o problemă de securitate cu PyPI în sine. De fapt, software-ul care rulează PyPI a fost auditat recent de către o firmă externă care a evaluat că PyPl „conform celor mai bune practici larg acceptate”.
Concluzie
PyPI continuă să fie abuzat de atacatorii cibernetici pentru a compromite dispozitivele programatorilor Python. Această campanie afișează o varietate de tehnici folosite pentru a include malware în pachetele Python. Dezvoltatorii Python ar trebui să verifice cu atenție codul pe care îl descarcă, în special verificând aceste tehnici, înainte instalându-l pe sistemele lor. Pe lângă faptul că au continuat să abuzeze de W4SP Stealer cu sursă deschisă, operatorii au implementat și o ușă din spate simplă, dar eficientă. Ne așteptăm ca un astfel de abuz de PyPI să continue și vă sfătuim prudență atunci când instalați cod din orice depozit public de software.
Pentru orice întrebări despre cercetarea noastră publicată pe WeLiveSecurity, vă rugăm să ne contactați la threatintel@eset.com.
ESET Research oferă rapoarte private de informații APT și fluxuri de date. Pentru orice întrebări despre acest serviciu, vizitați ESET Threat Intelligence .
IoC-uri
Fişiere
SHA-1 |
Filename |
Detectare |
Descriere |
439A5F553E4EE15EDCA1CFB77B96B02C77C5C388 |
cache.py |
Python/Agent.AGL |
Descărcător Linux backdoor.. |
B94E493579CC1B7864C70FAFB43E15D2ED14A16B |
coloramma-0.5.4-py3-none-any.whl |
Python/Agent.AGU |
Pachet cu instalator Linux backdoor. |
AE3072A72F8C54596DCBCDE9CFE74A4146A4EF52 |
coloramma-4.5-py3-none-any.zip |
Python/Agent.AOY |
Pachet cu ușă din spate Windows. |
70C271F79837B8CC42BD456A22EC51D1261ED0CA |
junk.py |
Python/Agent.AGM |
Instalator de persistență Windows. |
B0C8D6BEEE80813C8181F3038E42ADACC3848E68 |
proclean |
Linux/Spy.Agent.BB |
Ușa din spate Linux. |
07204BA8D39B20F5FCDB9C0242B112FADFFA1BB4 |
prov.py |
Python/Agent.AGL |
Descărcător Linux backdoor. |
EF59C159D3FD668C3963E5ADE3C726B8771E6F54 |
tmp |
Linux/Spy.Agent.BB |
Ușa din spate Linux. |
Pentru o listă completă a pachetelor rău intenționate, consultați GitHub-ul nostru depozitul de malware-ioc.
Reţea
Numele domeniului |
Adresa IP |
Văzut pentru prima dată |
Descriere |
blazywound.ignorelist[.]com |
204.152.203[.]78 |
2022-11-21 |
Server C&C pentru componenta backdoor. |
Tehnici MITRE ATT&CK
Acest tabel a fost construit folosind Versiunea 14 din cadrul MITRE ATT&CK.
tactică |
ID |
Nume si Prenume |
Descriere |
Acces inițial |
Compromis în lanțul de aprovizionare: compromite dependențe software și instrumente de dezvoltare |
Programele malware sunt distribuite folosind serviciul de gestionare a pachetelor PyPl de la Python. |
|
Persistență |
Sarcină/Job programat: Sarcină programată |
Pe Windows, persistența este obținută folosind o sarcină programată. |
|
Execuție de pornire automată de pornire sau de conectare: intrări XDG Autostart |
Pe Linux, este creată o intrare de pornire automată pentru a lansa ușa din spate atunci când utilizatorul se conectează. |
||
Evaziunea apărării |
Masquerading: potriviți numele sau locația legitimă |
Pe Linux, fișierele persistente au nume similare cu software-ul legitim |
|
Acces la acreditări |
Acreditări din magazinele de parole: acreditări din browsere web |
W4SP fură parolele din browserele web instalate. |
|
Colectie |
Date din clipboard |
Pentru a fura fonduri în timpul unei tranzacții cu criptomonede, datele din clipboard sunt înlocuite. |
|
Comandă și Control |
Protocol non-aplicație de nivel |
Ușa din spate folosește un protocol binar necriptat peste TCP. |
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- PlatoData.Network Vertical Generative Ai. Împuterniciți-vă. Accesați Aici.
- PlatoAiStream. Web3 Intelligence. Cunoștințe amplificate. Accesați Aici.
- PlatoESG. carbon, CleanTech, Energie, Mediu inconjurator, Solar, Managementul deșeurilor. Accesați Aici.
- PlatoHealth. Biotehnologie și Inteligență pentru studii clinice. Accesați Aici.
- Sursa: https://www.welivesecurity.com/en/eset-research/pernicious-potpourri-python-packages-pypi/
- :are
- :este
- :Unde
- 000
- 1
- 10
- 116
- 14
- 152
- 2023
- 7
- 8
- 80
- 9
- a
- capacitate
- Capabil
- Despre Noi
- abuz
- admis
- realizat
- Acțiune
- activităţi de
- adresa
- adrese
- sfătui
- După
- împotriva
- Agent
- TOATE
- permite
- deja
- de asemenea
- printre
- an
- și
- O alta
- Orice
- oricine
- apărea
- APT
- SUNT
- AS
- evaluat
- At
- autor
- în mod automat
- disponibil
- înapoi
- ușă din dos
- BE
- deoarece
- fost
- în spatele
- fiind
- Crede
- CEL MAI BUN
- Bitcoin
- atât
- browsere
- construit
- Pachet
- dar
- by
- denumit
- Campanie
- Campanii
- CAN
- capabil
- cazuri
- prudenţă
- lanţ
- verifica
- control
- curat
- Grup
- cod
- COM
- comunicate
- compilat
- component
- compromis
- Configuraţie
- conexiune
- Consoleze
- contactați-ne
- conţine
- conține
- conţinut
- continua
- continuă
- continuarea
- a contribui
- a creat
- Crearea
- scrisori de acreditare
- cryptocurrencies
- cryptocurrency
- personalizat
- de date
- zi
- definit
- livrate
- Oferă
- dependențe
- dislocate
- desktop
- detecta
- Dezvoltatorii
- Dezvoltare
- Dispozitive
- diferit
- direct
- a descoperit
- afișează
- distribuite
- distribuire
- distribuții
- do
- jos
- Descarca
- descărcarea
- download-uri
- dropbox
- în timpul
- fiecare
- Eficace
- efort
- oricare
- încastra
- încorporat
- Inginerie
- intrare
- Mediu inconjurator
- eroare
- mai ales
- ethereum
- Fiecare
- executat
- Executa
- execuție
- exfiltrațiile
- aștepta
- explicit
- extern
- fapt
- FAIL
- favoruri
- Figura
- Fișier
- Fişiere
- final
- În cele din urmă
- Firmă
- First
- cinci
- Pentru
- formă
- Fost
- formulare
- găsit
- Cadru
- din
- Complet
- funcţie
- Fondurile
- viitor
- GitHub
- Go
- manipula
- Mânere
- Avea
- ajutor
- speranţă
- HTTPS
- if
- imagine
- implementarea
- implementat
- importatoare
- importurile
- in
- include
- include
- Inclusiv
- infam
- informații
- Cereri
- în interiorul
- instala
- instalare
- instalat
- Instalarea
- in schimb
- Inteligență
- în
- problema
- IT
- ESTE
- în sine
- cunoscut
- limbă
- lansa
- strat
- legitim
- mai puțin
- biblioteci
- uşor
- LINK
- linux
- Listă
- Litecoin
- situat
- Uite
- mac
- Principal
- face
- malware
- administrare
- manager
- Manageri
- Meci
- Mai..
- mediu
- Metadata
- De mijloc
- minute
- Module
- Module
- Monero
- monitor
- mai mult
- cele mai multe
- nume
- nume
- următor
- Nu.
- nimic
- Înștiințare..
- observând
- acum
- numeroși
- of
- promoții
- oficial
- Offline
- on
- ONE
- cele
- afară
- open-source
- de deschidere
- de operare
- sistem de operare
- Operatorii
- or
- Altele
- in caz contrar
- al nostru
- producție
- peste
- pachet
- ofertele
- pagină
- Parolă
- Parolele
- trecut
- pentru
- persistență
- piese
- Loc
- plasare
- Plasma
- Plato
- Informații despre date Platon
- PlatoData
- "vă rog"
- puncte
- Popular
- potenţial
- PowerShell
- prezenta
- privat
- probabil
- proces
- Produse
- Programatorii
- Programare
- proiect
- Proiecte
- protocol
- public
- publicat
- PYPL
- Piton
- rată
- mai degraba
- motiv
- reduce
- rămas
- la distanta
- înlocuiește
- Rapoarte
- depozit
- cercetare
- rezultat
- dezvălui
- Alerga
- funcţionare
- ruleaza
- programată
- programare
- capturi de ecran
- scenariu
- script-uri
- Al doilea
- securitate
- vedea
- văzut
- trimite
- trimitere
- distinct
- serverul
- serviciu
- configurarea
- partajarea
- să
- Emisiuni
- asemănător
- simplu
- întrucât
- So
- Social
- Inginerie sociala
- Software
- unele
- uneori
- Sursă
- cod sursă
- specific
- Etapă
- Stadiile
- lansare
- fură
- magazine
- astfel de
- sistem
- sisteme
- tabel
- Lua
- luate
- luare
- direcționare
- obiective
- Sarcină
- tehnică
- tehnici de
- temporar
- test
- decât
- acea
- Sursa
- lor
- apoi
- Acolo.
- Acestea
- ei
- Al treilea
- acest
- complet
- amenințare
- trei
- Prin
- timp
- ori
- la
- tranzacție
- ÎNTORCĂ
- Două
- tipic
- în
- încărcat
- pe
- us
- utilizare
- utilizat
- Utilizator
- utilizări
- folosind
- obișnuit
- Variantă
- varietate
- versiune
- VET
- de
- Victimă
- victime
- Vizita
- umblat
- Portofel
- a fost
- Cale..
- we
- web
- Browsere web
- BINE
- au fost
- indiferent de
- Roată
- cand
- oricând
- care
- în timp ce
- pe larg
- lățime
- voi
- fereastră
- ferestre
- cu
- fără
- fabrică
- valoare
- scris
- an
- Tu
- zephyrnet
- Zip