Cyber Security Academy · Lekcja

Zagrożenia łańcucha dostaw

Sposoby, w jakie zależności stają się wektorami ataku

Lekcja 1 z 413 kroki

Zagrożenia łańcucha dostaw to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cyber Security Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Czym jest atak na łańcuch dostaw

Atak na łańcuch dostaw oprogramowania narusza bezpieczeństwo organizacji nie przez bezpośrednie włamanie, lecz przez skażenie czegoś, czemu organizacja ufa i czego używa: biblioteki, narzędzia do budowania, bazowego obrazu kontenera lub serwera aktualizacji.

Ponieważ współczesne oprogramowanie powstaje z setek komponentów innych firm, jedno zatrute ogniwo trafia do każdego kolejnego użytkownika. Atakujący inwestuje raz i dociera do wielu ofiar.

  • Odwrócenie zaufania — granica bezpieczeństwa przesuwa się poza własny kod
  • Promień rażenia zależności przechodnich — jeden złośliwy pakiet trafia do tysięcy kompilacji

Góra lodowa zależności

Dodanie jednej bezpośredniej zależności często powoduje pobranie dziesiątek zależności przechodnich, których nigdy nie wybrano. Typowa aplikacja Node lub Python deklaruje kilka pakietów, ale ostatecznie korzysta z setek.

Należy wyświetlić pełne drzewo rozwiązanych zależności, a nie tylko manifest, aby zobaczyć, co rzeczywiście jest dostarczane:

# npm: full resolved dependency tree
npm ls --all

# Python: pinned transitive closure
pip freeze

# count transitive nodes
npm ls --all --parseable | wc -l

Typosquatting i pomyłki nazw

Atakujący publikują złośliwe pakiety o nazwach przypominających popularne pakiety, licząc na fatalną literówkę.

  • Typosquatting — reqeusts zamiast requests
  • Combosquatting — python-requests naśladujące prawdziwą nazwę
  • Dependency confusion — opublikowanie publicznego pakietu o tej samej nazwie co wewnętrzny pakiet prywatny, aby nieprawidłowo skonfigurowany mechanizm rozwiązywania zależności pobrał wersję atakującego

Ochronę zapewniają przypięcie zaufanego wewnętrznego rejestru oraz używanie prywatnych pakietów z zakresem lub przestrzenią nazw.

Przejęcie konta lub uprawnień opiekuna pakietu

Legalny, powszechnie zaufany pakiet może stać się złośliwy, jeśli konto jego opiekuna zostanie przejęte albo złośliwy współtwórca uzyska uprawnienia do publikowania.

Niedawne incydenty w świecie rzeczywistym pokazują, że atakujący wyłudzają dane uwierzytelniające opiekunów, a następnie publikują skażone wydanie poprawkowe, które podczas instalacji wykrada tokeny.

  • Należy wymagać 2FA na wszystkich kontach publikujących
  • Należy preferować pakiety z tokenami publikowania ograniczonymi do zakresu i chronionymi wydaniami
  • Należy monitorować nieoczekiwane pojawienie się nowych opiekunów w przypadku krytycznych zależności

Złośliwe skrypty instalacyjne

Wiele ekosystemów uruchamia kod podczas instalacji, zanim aplikacja zostanie uruchomiona. Polecenie npm install może wykonać funkcję postinstall, która wykradnie zmienne środowiskowe lub klucze SSH.

W CI należy wyłączyć wykonywanie dowolnych skryptów instalacyjnych i przeprowadzić audyt każdego pakietu, który ich wymaga:

# npm: block lifecycle scripts during install
npm ci --ignore-scripts

# inspect what a package would run
npm view <package> scripts

# pnpm equivalent
pnpm install --ignore-scripts

Przejęte narzędzia procesu budowania

Samo środowisko budowania jest cennym celem. Jeśli atakujący zatruje kompilator, obraz agenta CI lub wtyczkę procesu budowania, każdy wytworzony przez nie artefakt będzie zawierał tylną furtkę, nawet gdy kod źródłowy jest bezpieczny.

Klasycznym przykładem jest zmodyfikowany mechanizm aktualizacji, który podpisuje złośliwe oprogramowanie prawidłowym kluczem podpisywania kodu, dzięki czemu ofiary uznają je za autentyczne.

  • Infrastrukturę budowania należy traktować jak środowisko produkcyjne i w pełni ją zabezpieczyć
  • Należy używać tymczasowych, odtwarzalnych agentów budowania
  • Klucze podpisywania należy przechowywać oddzielnie od hosta budowania

Pliki blokady i skróty integralności

Plik blokady przypina dokładne wersje i skróty zawartości, dzięki czemu ponowne rozwiązanie zależności nie może po cichu podmienić artefaktu na inny. Należy zawsze zatwierdzać go w repozytorium i pozwalać CI go weryfikować, zamiast swobodnie rozwiązywać zależności ponownie.

