Cyber Security Academy · Lekcja

Software Bill of Materials (SBOM)

Inwentaryzacja zawartości oprogramowania

Lekcja 2 z 413 kroki

Software Bill of Materials (SBOM) to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 2 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 SBOM

Software Bill of Materials (SBOM) to formalny, czytelny maszynowo wykaz każdego komponentu zawartego w oprogramowaniu: bibliotek, ich wersji, licencji i informacji o dostawcy.

Tak jak etykieta produktu spożywczego wymienia składniki, SBOM pozwala w kilka sekund odpowiedzieć na pytanie: czy ten produkt zawiera podatną wersję X? Bez SBOM odpowiedź na to pytanie może wymagać wielu dni ręcznego przeszukiwania.

Dlaczego SBOM-y są dziś ważne

Gdy pojawia się krytyczna podatność, pierwsze pytanie operacyjne dotyczy zakresu narażenia: które z naszych produktów zawierają ten podatny komponent?

Podczas incydentu Log4Shell organizacje posiadające SBOM-y wyszukiwały informacje w swoich wykazach i przeprowadzały wstępną ocenę w ciągu kilku godzin. Organizacje bez SBOM-ów spędzały tygodnie na przeszukiwaniu katalogów budowania. Organy regulacyjne i najwięksi nabywcy coraz częściej wymagają SBOM-ów jako warunku zakupu.

  • Szybka analiza wpływu podatności
  • Zgodność licencyjna i śledzenie obowiązków
  • Przejrzystość łańcucha dostaw dla klientów i audytorów

Standardowe formaty SBOM

Dominują dwa otwarte standardy. Narzędzia zazwyczaj mogą konwertować dane między nimi.

  • SPDX — standard Linux Foundation, dobrze obsługujący licencjonowanie i szeroko akceptowany przez organy regulacyjne
  • CycloneDX — standard OWASP skoncentrowany na bezpieczeństwie, obsługujący dane o podatnościach i relacjach między zależnościami

Należy unikać tworzenia własnego formatu; odbiorcy i skanery oczekują tych standardów.

Co zawiera wpis

Każdy wpis komponentu powinien zawierać wystarczające informacje identyfikacyjne, aby można go było dopasować do źródeł informacji o podatnościach. Najważniejsze pola:

  • nazwa i wersja — dokładne, a nie określone zakresem
  • PURL (package URL) — uniwersalny identyfikator, taki jak pkg:npm/lodash@4.17.21
  • skrót — do weryfikacji integralności
  • licencja — identyfikator licencji SPDX
  • dostawca — podmiot, który go wytworzył
# A PURL uniquely identifies a component across ecosystems
pkg:npm/lodash@4.17.21
pkg:pypi/requests@2.31.0
pkg:golang/github.com/gin-gonic/gin@v1.9.1

Generowanie SBOM

SBOM-y należy generować automatycznie na podstawie kodu źródłowego lub zbudowanego artefaktu. Syft to popularny generator działający w różnych ekosystemach, który generuje dane w obu standardach.

# from a project directory (CycloneDX JSON)
syft dir:. -o cyclonedx-json=sbom.cdx.json

# from a container image (SPDX JSON)
syft my-app:1.4.0 -o spdx-json=sbom.spdx.json

# CycloneDX has native generators per ecosystem too
cyclonedx-npm --output-file sbom.json

SBOM źródłowy, kompilacji i środowiska uruchomieniowego

SBOM wygenerowany na różnych etapach przedstawia różne informacje.

  • SBOM źródłowy — to, co deklaruje manifest; może pomijać kod włączony do pakietu lub dołączony bezpośrednio do repozytorium
  • SBOM kompilacji — to, co faktycznie pobrał proces budowania; najdokładniejszy dla wydania
  • SBOM środowiska uruchomieniowego lub wdrożenia — to, co rzeczywiście znajduje się w uruchomionym obrazie, w tym pakiety systemu operacyjnego

W celu zapewnienia bezpieczeństwa łańcucha dostaw należy generować SBOM podczas budowania na podstawie rzeczywistego artefaktu, a także skanować finalny kontener pod kątem pakietów systemu operacyjnego.

Skanowanie SBOM pod kątem podatności

SBOM staje się szczególnie użyteczny po przekazaniu go do narzędzia dopasowującego komponenty do znanych CVE. Oddziela to generowanie od analizy: stare SBOM-y można skanować w dniu ujawnienia nowej CVE.

