Eksplorowanie bezpiecznego procesu DevOps

Ukończone

Celem potoku Secure DevOps jest umożliwienie zespołom deweloperów szybkiej pracy bez wprowadzania niepożądanych luk w zabezpieczeniach w swoich projektach. Ta równowaga między szybkością a bezpieczeństwem wymaga wbudowania praktyk bezpieczeństwa w całym potoku, a nie traktowania bezpieczeństwa jako oddzielnej fazy.

Bezpieczny przepływ pracy ciągu DevOps

Kompleksowy pipeline Secure DevOps integruje kontrole bezpieczeństwa w wielu etapach procesu dostarczania oprogramowania.

Diagram przedstawiający przepływ pracy Secure Azure Pipelines z 10 połączonymi etapami rozmieszczonymi w ciągłym okręgu reprezentującym proces dostarczania zintegrowanego z zabezpieczeniami.

Przepływ pracy zapewnia ciągłą weryfikację bezpieczeństwa od momentu zatwierdzenia kodu do wdrożenia produkcyjnego. Każdy etap obejmuje odpowiednie mechanizmy kontroli zabezpieczeń, które są wykonywane automatycznie bez konieczności ręcznej interwencji w celu przeprowadzania rutynowych testów.

Niezbędne funkcje bezpieczeństwa wykraczające poza standardowe potoki

Bezpieczne potoki DevOps zawierają dodatkowe funkcje zabezpieczeń, które nie są zwykle spotykane w standardowych potokach ciągłej integracji/ciągłego wdrażania. Te funkcje dotyczą typowych luk w zabezpieczeniach, których brakuje w tradycyjnych potokach:

Zarządzanie pakietami z zatwierdzeniem zabezpieczeń

Wyzwanie: Nowoczesne aplikacje zależą od wielu pakietów, bibliotek i składników innych firm. Te zależności powodują zagrożenia bezpieczeństwa:

  • Znane luki w zabezpieczeniach: Pakiety innych firm mogą zawierać znane luki w zabezpieczeniach, które mogą wykorzystać osoby atakujące.
  • Złośliwe pakiety: Osoby atakujące czasami publikują złośliwe pakiety o nazwach podobnych do popularnych pakietów, mając nadzieję, że deweloperzy zainstalują je przez pomyłkę (atak polegający na wykorzystywaniu literówek).
  • Ataki łańcucha dostaw: Naruszone repozytoria pakietów lub konta opiekunów mogą spowodować dystrybucję złośliwego kodu za pośrednictwem legalnych kanałów aktualizacji.
  • Zgodność licencji: Niektóre licencje pakietów mogą nie być zgodne z zamierzonym użyciem, co stwarza ryzyko prawne.
  • Nieutrzymywane pakiety: Pakiety, które nie są już obsługiwane, nie będą otrzymywać aktualizacji zabezpieczeń, tworząc długoterminowe luki w zabezpieczeniach.

Rozwiązanie: Zarządzanie pakietami z procesami zatwierdzania dodaje bramy zabezpieczeń dla zależności:

Kroki przepływu pracy zatwierdzania:

  1. Żądanie pakietu: Deweloperzy żądają zatwierdzenia dodania nowych pakietów lub zaktualizowania istniejących.
  2. Skanowanie zabezpieczeń: Zautomatyzowane narzędzia skanują pakiety pod kątem znanych luk w zabezpieczeniach przy użyciu baz danych luk w zabezpieczeniach, takich jak CVE (typowe luki w zabezpieczeniach i ekspozycje) i NVD (krajowa baza danych luk w zabezpieczeniach).
  3. Przegląd licencji: Zautomatyzowane narzędzia sprawdzają licencje pakietów względem zasad organizacyjnych.
  4. Analiza zależności: Narzędzia analizują zależności przechodnie (czyli zależności zależności) pod kątem zagrożeń bezpieczeństwa.
  5. Przegląd ręczny: Zespół ds. zabezpieczeń przegląda pakiety o wysokim ryzyku lub pakiety żądające podwyższonych uprawnień.
  6. Zatwierdzenie lub odrzucenie: Pakiety są zatwierdzane do użytku, odrzucane lub oznaczane do naprawy przed zatwierdzeniem.
  7. Ciągłe monitorowanie: Zatwierdzone pakiety są stale monitorowane pod kątem nowo wykrytych luk w zabezpieczeniach.

