npm i -s - npm install --save - złośliwe pakiety npm

NPM i -s i ukryte ryzyka w zależnościach

Co tak naprawdę się dzieje po uruchomieniu npm i -s

Kiedy piszesz npm i -s, robisz coś więcej niż tylko instalujesz zależność; modyfikujesz łańcuch dostaw swojego projektu. -s flaga to skrót od -ZapisaćUruchomienie polecenia npm i -s lub npm install –save powoduje zainstalowanie pakietu i zapisanie go w Zależności sekcja twojego pakiet.jsonOd tego momentu każde środowisko, w którym działa npm zainstalować pobierze tę samą zależność.

Przykład:

To wygodne, ale też trwałe. Jeśli źródło pakietu nie jest zweryfikowane lub jeśli drzewo zależności zawiera niezaufane pakiety, skutecznie blokujesz potencjalny wektor ataku, który rozprzestrzenia się przez każdą kompilację, każde środowisko i każdą maszynę deweloperską. Niezweryfikowane pakiety mogą zawierać:

  • Ukryte wywołania zwrotne sieci
  • Kod eksfiltracji danych
  • Skrypty poinstalacyjne uruchamiane automatycznie

Polecenie npm i -s samo w sobie nie jest niebezpieczne, ale to, co instaluje i skąd pochodzi, może otworzyć drzwi dla złośliwych pakietów npm, które w ukryciu naruszą Twój projekt.

Jak atakujący wykorzystują npm do dostarczania złośliwych pakietów

Atakujący uwielbiają npm, ponieważ leży u podstaw nowoczesnego tworzenia aplikacji. Za każdym razem, gdy deweloper uruchamia polecenie npm install –save, istnieje ryzyko ataku, jeśli źródła zależności nie zostaną starannie zweryfikowane.

Typowe wektory ataków

  1. Typosquatting: Atakujący publikują pakiety o nazwach podobnych do popularnych. Przykład: instalacja ekspresowy zamiast ekspresowy poprzez npm i -s, dodatkowe „s” ładuje pakiet trojański.
  2. Zamieszanie związane z zależnością: Prywatna zależność, taka jak @internal/api-client może zostać przyćmiony przez publiczny pakiet npm o tej samej nazwie.
    Gdy deweloper uruchomi polecenie npm i -s @internal/api-client, zamiast niego zostanie zainstalowana złośliwa wersja publiczna.
  3. Zagrożeni konserwatorzy: Atakujący przechwytują legalne konta lub wstrzykują złośliwy kod do zaufanych projektów, zmieniając znaną zależność w wektor infekcji.

Przykład złośliwego wstrzyknięcia:

 ❌ Przykład fragmentu kodu złośliwej zależności

Nawet duże organizacje padły ofiarą złośliwych pakietów npm rozprzestrzeniających się w Internecie. standard npm zainstaluj – zapisz poleceń. Atakujący wykorzystują łańcuch zaufania, a programiści rzadko to zauważają, dopóki dane uwierzytelniające lub dane nie zaczną wyciekać.

Ciche zagrożenie ze strony skryptów instalacyjnych i błędów po instalacji Hooks – npm i -s 

Ekosystem npm umożliwia pakietom wykonywanie skryptów cyklu życia, takich jak zainstalować or po instalacji automatycznie. Jest to przydatne przy tworzeniu plików binarnych, ale otwiera również drogę do nadużyć. Po uruchomieniu npm i -s lub npm install –save, npm automatycznie uruchamia te skrypty bez pytania o potwierdzenie. złośliwa zależność można użyć tego zachowania, aby:

  • Uruchom polecenia systemowe
  • Utwórz tylne drzwi w środowisku lokalnym
  • Kradzież kluczy SSH, tokenów lub zmiennych środowiskowych

Przykład (zachowanie niezłośliwe, ale ryzykowne):

If setup.js zostanie zastąpiony lub zmodyfikowany w górnym biegu rzeki, Twój system może w sposób niezauważalny wykonać kod kontrolowany przez atakującego podczas instalacji. In CI/CD pipelines, gdzie npm i -s uruchamia się automatycznie podczas kompilacji, ryzyko to wzrasta. Pojedynczy złośliwy pakiet npm może naruszyć bezpieczeństwo agenta kompilacji, wykraść tajne dane środowiska lub manipulować artefaktami wdrożenia.

Dlaczego ręczny przegląd pakietów nie wystarczy z npm i -s

Programiści często uważają, że sprawdzanie pakiet.json Plik lub odczytanie pliku README repozytorium zapewnia bezpieczeństwo. Tak nie jest. Pojedyncza komenda npm install –save może pobrać dziesiątki, a czasem setki zależności przechodnich. Każda z nich może wprowadzić luki w zabezpieczeniach lub złośliwy kod, nie będąc widocznym w zależnościach najwyższego poziomu.

