9 najlepszych praktyk dotyczących bezpieczeństwa kontenerów w DevOps

Kontenery w DevOps nie są nową koncepcją. Są to wirtualne piaskownice ze wszystkimi niezbędnymi narzędziami do uruchamiania mikroserwisów, w tym dużych aplikacji.

Możesz myśleć o kontenerach jako o systemach pakowania, które pozwalają ci (jako programiście) przechowywać wszystko, czego potrzebujesz do uruchomienia aplikacji, na przykład środowiska uruchomieniowe i kody binarne, z centralnego punktu.

Kontenery pomagają programistom przenosić aplikacje z jednego środowiska do drugiego (np. przesyłać aplikację z maszyny lokalnej do środowiska wirtualnego lub przenosić ją z etapu początkowego do etapu produkcyjnego), eliminując wszelkie problemy związane z różnymi ustawieniami oprogramowania i konfiguracji w programach i środowiskach produkcyjnych koniec.

Statystów raport na temat technologii kontenerów pokazuje, że 50% organizacji na świecie przyjęło orkiestrację kontenerów. Chociaż ta technologia zyskała na popularności ze względu na swoje zalety, kontenery mogą otworzyć bramę dla ataków cybernetycznych, jeśli nie zostaną sprawdzone.

Szczegóły CVEkwintesencja źródła danych o lukach w zabezpieczeniach 62 luki dostosowane do Dockera od tego pisania. Czy nie wymaga to najlepszych praktyk deweloperskich w celu rozwiązania tych pułapek i zabezpieczenia kontenerów na potrzeby pomyślnych procesów DevOps?

W tym poście omówiono koncepcję bezpieczeństwa kontenerów, zwrócono uwagę na kilka wyzwań i przedstawiono najlepsze praktyki, które należy zastosować podczas korzystania z technologii kontenerów.

Co to jest bezpieczeństwo kontenerów?

Bezpieczeństwo kontenerów to ciągły proces, który wykorzystuje protokoły bezpieczeństwa (narzędzia i zasady) w celu ochrony kontenerów i ich środowisk przed potencjalnymi zagrożeniami.

Jeśli nie zostaną zaznaczone, zagrożenia mogą zaszkodzić aplikacji, jej infrastrukturze, czasowi działania, bibliotekom systemowym, systemowi operacyjnemu i jądrze, a także innym funkcjom.

Biorąc pod uwagę, że kontenery są dostępne w postaci przejściowej (chwilowo) i są również przeznaczone do dynamicznych wdrożeń i skalowania, istnieje potrzeba zautomatyzowanego zabezpieczenia na każdym etapie cyklu życia oprogramowania (SDLC).

Przeczytaj także: Wprowadzenie do Kubernetes Kops dla początkujących

Jakie są wyzwania związane z bezpieczeństwem kontenerów?

Chociaż kontenery mają wiele nagród (takich jak przyspieszenie dostarczania oprogramowania), nie są one odporne na wyzwania, głównie dlatego, że potrzebują środków bezpieczeństwa (brakuje im możliwości samozabezpieczenia).

Dzieje się tak, ponieważ kontenery uzyskują dostęp do sprzętu za pośrednictwem hostowanego systemu operacyjnego (OS). Oznacza to, że pojedynczy kontener może mieć kilka podstawowych obrazów kontenerów, co wprowadza szerszy zakres powierzchni ataku, co stanowi pewne wyzwanie.

Pierwszym z nich jest nieprawidłowa konfiguracja kontenera, w przypadku której programiści zapominają o dostosowaniu i użyciu domyślnych konfiguracji kontenerów, które mają pewne pułapki, takie jak niektóre odsłonięte, niezabezpieczone porty, które mogą nie być idealne dla Twojej aplikacji, ujawnione dane uwierzytelniające, takie jak hasła i tokeny uwierzytelniające, oraz nadmierne wydawanie uprawnień do środowiska uruchomieniowe kontenera (gdy są uruchamiane jako root). Gdy nie zostaną zastąpione, te domyślne konfiguracje zapewniają możliwości ataków.

Następna jest luka w zabezpieczeniach infrastruktury kontenerowej. W tym przypadku pakiety wbudowane w kontener, takie jak kod aplikacji, biblioteki i konfiguracje, lub te w systemie operacyjnym hosta, wprowadzają luki w zabezpieczeniach. Podatność może zostać wprowadzona na dowolnym etapie cyklu życia aplikacji, na przykład, gdy zależności zewnętrzne są wbudowane w obraz kontenera, biblioteki open source są instalowane jako część aplikacji, obrazy bazowe kontenerów pochodzą z zewnętrznych rejestrów kontenerów i hostów które można wykorzystać za pośrednictwem sieci i punktów końcowych.

