Zagrożenia łańcucha dostaw
Sposoby, w jakie zależności stają się wektorami ataku
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 -lTyposquatting i pomyłki nazw
Atakujący publikują złośliwe pakiety o nazwach przypominających popularne pakiety, licząc na fatalną literówkę.
- Typosquatting —
reqeustszamiastrequests - Combosquatting —
python-requestsnaś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-scriptsPrzeję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-lockfileSkanowanie 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:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613fCią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.
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
- Zagrożenia łańcucha dostaw
- Software Bill of Materials (SBOM)
- Podpisywanie zależności i artefaktów
- Zabezpieczanie potoków CI/CD