0Pricing
Cloud & IT Cert Prep · Lekcja

Bezpieczeństwo zależności i analiza składu oprogramowania

Audytuj biblioteki zewnętrzne za pomocą narzędzi SCA, wymuszaj przypinanie wersji zależności i integruj automatyczne alerty o podatnościach z potokiem CI/CD.

Bezpieczeństwo zależności i analiza składu oprogramowania to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 3 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 Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Ryzyko związane z zależnościami open source

Współczesne aplikacje składają się w dużej mierze z zewnętrznych bibliotek i frameworków open source. Typowa aplikacja Node.js może mieć ponad 1000 zależności tranzytywnych, a projekt Java może pobierać setki artefaktów Maven. Każda zależność stanowi potencjalny obszar ataku. Luka Log4Shell (CVE-2021-44228) w bibliotece Log4j pokazała, że pojedyncza zależność może w ciągu kilku dni od ujawnienia sprawić, że miliony aplikacji na całym świecie staną się natychmiast podatne na ataki.

Czym jest analiza składu oprogramowania?

Narzędzia Software Composition Analysis (SCA) automatycznie tworzą spis wszystkich komponentów open source w aplikacji — w tym zależności tranzytywnych (zależności używanych przez inne zależności) — i stale porównują je z bazami danych luk w celu wykrywania znanych CVE. SCA generuje Software Bill of Materials (SBOM), zawierający listę każdego komponentu i jego wersji, co umożliwia szybkie wskazanie dotkniętych systemów po ujawnieniu nowych luk.

# SCA tool usage examples:

# npm audit (Node.js):
# npm audit
# -> Reports vulnerabilities in package.json dependencies
# -> Shows severity, CVE ID, affected package, fix version

# OWASP Dependency-Check (Java/Python/etc.):
# dependency-check --project 'MyApp' --scan ./lib/
# -> Generates HTML/XML report with CVE findings

# Snyk scan:
# snyk test
# -> Reports vulns + 'snyk fix' applies patches automatically

Zależności tranzytywne: ukryte ryzyko

Zależności tranzytywne to biblioteki, od których zależą używane przez Ciebie zależności bezpośrednie, choć nie zostały przez Ciebie jawnie wybrane. Możesz bezpośrednio korzystać z pakietu A, który zależy od pakietu B (wersja 1.2), a ten z kolei od pakietu C (wersja 3.0 — wersja podatna na ataki). Nie wiesz o istnieniu pakietu C, ale Twoja aplikacja go wykonuje. Narzędzia SCA przemierzają pełne drzewo zależności, ujawniając te ukryte luki, do których programiści nie mają bezpośredniego wglądu.

# Dependency tree example:
# Your package.json:
#   'express': '^4.18.0'     (direct dependency)
#   'lodash':  '^4.17.21'   (direct dependency)

# Transitive dependencies (you didn't choose these):
#   express -> 'qs' 6.11.0       (URL parsing)
#   express -> 'body-parser' 1.20 -> 'qs' 6.11.0
#   lodash (self-contained in this case)

# If 'qs' 6.10.x had a prototype pollution CVE,
# you are vulnerable via express even though
# you never directly imported 'qs'.

Software Bill of Materials (SBOM)

Software Bill of Materials (SBOM) to formalny, czytelny maszynowo spis wszystkich komponentów produktu programistycznego — podobny do listy składników na produkcie spożywczym. Formaty SBOM obejmują SPDX (Linux Foundation) i CycloneDX (OWASP). Amerykańskie rozporządzenie wykonawcze 14028 z 2021 roku nałożyło obowiązek stosowania SBOM w oprogramowaniu sprzedawanym rządowi federalnemu. Dzięki SBOM zespoły bezpieczeństwa mogą natychmiast zadać pytanie: „który z naszych produktów zawiera Log4j?” i uzyskać odpowiedź w ciągu kilku minut, zamiast przeszukiwać wszystko ręcznie przez wiele dni.

# Generate SBOM with syft:
# syft packages . -o spdx-json > sbom.spdx.json

# SBOM content example (SPDX JSON):
# {
#   'packages': [
#     { 'name': 'express',  'version': '4.18.2', 'license': 'MIT' },
#     { 'name': 'lodash',   'version': '4.17.21','license': 'MIT' },
#     { 'name': 'log4j-core','version': '2.14.0','license': 'Apache-2.0'}
#   ]
# }

# When Log4Shell announced, query SBOM:
# grep -i 'log4j-core' sbom.spdx.json -> FOUND in 3 projects

Przypinanie zależności i pliki blokad

