Eksplorowanie bezpiecznego procesu DevOps
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.
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:
- Żądanie pakietu: Deweloperzy żądają zatwierdzenia dodania nowych pakietów lub zaktualizowania istniejących.
- 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).
- Przegląd licencji: Zautomatyzowane narzędzia sprawdzają licencje pakietów względem zasad organizacyjnych.
- 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.
- Przegląd ręczny: Zespół ds. zabezpieczeń przegląda pakiety o wysokim ryzyku lub pakiety żądające podwyższonych uprawnień.
- Zatwierdzenie lub odrzucenie: Pakiety są zatwierdzane do użytku, odrzucane lub oznaczane do naprawy przed zatwierdzeniem.
- 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.