APM Biztonsági Ellenőrzőlista Fejlesztőknek – Publikálás Előtt
A csomagkiadás előtti biztonsági checklist minden fejlesztőnek
Ha nyílt forráskódú csomagokat készítesz vagy npm-en keresztül terjeszted a kódodat, akkor ugyanabban a világban mozogsz, ahol az elmúlt évben több komoly támadás zajlott le. A csomagkönyvtárak támadási felülete jelentősen megváltozott. Már nem elég, ha „nálam működik”.
Vessünk egy pillantást azokra a biztonsági szempontokra, amelyek megkülönböztetik a felelősségteljes karbantartókat azoktól, akik csak utólag tanulnak a saját hibáikból.
Miért fontos a csomagok előzetes biztonsági átvizsgálása
Az npm ökoszisztéma a JavaScript egyik legnagyobb erőssége és egyben legsebezhetőbb pontja is. Egyetlen csomag több ezer alkalmazásba és build folyamatba kerülhet bele. Ez a kiterjedés vonzóvá teszi a csomagokat a támadók számára – nem csak hitelesítő adatok megszerzésére, hanem arra is, hogy a CI/CD környezetekben kitartó jelenlétet alakítsanak ki.
A jó hír az, hogy a legtöbb támadás megelőzhető megfelelő fegyelemmel és eszközökkel.
A 12 legfontosabb támadási vektor az npm csomagoknál
1. Fiókfeltörés és a rosszindulatú publikálás
A legrosszabb forgatókönyv: az npm fiókod hitelesítő adatai kompromittálódnak, és a támadó egy hátsó ajtóval ellátott verziót publikál. A felhasználók automatikusan letöltik, a rendszerek telepítik, és a rosszindulatú kód fut a termelési környezetekben.
Védekezés:
- Kapcsold be a 2FA-t az npm fiókodon (ez nem opció)
- Használj részletes hozzáférési tokeneket a fő jelszó helyett
- Alkalmazz publikációs jóváhagyást érzékeny csomagoknál
- Figyeld a publikációs naplókat rendszeresen
2. Életciklus hookok és a telepítés során végrehajtott kódfuttatás
Az npm lehetővé teszi preinstall és postinstall életciklus hookok használatát. Ha valaki átveszi a csomagod irányítását, képes életciklus hookok segítségével végrehajtani kódrészleteket a telepítés pillanatában – még a csomag fő kódja előtt.
Mit tegyél:
- Vizsgáld meg minden életciklus hookot a package.json fájlban
- Kérdőjelezd meg, hogy valóban szükség van-e kódfuttatásra a telepítéskor
- Ha mégis használod őket, legyenek átláthatóak és minimálisak
- Preferáld inkább a build idejű megoldásokat
3. Önmásoló npm férgek
A támadó olyan csomagot írhat, amely más csomagokat is módosít a node_modules könyvtárban, és így rosszindulatú kódot terjeszthet a függőségi fában. E类