„Xygeni“ neseniai pastebėjo nerimą keliantį programinės įrangos tiekimo grandinės atakų modelį 2025 m., atsirandantis dviejuose populiariuose paketų tvarkytuvuose: PyPI bei npmKaip mūsų nuolatinių grėsmių žvalgybos pastangų dalis,„Xygeni“ kenkėjiškų programų ankstyvojo įspėjimo sistema (MEW) įrankis nustatė atskirą, bet metodologiškai panašų kenkėjiško paketo, anksčiau įkelto į kitą registrą, atvejį. Šis atvejis parodo, kaip grėsmių kūrėjai vystosi ir pakartotinai naudoja atakų metodus įvairiose ekosistemose, ypač per kenkėjiški Python paketai bei kenkėjiški npm paketai, o tai padidina kenkėjiškų paketų infiltracijos į atvirojo kodo tiekimo grandines riziką.
Xygeni MEW: panašumų paieška
„Xygeni“ MEW įrankis sukurtas kenkėjiškiems paketams, ypač susijusiems su programinės įrangos tiekimo grandinės atakomis 2025 m., aptikti ir pažymėti, kai tik jie paskelbiami atvirojo kodo registruose. Jis veikia analizuodamas naujus paketus, ieškodamas įtartino elgesio.
Šiuo atveju jis nustatė du kenkėjiški Python paketai (graphalgo PyPI platformoje) ir kenkėjiški npm paketai (express-cookie-parser (npm).
Kenkėjiški „Python“ ir „npm“ paketai programinės įrangos tiekimo grandinės atakose (2025 m.)
Panagrinėkime bendras charakteristikas, kurios suaktyvino mūsų įspėjimus:
Raštu rašoma
Jie abu bandė apsimesti populiariais esamais paketais.
- grafalgo (PyPI): "Python paketas grafų ir tinklų kūrimui ir manipuliavimui.„Įkėlė vartotojas, vardu“ „larrytech“ 2025 m. birželio 13 d. šis paketas pristatė save kaip PyPi alternatyvą originaliam ne kenkėjiškam „graphalgo“ projektui, kuris vėliau buvo pervadintas į „graphdict“.
- greitasis slapukų analizatorius (npm)Šis paketas imitavo gerai žinomą „cookie-parser“ paketą, netgi atspindėdamas jo README.md. Toks apsimetinėjimas yra klasikinė taktika, siekiant pasinaudoti esamu pasitikėjimu.
Obfuskacija kaip pirmoji gynybos linija
Abu paketai užmaskavo kenkėjišką kodą originaliuose failuose. grafalgo, užmaskuotas kodas buvo rastas viduje /utils/load_libraries.py. Jeigu greitasis slapukų analizatorius, cookie-loader.min.js buvo užmaskuotas naudingasis krovinys.
Šis pradinis kodavimo sluoksnis paprastai naudojamas siekiant apsunkinti atsitiktinę apžiūrą ir statinę analizę. Kodavimas buvo gana paprastas: pakartotinis ZLib glaudinimas ir Base64 kodavimas. Šis kodavimo tipas aiškiai rodo, kad programinė įranga bando nuslėpti savo elgesį. Kartu su kitais įrodymais tai leido „Xygeni MEW“ klasifikuoti paketus kaip potencialią kenkėjišką programą. Patvirtinimo etape mūsų recenzentai greitai parengė dekofukavimo scenarijų, kuris atskleidė akivaizdžiai kenkėjišką „dropper“ etapą.
Daugiapakopis naudingojo krovinio pristatymas ir bendras kilmės taškas
Abu paketai veikė kaip pradiniai „lašintuvai„,“ paruošdamas dirvą tikrajai naudingajai apkrovai. Jie turėjo bendrą išorinį „sėklos„Failo URL:“https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
Šis identiškas išorinis pradinis failas yra aiškus bendro grėsmės veikėjo požymis. Įdomu tai, kad šio pradinio failo turinys atrodo esąs paprasti aplinkos kintamieji (pvz., JWT_SECRET, PORT), kurie gali klaidinti patikrinimą dėl jo tikrosios funkcijos.
Dinaminė C2 skiriamoji geba su DGA
Šiuose kenkėjiškuose paketuose pastebėta sudėtinga taktika – domeno generavimo algoritmo (DGA) naudojimas dinamiškai išspręsti komandų ir valdymo (C2) serverį. Ši technika, dažnai naudojama pažangiose programinės įrangos tiekimo grandinės atakose 2025 m., remiasi SHA256 maišos kodu, gautu iš pradinio failo turinio, kartu su kitomis užkoduotomis reikšmėmis. Dėl to C2 infrastruktūra dažnai keičiasi, todėl tradicinis juodasis sąrašas tampa daug mažiau efektyvus. Šiuo atveju npm variante buvo naudojama fiksuota reikšmė 496AAC7E kaip savo DGA logikos dalis.
Atkaklumo nustatymas
Abu užpuolikai siekė ilgalaikio įsitvirtinimo paveiktose sistemose. Jų strategija apėmė failo išmetimą, startup.py (skirta „PyPi“) arba startup.js (skirta npm) į įprastus „Google Chrome“ naudotojų duomenų katalogus įvairiose operacinėse sistemose („Windows“, „Linux“, „macOS“).
Po vykdymo valymas
Siekdami sumažinti pėdsakų skaičių, abu kenkėjiški scenarijai atliko valymo operacijas. Tai apėmė pradinių „dropper“ failų ištrynimą (load_libraries.py, cookie-loader.min.js) ir modifikuojant teisėtus paketų failus (__init__.py, index.js), kad pašalintumėte nuorodas į dabar ištrintus komponentus.
Kenkėjiškų „Python“ ir „npm“ paketų pažeidimo rodikliai
- PyPI paketas„graphalgo“ (paskelbė „larrytech“, 2025 m. birželio 13 d.)
- npm paketas: „express-cookie-parser“ (konkrečiai 1.4.12 versija)
- Prieiga prie bendrinamo pradinio URL:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- Nuolatiniai failų vardai:
startup.py(Python)startup.js(JavaScript) - Bendri nuolatiniai keliai (priklausomai nuo OS)„Google Chrome“ naudotojų duomenų kataloguose (pvz.,
AppData\Local\Google\Chrome\UserData\Scripts\sistemoje „Windows“,~/.config/google-chrome/Scripts/„Linux“ ir kt.).
Kaip apsiginti nuo kenkėjiškų paketų programinės įrangos tiekimo grandinės atakose 2025 m.
Rekomenduojamas kūrėjų metodas
Šis incidentas yra vertingas atvejo tyrimas, atsižvelgiant į besikeičiantį programinės įrangos tiekimo grandinės atakų grėsmių kraštovaizdį 2025 m. Jis pabrėžia, kaip kenkėjiški „Python“ ir kenkėjiški „npm“ paketai gali prasiskverbti į patikimas ekosistemas, dažnai išvengdami aptikimo, kol jau per vėlu. Štai kodėl ankstyvas aptikimas, išmanūs įrankiai ir aktyvi sistemos higiena dabar yra esminės bet kurio saugaus „DevOps“ darbo eigos dalys. Programuotojams rekomenduojama atsižvelgti į šiuos dalykus:
Priklausomybių apžvalga
Jei jūsų projektuose buvo grafalgo or greitasis slapukų analizatorius, būtų protinga tęsti jų pašalinimo procesą.
- PyPI atveju:
pip uninstall graphalgo - Npm atveju:
npm uninstall express-cookie-parser
Sistemos higiena
Apsvarstykite galimybę atlikti išsamų sistemos nuskaitymą. Taip pat patartina rankiniu būdu patikrinti įprastus „Chrome“ naudotojų duomenų katalogų kelius, ar nėra kokių nors netikėtų klaidų. startup.py or startup.js failai.
Aktyvios saugumo priemonės
- Įvertinkite naujas priklausomybesNustatykite įprotį kruopščiai įvertinti naujus paketus prieš integraciją, daugiausia dėmesio skiriant nepažįstamų leidėjų paketams.
- Integruoti saugos įrankiusĮrankiai, tokie kaip „Xygeni“ MEW, kartu su kitais programinės įrangos sudėties analizės įrankiais (SCA) sprendimai gali suteikti svarbų gynybos lygmenį, nustatant įtartiną elgesį ir pažeidžiamumus.
- Mažiausia privilegijaKūrimo aplinkų valdymas taikant mažiausių privilegijų principą gali padėti apriboti galimą kompromitavimo poveikį.
- Tinklo žinomumasIšeinančio tinklo srauto stebėjimas ieškant neįprastų ryšių kartais gali atskleisti DGA sugeneruotus C2 ryšius.
Pagrindiniai komponentai load_libraries.py (iš „graphalgo“)
download_remote_content(): Tvarko failų gavimą iš nurodytų URL.run_process(): Vykdo išorinius „Python“ scenarijus atskirai, slopindamas išvestį, kad liktų diskretiškas.get_output_file_path(): Nustato idealią sistemos vietą nuolatiniam startup.py failui.remove_self(): Organizuoja pradinių kenkėjiškų failų ir paketo modifikacijų valymą po vykdymo.simple_shift_encrypt()/simple_shift_decrypt(): Individualiai pritaikytos kriptografinės funkcijos ryšio kanalams užmaskuoti, labai svarbios DGA įgyvendinimui.load_libraries()Centrinė funkcija, koordinuojanti visą daugiapakopį procesą – nuo pradinio atsisiuntimo iki galutinio naudingosios apkrovos vykdymo ir valymo.
Atolas
Kaip ir kitų MEW nustatytų potencialiai kenkėjiškų paketų atveju, priklausomybių užkarda nedelsdama apsaugojo vartotojus, kurie įtrauktų šiuos kenkėjiškus paketus į savo priklausomybes. Patvirtinus, vadovavomės abiejų registrų pranešimų procedūromis, kurios po peržiūros pašalino abu paketus.





