A Xygeni nemrégiben aggasztó mintázatot figyelt meg a szoftverellátási láncok elleni támadások terén 2025-ben., két népszerű csomagkezelőben jelenik meg: PyPI és a NPMFolyamatos fenyegetésfelderítési erőfeszítéseink részeként,Xygeni rosszindulatú programok korai figyelmeztetése (MEW) az eszköz egy korábban egy másik rendszerleíró adatbázisba feltöltött rosszindulatú csomag egy különálló, de módszertanilag hasonló példányát azonosította. Ez az eset rávilágít arra, hogyan fejlődnek és használják újra a fenyegető szereplők a támadási technikákat az ökoszisztémákban, különösen a következők révén: rosszindulatú Python csomagok és a rosszindulatú npm csomagok, ami növeli a rosszindulatú csomagok nyílt forráskódú ellátási láncokba való beszivárgásának kockázatát.
Xygeni MEW-je: A hasonlóságok felfedezése
A Xygeni MEW eszköze a rosszindulatú csomagok, különösen a 2025-ös szoftverellátási lánc támadásokhoz kapcsolódó csomagok észlelésére és megjelölésére készült, amint azok nyilvános forráskódú nyilvántartásokban megjelennek. Az eszköz úgy működik, hogy új csomagokat elemez gyanús viselkedés szempontjából.
Ebben az esetben két olyan rosszindulatú Python csomagok (graphalgo a PyPI-n) és rosszindulatú npm csomagok (express-cookie-parser npm-en).
Kártékony Python és npm csomagok a szoftverellátási lánc támadásaiban (2025)
Vizsgáljuk meg azokat a közös jellemzőket, amelyek kiváltották a riasztásainkat:
Helyesírás
Mindketten megpróbálták utánozni a népszerű, meglévő csomagokat.
- grafalgo (PyPI): "Python csomag gráfok és hálózatok létrehozásához és kezeléséhez.„Feltöltötte egy felhasználó, akinek a neve „larrytech” 2025. június 13-án ez a csomag PyPi alternatívájaként mutatkozott be az eredeti, nem kártékony graphalgo projektnek, amelyet később graphdict-re neveztek át.
- expressz sütielemző (npm)Ez a csomag a jól ismert cookie-parser csomagot utánozta, sőt annak sajátjait is tükrözte. README.md. Az ilyen személyeskedés klasszikus taktika a meglévő bizalom kihasználására.
Kóborlás, mint első védelmi vonal
Mindkét csomag elrejtette a rosszindulatú kódot az eredeti fájlokban. graphalgo, a megzavart kódot megtalálták a /utils/load_libraries.py. Abban az esetben, expressz sütielemző, cookie-loader.min.js tartalmazta a obfuszkált hasznos adatot.
Ez a kezdeti obfuszkációs réteg jellemzően a véletlenszerű ellenőrzés és a statikus elemzés akadályozására szolgál. Az obfuszkáció meglehetősen egyszerű volt: ismételt ZLib tömörítés plusz Base64 kódolás. Ez a fajta obfuszkáció egyértelműen jelzi, hogy a szoftver megpróbálja elrejteni a viselkedését. Más bizonyítékokkal együtt ez tette lehetővé a Xygeni MEW számára, hogy a csomagokat potenciális kártevőként osztályozza. A megerősítési szakaszban értékelőink azonnal elkészítettek egy deobfuszkációs szkriptet, amely feltárta a nyilvánvalóan rosszindulatú dropper szakaszt.
Többlépcsős hasznos teher kézbesítése és megosztott kiindulási pont
Mindkét csomag kezdeti „csepegtetők”, előkészítve a terepet a valódi hasznos teherhez. Közös külső „mag"fájl URL-címe:"https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
Ez az azonos külső seed fájl egy megosztott fenyegető szereplő jelenlétének egyértelmű jelzője. Érdekes módon a seed fájl tartalma egyszerű környezeti változóknak (pl. JWT_SECRET, PORT) tűnik, ami potenciálisan félrevezető lehet a fájl tényleges funkciójának vizsgálatakor.
Dinamikus C2 felbontás DGA-val
Egy kifinomult taktika, amelyet ezekben a rosszindulatú csomagokban megfigyeltek, egy domaingeneráló algoritmus (DGA) használata a Command and Control (C2) szerver dinamikus feloldására. Ez a technika, amelyet gyakran láttak a 2025-ös fejlett szoftverellátási lánc támadásokban, a seed fájl tartalmából származó SHA256 hash-re támaszkodik, más fixen kódolt értékekkel kombinálva. Ezáltal a C2 infrastruktúra gyakran változik, ami sokkal kevésbé teszi hatékonysá a hagyományos feketelistázást. Ebben az esetben az npm variáns egy fix értéket használt 496AAC7E a DGA logikájának részeként.
A kitartás megteremtése
Mindkét támadó tartós jelenlétet próbált kialakítani az érintett rendszereken. Stratégiájuk egy fájl eltávolításából állt, startup.py (PyPi esetén) vagy startup.js (npm esetén) a Google Chrome felhasználói adatkönyvtáraiba különböző operációs rendszereken (Windows, Linux, macOS).
Végrehajtás utáni takarítás
A nyomok minimalizálása érdekében mindkét rosszindulatú szkript tisztítási műveleteket hajtott végre. Ez magában foglalta a kezdeti dropper fájlok törlését (load_libraries.py, cookie-loader.min.js) és a legitim csomagfájlok módosítása (__init__.py, index.js) a most törölt komponensekre mutató hivatkozások eltávolításához.
A kártékony Python és npm csomagok kompromittálásának indikátorai
- PyPI csomaggraphalgo (közzétette: larrytech, 2025. június 13.)
- npm csomag: express-cookie-parser (konkrétan az 1.4.12-es verzió)
- Hozzáférés a megosztott kezdőlap URL-címéhez:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- Állandó fájlnevek:
startup.py(Piton)startup.js(JavaScript) - Gyakori állandó elérési utak (operációs rendszertől függő)A Google Chrome felhasználói adatkönyvtáraiban (pl.
AppData\Local\Google\Chrome\UserData\Scripts\Windows rendszeren,~/.config/google-chrome/Scripts/Linuxon stb.).
Hogyan védekezzünk a rosszindulatú csomagok ellen a szoftverellátási lánc támadásai során 2025-ben?
Ajánlott megközelítés fejlesztőknek
Ez az eset értékes esettanulmányként szolgál a 2025-ös szoftverellátási lánc támadásainak folyamatosan változó fenyegetési környezetében. Rávilágít arra, hogyan kerülhetnek be a rosszindulatú Python csomagok és a rosszindulatú npm csomagok a megbízható ökoszisztémákba, gyakran elkerülve az észlelést, amíg túl késő nem lesz. Ezért a korai észlelés, az intelligens eszközök és a proaktív rendszerhigiénia ma már minden biztonságos DevOps munkafolyamat elengedhetetlen részét képezi. A fejlesztőket arra ösztönzik, hogy vegyék figyelembe a következőket:
Függőségfelmérés
Ha a projektjeid tartalmaztak graphalgo or expressz sütielemző, célszerű lenne folytatni az eltávolításukat.
- PyPI esetén:
pip uninstall graphalgo - Npm esetén:
npm uninstall express-cookie-parser
Rendszerhigiénia
Fontolja meg egy átfogó rendszerellenőrzés lefolytatását. Azt is tanácsos manuálisan ellenőrizni a Chrome felhasználói adatkönyvtárainak elérési útjait, hogy nem talál-e váratlan hibákat. startup.py or startup.js fájlokat.
Proaktív biztonsági intézkedések
- Új függőségek felmérése: Hozz létre egy rutint az új csomagok alapos kiértékelésére az integráció előtt, különös tekintettel az ismeretlen kiadók csomagjaira.
- Biztonsági eszközök integrálásaEszközök, mint például a Xygeni MEW-je, valamint más szoftverösszeállítás-elemző eszközök (SCA) megoldások, kritikus védelmi réteget biztosíthatnak a gyanús viselkedések és sebezhetőségek azonosításával.
- Legkisebb kiváltságA fejlesztői környezetek minimális jogosultságok elvének betartása segíthet korlátozni a biztonsági rés esetleges hatását.
- Hálózati tudatosságA kimenő hálózati forgalom szokatlan kapcsolatok figyelése esetenként DGA által generált C2 kommunikációkat tárhat fel.
Kulcsfontosságú összetevői load_libraries.py (a graphalgo-tól)
download_remote_content(): A megadott URL-címekről lekért fájlokat kezeli.run_process(): Külső Python szkripteket hajt végre különálló módon, a kimenet diszkrét megőrzése érdekében elnyomva azt.get_output_file_path(): Meghatározza az ideális rendszerhelyet az állandó startup.py fájl számára.remove_self(): Megszervezi a kezdeti rosszindulatú fájlok és csomagmódosítások végrehajtás utáni megtisztítását.simple_shift_encrypt()/simple_shift_decrypt()Egyedi kriptográfiai függvények a kommunikációs csatornák elrejtésére, amelyek kulcsfontosságúak a DGA megvalósításához.load_libraries(): A központi funkció, amely koordinálja a teljes többlépcsős folyamatot, a kezdeti letöltéstől a végső hasznos adat végrehajtásáig és tisztításáig.
Utóhatás
A MEW által azonosított többi potenciálisan rosszindulatú csomaghoz hasonlóan a függőségi tűzfal azonnal megvédte azokat a felhasználókat, akik ezeket a rosszindulatú csomagokat a függőségeikbe foglalták volna. A megerősítést követően mindkét beállításjegyzék értesítési eljárását követtük, amely a felülvizsgálatot követően mindkét csomagot eltávolította.





