APM-tietoturvatarkistuslista, joka jokaisen kehittäjän on käytävä läpi ennen julkaisua
Turvallisuusauditointi ennen julkaisua: mitä jokaisen kehittäjän tulisi tarkistaa
Jos julkaisemme avoimen lähdekoodin paketteja npm:ssä, liikumme samalla alueella jossa viime vuosina on nähty yllättävän kekseliäitä – ja vaarallisia – hyökkäyksiä. Hyökkäyspinta on laajentunut, eikä pelkkä "toimii koneellani" -testaus riitä enää varmistukseksi.
Tässä käsitellään niitä käytännön asioita, jotka erottavat vastuulliset ylläpitäjät niistä, jotka joutuvat selittämään asioita vasta jälkikäteen.
Miksi paketille tarvitaan turvallisuustarkistus ennen julkaisua
npm-ekosysteemi on sekä JavaScriptin vahvuus että sen yksi haavoittuvimmista kohdista. Yksi paketti voi päätyä tuhansiin sovelluksiin ja rakennusputkiin. Tämä laajuus tekee paketeista houkuttelevia kohteita – ei pelkästään tunnusten keräämiseen, vaan myös pysyvyyden luomiseen CI/CD-ympäristöissä, joissa koodi pääsee ajamaan korkeilla käyttöoikeuksilla.
Useimmat hyökkäykset ovat kuitenkin estettävissä huolellisella työllä ja oikeilla työkaluilla.
12 yleisintä hyökkäysvektoria npm-paketeissa
1. Tilin kaappaus ja haitallinen julkaisu
Pahin tilanne syntyy, kun npm-tili kaapataan ja hyökkääjä julkaisee muokatun version paketista. Käyttäjät asentavat sen automaattisesti, ja haitallinen koodi pääsee ajamaan tuotannossa.
Suojautuminen:
- Ota 2FA käyttöön npm-tilille
- Käytä erillisiä, rajoitettuja token:eja tilin salasanan sijaan
- Ota käyttöön julkaisun hyväksyntä herkillä paketeilla
- Seuraa julkaisulokeja säännöllisesti
2. Lifecycle hookit: asennus muuttuu suoritukseksi
npm antaa paketeille mahdollisuuden käyttää preinstall-, postinstall- ja muita elinkaarihookeja. Koodi voi tällöin ajaa heti asennuksen jälkeen, ennen kuin varsinainen sisältö edes lataudu.
Suojautuminen:
- Tarkista kaikki lifecycle hookit package.json-tiedostosta
- Kysy itseltäsi, onko asennusajan koodia tarpeen käyttää
- Jos hookeja käytetään, pidä ne selkeinä ja pieninä
- Harkitse vaihtoehtoja, jotka toimivat rakennusajalla
3. Itseään kopioivat npm-madot
Paketti voi muokata muita node_modules-kansion paketteja, ja haitallinen koodi voi levitä koko riippuvuuspuuhun. Tämä on mato-tyyppinen hyökkäys, joka itseäsi kopioi.
Suojautuminen:
- Älä muokkaa tiedostojärjestelmää asennuksen aikana
- Älä koske muiden pakettien koodiin
- Pidä riippuvuudet erillään
- Aja npm audit ja riippuvuuksien skannaukset säännöllisesti
4. CI/CD-tunnusten kaappaukset
CI/CD-putkessa on usein tunnuksia, kuten deployment token:eja ja GitHub-oikeuksia. Jos paketti pääsee rakennusprosessiin, hyökkääjä voi päästä käsiksi näihin tunnuksiin ja taudinlevittäjänä palata suuriin osa koko ympäristöön.
Suojautuminen:
- Käytä rajoitettuja tunnuksia kunkin vaiheen varten
- Vaihda tunnuksia usein
- Älä kovakoodaa tunnuksia package.jsonissa
- HARKitse OpenID Connect -menetelmän käyttöisä pakkeissa
- Tarkista, kuka pääsee käsiksi julkaisutunnuksiin
5. Git-pohjainen salakuljetus
Suoraan Git-repositorioista asennetut riippuvuudet eivät kuulu npm:n turvajärjestelmien suojapiiriin. Hyökkääjä voi julkaista haitallisen haarautteen ja houkutella ihmisiä asentamaan siitä.
Suojautuminen:
- Kiinnitä riippuvuudet npm-rekisteriin,而不是 Git-repositorioihin
- Jos Git-repositorioita käytetään, varmistetaan commit hash
- Älä käytä
latesttai haarautteen viittauksia luottamattomista repositorioista - Dokumentoi, miksi Git-repositorio tarvitaan
6. Etäiset dynaamiset riippuvuudet
Jotkut paketit saavat koodi ajamaan itse dynamisch während runtime. Tämä luo näkymätön,运行时 attack surface, jossa paketti toimii vain loaderina.
Suojautuminen:
- Kaikki riippuvuudet on ilmoittautettu package.jsonissa
- Älä noudata dynaamisesti koodi fetchia ja executeia
- Käytä static analyysejä dynaamisia riippuvuuksia varten
- Jos tarvitaan runtime flexibility, suunnitele ilman code execution
7. Phishing-infrastruktuuria näkyvissä
Hyökkääjät voivat käyttää npm:ää ja sen CDN:ää phishing-sivujen tai tunnusten keräämisen varten. Paketti voi näyttäytyä legitiiminä, kun se silti omdirigerer käyttäjä tietyn login pageille.
Suojautuminen:
- Ole avoin, mikä paketti tekee
- Selitä viralliset domainit ja dokumentaatiot
- Ota CSP headerit käyttöön verkkosivuille
- Seuraa typosquatting-versioita paketin nimestä
- Raportoi epäilyttävät paketit npm:lle
8. Tunnusten ja salaisuuksien kerääminen
Haitallinen paketti voi kerää ympäristömuuttujia, API-key:tä, token:eja ja salaisuuksia. K<|eos|>