Wgląd w obciążenia kontenerów to jedno z największych wyzwań związanych z kontenerami. Wynika to z bardzo dynamicznego charakteru kontenerów, który sprawia, że ​​narzędzia do monitorowania nie są w stanie zlokalizować uruchomionych kontenerów i sprawdzić ich zachowania w sieci. Lepsza widoczność zapobiega naruszeniom i skraca czas reakcji na incydenty, jeśli takie wystąpią.

Ponadto kontener jest podatny, jeśli jakakolwiek faza potoku CI/CD jest niepewna, zarówno w kodzie aplikacji, jak i infrastrukturze obciążenia kontenera. Podczas gdy programiści zajmują się bezpieczeństwem pod koniec cyklu życia aplikacji, administrowanie nim na każdym etapie rozwoju chroni aplikacje przed tym niepowodzeniem.

Które narzędzia mogą rozwiązać problemy związane z bezpieczeństwem kontenerów?

Możesz zapewnić bezpieczeństwo wdrożonych rozwiązań korporacyjnych, wprowadzając zabezpieczenia i integralność kontenerów za pomocą narzędzi zabezpieczających. Te narzędzia skanują luki w zabezpieczeniach i stale monitorują je pod kątem ataków, błędów lub innych problemów.

Niezależnie od tego, czy szukasz narzędzia bezpieczeństwa kontenerów typu open source lub typ komercyjny, wszystkie będą służyć temu samemu celowi. Wszystkie działają na zasadzie audytu infrastruktury kontenerowej i działania przeciwko typowym lukom w zabezpieczeniach i zagrożeniom (CVE).

Oto kilka narzędzi, które możesz wypróbować: Pingsafe Editors Choice, Datadog Cloud SIEM, Anchore, Sophos Cloud-Native Security, Bitdefender GravityZone, Sysdig secure, Aqua Security i RedHat Advanced Cluster Security for Kubernetes.

Przeczytaj także: 11 skanerów bezpieczeństwa kontenerów do znajdowania luk w zabezpieczeniach

Najlepsze praktyki w zakresie bezpieczeństwa kontenerów

Pomimo powyższych wyzwań związanych z bezpieczeństwem kontenerów, oto zestawienie najlepszych konwencji, które można wdrożyć, aby zoptymalizować bezpieczeństwo kontenerów na wszystkich etapach cyklu życia aplikacji.

Zabezpieczanie obrazów

Obrazy kontenerów służą do tworzenia kontenerów. Najmniejsza błędna konfiguracja lub złośliwe działania mogą wywołać luki w produkowanych kontenerach. Możesz temu przeciwdziałać poprzez:

  • Korzystanie z godnych zaufania obrazów — jeśli nie tworzysz obrazów od podstaw, zawsze wybierasz pracę z obrazami z zaufanych źródeł. Publiczne repozytoria, takie jak Docker Hub, zawierają obrazy, w tym te ze złośliwym oprogramowaniem i błędną konfiguracją.
  • Zawiera tylko niezbędne komponenty – Jeśli istnieją komponenty, których Twoja aplikacja nie potrzebuje, najlepiej byłoby je usunąć. Na przykład system UNIX w naturalny sposób prezentuje pliki binarne „awk” i „sed”.
  • Dołączanie aplikacji do obrazu kontenera — obraz kontenera obejmuje podzbiór systemu operacyjnego (OS) i uruchomioną aplikację. Dla każdego narzędzia i biblioteki wciągniętej do kontenera jest to potencjalne zagrożenie. Najlepiej byłoby dołączyć aplikację do obrazu kontenera, aby rozwiązać ten problem. Odbywa się to za pomocą statycznie skompilowanego pliku binarnego ze wszystkimi wymaganymi zależnościami.

Automatyzacja skanowania pod kątem luk w zabezpieczeniach i zarządzania

Regularne skanowanie pod kątem luk w zabezpieczeniach oraz zarządzanie kontenerem i hostami pomaga wykrywać luki w zabezpieczeniach na każdym etapie cyklu życia aplikacji.

W takim przypadku możesz przeprowadzić skanowanie kodu w celu wykrycia błędów i statyczne testy bezpieczeństwa aplikacji (SAST) w celu znalezienia luk w kodzie aplikacji. Analiza składu oprogramowania (SCA) może zapewnić wgląd w komponenty oprogramowania open source, generując zestawienie materiałów oprogramowania, które można porównać z udokumentowanymi lukami w zabezpieczeniach open source.

Ponadto skanowanie obrazu analizuje zawartość i proces tworzenia obrazu pojemnika pod kątem podatności. Z narzędziami takimi jak Klara, możesz wyszukać znane luki w zabezpieczeniach. Alternatywnie zastosuj dynamiczne testy bezpieczeństwa aplikacji (DAST), które wskazują zagrożenia bezpieczeństwa na podstawie zachowania kontenera. Narzędzia DAST mogą również przeprowadzać skanowanie hosta, w ramach którego sprawdzasz komponenty hosta kontenera (jądro hosta i system operacyjny) pod kątem błędnej konfiguracji.