Pole integralności przechowuje skrót; jeśli pobrane archiwum nie pasuje do tego skrótu, instalacja kończy się niepowodzeniem.

# package-lock.json integrity entry
# "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
# "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="

# CI must install from lock, never re-resolve
npm ci
yarn install --frozen-lockfile

Skanowanie zależności pod kątem podatności

Wersje ze znanymi podatnościami, śledzonymi jako CVE, są najczęstszą słabością łańcucha dostaw. Narzędzia do analizy składu oprogramowania (SCA) porównują rozwiązane zależności z bazami danych podatności.

Skanowanie należy uruchamiać w CI i kończyć proces budowania niepowodzeniem w przypadku krytycznych ustaleń:

# npm built-in audit
npm audit --audit-level=high

# OSV scanner across ecosystems
osv-scanner --lockfile=package-lock.json

# Trivy for filesystem and images
trivy fs --severity HIGH,CRITICAL .

Przypinanie wersji i vendoring

Zakresy wersji bez przypięcia, takie jak ^1.2.0, pozwalają na automatyczne włączanie nowych wydań. Jest to wygodne, ale naraża na złośliwą wersję poprawkową.

  • Należy przypinać zależności do dokładnych wersji i świadomie weryfikować aktualizacje
  • W przypadku obrazów kontenerów należy przypinać za pomocą skrótu, a nie zmiennych znaczników, takich jak latest
  • Krytyczne zależności należy utrzymywać we własnym repozytorium lub mirrorze, aby ich usunięcie z repozytorium źródłowego nie mogło przerwać działania ani zagrozić systemowi
# pin a container image by immutable digest
FROM python:3.12-slim@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613f

Ciągłe monitorowanie i pochodzenie artefaktów

Zabezpieczanie łańcucha dostaw to proces ciągły, a nie jednorazowe skanowanie. Należy wiedzieć co jest dostarczane, skąd to pochodzi i kiedy staje się podatne.

  • Należy generować SBOM dla każdego wydania (w następnej lekcji)
  • Należy rejestrować pochodzenie procesu budowania, aby można było wykazać, jak powstał artefakt
  • Należy subskrybować komunikaty o zagrożeniach, aby nowo ujawniona CVE powodowała ponowną ocenę wydań już dostarczonych

Modelowanie zagrożeń w potoku

Należy odwzorować każdy etap, na którym pojawiają się niezaufane dane wejściowe: komputery deweloperów, system kontroli wersji, rejestry zależności, system budowania, magazyn artefaktów i kanał aktualizacji. Każdy z nich może być punktem wstrzyknięcia.

Dla każdego etapu należy zadać pytania: kto może tu zapisywać dane, co umożliwiłoby tej osobie przejęcie oraz jak można byłoby to wykryć? W ten sposób powstaje uporządkowana według priorytetów lista zabezpieczeń, a nie ogólna lista kontrolna.

Szybki test: dependency confusion

Sprawdź swoją wiedzę na temat popularnej klasy ataków na łańcuch dostaw.

Podsumowanie: zagrożenia łańcucha dostaw

Wiesz już, dlaczego zależności są wektorami ataku i jak ograniczać związane z nimi ryzyko.

  • Odwrócenie zaufania oznacza, że bezpieczeństwo zależy od stron trzecich, nad którymi nie ma się kontroli
  • Najważniejsze zagrożenia to: typosquatting, dependency confusion, przejęcie konta opiekuna pakietu, złośliwe skrypty instalacyjne oraz przejęte narzędzia procesu budowania
  • Najważniejsze zabezpieczenia to: pliki blokady ze skrótami integralności, skanowanie SCA, przypinanie dokładnych wersji za pomocą skrótu, 2FA dla publikujących oraz ciągłe monitorowanie

Następnie zostanie dokładnie zinwentaryzowana zawartość oprogramowania za pomocą SBOM.

Bezpłatny start

Ucz się Cyber Security Academy dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
76
Lekcje
303

Często zadawane pytania

Czy lekcja „Zagrożenia łańcucha dostaw” jest bezpłatna?

Tak — pełny tekst „Zagrożenia łańcucha dostaw” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cyber Security Academy, przejdź na CoddyKit PRO. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zagrożenia łańcucha dostaw”?

Sposoby, w jakie zależności stają się wektorami ataku Ćwiczysz Cyber Security Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cyber Security Academy?

Nie wymagamy żadnego doświadczenia. Cyber Security Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Zagrożenia łańcucha dostaw”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cyber Security Academy?

Tak. Każda lekcja Cyber Security Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zagrożenia łańcucha dostaw
  2. Software Bill of Materials (SBOM)
  3. Podpisywanie zależności i artefaktów
  4. Zabezpieczanie potoków CI/CD
← Powrót do Cyber Security Academy