Security+ Academy · Lekcja

DevSecOps: przesuwanie bezpieczeństwa w lewo w potokach

Włącz kontrole SAST, DAST, skanowanie kontenerów i bezpieczeństwo IaC do potoków CI/CD, aby bramki bezpieczeństwa były automatycznie egzekwowane przy każdym commicie.

Lekcja 4 z 413 kroki

DevSecOps: przesuwanie bezpieczeństwa w lewo w potokach to bezpłatna lekcja Security+ Academy na CoddyKit. To lekcja 4 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 Security+ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Security+ Academy zawiera 4 lekcji w sumie.

Czym jest przenoszenie bezpieczeństwa na wcześniejsze etapy?

Przenoszenie bezpieczeństwa na wcześniejsze etapy oznacza integrowanie działań związanych z bezpieczeństwem wcześniej w cyklu życia oprogramowania — w środowisku IDE programisty, podczas przeglądu kodu i w potoku CI/CD — zamiast testowania bezpieczeństwa dopiero na końcowej bramce przed wdrożeniem. Tradycyjne przeglądy bezpieczeństwa odbywały się pod koniec cyklu wytwarzania, przez co naprawianie problemów było kosztowne i czasochłonne. Wykrycie luki podczas programowania kosztuje około 100 razy mniej niż usunięcie jej po wykryciu na produkcji, już po włamaniu.

Czym jest DevSecOps?

DevSecOps rozszerza model DevOps, integrując bezpieczeństwo jako wspólną odpowiedzialność zespołów programistycznych, operacyjnych i bezpieczeństwa na wszystkich etapach cyklu życia oprogramowania (SDLC). Celem jest automatyzacja testów bezpieczeństwa, tak aby były uruchamiane na każdym etapie bez spowalniania dostarczania oprogramowania. Bezpieczeństwo staje się ciągłą cechą potoku, a nie jednorazowym punktem kontrolnym. W dojrzałych programach DevSecOps programiści otrzymują informacje zwrotne dotyczące bezpieczeństwa w ciągu kilku sekund od napisania kodu, a nie dopiero po kilku tygodniach od ręcznego przeglądu.

SAST: statyczne testowanie bezpieczeństwa aplikacji

SAST (Static Application Security Testing) analizuje kod źródłowy, kod bajtowy lub plik binarny bez uruchamiania aplikacji. Narzędzia SAST wyszukują wzorce wskazujące na podatności: konkatenację zapytań SQL, nieoczyszczone dane wyjściowe, użycie zablokowanych funkcji, zakodowane na stałe dane uwierzytelniające oraz niebezpieczne użycie kryptografii. SAST działa w potoku CI przy każdym zatwierdzeniu zmian, wykrywając problemy, zanim trafią one do kontroli jakości lub środowiska produkcyjnego. Popularne narzędzia to Semgrep, SonarQube, Checkmarx i Veracode.

# Semgrep SAST rule example:
# Detect raw SQL string concatenation (SQL injection risk):
# rules:
#   - id: sql-injection-string-concat
#     pattern: |
#       $QUERY = '...' + $USER_INPUT
#       $DB.execute($QUERY)
#     message: 'SQL injection risk: use parameterized queries'
#     severity: ERROR
#     languages: [python]

# Running Semgrep in CI:
# semgrep --config auto --error src/
# -> Fails build if ERROR severity findings found

DAST: dynamiczne testowanie bezpieczeństwa aplikacji

DAST (Dynamic Application Security Testing) testuje uruchomioną aplikację, wysyłając złośliwe dane i obserwując odpowiedzi — symuluje w ten sposób zachowanie rzeczywistego atakującego. W przeciwieństwie do SAST narzędzie DAST wykrywa podatności, które pojawiają się wyłącznie w czasie działania: błędy uwierzytelniania, problemy z zarządzaniem sesją, błędy logiki biznesowej oraz podatności na wstrzyknięcia w złożonych przepływach danych. Popularne narzędzia DAST to OWASP ZAP (bezpłatne), Burp Suite Enterprise i Acunetix. DAST działa w potoku na środowisku przejściowym.

# OWASP ZAP automated DAST in CI pipeline:
# docker run -t owasp/zap2docker-stable zap-baseline.py \
#   -t https://staging.myapp.com \
#   -r zap-report.html \
#   -I  (do not fail on alerts, report only)

# For blocking builds on high findings:
# zap-full-scan.py -t https://staging.myapp.com \
#   -l HIGH   (fail if HIGH or CRITICAL alerts found)

# ZAP tests for:
# SQL injection, XSS, CSRF, insecure headers,
# path traversal, broken authentication, open redirects

Skanowanie obrazów kontenerów

