heygrc
Bezpieczeństwo łańcucha dostaw NIS 2 w kodzie

Łańcuch dostaw przebiega przez Twój proces budowania.

Art. 21(2) NIS 2 wymienia środki zarządzania ryzykiem cyberbezpieczeństwa, jakie muszą wdrożyć podmioty objęte zakresem, a punkt (d) dotyczy bezpieczeństwa łańcucha dostaw: zarządzania ryzykiem związanym z dostawcami oraz komponentami, od których zależysz. Dla większości zespołów łańcuch dostaw jest konkretny i istnieje w kodzie: to zależności, które instalujesz, wersje, które przypinasz, oraz skrypty, którym ufasz podczas budowania.

How it shows up in a diff

The shapes the same control failure takes.

Bezpieczeństwo łańcucha dostaw słabnie za każdym razem, gdy zmiana importuje kod zewnętrzny z mniejszą weryfikacją niż wcześniej. Powtarzające się wzorce:

  • Zdalny skrypt jest przekazywany do powłoki

    Krok budowania lub konfiguracji pobiera skrypt z internetu i uruchamia go bezpośrednio (np. curl przekazany do bash), wykonując niezweryfikowany zdalny kod z uprawnieniami procesu budowania.

  • Zależność jest odpięta

    Przypięta wersja jest zmieniana na zakres zmienny lub tag ruchomy (np. latest, gałąź), dzięki czemu przyszła, niezweryfikowana wersja może zostać zaimportowana bez powiadomienia.

  • Sprawdzenie integralności jest usuwane

    Plik blokujący, suma kontrolna lub weryfikacja podpisu, które gwarantowały, że otrzymujesz oczekiwany artefakt, są usuwane lub omijane, aby instalacja działała.

  • Nowy komponent pojawia się bez pochodzenia

    Zależność lub obraz jest dodawany ze źródła niezweryfikowanego, bez zapisu, skąd pochodzi lub kto go utrzymuje.

  • Wewnętrzne lustro lub lista dozwolonych jest omijane

    Zmiana importuje pakiet bezpośrednio ze źródła zewnętrznego zamiast z zweryfikowanego wewnętrznego lustra lub rejestru, omijając kontrole nad nim.

Worked example

Krok budowania uruchamiający zdalny skrypt.

Plik Dockerfile wymaga narzędzia CLI. Najszybsza instalacja to jednowiersz dostawcy, który pobiera i uruchamia skrypt. Działa, ale oznacza, że każde budowanie wykonuje to, co znajduje się pod tym adresem URL, nieprzypięte i niezweryfikowane, z uprawnieniami procesu budowania.

Dockerfile+1 -0
FROM node:22-slim+ RUN curl -fsSL https://get.example-tool.dev/install.sh | bashCOPY . /app
heygrcNIS 2 Art. 21(2)(d)

Przekazywanie zdalnego skryptu do powłoki uruchamia niezweryfikowany kod zewnętrzny podczas budowania, a to, co serwuje ten adres URL, może się zmienić bez Twojej wiedzy. Art. 21(2)(d) (bezpieczeństwo łańcucha dostaw) oczekuje, że ryzyka związane z zależnościami i dostawcami będą zarządzane. Przypnij narzędzie do konkretnej wersji i zweryfikuj je (np. sumą kontrolną lub znanym pakietem), zamiast wykonywać to, co zwraca adres URL dzisiaj.

What an auditor does with this

Ryzyko łańcucha dostaw jest oceniane na podstawie zależności, które faktycznie importujesz.

Inspekcja w ramach NIS 2 sprawdza, jak podmiot zarządza bezpieczeństwem swoich dostawców i komponentów, od których zależy: czy zależności są weryfikowane, przypięte i śledzone, a dane wejściowe budowania są zaufane. Zmiana, która wprowadza nieprzypiętą zależność lub uruchamia zdalny skrypt podczas budowania, to konkretne ryzyko łańcucha dostaw, które jest widoczne w diffie pliku manifestu, lockfile lub konfiguracji budowania.

What this is, and is not

Przegląd, a nie pełny program łańcucha dostaw.

heygrc sygnalizuje zmiany, które dotyczą środka NIS 2, i cytuje odpowiedni punkt, aby poprawka została wprowadzona w pull request. Nie uruchamia analizy składu oprogramowania ani oceny ryzyka dostawców. Wychwytuje moment, w którym zmiana importuje kod zewnętrzny z mniejszą weryfikacją, na poziomie diffu.