Projektowanie i implementowanie standardów w celu zabezpieczenia tworzenia aplikacji
Jako architekt cyberbezpieczeństwa jeden z Twoich najbardziej wpływowych obowiązków definiuje standardy i praktyki, które zespoły deweloperów przestrzegają w celu tworzenia bezpiecznego oprogramowania. Bez jasnych standardów bezpieczeństwo staje się niespójne w projektach, luki w zabezpieczeniach gromadzą się jako dług techniczny, a koszty korygowania znacznie rosną, gdy problemy są wykrywane pod koniec procesu opracowywania.
W tym module omówiono dwa uzupełniające się ramy: Microsoft Security Development Lifecycle (SDL), które oferują 10 kluczowych praktyk zabezpieczeń do integracji zabezpieczeń z programowaniem, oraz DevOps Security Controls w wersji 2 (MCSBv2) w ramach Microsoft Cloud Security Benchmark, które dostarczają szczegółowych wskazówek technicznych dotyczących zabezpieczania pipeline'u deweloperskiego.
Rozwiązania dotyczące cyklu projektowania zabezpieczeń firmy Microsoft (SDL)
Zagrożenia bezpieczeństwa i konieczność ich ograniczenia mogą wystąpić w dowolnym momencie cyklu projektowania.
- Projektowanie: upewnij się, że architektura nie zezwala osobom atakującym na łatwe uzyskanie nieautoryzowanego dostępu do obciążenia, jego danych ani innych zasobów biznesowych.
- Kod: upewnij się, że pisanie i ponowne używanie kodu nie zezwala osobom atakującym na przejęcie kontroli nad aplikacją w celu wykonania nieautoryzowanych akcji. Deweloperzy powinni również pracować w bezpiecznym środowisku, które uniemożliwia osobom atakującym zmianę kodu bez ich wiedzy.
- Kompilowanie i wdrażanie: upewnij się, że procesy ciągłej integracji/ciągłego wdrażania nie zezwalają nieautoryzowanym użytkownikom na zmianę kodu i zezwalają osobom atakującym na jego naruszenie.
- Uruchom: upewnij się, że środowisko, w którym działa kod, jest zgodne z najlepszymi rozwiązaniami w zakresie zabezpieczeń dla osób, procesów i technologii, w tym konfiguracji punktów odniesienia zabezpieczeń i mechanizmów kontroli operacyjnej.
- Architektura i zarządzanie Zero Trust: wszystkie etapy powinny być zgodne z zasadami Zero Trust: zakładać naruszenie, wyraźnie weryfikować zaufanie oraz udzielać najniższych uprawnień wymaganych dla każdego użytkownika, tożsamości usługi i komponentów aplikacji.
Microsoft SDL to zestaw praktyk i narzędzi, które ułatwiają organizacjom tworzenie bezpieczniejszego oprogramowania. Od ponad 20 lat w firmie Microsoft rozwija się i nadal dostosowuje się w miarę zmian w krajobrazie zagrożeń. SDL integruje zabezpieczenia z każdym etapem procesu programowania, postępując zgodnie z modelem ciągłego ulepszania, a nie jednorazową oceną.
Są to 10 kluczowych praktyk zabezpieczeń języka SDL, które ułatwiają integrację zabezpieczeń na każdym etapie ogólnego procesu programowania.
10 praktyk SDL
- Ustanów standardy zabezpieczeń, metryki i zarządzanie. Zdefiniuj jasne wymagania dotyczące zabezpieczeń i zmierz zgodność w całej organizacji. Jako architekt wyznaczasz standardy dla tego, co oznacza "wystarczająco bezpieczne", i tworzysz struktury odpowiedzialności, aby je egzekwować.
- Wymagaj użycia sprawdzonych funkcji zabezpieczeń, języków i struktur. Nakazać stosowanie zatwierdzonych, zweryfikowanych pod kątem bezpieczeństwa bibliotek i struktur. Zachowaj zatwierdzoną i zabronioną listę i wymuś ją za pomocą barier zabezpieczających potoku.
- Przeprowadź przegląd projektu zabezpieczeń i modelowanie zagrożeń. Wymagaj modelowania zagrożeń w fazie projektowania przy użyciu metodologii STRIDE i diagramów przepływu danych. Zidentyfikuj zagrożenia przed rozpoczęciem opracowywania, gdy korygowanie jest najtańsze.
- Definiowanie i używanie standardów kryptograficznych. Ustanów standardy organizacyjne dotyczące algorytmów szyfrowania, długości kluczy i procesów zarządzania kluczami. Zabronić przestarzałych algorytmów, takich jak DES i MD5.
- Zabezpieczanie łańcucha dostaw oprogramowania. Sprawdź pochodzenie i integralność wszystkich komponentów innych firm. Generowanie dokumentów dotyczących materiałów (SBOM) oprogramowania i ciągłe skanowanie zależności pod kątem znanych luk w zabezpieczeniach.
- Zabezpieczanie środowiska inżynieryjnego. Ochrona stacji roboczych deweloperów, agentów kompilacji i repozytoriów kodu źródłowego przy użyciu tego samego rygoru co systemy produkcyjne. Wymuszanie segmentacji sieci, kontrole tożsamości i skanowanie luk w zabezpieczeniach w tych systemach.
- Przeprowadzanie testów zabezpieczeń. Integracja statycznego testowania zabezpieczeń aplikacji (SAST) i dynamicznego testowania zabezpieczeń aplikacji (DAST) w potokach CI/CD. Połącz automatyczne skanowanie z ręcznymi testami penetracyjnych dla aplikacji wysokiego ryzyka.
- Zapewnianie zabezpieczeń platformy operacyjnej. Stosowanie konfiguracji punktów odniesienia zabezpieczeń i wzmacniania zabezpieczeń do środowisk, w których są uruchamiane aplikacje. Postępuj zgodnie z zasadą najniższych uprawnień dla wszystkich tożsamości środowiska uruchomieniowego.
- Implementowanie monitorowania zabezpieczeń i reagowania. Włącz kompleksowe rejestrowanie i monitorowanie w środowiskach deweloperskich i produkcyjnych. Przekazywanie zdarzeń zabezpieczeń do scentralizowanej platformy zarządzania informacjami i zdarzeniami zabezpieczeń (SIEM) na potrzeby korelacji i alertów.
- Zapewnianie szkolenia w zakresie zabezpieczeń. Wymagaj od deweloperów ukończenia formalnego szkolenia w zakresie bezpiecznych praktyk kodowania. Ustanów program Security Champions z wyznaczonymi, wyszkolonymi koordynatorami zabezpieczeń w każdym zespole deweloperów.
Jako architekt twoim rolą jest określenie, które z tych praktyk są obowiązkowe dla twojej organizacji, zdefiniować sposób ich wymuszania i ustanowić strukturę ładu, która podtrzymuje je w czasie.
Mechanizmy zabezpieczeń MCSBv2 DevOps
Rodzina zabezpieczeń Microsoft Cloud Security Benchmark v2 (MCSBv2) DevOps Security oferuje siedem konkretnych kontroli odnoszących się do praktyk SDL i oferuje szczegółowe wskazówki dotyczące implementacji dla środowisk Azure i GitHub.
- DS-1: Przeprowadzanie modelowania zagrożeń
- DS-2: Zapewnianie bezpieczeństwa łańcucha dostaw oprogramowania
- DS-3: Bezpieczna infrastruktura DevOps
- DS-4: Integrowanie statycznych testów zabezpieczeń aplikacji z potokiem DevOps
- DS-5: Integrowanie dynamicznych testów zabezpieczeń aplikacji z potokiem DevOps
- DS-6: Zapewnianie bezpieczeństwa zasobów w całym cyklu DevOps
- DS-7: Włączanie rejestrowania i monitorowania w usłudze DevOps
DS-1: Przeprowadzanie modelowania zagrożeń: Zaimplementuj modelowanie zagrożeń oparte na metodach STRIDE jako obowiązkowe działanie fazy projektowania. Tworzenie diagramów przepływu danych (DFD), które mapuje składniki systemu, przepływy danych, granice zaufania i zależności zewnętrzne. Dla każdego składnika i przepływu danych systematycznie oceniaj zagrożenia we wszystkich sześciu kategoriach STRIDE: fałszowanie, manipulowanie, odrzucanie, ujawnianie informacji, odmowa usługi i podniesienie uprawnień. Użyj narzędzia Microsoft Threat Modeling Tool, aby uzyskać spójność i zintegrować dane wyjściowe modelu zagrożeń z elementami roboczymi usługi Azure DevOps z jasnymi kryteriami własności i akceptacji.
DS-2: Zapewnianie bezpieczeństwa łańcucha dostaw oprogramowania: Zaimplementuj skanowanie zależności i zarządzanie, które obejmuje zarówno zależności bezpośrednie, jak i przechodnie. Generowanie dokumentów SBOM w standardowych formatach branżowych (SPDX, CycloneDX). Użyj narzędzi takich jak GitHub Advanced Security z Dependabot do automatycznego wykrywania luk w zabezpieczeniach i ich naprawy opartej na pull requestach. Skonfiguruj usługę Azure Artifacts z weryfikacją podpisu i blokowaniem zależności, aby zapobiec atakom dezinformacyjnym i nieautoryzowanej podmianie pakietów. Rozszerzanie widoczności wdrożonych środowisk przy użyciu usługi Microsoft Defender for Cloud DevOps Security w celu śledzenia kodu do chmury.
DS-3: Bezpieczna infrastruktura DevOps: Scentralizuj zarządzanie sekretami przy użyciu usługi Azure Key Vault. Konfigurowanie potoków w celu dynamicznego pobierania wpisów tajnych w czasie wykonywania za pośrednictwem tożsamości zarządzanych lub federacji tożsamości obciążenia, eliminując zakodowane na stałe poświadczenia. Wymuszanie dostępu na żądanie z mechanizmami zatwierdzania dla wdrożeń produkcyjnych. Wzmacnianie zabezpieczeń własnych agentów kompilacji przy użyciu izolacji sieciowej. Integrowanie skanowania zabezpieczeń infrastruktury jako kodu (IaC), aby zapobiec wdrażaniu nieprawidłowo skonfigurowanych zasobów.
DS-4: Integrowanie statycznych testów zabezpieczeń aplikacji z potokiem DevOps: Wdróż wiele wyspecjalizowanych skanerów SAST, ponieważ żadne pojedyncze narzędzie nie wykrywa wszystkich klas luk w zabezpieczeniach. Użyj języka GitHub CodeQL do analizy kodu semantycznego, która identyfikuje złożone luki w zabezpieczeniach, takie jak wstrzyknięcie kodu SQL za pośrednictwem wielu wywołań funkcji. Skonfiguruj skanowanie tajnych danych z ochroną przed wypychaniem, aby zablokować ujawnienie poświadczeń podczas zatwierdzania. Ustanów bramy jakości oparte na ważności, które uniemożliwiają scalanie krytycznych wyników. Rozszerzenie DevOps Microsoft Security orkiestruje skanery, w tym Bandit, BinSkim, Checkov, ESLint, Template Analyzer, Terrascan i Trivy, przez jedno zadanie w potoku.
DS-5: Integracja dynamicznych testów zabezpieczeń aplikacji z potokiem DevOps: Uzupełnij SAST testowaniem dynamicznym w środowiskach przedprodukcyjnych, które odzwierciedlają architekturę produkcyjną. Skoncentruj się na powierzchniach ataków wysokiego ryzyka: obejścia uwierzytelniania interfejsu API, błędy autoryzacji, luki w zabezpieczeniach zarządzania sesjami i wady logiki biznesowej. W przypadku obciążeń konteneryzowanych zaimplementuj monitorowanie ciągłego środowiska uruchomieniowego za pomocą usługi Microsoft Defender for Containers, łącząc skanowanie obrazów przed wdrożeniem z analizą behawioralną po wdrożeniu.
DS-6: Wymuszanie zabezpieczeń obciążenia w całym cyklu życia metodyki DevOps: Traktuj obrazy kontenerów i maszyn wirtualnych jako krytyczne artefakty wymagające niezmiennych praktyk infrastruktury. Używaj obrazów podstawowych o minimalnym rozmiarze z kompilacjami wieloetapowymi. Zintegruj automatyczne skanowanie luk w zabezpieczeniach poprzez zasady kwarantanny, które uniemożliwiają wdrażanie obrazów zawierających krytyczne CVE. Wymuszanie podpisywania kryptograficznego i weryfikacji w celu zapobiegania atakom polegającym na zastępowaniu obrazów. Usługa Azure Container Registry z usługą Microsoft Defender for Containers umożliwia zintegrowane skanowanie i zaufanie do zawartości.
DS-7: Włączanie rejestrowania i monitorowania w DevOps: Przechwyć wszystkie działania DevOps istotne dla bezpieczeństwa: zdarzenia uwierzytelniania, zatwierdzenia kodu, modyfikacje potoku, wykonania wdrożenia, dostęp do tajnych informacji i zmiany uprawnień. Przekazywanie dzienników inspekcji w czasie rzeczywistym do usługi Microsoft Sentinel na potrzeby długoterminowej analizy śledczej i korelacji ze zdarzeniami zabezpieczeń z innych systemów. Wdrożenie analizy behawioralnej w celu wykrywania podejrzanych wzorców, takich jak modyfikacje potoków po godzinach, nietypowy dostęp do tajnych danych i eskalacje uprawnień.
Zagadnienia dotyczące projektowania architektury
Podczas wdrażania tych standardów należy wziąć pod uwagę następujące decyzje dotyczące architektury:
- Wymuszanie a wskazówki. Określ, które kontrole blokują wykonanie potoku, a które generują alerty. Krytyczne i o wysokiej ważności wyniki zwykle uzasadniają blokowanie bram, podczas gdy wyniki średnie i niskie są doradcze.
- Scentralizowane a federacyjne skanowanie. Zdecyduj, czy skanowanie zabezpieczeń korzysta z szablonów potoków na poziomie organizacji (zapewnienie spójności) lub konfiguracji zarządzanych przez zespół (co pozwala na elastyczność). Ucentralizowane szablony wymagają procesów zarządzania dla wyjątków.
- Poziomowanie oparte na ryzyku Klasyfikowanie aplikacji według poufności danych, ekspozycji zewnętrznej i zakresu regulacyjnego. Dopasuj głębokość i rygor mechanizmów zabezpieczeń do każdej warstwy.
- Środowisko deweloperskie. Mechanizmy kontroli zabezpieczeń, które znacznie spowalniają szybkość programowania, są pomijane. Zoptymalizuj czas skanowania, zapewnij jasne wskazówki dotyczące korygowania i zintegruj wyniki bezpośrednio z komentarzami żądania ściągnięcia.