Problem ze świata rzeczywistego: rozrost zależności

Projekt z 20 bezpośrednimi zależnościami może łatwo skończyć z ponad 500 zależnościami przechodnimi. Ich ręczne sprawdzenie jest niemożliwe. Atakujący wykorzystują tę złożoność, aby ukryć złośliwe pakiety npm głęboko w drzewie.

Minilista kontrolna dla bezpieczniejszego korzystania z substancji uzależniających

  • Zastosowanie audyt np oraz npm ls aby zidentyfikować ukryte zależności.
  • Przed uruchomieniem polecenia npm i -s sprawdź autorstwo pakietu i datę ostatniej aktualizacji.
  • Unikaj instalowania oprogramowania z niezweryfikowanych adresów URL i repozytoriów Git.
  • Sprawdź pod kątem podejrzanych skryptów (zainstalować, przygotować, po instalacji) w pakiet.json.
  • Zablokuj wersje za pomocą pakiet-lock.json i włącz weryfikację podpisu.

Ręczna kontrola to początek, ale aby zapewnić prawdziwą ochronę, konieczna jest automatyzacja.

Integracja skanowania zależności i kontroli zasad w CI/CD

Nowoczesne DevSecOps pipelines Należy traktować każde polecenie npm i -s jako potencjalny punkt wejścia dla złośliwych pakietów npm. Skanowanie zależności nie jest opcjonalne; to element higieny kompilacji.

Strategie automatyzacji

  • Skanowanie zależności statycznych: Użyj automatycznych skanerów, aby sprawdzić znane złośliwe lub podatne na ataki pakiety przed etapami kompilacji.
  • Weryfikacja podpisu: Sprawdź integralność pakietu poprzez porównanie skrótów lub podpisanych metadanych.
  • Egzekwowanie zasad: Zapobiegaj instalacji z niezweryfikowanych źródeł.

Przykład pipeline konfiguracja:

Zintegrowanie tego z Twoim CI/CD Zapewnia, że ​​każdy zapis polecenia npm install –save jest weryfikowany. Każdy pakiet, który nie spełnia zasad, jest niepodpisany, nieznany lub ryzykowny, zostanie automatycznie zablokowany. Chroni to nie tylko systemy kompilacji, ale także zapobiega dalszemu zanieczyszczeniu środowisk produkcyjnych.

Budowanie zaufanego łańcucha dostaw: od npm do produkcji

Bezpieczeństwo nie kończy się na instalacji. Każde polecenie npm i -s przyczynia się do łańcucha dostaw oprogramowania i jeśli nie zostanie zweryfikowane, stanowi ryzyko.

Aby zbudować zaufanie kompleksowe:

  • Wygeneruj SBOMs (zestawienie materiałów oprogramowania): Śledź każdą wersję i źródło pakietu.
  • Użyj podpisanych zezwoleń: Aby zagwarantować autentyczność przesyłki, zastosuj metodę podpisywania lub weryfikacji podpisu.
  • Walidacja na każdym etapie: Stosuj kontrole integralności nie tylko na etapie CI, ale także podczas wdrażania i działania.
  • Izolowane kompilacje: Instalacje należy uruchamiać w środowiskach testowych, aby zapobiec nieautoryzowanemu dostępowi do sieci lub plików.

Przykład bezpiecznej konfiguracji plików cookie dla środowisk API, często ujawnianej poprzez zainfekowane zależności:

Bezpieczna wersja, pobierz, zweryfikuj, a następnie uruchom

Tego typu środki w połączeniu z automatycznym skanowaniem zależności pozwalają na neutralizowanie złośliwych pakietów npm zanim rozprzestrzenią się w łańcuchu dostaw.

Podsumowanie: Zabezpiecz swoje instalacje npm, zanim one zabezpieczą Ciebie

Każde polecenie npm i -s lub npm install –save wprowadza coś więcej niż tylko funkcjonalność; wprowadza zaufanie. A zaufanie bez weryfikacji to ryzyko.

Aby chronić łańcuch dostaw oprogramowania:

  • Zautomatyzuj walidację zależności
  • Wymuszaj podpisywanie i weryfikację integralności
  • Ciągłe skanowanie w poszukiwaniu złośliwych pakietów npm
  • Zablokuj niezweryfikowane źródła na wczesnym etapie CI/CD

Xygeni pomaga zespołom DevSecOps wykrywać i blokować złośliwe zależności npm, egzekwować zasady dotyczące pakietów i monitorować integralność kompilacji, zapewniając, że instalujesz dokładnie to, co zamierzasz uruchomić.

Ponieważ w przypadku bezpieczeństwa łańcucha dostaw zapobieganie nie jest etapem początkowym, lecz fundamentem.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz swoje oprogramowanie i dostarczanie

z pakietem produktów Xygeni