Chociaż powyższe środki są przyjmowane w toczącym się procesie cyklu życia kontenera, można przyjąć filozofię „przesunięcia w lewo”. Oznacza to wdrażanie zabezpieczeń od samego początku cyklu rozwojowego. Dobrym narzędziem, jeśli wybierzesz to podejście, jest Trivy.

Zabezpieczanie rejestrów kontenerów

Rejestry kontenerów to wydajny scentralizowany sposób przechowywania obrazów i ich dystrybucji. Często organizacje przechowują tysiące obrazów w rejestrach publicznych lub prywatnych. Istnieje kilka środków zapewniających wszystkim członkom zespołu i współpracownikom korzystanie z obrazów wolnych od luk.

Po pierwsze, wdrożenie kontroli dostępu użytkownika (dla rejestrów prywatnych) określa, kto może publikować obrazy i uzyskiwać do nich dostęp. Chociaż jest to podstawowy środek bezpieczeństwa, zapobiega publikowaniu, modyfikowaniu lub usuwaniu zdjęć przez osoby nieupoważnione.

Następnym środkiem jest podpisywanie obrazów, które wiąże każdy obraz z osobą, która go podpisała, co utrudnia zastąpienie obrazu skompromitowanym. Możesz użyć Zaufanie do zawartości Dockera techniki dodawania podpisów cyfrowych do danych wysyłanych i odbieranych z rejestrów. Na koniec pamiętaj, że skanowanie obrazów (ciągłe) pomaga w wykrywaniu wszelkich krytycznych luk w zabezpieczeniach.

Monitorowanie kontenerów

Możesz zoptymalizować wgląd w obciążenia kontenerów za pomocą narzędzi umożliwiających obserwację. Narzędzia powinny umożliwiać monitorowanie i testowanie luk we wszystkich komponentach oraz umożliwiać rejestrowanie czasu rzeczywistego zdarzenia w środowiskach kontenerowych.

Narzędzia umożliwiające obserwowalność wykrywają zagrożenia, kontrolując metryki i dzienniki ze wszystkich składników stosu kontenerów i analizując je pod kątem nieprawidłowości. Dzięki takiemu podejściu możesz korygować błędne konfiguracje natychmiast po ich zidentyfikowaniu.

Aby zebrać metryki użycia zasobów, użyj narzędzi takich jak cAdvisor lub kube-state-metrics. Do monitorowania aktywności kontenerów i wydajności swoich klastrów użyj narzędzi takich jak Grafana lub Prometheus.

Jeśli chcesz analizować ruch sieciowy między kontenerami, użyj Wireshark lub tcpdump. Jeśli korzystasz z zarządzanej usługi Kubernetes, takiej jak (AKS), użyj Azure Monitor do śledzenia zasobów i zagrożeń bezpieczeństwa.

Ponadto usługa Azure Log Analytics może zbierać i analizować zasoby AKS. Jeśli wybierzesz Amazon EKS, Amazon CloudTrail jest dobry do logowania i oglądania; korzystaj z Amazon Cloud Watch.

Wdrażanie bezpieczeństwa sieci

Środki kontroli bezpieczeństwa sieci mogą pomóc w ochronie przed nieautoryzowanym dostępem do kontenerów. Zastosowanym kryterium jest segmentacja sieci, która izoluje kontenery, ograniczając im dostęp tylko do niezbędnych usług.

Jeśli korzystasz z konteneryzowanych aplikacji na Kubernetes, możesz użyć zasad sieciowych K8s do skonfigurowania przychodzącego i wychodzącego ruchu pod w klastrach. To z kolei ogranicza ruch do określonych podów na podstawie etykiet.

Zabezpieczenia warstwy transportowej (TLS) można rozszerzyć do komunikacji pod. Możesz wybrać technikę TLS lub Secure Sockets Layer (SSL) do bezpiecznej komunikacji między serwerem API a innymi komponentami. Moduły równoważenia obciążenia są dobrym rozwiązaniem, jeśli chcesz również ograniczyć ruch wprowadzany do klastrów.

Jeśli Twoje klastry mają mikrousługi, możesz zapewnić bezpieczny ruch za pomocą narzędzi Service Mesh, takich jak Meshery lub Linkerd. Na koniec zabezpiecz swoją sieć, jeśli używasz narzędzia chmurowego do hostowania klastrów.

