Badanie ciągłej walidacji bezpieczeństwa
Nowoczesne deweloperzy rutynowo używają składników dostępnych w publicznych źródłach pakietów, takich jak npm, NuGet, PyPI, Maven Central i RubyGems. Ta praktyka stała się standardem w całej branży oprogramowania, ponieważ organizacje stosują składniki oprogramowania open source (OSS) w celu szybszego dostarczania i lepszej wydajności.
Podwójnie krawędziowy miecz składników innych firm
Zalety składników innych firm:
- Szybsze programowanie: Deweloperzy nie muszą tworzyć typowych funkcji od podstaw.
- Sprawdzone rozwiązania: Popularne pakiety zostały przetestowane przez tysiące użytkowników.
- Pomoc techniczna społeczności: Aktywne społeczności zapewniają dokumentację, aktualizacje i pomoc.
- Oszczędności: Bezpłatne składniki systemu operacyjnego znacznie obniżają koszty programowania.
- Przyspieszanie innowacji: Zespoły mogą skupić się na unikatowej logice biznesowej, a nie na ponownym wynalezieniu standardowych funkcji.
Rosnące zagrożenia związane z bezpieczeństwem i zgodnością: Jednak w miarę wzrostu zależności od komponentów oprogramowania open source innych firm, rosną również ryzyka:
Luki w zabezpieczeniach:
- Pakiety innych firm mogą zawierać znane luki w zabezpieczeniach, które mogą wykorzystać osoby atakujące.
- Luki w zabezpieczeniach są stale wykrywane w istniejących pakietach.
- Przejściowe zależności (czyli zależności twoich zależności) mogą wprowadzać luki w zabezpieczeniach, o których możesz nie wiedzieć.
- Ataki łańcucha dostaw są przeznaczone dla popularnych pakietów w celu naruszenia zabezpieczeń wielu aplikacji podrzędnych.
Problemy ze zgodnością licencji:
- Ukryte wymagania licencyjne mogą tworzyć zobowiązania prawne.
- Niektóre licencje systemu operacyjnego wymagają użycia własnego kodu typu open source, jeśli używasz ich składników.
- Naruszenia licencji mogą prowadzić do pozwów, kar finansowych i wymuszonych wydań kodu.
- Różne licencje mogą być ze sobą niezgodne, tworząc konflikty zgodności.
Krytyczne znaczenie dla działania firmy: W przypadku firmy te problemy mają kluczowe znaczenie. Problemy związane ze zgodnością, zobowiązaniami i danymi osobowymi klientów mogą powodować poważne problemy związane z prywatnością i bezpieczeństwem:
- Odpowiedzialność prawna: Naruszenia licencji narażają organizacje na działania prawne.
- Naruszenia zabezpieczeń danych: Wrażliwe składniki mogą prowadzić do naruszeń danych wpływających na dane osobowe klientów.
- Zgodność: Naruszenia przepisów, takich jak RODO, KPCHA lub HIPAA, mogą spowodować znaczne grzywny.
- Uszkodzenie reputacji: Zdarzenia zabezpieczeń i naruszenia licencji powodują uszkodzenie zaufania klientów i reputacji marki.
- Umowy klienta: Klienci biznesowi często wymagają gwarancji w zakresie zabezpieczeń i zgodności, które mogą być pogwałcone przez podatne na zagrożenia komponenty.
Wartość wczesnego wykrywania
Ostrzeżenie zaawansowane: Identyfikowanie problemów z zabezpieczeniami i zgodnością na wczesnym etapie cyklu wydania zapewnia zaawansowane ostrzeżenie i wystarczająco dużo czasu, aby rozwiązać problemy przed dotarciem do środowiska produkcyjnego.
Koszt korygowania: Koszt rozwiązywania problemów jest znacznie niższy, im wcześniej w projekcie zostaną wykryte.
- Podczas opracowywania: Zmiana zależności kosztuje godziny czasu dewelopera.
- Podczas testowania: Rozwiązywanie problemów wymaga ponownego testowania całej aplikacji.
- W środowisku produkcyjnym: Korygowanie wymaga stosowania poprawek awaryjnych, reagowania na zdarzenia zabezpieczeń, powiadomień klientów i potencjalnych raportów regulacyjnych.
Wpływ gospodarczy: Badania pokazują, że problemy z zabezpieczeniami znalezione w produkcji kosztują 10-100 razy więcej do naprawy niż te wykryte podczas opracowywania.
Ciągła weryfikacja zabezpieczeń integracji
Po scaleniu kodu z gałęzią główną kompleksowa weryfikacja zabezpieczeń powinna zostać wykonana w ramach procesu kompilacji ciągłej integracji.
Kompilacja ciągłej integracji a kompilacja PR-CI
Ciągła integracja żądania ściągnięcia (PR-CI): Uruchamia się podczas walidacji żądania ściągnięcia przed scaleniem kodu. Zapewnia szybką informację zwrotną, aby zapobiec wprowadzeniu podatnego na zagrożenia kodu do bazy kodu.
Pełna budowa CI: Uruchamia się po scaleniu kodu z gałęzią główną. Obejmuje bardziej kompleksowe kontrole i przygotowuje artefakty do wdrożenia.
Typowe różnice: Podstawową różnicą między kompilacjami PR-CI a pełnymi kompilacjami CI jest to, że PR-CI nie potrzebuje tworzenia pakietów ani artefaktów etapowych, które generują pełne kompilacje CI. Dzięki temu PR-CI pozostaje szybkie, jednocześnie zachowując weryfikację zabezpieczeń.
Oba powinny obejmować kontrole zabezpieczeń: Oba typy kompilacji powinny uruchamiać podstawowe weryfikacje zabezpieczeń, ale pełne kompilacje ciągłej integracji mogą obejmować dodatkowe testy czasochłonne.
Statyczna analiza kodu w budowach ciągłej integracji
Cel: Kompilacje ciągłej integracji powinny uruchamiać statyczne testy analizy kodu, aby upewnić się, że kod jest zgodny ze wszystkimi regułami zapewniającymi utrzymanie i bezpieczeństwo.
Typowe narzędzia do analizy statycznej:
SonarQube:
- Kompleksowa platforma jakości kodu i zabezpieczeń.
- Wykrywa usterki, problematyczne fragmenty kodu i luki w zabezpieczeniach.
- Śledzi metryki jakości kodu w czasie.
- Integruje bramy jakości, które powodują niepowodzenie budowy, gdy progi jakości nie są spełnione.
- Obsługuje wiele języków programowania.
Analizatory zabezpieczeń programu Visual Studio Code i Roslyn:
- Wbudowana analiza aplikacji .NET.
- Analizatory zabezpieczeń Roslyn wykrywają luki w zabezpieczeniach w kodzie języka C#.
- Uruchamia się podczas kompilacji, przesyłając natychmiastową opinię.
- Brak dodatkowej infrastruktury wymaganej dla projektów .NET.
Checkmarx:
- Narzędzie do testowania zabezpieczeń aplikacji statycznych (SAST).
- Głęboka analiza zabezpieczeń kodu źródłowego.
- Identyfikuje luki w zabezpieczeniach, takie jak wstrzyknięcie kodu SQL, XSS i problemy z uwierzytelnianiem.
- Zawiera szczegółowe wskazówki dotyczące korygowania.
- Obsługuje wiele języków programowania i struktur.
BinSkim:
- Binarne narzędzie do analizy statycznej firmy Microsoft.
- Zapewnia wyniki zabezpieczeń i poprawności dla przenośnych plików wykonywalnych systemu Windows (plików PE).
- Analizuje skompilowane pliki binarne, a nie kod źródłowy.
- Identyfikuje problemy z zabezpieczeniami w ustawieniach kompilacji i strukturze binarnej.
- Przydatne do analizowania składników skompilowanych przez inne firmy.
Dodatkowe narzędzia:
- Program ESLint z wtyczkami zabezpieczeń: Analiza zabezpieczeń języka JavaScript/TypeScript.
- Bandit: Analiza zabezpieczeń języka Python.
- Brakeman: Ruby on Rails skaner bezpieczeństwa.
- gosec: Narzędzie do sprawdzania bezpieczeństwa w Go.
Integracja z Azure Pipelines: Wiele narzędzi zabezpieczeń bezproblemowo integruje się z Azure Pipelines i innymi platformami CI/CD. Witryna Visual Studio Marketplace udostępnia rozszerzenia dla różnych narzędzi zabezpieczeń, dzięki czemu integracja jest prosta:
- Narzędzia są wyświetlane jako zadania potoku, które można dodać do definicji potoku.
- Wyniki są wyświetlane w dziennikach potoku i mogą zakończyć się niepowodzeniem kompilacji po wykryciu problemów.
- Wyniki zabezpieczeń integrują się ze śledzeniem elementów roboczych usługi Azure DevOps.
Skanowanie luk w zabezpieczeniach pakietów innych firm
Krytyczne, ale często pomijane: Poza weryfikacją jakości kodu, dwie inne krytyczne weryfikacje są często ignorowane lub wykonywane nieodpowiednio:
- Skanowanie pakietów innych firm pod kątem znanych luk w zabezpieczeniach.
- Weryfikowanie zgodności licencji systemu operacyjnego.
Wspólna odpowiedź organizacyjna: Na pytanie o luki w zabezpieczeniach i licencjach pakietów innych firm wiele organizacji reaguje z obawą lub niepewnością. Nie mają przejrzystych procesów zarządzania tymi zagrożeniami.
Problemy z procesem ręcznym: Organizacje próbujące zarządzać lukami w zabezpieczeniach pakietów innych firm lub licencjami systemu operacyjnego często wyjaśniają, że ich proces jest żmudny i ręczny:
- Deweloperzy ręcznie wyszukują bazy danych luk w zabezpieczeniach.
- Zespoły ds. zabezpieczeń utrzymują arkusze kalkulacyjne zatwierdzonych pakietów.
- Przeglądy licencji wymagają zaangażowania zespołu prawnego dla każdego pakietu.
- Aktualizacje są śledzone ręcznie, co prowadzi do nieaktualnych informacji o zależnościach.
- Proces trwa kilka tygodni, znacznie spowalniając rozwój.
Zautomatyzowane rozwiązania: Nowoczesne narzędzia do analizy kompozycji oprogramowania (SCA) automatyzują ten proces identyfikacji, dzięki czemu niemal natychmiast:
Mend (dawniej WhiteSource):
- Automatycznie wykrywa wszystkie składniki systemu operacyjnego w aplikacjach.
- Identyfikuje znane luki w zabezpieczeniach w zależnościach.
- Sprawdza zgodność licencji z zasadami organizacyjnymi.
- Dostarcza wskazówki dotyczące naprawy, w tym dostępne poprawione wersje.
- Stale monitoruje nowe luki w zabezpieczeniach w używanych pakietach.
GitHub Dependabot:
- Automatycznie skanuje zależności pod kątem znanych luk w zabezpieczeniach.
- Tworzy prośby o połączenie w celu zaktualizowania wrażliwych zależności.
- Obsługuje wiele ekosystemów pakietów (npm, Maven, itp.).
- Bezpłatne dla publicznych i prywatnych repozytoriów GitHub.
Snyk:
- Narzędzie bezpieczeństwa, które jako pierwsze wspiera deweloperów w znajdowaniu i naprawianiu luk w zabezpieczeniach.
- Skanuje zależności, obrazy kontenerów i infrastrukturę jako kod.
- Zapewnia zalecenia dotyczące naprawy i zautomatyzowane pull requesty.
- Integruje się ze środowiskami IDE, kontrolą wersji i potokami ciągłej integracji/ciągłego wdrażania.
Źródła nadrzędne usługi Azure Artifacts:
- Można skonfigurować do skanowania pakietów ze źródeł nadrzędnych.
- Blokuje pakiety ze znanymi lukami w zabezpieczeniach.
- Zapewnia wgląd we wszystkie pakiety używane w całej organizacji.
Korzyści z analizy kompozycji oprogramowania
Kompleksowa widoczność: Narzędzia SCA zapewniają pełny wgląd w łańcuch dostaw oprogramowania:
- Utwórz spis wszystkich zależności bezpośrednich i przechodnich.
- Śledź wersje i stan aktualizacji.
- Zidentyfikuj składniki, które nie są już obsługiwane.
- Mapuj zależności na określone aplikacje i zespoły.
Priorytetyzacja ryzyka: Nie wszystkie luki w zabezpieczeniach są równie krytyczne. Narzędzia SCA ułatwiają określanie priorytetów:
- Oceny ważności (klasyfikacje CVSS) wskazujące ważność luki w zabezpieczeniach.
- Oceny możliwości wykorzystania pokazujące, czy istnieją ataki.
- Analiza dostępności określająca, czy kod podatny na zagrożenia jest rzeczywiście używany w aplikacji.
- Kontekst biznesowy dotyczący tego, które aplikacje są najbardziej krytyczne.
Ciągłe monitorowanie: Luki w zabezpieczeniach są stale wykrywane. Narzędzia SCA zapewniają ciągłe monitorowanie:
- Alerty po wykryciu nowych luk w zabezpieczeniach w używanych pakietach.
- Regularne raporty dotyczące trendów stanu zabezpieczeń.
- Integracja z systemami śledzenia problemów w celu zarządzania pracą korygowania.
Dokumentacja dotycząca zgodności: Narzędzia SCA generują raporty zgodności:
- Zobowiązania licencyjne dla wszystkich używanych składników.
- Wymagania dotyczące autorstwa, które muszą zostać spełnione.
- Dowody na to, że przeprowadzono przeglądy zabezpieczeń.
- Dzienniki inspekcji dotyczące zgodności z przepisami.
Integracja w potoku
Ciągła walidacja zabezpieczeń integruje się z łańcuchem CI/CD w formie zadań automatycznych.
- Scalanie kodu: Pull request jest zatwierdzony i kod jest scalany z gałęzią główną.
- Wyzwalacze kompilacji ciągłej integracji: Scalanie automatycznie wyzwala pełną kompilację ciągłej integracji.
- Przebiegi analizy statycznej: Narzędzia SAST analizują kod źródłowy pod kątem luk w zabezpieczeniach.
- Skanowanie zależności: Narzędzia SCA skanują wszystkie zależności pod kątem luk w zabezpieczeniach i problemów z licencjami.
- Bramy jakości: Kompilacja kończy się niepowodzeniem, jeśli problemy z zabezpieczeniami przekraczają dopuszczalne progi.
- Dostępne wyniki: Wyniki zabezpieczeń są dostępne dla deweloperów i zespołów ds. zabezpieczeń.
- Tworzenie artefaktu: Jeśli testy zabezpieczeń przejdą, artefakty kompilacji są tworzone do wdrożenia.
W kolejnych modułach omówimy integrację kilku przydatnych i często używanych narzędzi zabezpieczeń i zgodności do określonej konfiguracji potoku.