Przypinanie zależności polega na określaniu ich dokładnych wersji zamiast elastycznych zakresów (^1.2.3 lub *). Pliki blokad (package-lock.json, yarn.lock, Pipfile.lock, Gemfile.lock) zapisują dokładnie rozstrzygniętą wersję każdej zależności w momencie instalacji. Należy je zatwierdzać w systemie kontroli wersji, aby każdy członek zespołu i każdy potok CI/CD korzystał z identycznych wersji zależności, zapobiegając atakom na łańcuch dostaw polegającym na zatruwaniu wersji pakietów między instalacjami.

# Version range vs pinned versions:

# FLEXIBLE (can pull different versions each install):
# 'express': '^4.0.0'   -> installs latest 4.x.x
# 'lodash': '*'         -> installs any version!

# PINNED (always same version):
# 'express': '4.18.2'   -> always exactly 4.18.2

# Lock file (package-lock.json):
# Records EXACT resolved version of every transitive dep.
# Commit this file! It ensures reproducible builds.
# Never .gitignore lock files (security anti-pattern).

Ataki na łańcuch dostaw: typosquatting i dependency confusion

Ataki na łańcuch dostaw wymierzone są w ekosystem zależności. Typosquatting polega na publikowaniu złośliwych pakietów o nazwach podobnych do nazw popularnych pakietów (np. lodahs zamiast lodash) w nadziei, że programiści pomylą się przy wpisywaniu nazwy. Ataki dependency confusion wykorzystują kolejność, w jakiej menedżery pakietów przeszukują rejestry — atakujący publikuje złośliwy pakiet o takiej samej nazwie jak wewnętrzny pakiet prywatny, ale z wyższym numerem wersji, przez co menedżer pakietów zamiast niego instaluje złośliwą wersję publiczną.

# Dependency Confusion Attack (Alex Birsan 2021):
# Company uses internal package 'company-utils' v1.0.0
# Hosted on: internal.registry.company.com

# Attacker publishes 'company-utils' v9.9.9 to npmjs.com
# (public registry with higher version number)

# npm install resolves: 'find highest version across ALL registries'
# -> Installs v9.9.9 from public npm (attacker's malicious package!)
# -> Instead of v1.0.0 from internal registry

# Defense: use namespace scoping (@company/utils)
# or configure npm to ONLY use internal registry for private packages

Narzędzia SCA dostępne na rynku

W branży powszechnie używa się kilku narzędzi SCA. Snyk zapewnia przyjazne programistom skanowanie zależności i automatycznie tworzy żądania PR z poprawkami. OWASP Dependency-Check to bezpłatne, szeroko stosowane narzędzie dla języków Java, .NET, Python i Ruby. GitHub Dependabot automatycznie otwiera żądania pull request aktualizujące podatne zależności w repozytoriach GitHub. JFrog Xray i Sonatype Nexus IQ integrują SCA z repozytoriami artefaktów, aby blokować podatne kompilacje przed wdrożeniem na produkcję.

Integracja SCA z potokami CI/CD

SCA jest najbardziej skuteczne, gdy zostanie zintegrowane jako bramka jakości w potoku CI/CD. Przy każdym żądaniu pull request i każdej kompilacji potok uruchamia narzędzie SCA i przerywa kompilację, jeśli w zależnościach zostaną znalezione krytyczne luki CVE lub luki o wysokim poziomie ważności. Podejście „shift left” wykrywa podatne zależności, zanim trafią na produkcję — a nie kilka miesięcy później podczas ręcznego przeglądu bezpieczeństwa lub po włamaniu. Zespoły powinny jasno określić progi ważności luk, które blokują wdrożenie, oraz tych, które generują tylko ostrzeżenia.

# GitHub Actions SCA pipeline step:
# - name: Run Snyk SCA scan
#   uses: snyk/actions/node@master
#   env:
#     SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
#   with:
#     args: --severity-threshold=high
#             --fail-on=upgradable
# # Build fails if any HIGH or CRITICAL vuln found
# # that has an available fix (--fail-on=upgradable)
# # No fix available? Generates warning, doesn't block
# # (acknowledging risk explicitly is better than blocking forever)

Ocena kondycji pakietów open source

Przed dodaniem zależności oceń jej poziom bezpieczeństwa, korzystając z wielu sygnałów. Aktywność w utrzymaniu: czy projekt jest aktywnie rozwijany? Kiedy miało miejsce ostatnie zatwierdzenie i wydanie? Historia znanych luk: ile luk CVE wykryto i jak szybko je usuwano? Liczba pobrań: szeroko używane pakiety przyciągają większą uwagę pod kątem bezpieczeństwa. Liczba zależności: pakiety z mniejszą liczbą zależności wprowadzają mniejsze ryzyko tranzytywne. OpenSSF Scorecard zapewnia automatyczną ocenę praktyk bezpieczeństwa projektów open source.