Korzyści z wczesnej identyfikacji: Te kroki należy wdrożyć na wczesnym etapie procesu, aby zidentyfikować problemy wcześniej w cyklu rozwojowym:

  • Problemy znalezione wcześnie są tańsze do naprawienia niż te odkryte w produkcji.
  • Deweloperzy mogą wybierać alternatywne pakiety przed utworzeniem znaczących funkcji dotyczących zależności podatnych na zagrożenia.
  • Przeglądy zabezpieczeń nie stają się wąskimi gardłami, gdy są przeprowadzane stopniowo, a nie jednocześnie przed wydaniem.

Przykładowe narzędzia:

  • Azure Artifacts: Zapewnia zarządzanie pakietami przy użyciu nadrzędnych źródeł i skanowania luk w zabezpieczeniach.
  • GitHub Dependabot: Automatycznie wykrywa zależności podatne na zagrożenia i tworzy żądania ściągnięcia w celu ich zaktualizowania.
  • Snyk: Skanuje zależności pod kątem luk w zabezpieczeniach i problemów z licencjami.
  • WhiteSource: Udostępnia analizę kompozycji oprogramowania dla składników typu open source.

Skanowanie zabezpieczeń kodu źródłowego

Wyzwanie: Kod źródłowy aplikacji może zawierać luki w zabezpieczeniach, które nie są natychmiast oczywiste podczas programowania:

  • Wady iniekcji: Wstrzyknięcie kodu SQL, wstrzyknięcie polecenia i inne luki w zabezpieczeniach iniekcji.
  • Problemy z uwierzytelnianiem: Słabe mechanizmy uwierzytelniania, trwale zakodowane poświadczenia lub niewłaściwe zarządzanie sesjami.
  • Ujawnienie poufnych danych: Przypadkowe dołączenie wpisów tajnych, kluczy interfejsu API lub informacji osobistych w kodzie.
  • Błędna konfiguracja zabezpieczeń: Niezabezpieczone domyślne konfiguracje, niepotrzebne funkcje włączone lub brakujące poprawki zabezpieczeń.
  • Używanie składników ze znanymi lukami w zabezpieczeniach: Nieaktualne biblioteki lub struktury z problemami z zabezpieczeniami.
  • Niewystarczające rejestrowanie i monitorowanie: Brak odpowiedniego rejestrowania zdarzeń zabezpieczeń na potrzeby wykrywania i reagowania na zdarzenia.

Rozwiązanie: Skanowanie kodu źródłowego dodaje automatyczną analizę zabezpieczeń do procesu kompilacji:

Statyczne testowanie zabezpieczeń aplikacji (SAST):

  • Analizuje kod źródłowy bez jego wykonywania.
  • Identyfikuje potencjalne luki w zabezpieczeniach w kodzie.
  • Wykrywa typowe wzorce luk w zabezpieczeniach, takie jak wstrzyknięcie kodu SQL, wykonywanie skryptów między witrynami (XSS) i przepełnienie buforu.
  • Zawiera konkretne lokalizacje kodu i wskazówki dotyczące korygowania.
  • Działa wystarczająco szybko, aby przekazać opinię podczas procesu kompilacji.

Skanowanie tajemnic:

  • Wykrywa przypadkowo zatwierdzone sekrety, takie jak klucze API, hasła i certyfikaty.
  • Uniemożliwia wdrażanie poświadczeń w środowisku produkcyjnym.
  • Ostrzega deweloperów natychmiast po wykryciu tajnych informacji.
  • Może automatycznie unieważniać wykryte poświadczenia po zintegrowaniu z systemami zarządzania tajemnicami.