Jeśli korzystasz z usługi Azure Kubernetes Service (AKS), użyj sieciowych grup zabezpieczeń (sieciowych grup zabezpieczeń) do zarządzania ruchem. Jeśli korzystasz z usługi Amazon Elastic Kubernetes Service (EKS), najlepszym rozwiązaniem będą grupy zabezpieczeń wirtualnej chmury prywatnej (VPC) Amazon.

Zmniejszenie ataków powierzchniowych

Minimalizowanie powierzchni ataków ma dwie zalety; zwiększenie szybkości obsługi i zmniejszenie możliwości naruszeń bezpieczeństwa.

Korzystając z wieloetapowej kompilacji, możesz tworzyć lekkie obrazy z atakiem na małą powierzchnię oraz lepszym czasem uruchamiania i wydajnością. Jest na to kilka rozwiązań. Jeśli używasz Linuksa, możesz użyć Alpine Linux, BusyBox lub Tiny Core Linux.

W przypadku Ubuntu istnieje Ubuntu Minimal. Możesz także użyć Scratch, specjalnego obrazu Dockera – zasadniczo otwartego kontenera, aby od samego początku tworzyć minimalistyczne obrazy.

Ograniczanie uprawnień kontenera

Stosowana tu zasada polega na udzieleniu minimalnego zezwolenia na wykonanie danego zadania. Gdy kontenery są uruchamiane jako root, przyznają użytkownikowi różne uprawnienia do operacji, takie jak instalowanie pakietów lub uprawnienia do operacji odczytu i zapisu w systemie operacyjnym.

Ryzyko polega na tym, że osoby atakujące mogą wykorzystać eskalację mocy do środowiska uruchomieniowego kontenera, jeśli zostaną naruszone. W takim przypadku istnieją dwa realne rozwiązania. Możesz uruchamiać kontenery w trybie bez rootowania lub ograniczyć możliwości jądra LINUX tylko do tych, które są potrzebne do obciążenia kontenera.

Bezpieczne zarządzanie tajemnicami

Twoje pliki konfiguracyjne kontenera i dokera powinny być wolne od tajemnic. Sekrety obejmują certyfikaty, hasła, klucze interfejsu programu aplikacji (API) i tokeny. I chociaż jest to najlepsza praktyka, często zobaczysz te sekrety zakodowane na stałe w procesie kompilacji lub obrazach kodu źródłowego.

W takich przypadkach wrażliwe dane trafiają do kontenerów i są buforowane w pośrednich warstwach kontenerów, nawet jeśli kontenery zostały usunięte. W takich przypadkach najlepszym podejściem jest wdrożenie rozwiązania do zarządzania tajemnicami, np Menedżer tajemnic AWS I Sklepienie do przechowywania tajnych poświadczeń i zarządzania nimi.

Wzmacnianie Twojego zespołu

Jako ostatni ze środków bezpieczeństwa kluczowe znaczenie ma edukowanie zespołu w zakresie najlepszych praktyk bezpieczeństwa. Oznacza to, że wszyscy członkowie Twojego zespołu mogą identyfikować zagrożenia bezpieczeństwa i reagować na nie.

Dobrym sposobem na wdrożenie tego jest dodanie zabezpieczeń kontenerów do procesów wdrażania zespołu. Oferowanie praktycznych szkoleń, ciągłego uczenia się i regularnych ocen bezpieczeństwa wyróżnia Twój zespół DevOps, wyposażając go w aktualne trendy w zakresie bezpieczeństwa.

Końcowe przemyślenia

Bezpieczeństwo kontenerów to kluczowy ciągły proces cyklu życia oprogramowania. Najlepszym podejściem do tego zapytania jest włączenie zabezpieczeń bezpośrednio od kodu aplikacji do środowiska uruchomieniowego kontenera, systemu operacyjnego hosta i bazowej infrastruktury sieciowej.

Możesz to zrealizować, przestrzegając strategicznego planu polegającego na weryfikacji kontenerów i korzystaniu wyłącznie z zaufanych źródeł. Wykonaj hartowanie kontenerów, aby upewnić się, że znajdują się w nich tylko niezbędne usługi. Zaszczep metody rejestrowania, które można łatwo wdrożyć za pomocą narzędzi do monitorowania. Segmentuj swoją sieć, aby kontenery były oddzielone od całej infrastruktury.

Zawsze podpisuj swoje obrazy, aby sprawdzać poprawność danych wprowadzanych i wyprowadzanych za pośrednictwem Twoich usług. Ponadto powinieneś regularnie przeprowadzać skanowanie i testy penetracyjne, aby wykryć wszelkie luki w zabezpieczeniach i natychmiast podjąć działania naprawcze. A ponieważ krajobraz technologiczny ewoluuje, zawsze bądź na bieżąco z najnowszymi praktykami bezpieczeństwa.

Następnie sprawdź, jak zautomatyzować zabezpieczenia.