Artykuły
Samouczki
Interaktywne przewodniki
Narzędzia DevSecOps
Narzędzia DevSecOps zabezpieczające przepływy pracy DevOps
Kev Zettler
Full stack web developer
Pomimo wytężonych wysiłków podejmowanych przez firmy programistyczne, nadal dochodzi do naruszeń zabezpieczeń. Szacuje się, że od 2000 r. wykradziono dane osobowe 3,5 miliarda ludzi. Częścią problemu jest to, że w miarę wzrostu skali i złożoności bazy kodu aplikacji, zwiększają się także obszary podatności na ataki z wykorzystaniem luk w zabezpieczeniach i exploitów.
Ponadto, ponieważ coraz więcej organizacji stosuje podejście DevOps, które automatyzuje i integruje procesy między zespołami programistycznymi i operacyjnymi, tradycyjne narzędzia zabezpieczające często nie są już wystarczające. Programiści muszą dziś osadzać środki bezpieczeństwa na każdym etapie przepływu pracy tworzenia oprogramowania. W przypadku zabezpieczeń przepływów pracy DevOps ta praktyka jest określana jako DevSecOps.
Czym jest DevSecOps?
DevSecOps to praktyka integracji zabezpieczeń z pipeline'em ciągłej integracji, ciągłego dostarczania i ciągłego wdrażania. Dzięki włączeniu wartości DevOps do zabezpieczeń oprogramowania weryfikacja bezpieczeństwa staje się aktywną, integralną częścią procesu programistycznego.
Podobnie jak DevOps, DevSecOps to metodyka organizacyjna i techniczna, która łączy przepływy pracy zarządzania projektami ze zautomatyzowanymi narzędziami informatycznymi. DevSecOps integruje aktywne audyty i testy zabezpieczeń z przepływami pracy programowania Agile i DevOps, dzięki czemu zabezpieczenia są wbudowane w produkt, a nie stosowane do gotowego produktu.
Aby wdrożyć DevSecOps, zespoły powinny:
- Wprowadzić zabezpieczenia w całym cyklu życia tworzenia oprogramowania w celu zminimalizowania liczby luk w kodzie.
- Zadbać o to, aby cały zespół DevOps, w tym programiści i pracownicy operacyjni, ponosił odpowiedzialność za stosowanie najlepszych praktyk w zakresie bezpieczeństwa.
- Zastosować automatyczne kontrole zabezpieczeń na każdym etapie dostarczania oprogramowania, integrując mechanizmy kontroli zabezpieczeń, narzędzia i procesy z przepływem pracy DevOps.
W przypadku DevSecOps zabezpieczenia powinny być stosowane do każdej fazy typowego pipeline'u DevOps: planowania, kompilowania, testowania, wdrażania, obsługi i obserwowania.
Ciągłość stanowi cechę wyróżniającą pipeline DevOps. Obejmuje ona ciągłą integrację, ciągłe dostarczanie/wdrażanie (CI/CD), ciągłe informacje zwrotne i ciągłe operacje. Zamiast jednorazowych testów lub zaplanowanych wdrożeń, każda funkcja jest stosowana na bieżąco.
materiały pokrewne
Dowiedz się więcej o Snyk for Bitbucket Cloud
Poznaj rozwiązanie
Pobierz Snyk for Bitbucket Cloud
Planowanie
Planowanie jest najmniej zautomatyzowaną fazą DevSecOps, obejmującą współpracę, dyskusje, przegląd i strategię analizy bezpieczeństwa. Zespoły powinny przeprowadzić analizę bezpieczeństwa i utworzyć plan, który określa, gdzie, jak i kiedy zostaną wykonane testy zabezpieczeń. Popularnym narzędziem do planowania DevSecOps jest IriusRisk, oparty na współpracy program do modelowania zagrożeń. Dostępne są też narzędzia do śledzenia zgłoszeń i zarządzania nimi, takie jak Jira, oraz narzędzia do komunikacji i obsługi czatu, takie jak Slack.
Kompilowanie
Faza kompilowania rozpoczyna się, gdy programiści wykonują commit kodu do repozytorium źródłowego. Narzędzia kompilacji DevSecOps koncentrują się na zautomatyzowanej analizie zabezpieczeń wyjściowego artefaktu kompilacji. Do ważnych praktyk zapewniania bezpieczeństwa należy analiza komponentów oprogramowania, statyczne testowanie zabezpieczeń aplikacji (SAST) i testy jednostkowe. Narzędzia mogą być połączone z istniejącym pipeline'em CI/CD, aby zautomatyzować te testy.
Programiści regularnie instalują i kompilują w oparciu o zależności kodu innych firm, które mogą pochodzić z nieznanego lub niezaufanego źródła. Zewnętrzne zależności kodu mogą przypadkowo lub w wyniku złośliwej działalności obejmować luki w zabezpieczeniach i exploity. W fazie kompilowania kluczowe jest sprawdzanie i skanowanie tych zależności pod kątem wszelkich luk w zabezpieczeniach.
Znane narzędzia do wykonywania analizy podczas fazy kompilacji to między innymi: OWASP Dependency-Check, SonarQube, SourceClear, Retire.js, Checkmarx i Snyk.
Narzędzia DevSecOps dla fazy tworzenia kodu pomagają programistom pisać bezpieczniejszy kod. Ważne praktyki zapewniania bezpieczeństwa w tej fazie obejmują statyczną analizę kodu, przeglądy kodu i hooki pre-commit.
Gdy narzędzia zabezpieczeń zostaną bezpośrednio połączone z istniejącym przepływem pracy Git programistów, każdy commit i każde scalenie automatycznie uruchamiają test bezpieczeństwa lub przegląd. Narzędzia te obsługują różne języki programowania i zintegrowane środowiska programistyczne. Niektóre bardziej popularne narzędzia związane z bezpieczeństwem kodu to Gerrit, Phabricator, SpotBugs, PMD, CheckStyle i Find Security Bugs.
Testowanie
Faza testowania rozpoczyna się po utworzeniu artefaktu kompilacji i pomyślnym wdrożeniu go w środowiskach przejściowych lub testowania. Wykonanie kompleksowego zestawu testów zajmuje dużo czasu. Ta faza powinna zakończyć się szybko w przypadku niepowodzenia, aby bardziej czasochłonne zadania testowe zostały pozostawione na koniec.
Faza testowania wykorzystuje narzędzia dynamicznego testowania zabezpieczeń aplikacji (DAST) do wykrywania przepływów aktywnych aplikacji, takich jak uwierzytelnianie użytkownika, autoryzacja, wstrzykiwanie kodu SQL i punkty końcowe związane z interfejsem API. Rozwiązanie DAST skoncentrowane na bezpieczeństwie analizuje aplikację względem listy znanych problemów o wysokiej ważności, takich jak te wymienione na liście OWASP Top 10.
Dostępnych jest wiele narzędzi testowych zarówno open source, jak i płatnych, które oferują różnorodne funkcje i obsługę w przypadku ekosystemów konkretnych języków. Są to na przykład: BDD Automated Security Tests, JBroFuzz, Boofuzz, OWASP ZAP, Arachi, IBM AppScan, GAUNTLT i pakiet SecApp.
Wdrażanie
Jeśli dotychczasowe fazy przebiegły pomyślnie, nadszedł czas, aby wdrożyć artefakt kompilacji do produkcji. Obszary bezpieczeństwa, którymi należy zająć się podczas fazy wdrażania, to te występujące tylko w przypadku aktywnego systemu produkcyjnego. Przykładowo należy dokładnie przeanalizować wszelkie różnice w konfiguracji między środowiskiem produkcyjnym a poprzednimi środowiskami przejściowymi i programistycznymi. Produkcyjne certyfikaty TLS i DRM powinny zostać zatwierdzone i sprawdzone pod kątem nadchodzącego odnowienia.
Faza wdrażania to dobry moment na użycie narzędzi do weryfikacji środowiska uruchomieniowego, takich jak Osquery, Falco i Tripwire, które wyodrębniają informacje z uruchomionego systemu, aby ustalić, czy działa on poprawnie. Organizacje mogą również wykorzystać zasady inżynierii chaosu, eksperymentując na systemie w celu upewnienia się co do możliwości działania systemu w niestabilnych warunkach. Można symulować rzeczywiste zdarzenia, takie jak awarie serwerów czy dysków twardych lub zerwanie połączeń sieciowych. Serwis Netflix jest znany ze swojego narzędzia Chaos Monkey, które stosuje zasady inżynierii chaosu. Netflix wykorzystuje też narzędzie Security Monkey, które wyszukuje naruszenia lub luki w zabezpieczeniach w nieprawidłowo skonfigurowanych grupach zabezpieczeń infrastruktury i odcina wszelkie niezabezpieczone serwery.
W fazie wydawania cyklu DevSecOps kod aplikacji i plik wykonywalny powinny być już dokładnie przetestowane. Ta faza skupia się na zabezpieczeniu infrastruktury środowiska uruchomieniowego poprzez sprawdzenie wartości konfiguracji środowiska, takich jak kontrola dostępu użytkowników, dostęp do zapory sieciowej i zarządzanie tajnymi danymi.
Zasada najmniejszego uprzywilejowania (principle of least privilege, PoLP) jest kluczową kwestią fazy wydawania. PoLP oznacza, że każdy użytkownik, program lub proces ma minimalny poziom dostępu do wykonywania swojej funkcji. Obejmuje to inspekcję kluczy interfejsu API i tokenów dostępu w celu zapewnienia, że właściciele mają ograniczony dostęp. Bez tego audytu osoba atakująca może znaleźć klucz, który ma dostęp do niepożądanych obszarów systemu.
Narzędzia do zarządzania konfiguracją są kluczowym składnikiem zabezpieczeń w fazie wydawania, ponieważ zapewniają wgląd w statyczną konfigurację infrastruktury dynamicznej. Konfigurację systemu można następnie poddać audytowi i ocenie. Konfiguracja staje się niezmienna i może być aktualizowana tylko za pomocą commitów dodawanych do repozytorium zarządzania konfiguracją. Wybrane popularne narzędzia do zarządzania konfiguracją to Ansible, Puppet, HashiCorp Terraform, Chef i Docker.
Społeczność specjalistów z branży zabezpieczeń zapewnia wytyczne i zalecenia dotyczące najlepszych praktyk w zakresie zwiększania odporności infrastruktury, takich jak dokumenty Center for Internet Security (CIS) Benchmark i listy kontrolne konfiguracji NIST.
Obserwacja
Po wdrożeniu i ustabilizowaniu aplikacji w aktywnym środowisku produkcyjnym wymagane są dodatkowe środki bezpieczeństwa. Firmy muszą monitorować i obserwować aktywną aplikację pod kątem ataków lub wycieków, stosując zautomatyzowane kontrole zabezpieczeń i pętle monitorowania bezpieczeństwa.
Technologia RASP (Runtime Application Self-Protection) umożliwia automatyczne identyfikowanie i blokowanie przychodzących zagrożenia bezpieczeństwa w czasie rzeczywistym. RASP działa jako odwrotny serwer proxy, który obserwuje przychodzące ataki i umożliwia aplikacji automatyczną rekonfigurację bez interwencji człowieka w odpowiedzi na określone warunki.
Wyspecjalizowany zespół wewnętrzny lub zewnętrzny może przeprowadzać testy penetracyjne w celu znalezienia exploitów lub luk w zabezpieczeniach, celowo wystawiając system na zagrożenie. Inną techniką zabezpieczeń jest prowadzenie programu wykrywania błędów, który polega na płaceniu osobom z zewnątrz za zgłaszanie exploitów i luk w zabezpieczeniach.
Monitorowanie zabezpieczeń wykorzystuje analizy do instrumentacji i monitorowania krytycznych wskaźników związanych z bezpieczeństwem. Te narzędzia oznaczają na przykład żądania do wrażliwych publicznych punktów końcowych, takich jak formularze dostępu do konta użytkownika lub punkty końcowe bazy danych. Przykładami popularnych narzędzi do ochrony środowiska uruchomieniowego są Imperva RASP, Alert Logic i Halo.
Podsumowując…
Ponieważ coraz więcej zespołów programistycznych rozwija swoje procesy i sięga po nowe narzędzia, muszą one zwracać szczególną uwagę na bezpieczeństwo. DevSecOps to proces cykliczny, który powinien być stale iterowany i stosowany do każdego nowego wdrożenia kodu. Exploity i atakujący ciągle się rozwijają i ważne jest, aby nowoczesne zespoły programistyczne również ewoluowały.
Dobrym punktem wyjścia do rozpoczęcia testowania DevSecOps jest zautomatyzowanie testów za pomocą Bitbucket Pipelines. Warto również zapoznać się z narzędziami do automatyzacji testów i zasobami dostępnymi w sklepie Atlassian Marketplace.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.