Strategie usuwania luk

Gdy SCA wykryje podatną zależność, można zastosować kilka strategii usunięcia problemu. Aktualizacja do wersji z poprawką to preferowane rozwiązanie, jeśli jest dostępne. Wirtualne łatanie za pomocą reguł WAF może ograniczyć znane ścieżki wykorzystania luki do czasu przygotowania aktualizacji. Usuń zależność, jeśli nie jest już potrzebna. Zaakceptuj ryzyko z udokumentowanym uzasadnieniem, jeśli w konkretnym kontekście użycia luka nie może zostać wykorzystana (np. luka po stronie serwera w bibliotece używanej po stronie klienta). Nigdy nie pozostawiaj krytycznych luk bez rozwiązania i bez udokumentowanej akceptacji ryzyka.

Zgodność licencyjna zależności

Narzędzia SCA mają podwójne zastosowanie: wykrywają luki w zabezpieczeniach oraz wskazują problemy ze zgodnością licencyjną w zależnościach open source. Do często problematycznych licencji należą GPL v2/v3 (copyleft — wymaga udostępnienia produktu jako open source, jeśli jest on rozpowszechniany), AGPL (rozszerza GPL na usługi sieciowe) oraz SSPL. Użycie biblioteki objętej licencją GPL w prawnie zastrzeżonym oprogramowaniu komercyjnym bez licencji komercyjnej może powodować poważne ryzyko prawne. Narzędzia SCA, takie jak FOSSA, Black Duck i WhiteSource, automatyzują skanowanie licencji wraz z wykrywaniem luk, zapewniając zgodność z obowiązkami dotyczącymi oprogramowania open source.

# License compliance risk levels:
# PERMISSIVE (low risk for commercial use):
#   MIT, Apache 2.0, BSD 2/3-Clause
#   -> Can use in proprietary code, just keep attribution

# WEAK COPYLEFT (medium risk - check usage):
#   LGPL -> can link dynamically without open-sourcing your code
#   MPL 2.0 -> modifications to MPL files must be open-sourced

# STRONG COPYLEFT (high risk for proprietary products):
#   GPL v2, GPL v3 -> if you distribute code using GPL library,
#                     your entire product must also be GPL
#   AGPL -> extends GPL to SaaS/network services

# SCA policy: block AGPL/GPL in commercial product
# -> Review any exception requests manually

Szybki test

Sprawdź swoją znajomość zagadnień z CompTIA Security+ (SY0-701) omówionych w tej lekcji.

Podsumowanie lekcji

W tej lekcji dowiedziałeś się, że: narzędzia SCA skanują całe drzewo zależności, w tym zależności tranzytywne, pod kątem znanych CVE; SBOM-y zapewniają czytelny maszynowo spis komponentów, umożliwiając szybką reakcję po ujawnieniu nowych luk; a integracja SCA jako bramki jakości CI/CD pozwala wykryć podatne zależności, zanim trafią na produkcję. Następnie omówimy DevSecOps oraz przenoszenie mechanizmów bezpieczeństwa na wcześniejsze etapy całego potoku CI/CD.

Często zadawane pytania

Czy lekcja „Bezpieczeństwo zależności i analiza składu oprogramowania” jest bezpłatna?

Tak — pełny tekst „Bezpieczeństwo zależności i analiza składu oprogramowania” 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 Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Bezpieczeństwo zależności i analiza składu oprogramowania”?

Audytuj biblioteki zewnętrzne za pomocą narzędzi SCA, wymuszaj przypinanie wersji zależności i integruj automatyczne alerty o podatnościach z potokiem CI/CD. Ćwiczysz Cloud & IT Cert Prep 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ąć Cloud & IT Cert Prep?

Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep 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 3 z 4.

Ile czasu zajmuje lekcja „Bezpieczeństwo zależności i analiza składu oprogramowania”?

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 Cloud & IT Cert Prep?

Tak. Każda lekcja Cloud & IT Cert Prep 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. Walidacja danych wejściowych i kodowanie danych wyjściowych
  2. Bezpieczne zarządzanie sekretami i zmienne środowiskowe
  3. Bezpieczeństwo zależności i analiza składu oprogramowania
  4. DevSecOps: przesuwanie bezpieczeństwa w lewo w potokach
← Powrót do Cloud & IT Cert Prep