Obrazy kontenerów są tworzone na podstawie obrazów bazowych zawierających pakiety systemu operacyjnego, środowiska uruchomieniowe języków oraz zależności aplikacji — wszystkie te elementy mogą być źródłem znanych podatności. Narzędzia do skanowania obrazów kontenerów analizują warstwy obrazów i identyfikują podatne pakiety. Szeroko stosowane są narzędzia Trivy (bezpłatne i szybkie), Grype (Anchore) oraz Clair. Skanowanie odbywa się w ramach potoku budowania obrazu i blokuje promowanie obrazów z krytycznymi CVE do produkcyjnych rejestrów.

# Trivy container scan in CI pipeline:
# trivy image --severity HIGH,CRITICAL \
#             --exit-code 1 \
#             myapp:latest

# Output example:
# library/python:3.9-slim (debian 11.6)
# ===================================
# CVE-2023-1234  CRITICAL  openssl 1.1.1n-0+deb11u3 -> 1.1.1t
# CVE-2023-5678  HIGH      libssl  1.1.1n            -> 1.1.1t

# --exit-code 1 causes pipeline to fail
# on any HIGH or CRITICAL finding -> blocks push to registry

Skanowanie bezpieczeństwa infrastruktury jako kodu (IaC)

Skanowanie bezpieczeństwa IaC analizuje konfiguracje Terraform, CloudFormation, manifesty Kubernetes oraz wykresy Helm pod kątem błędnych konfiguracji bezpieczeństwa, zanim zostaną zastosowane. Narzędzia takie jak Checkov i tfsec sprawdzają między innymi naruszenia takie jak: zasobniki S3 bez szyfrowania po stronie serwera, grupy zabezpieczeń zezwalające na cały ruch przychodzący, role IAM z uprawnieniami wieloznacznymi oraz pody Kubernetes uruchamiane jako root. Skanowanie IaC zapobiega błędnym konfiguracjom chmury, zanim trafią one do dowolnego środowiska.

# Checkov IaC scan example:
# checkov -d ./terraform/ --compact

# Findings example:
# FAILED: CKV_AWS_20: S3 Bucket has an ACL defined which allows public access
#   File: /terraform/s3.tf, Line: 15

# FAILED: CKV_AWS_57: S3 Bucket has server access logging disabled
#   File: /terraform/s3.tf, Line: 15

# FAILED: CKV_AWS_24: Ensure no security groups allow all ingress traffic
#   File: /terraform/sg.tf, Line: 8

# Passed checks: 47, Failed: 3, Skipped: 0

Skanowanie sekretów w potokach

Narzędzia do skanowania sekretów sprawdzają kod źródłowy i zatwierdzenia zmian pod kątem przypadkowo umieszczonych danych uwierzytelniających. Narzędzia takie jak truffleHog, GitLeaks i detect-secrets skanują historię git oraz nowe zatwierdzenia zmian w poszukiwaniu wzorców odpowiadających kluczom API, ciągom połączeń, kluczom prywatnym i tokenom JWT. Jako hak pre-commit skanowanie sekretów blokuje zatwierdzenia zawierające dane uwierzytelniające. Jako bramka CI skanuje wszystkie pliki w repozytorium przy każdym wypchnięciu zmian i kończy kompilację niepowodzeniem po wykryciu sekretów.

# GitLeaks pre-commit hook configuration:
# .gitleaks.toml:
# [allowlist]
#   description = 'Known false positives'
#   paths = ['test/fixtures/fake_key.txt']

# Install as pre-commit hook:
# gitleaks protect --staged
# (scans staged files before commit is created)

# In CI pipeline:
# gitleaks detect --source=. --report-format=json \
#   --report-path=gitleaks-report.json
# exit code 1 = secrets found -> blocks pipeline

Modelowanie zagrożeń w cyklu życia oprogramowania (SDLC)

Modelowanie zagrożeń to ustrukturyzowany proces identyfikowania wymagań bezpieczeństwa i błędów projektowych, zanim zostanie napisany kod. Model STRIDE (podszywanie się, modyfikowanie, zaprzeczanie, ujawnienie informacji, odmowa usługi, podniesienie uprawnień) pomaga zespołom systematycznie wyliczać zagrożenia dla diagramu przepływu danych systemu. Sesje modelowania zagrożeń odbywają się na etapie projektowania i prowadzą do utworzenia uporządkowanej według priorytetów listy zagrożeń, która wyznacza wymagania bezpieczeństwa oraz pomaga w wyborze reguł SAST/DAST.