Analiza jakości kodu:

  • Identyfikuje problemy z jakością kodu, które mogą prowadzić do luk w zabezpieczeniach.
  • Wykrywa złożone ścieżki kodu, które są trudne do prawidłowego zabezpieczenia.
  • Wyróżnia obszary wymagające dodatkowego przeglądu zabezpieczeń.

Czas skanowania: Skanowanie kodu źródłowego odbywa się po skompilowaniu aplikacji, ale przed wydaniem i testowaniem wersji wstępnej:

  • Po kompilacji: Kompletny kod aplikacji jest dostępny do analizy, w tym wygenerowanego kodu.
  • Przed rozpoczęciem testowania: Luki w zabezpieczeniach są identyfikowane przed zainwestowanie zasobów testowania zabezpieczeń.
  • Przed wdrożeniem: Problemy są wykrywane przed osiągnięciem środowiska przejściowego lub produkcyjnego.

Zalety wczesnego wykrywania:

  • Skanowanie źródła identyfikuje luki w zabezpieczeniach na początku cyklu programowania.
  • Deweloperzy otrzymują natychmiastową opinię na temat problemów z zabezpieczeniami w kodzie.
  • Problemy z zabezpieczeniami są rozwiązywane, gdy kod jest świeży w umysłach deweloperów.
  • Koszt naprawiania luk w zabezpieczeniach jest znacznie niższy niż ich naprawianie w środowisku produkcyjnym.

Przykładowe narzędzia:

  • GitHub CodeQL: Aparat analizy kodu semantycznego, który wykrywa luki w zabezpieczeniach w bazie kodu.
  • SonarQube: Narzędzie do ciągłego monitorowania, które wykrywa błędy, nieprawidłowości w kodzie i luki w zabezpieczeniach.
  • Checkmarx: Statyczna platforma testowania zabezpieczeń aplikacji.
  • Veracode: Platforma analizy zabezpieczeń z funkcjami SAST.
  • Analiza kodu zabezpieczeń firmy Microsoft: Rozszerzenie dla usługi Azure DevOps, która uruchamia narzędzia do analizy zabezpieczeń.

Integracja z ciągłym dostarczaniem oprogramowania

Zarówno zatwierdzanie zarządzania pakietami, jak i skanowanie kodu źródłowego bezproblemowo integrują się z potokami ciągłego dostarczania:

Automatyczne bramy: Kontrole bezpieczeństwa stają się automatycznymi bramami rurociągu, które muszą przejść, zanim rurociąg będzie kontynuowany. Nieudane kontrole zabezpieczeń uniemożliwiają przejście niezabezpieczonego kodu.

Szybka opinia: Deweloperzy otrzymują opinie dotyczące zabezpieczeń w ciągu kilku minut, a nie dni lub tygodni. Ta szybka opinia umożliwia szybkie poprawki przed utratą kontekstu.

Widoczność zabezpieczeń: Zespoły ds. zabezpieczeń uzyskują wgląd we wszystkie wdrażane kody i zależności bez konieczności ręcznego przeglądania każdej zmiany.

Dokumentacja dotycząca zgodności: Automatyczne kontrole zabezpieczeń tworzą szlaki audytowe dokumentujące proces weryfikacji zabezpieczeń na każdym etapie potoku.

Rozwiązywanie problemów z pełnym cyklem życia

W poniższych sekcjach tego modułu szczegółowo zapoznamy się z tymi podstawowymi funkcjami zabezpieczeń:

  • Kluczowe punkty weryfikacji, w których powinny zostać wykonane kontrole zabezpieczeń.
  • Ciągłe strategie weryfikacji zabezpieczeń.
  • Metody implementacji dla różnych typów potoków.
  • Narzędzia i techniki efektywnej automatyzacji zabezpieczeń.
  • Jak zrównoważyć dokładność zabezpieczeń z szybkością dostarczania.