# match an SBOM against vulnerability databases
grype sbom:sbom.cdx.json

# OSV scanner consumes SBOMs directly
osv-scanner --sbom=sbom.spdx.json

# fail CI above a severity threshold
grype sbom:sbom.cdx.json --fail-on high

VEX: określanie możliwości wykorzystania podatności

SBOM może wskazywać podatny komponent, którego faktycznie nie można wykorzystać w danym produkcie (podatna funkcja nigdy nie jest wywoływana). Dokument VEX (Vulnerability Exploitability eXchange) zapisuje tę ocenę.

VEX ogranicza liczbę nieistotnych alertów: zamiast wywoływać panikę u każdego klienta z powodu wymienionej CVE, publikuje się oświadczenie not_affected wraz z uzasadnieniem albo affected wraz z działaniami naprawczymi. W ten sposób surowy wykaz staje się podstawą konkretnych działań.

Dystrybucja i podpisywanie SBOM-ów

SBOM jest wiarygodny tylko wtedy, gdy jest autentyczny i powiązany z dokładnym artefaktem, który opisuje. Należy go podpisać i dołączyć jako poświadczenie, a nie jako niezależny plik.

# attach a signed SBOM attestation to an image with cosign
cosign attest --predicate sbom.cdx.json \
  --type cyclonedx \
  my-registry/my-app:1.4.0

# verify the attached SBOM attestation
cosign verify-attestation --type cyclonedx my-registry/my-app:1.4.0

Automatyzacja SBOM-ów w CI

Ręcznie tworzone SBOM-y szybko tracą aktualność. Generowanie należy włączyć do potoku, aby każde wydanie tworzyło i przechowywało SBOM jako artefakt budowania, najlepiej podpisując go i skanując w ramach tego samego zadania.

  • Generować na podstawie zbudowanego artefaktu, a nie tylko repozytorium
  • Przechowywać SBOM-y w rejestrze umożliwiającym wyszukiwanie, z kluczem utworzonym na podstawie wersji
  • Ponownie skanować przechowywane SBOM-y zgodnie z harmonogramem, korzystając z aktualnych źródeł informacji o CVE
  • Blokować wydania na podstawie wyniku skanowania podatności

Typowe pułapki związane z SBOM

SBOM-y zawodzą po cichu, gdy traktuje się je tylko jako zadanie do odhaczenia.

  • Nieaktualny — wygenerowany raz i nigdy niegenerowany ponownie
  • Niekompletny — pomija pakiety systemu operacyjnego oraz kod statycznie linkowany lub dołączony bezpośrednio
  • Niezweryfikowany — brak skrótu wiążącego go z wdrożonym artefaktem
  • Niewykorzystywany — utworzony, ale nigdy nieskanowany ani niewyszukiwany

Celem jest dokładny, regularnie generowany ponownie, podpisany i stale skanowany SBOM, a nie jednorazowy plik JSON.

Szybki test: cel SBOM

Zastosuj zdobytą wiedzę w scenariuszu incydentu.

Podsumowanie: SBOM

Można teraz zinwentaryzować zawartość oprogramowania i odpowiednio na nią reagować.

  • SBOM to czytelna maszynowo lista każdego komponentu w formacie SPDX lub CycloneDX
  • Komponenty należy identyfikować za pomocą PURL, wersji, skrótu i licencji
  • Należy generować SBOM podczas budowania, a następnie przekazywać go do narzędzia dopasowującego (grype, osv-scanner) w celu wykrywania CVE
  • Należy używać VEX do określania rzeczywistej możliwości wykorzystania podatności i ograniczania fałszywych alarmów
  • Należy podpisywać i automatyzować SBOM-y w CI oraz ponownie skanować przechowywane SBOM-y pod kątem nowych informacji

Następnie: potwierdzanie pochodzenia artefaktów za pomocą podpisywania.

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 „Software Bill of Materials (SBOM)” jest bezpłatna?

Tak — pełny tekst „Software Bill of Materials (SBOM)” 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 „Software Bill of Materials (SBOM)”?

Inwentaryzacja zawartości oprogramowania Ć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 2 z 4.

Ile czasu zajmuje lekcja „Software Bill of Materials (SBOM)”?

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