# STRIDE threat categories applied to a web login API:
# S - Spoofing:       Attacker impersonates valid user
#     Control: Strong authentication, MFA
# T - Tampering:      Attacker modifies login request
#     Control: TLS, HMAC, input validation
# R - Repudiation:    User denies actions taken
#     Control: Audit logging with tamper-evident storage
# I - Info Disclosure: Password exposed in logs
#     Control: Never log sensitive fields
# D - Denial of Service: Flood login endpoint
#     Control: Rate limiting, CAPTCHA
# E - Elevation of Privilege: Bypass authorization
#     Control: Server-side authorization checks

Bramki bezpieczeństwa: blokujące i doradcze

Potoki DevSecOps implementują kontrole bezpieczeństwa jako bramki blokujące (kończą kompilację niepowodzeniem i uniemożliwiają wdrożenie) albo kontrole doradcze (raportują ustalenia i pozwalają kontynuować wdrożenie). Ustalenia o krytycznym i wysokim poziomie ważności z narzędzi SAST, skanowania kontenerów i wykrywania sekretów zazwyczaj blokują proces. Ustalenia o średnim i niskim poziomie ważności generują powiadomienia lub zgłoszenia bez blokowania procesu. Taki kompromis zapobiega zatrzymaniu całego dostarczania oprogramowania przez bezpieczeństwo, a jednocześnie gwarantuje, że naprawdę niebezpieczne warunki nie trafią automatycznie do środowiska produkcyjnego.

Metryki bezpieczeństwa w DevSecOps

Programy DevSecOps należy mierzyć za pomocą przejrzystych metryk. Najważniejsze metryki to: średni czas usunięcia (MTTR) ustaleń o wysokim poziomie ważności, gęstość podatności (liczba ustaleń na 1000 wierszy kodu w czasie), wskaźnik przeoczeń (odsetek podatności wykrytych po wdrożeniu produkcyjnym w porównaniu z wykrytymi przed wdrożeniem) oraz wskaźnik pomyślnych przejść przez bramki bezpieczeństwa potoku. Analizowanie trendów tych metryk w czasie pokazuje skuteczność programu i pomaga podejmować decyzje inwestycyjne dotyczące dodatkowych narzędzi lub szkoleń.

Kultura: bezpieczeństwo jako wspólna odpowiedzialność

Najtrudniejszym elementem DevSecOps jest kultura, a nie technologia. Bezpieczeństwo musi stać się odpowiedzialnością każdego programisty, a nie tylko zespołu bezpieczeństwa. Wymaga to: szkoleń programistów z zakresu bezpieczeństwa (świadomość bezpiecznego kodowania), security champions działających w zespołach programistycznych, analiz po incydentach bez szukania winnych, gdy podatności trafią do środowiska produkcyjnego (z naciskiem na usprawnienie procesu, a nie karanie), oraz zaangażowania kadry kierowniczej, która akceptuje kompromisy dotyczące szybkości dostarczania, gdy rzeczywiste ryzyko bezpieczeństwa tego wymaga. Technologia bez zmiany kultury prowadzi do powstania narzędzi skanujących, które programiści uczą się ignorować.

Szybki test

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

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo, że: DevSecOps integruje SAST, DAST, skanowanie sekretów, skanowanie kontenerów i skanowanie IaC jako zautomatyzowane bramki potoku, blokowanie ustaleń o wysokim poziomie ważności zapobiega przedostawaniu się niebezpiecznych warunków do środowiska produkcyjnego, a przeniesienie bezpieczeństwa na wcześniejsze etapy znacznie obniża koszty naprawy dzięki wykrywaniu podatności podczas tworzenia oprogramowania, a nie dopiero po wdrożeniu. Następnie omówimy fizyczne mechanizmy bezpieczeństwa stosowane w obiektach i centrach danych.

Bezpłatny start

Ucz się 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
30
Lekcje
120

Często zadawane pytania

Czy lekcja „DevSecOps: przesuwanie bezpieczeństwa w lewo w potokach” jest bezpłatna?

Tak — pełny tekst „DevSecOps: przesuwanie bezpieczeństwa w lewo w potokach” 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 Security+ Academy, przejdź na CoddyKit PRO. Kurs Security+ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „DevSecOps: przesuwanie bezpieczeństwa w lewo w potokach”?

Włącz kontrole SAST, DAST, skanowanie kontenerów i bezpieczeństwo IaC do potoków CI/CD, aby bramki bezpieczeństwa były automatycznie egzekwowane przy każdym commicie. Ćwiczysz 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ąć Security+ Academy?

Nie wymagamy żadnego doświadczenia. 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 4 z 4.

Ile czasu zajmuje lekcja „DevSecOps: przesuwanie bezpieczeństwa w lewo w potokach”?

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 Security+ Academy?

Tak. Każda lekcja 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. 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 Security+ Academy