Cyberbezpieczeństwo dla startupów – konteneryzacja usług
Konteneryzacja łagodzi ryzyko związane z cyberbezpieczeństwem w Twoim startupie, takie jak ataki i podatności, które mogą wystąpić mimo wdrożenia różnych środków ochrony. Na przykład ogranicza wpływ ataków typu injection oraz ataków poeksploatacyjnych, takich jak eskalacja uprawnień czy utrwalanie dostępu. Umożliwia także uruchamianie oprogramowania w ograniczonym, odizolowanym środowisku, które izoluje i wykonuje nieprzetestowane lub nieufne programy bez ryzyka uszkodzenia maszyny gospodarza lub systemu operacyjnego. Choć konteneryzacja wymaga zaawansowanych umiejętności technicznych do implementacji, może znacznie wzmocnić cyberbezpieczeństwo startupu.
Przyjrzyjmy się, co konteneryzacja może zrobić dla Twojego startupu i jakie korzyści bezpieczeństwa niesie ze sobą. Ale najpierw zapoznajmy się z definicją konteneryzacji.
!To dziesiąty artykuł z jedenastu, które opisują zalecenia dotyczące bezpieczeństwa dla startupów. Ostatni wyjaśnia różnice między etycznymi hackerami a cyberprzestępcami, a także korzyści płynące z przeprowadzania testów penetracyjnych.
Czym jest konteneryzacja?
Konteneryzacja polega na zapakowaniu kodu oprogramowania systemu operacyjnego (OS) oraz jego niezbędnych komponentów, takich jak biblioteki i zależności, wymaganych do uruchomienia kodu w odizolowanym środowisku zwanym „kontenerem”. Kontener to lekki plik wykonywalny, który może działać w sposób spójny na danej infrastrukturze. Można to porównać do kontenera transportowego. Możesz zapakować w niego tyle towaru, ile potrzebujesz (bibliotek i zależności), które należą do jednego konkretnego dostawcy (systemu operacyjnego) i wysłać go w dowolne miejsce (infrastruktura). W świecie komputerowym konteneryzacja ma wiele zalet, ponieważ kontenery są bardziej przenośne i efektywne pod względem zasobów niż maszyny wirtualne (VM), zapewniając jednocześnie bezpieczeństwo w odizolowanym środowisku. Konteneryzacja usług pozwala deweloperom na szybsze tworzenie i wdrażanie aplikacji oraz umożliwia im korzystanie z narzędzi orkiestracyjnych. W ten sposób kontenery stały się de facto jednostkami obliczeniowymi nowoczesnych aplikacji chmurowych.

Korzyści bezpieczeństwa z konteneryzacji
Przyjęcie kontenerów pozwala startupom na zwiększenie efektywności procesu tworzenia oprogramowania, umożliwia tworzenie bardziej odpornych i elastycznych aplikacji oraz tworzenie skalowalnego środowiska. Przede wszystkim jednak zwiększa bezpieczeństwo, redukując podatności w środowiskach wielochmurowych oraz pozwalając zespołowi DevOps przejść na podejście DevSecOps.
Oto cztery sposoby, w jakie bezpieczna konteneryzacja przyczynia się do poprawy bezpieczeństwa w startupach.
- Przejście na DevSecOps: Daje Twojemu startupowi możliwość stworzenia bezpiecznego procesu tworzenia kodu w ramach ciągłej integracji i dostarczania obrazów kontenerów. Bez bezpiecznego procesu tworzenia kodu zespół DevOps może szybko skalować lub modyfikować obrazy kontenerów, które mogą mieć potencjalne zagrożenia bezpieczeństwa. Przejście na DevSecOps oznacza jednak wykrywanie podatności wcześniej w procesie tworzenia. Oznacza to, że działania naprawcze są szybsze i tańsze na wcześniejszym etapie, niż na późniejszym. Zapobiega to również rozprzestrzenianiu się podatności w środowiskach wielochmurowych. To wspomaga bezpieczeństwo infrastruktury Twojego startupu, ponieważ zespół DevSecOps może wdrożyć bezpieczną konteneryzację i orkiestrację, co pozwala im działać proaktywnie w rozwiązywaniu ryzyk bezpieczeństwa na całym etapie tworzenia kodu.
- Odporność aplikacji: Zapewnia odporność na zagrożenia cybernetyczne i wspiera ciągłość działalności w przypadku awarii. Bezpieczna konteneryzacja pomaga startupom osiągnąć minimalne zakłócenia podczas ataku, ponieważ pojedyncza awaria ma minimalny wpływ na wydajność aplikacji. Zespół DevOps może natychmiast wycofać określone, niebezpieczne kontenery z produkcji, jeśli wykryje ryzyka bezpieczeństwa, nie przerywając operacji.
- Bezpieczność reagująca na zagrożenia: Umożliwia zwinne podejście do bezpieczeństwa i eliminuje wzajemne zależności między aplikacjami, które prowadzą do długotrwałych podatności. Izolowane kontenery są szybko aktualizowane, nie wpływając na inne mikroserwisy w aplikacji, co jest korzystne, ponieważ 60% naruszeń bezpieczeństwa wynikało z nieaktualnych poprawek bezpieczeństwa, według badania Ponemon Institute z 2019 roku. Dlatego orkiestracja i automatyzacja mogą wspierać zwinne bezpieczeństwo kontenerów i widoczność w całym cyklu życia aplikacji.
- Wprowadzenie limitów PID: Konteneryzacja pozwala na ścisłą kontrolę identyfikatorów procesów (PID), co zapobiega działalnościom złośliwym. Na przykład każdy proces w jądrze systemu ma unikalny PID, a kontenery wykorzystują przestrzeń nazw PID w systemie Linux, aby zapewnić oddzielny widok hierarchii PID dla każdego kontenera. Nakładanie limitów na PIDS ogranicza liczbę procesów uruchamianych w każdym kontenerze, co zapobiega nadmiernemu tworzeniu nowych procesów i potencjalnemu złośliwemu ruchowi bocznemu. Ponadto, nakładanie limitów PID zapobiega bombom fork i nietypowym procesom. Pomaga to również w łagodzeniu złośliwej działalności, takiej jak reverse shell i zdalne wstrzykiwanie kodu – lub wszelkie inne działania, które wymagają uruchomienia nowego procesu.

Technologie wspierające konteneryzację
Kontenery to doskonały wybór dla startupów, które chcą szybko skalować swoje środowisko, budować bardziej odporne i elastyczne aplikacje oraz zapewnić bezpieczny pipeline kodu.
Poniżej znajduje się 25 najlepszych technologii i narzędzi kontenerowych w odpowiednich kategoriach, które warto rozważyć według Tech Beacon.
Środowiska uruchomieniowe
- Docker: Pierwsza i najpopularniejsza technologia kontenerowa. Jej silnik konteneryzacji open-source działa z wieloma produktami i narzędziami open-source.
- Docker Enterprise: Zestaw rozszerzeń, który dodaje funkcje do Dockera i umożliwia jego komercyjne wsparcie. Jeśli Twój startup potrzebuje matrycy wsparcia, która określa, które wersje oprogramowania są wspierane, Docker Enterprise może być odpowiedni dla Ciebie.
- CRI-O: Niezwykle lekka, open-source’owa implementacja referencyjna.
- rktlet: Posiada zestaw wspieranych narzędzi i społeczność, która może konkurować z Dockerem.
- containerd: Projekt Cloud Native Computing Foundation. Ma wtyczkę CRI, która pozwala Kubernetesowi uruchamiać containerd w ten sam sposób, w jaki uruchamia rktlet lub CRI-O.
- Microsoft Containers: Alternatywa dla Linuksa, która obsługuje kontenery Windows w określonych warunkach. Zwykle działają w prawdziwej maszynie wirtualnej, a nie w menedżerze klastra, takim jak Kubernetes.
Zarządzanie klastrami i wdrożeniami
- Kubernetes: Open-source’owy menedżer klastrów, pierwotnie opracowany przez Google, który jest najpopularniejszy w zarządzaniu klastrami. Obsługiwany przez AWS Amazona, Google Cloud Engine (GCE) oraz Microsoft Azure Container service, Kubernetes jest stosunkowo przenośny, co pomaga zapobiec uzależnieniu od dostawcy. Może również działać w prywatnej chmurze, takiej jak OpenStack.
- Istio i Envoy: Open-source’owe technologie service mesh, które dodają warstwę zapewniającą bezpieczeństwo i widoczność. Mogą one szyfrować ruch wewnątrz klastra, jednocześnie go monitorując. Rozwój Envoya został rozpoczęty przez Lyft i był to pierwszy service mesh dla Kubernetes. Istio zawiera Envoya, działa na nim i dodaje szereg wtyczek, pulpitów nawigacyjnych oraz innych funkcji, aby go rozszerzyć.
- Apache Mesos: Narzędzie do abstrakcji zasobów obliczeniowych, które może uruchamiać zarówno obrazy Docker, jak i rkt obok siebie w tym samym klastrze.
- Docker Swarm: Darmowy produkt Dockera do zarządzania klastrami. Działa z linii komend i nie obsługuje automatycznego skalowania ani równoważenia obciążenia w sposób natywny. Niemniej jednak, rozszerzenia innych firm dostarczają tę funkcjonalność.
- Docker Datacenter: Zaprojektowane jako zamiennik, który umożliwia konteneryzację całego centrum danych i obejmuje wsparcie komercyjne. Narzędzie to integruje się z LDAP i posiada pulpit nawigacyjny oparty na sieci web, z panelem sterowania, rejestrem, monitoringiem, logowaniem oraz ciągłą integracją. Dodaje ono równoważenie obciążenia i skalowanie, których brakuje w Swarm, i działa z Docker Enterprise.
Kontenery przechowywania danych
- BlockBridge: Firma oferująca „elastyczną platformę do przechowywania”, która udostępnia przechowywanie w postaci kontenera przy użyciu Dockera, z obsługą Kubernetes, OpenStack i przechowywania opartego na oprogramowaniu.
- EMC / libstorage: System oferujący bibliotekę kodu do zapewnienia przechowywania danych w kontenerach, która jest darmowa i open-source.
Bezpieczeństwo kontenerów
- Twistlock: Jego skaner podatności zajmuje się ryzykami związanymi z niezałatanymi lub przestarzałymi wersjami oprogramowania na obrazie kontenera, porównując obrazy z bazą znanych zagrożeń. Jest to zautomatyzowany audyt oparty na bazie, która jest regularnie aktualizowana. Inne podstawowe funkcje obejmują klasyczne wykrywanie intruzów oraz systemy zgodności z regulacjami.
- Aqua Container Security: Skupia się na możliwości tworzenia, monitorowania i egzekwowania polityki dla kontenerów, wraz z integracją z ciągłą integracją (CI), uruchamiając kontrole bezpieczeństwa przy każdej budowie.
- StackRox: Współzałożony przez Sameera Bhalotrę, byłego dyrektora bezpieczeństwa w Google i starszego dyrektora ds. cyberbezpieczeństwa w Biurze Prezydenta Stanów Zjednoczonych, StackRox zapewnia wykrywanie klastrów Kubernetes. Oprogramowanie to analizuje cały klaster, porównując zachowanie działających kontenerów z politykami bezpieczeństwa firmy. StackRox pozwala na dokumentowanie i automatyczną ewaluację tych polityk w kodzie.
- Aporeto: Szyfruje każde obciążenie między kontenerami, zapewniając uwierzytelnianie i autoryzację. Aporeto pozwala również na programowe definiowanie polityk bezpieczeństwa i ich egzekwowanie.
Systemy operacyjne
- Alpine Linux: Jeśli tworzysz obraz Docker i nie określisz systemu operacyjnego, użyjesz Alpine Linux. Duża liczba przykładowych i testowych kontenerów Docker korzysta z tego systemu.
- RancherOS: Zawierający jedynie jądro Linuxa oraz samego Dockera, obraz systemu zajmuje tylko 22 MB miejsca na dysku. RancherOS eliminuje systemd, system zarządzania usługami wbudowany w większość wersji Linuxa, zamiast tego uruchamia sam Docker Daemon jako system init lub bootstrap.
- CoreOS Container Linux: Zaprojektowany do pracy z narzędziami i systemami CoreOS Linux, wstępnie skonfigurowany do uruchamiania kontenerów Linux.
- Ubuntu Core: Mała, bezpieczna wersja zaprojektowana z myślą o urządzeniach Internetu Rzeczy (IoT) i kontenerach. Została zaprojektowana z myślą o wysokiej wydajności, małym śladzie w systemie i transakcyjnych aktualizacjach, które zapewniają, że aktualizacje, które nie powiodły się, zostaną pomyślnie wycofane. Można również zakupić wsparcie od firmy Canonical.
- Red Hat Atomic Host: Startupy, które korzystają z Red Hat Enterprise i chcą używać kontenerów, powinny uruchomić system operacyjny Red Hat Atomic Host. Narzędzia te pozwolą na hostowanie kontenerów Linux w minimalnej wersji Red Hat Enterprise Linux.
- Microsoft Nano Server: Mały, zdalnie zarządzany system operacyjny oparty na Windows Server 2016, działający wyłącznie jako kontener, który wprowadza natywną obsługę kontenerów do Windows Server. Windows Pro 10 Enterprise to kolejny system operacyjny Microsoft, który może hostować kontenery Windows.
- VMware Photon: Ważący 220 MB na dysku, Photon jest większym systemem operacyjnym dla kontenerów niż niektóre inne, chociaż jest to około setna część rozmiaru najnowszej wersji Windows. Ten host kontenerów Linux jest zaprojektowany do integracji z produktami wirtualizacyjnymi VMware vSphere.

Maszyny wirtualne (VM) a kontenery
Maszyna wirtualna (VM) (znana również jako wirtualny serwer, wirtualne instancje serwera i wirtualny serwer prywatny) to emulacja lub wirtualizacja fizycznego systemu komputerowego, który działa jako wirtualny komputer z własnym procesorem, pamięcią, interfejsem sieciowym i pamięcią masową utworzonym na fizycznym sprzęcie komputerowym (zlokalizowanym w firmie lub w chmurze).
Maszyny wirtualne pozwalają zespołom uruchamiać wiele systemów operacyjnych na jednym urządzeniu komputerowym. VM komunikują się z fizycznymi komputerami przy użyciu lekkich warstw oprogramowania zwanych hypervisorami. Hypervisor to mała warstwa umożliwiająca równoczesne działanie wielu systemów operacyjnych, które dzielą te same zasoby fizyczne. Hypervisory mogą oddzielać maszyny wirtualne od siebie i przydzielać im procesory, pamięć i przestrzeń dyskową.

Kontener to standardowa jednostka oprogramowania, która pakuje wszystko, co potrzebne do uruchomienia jednej aplikacji lub mikroserwisu, w tym wszystkie biblioteki i zależności. Dzięki temu aplikacje lub mikroserwisy mogą działać szybko i niezawodnie w różnych środowiskach komputerowych. Kontenery nie używają hypervisora, w przeciwieństwie do maszyn wirtualnych, co pozwala na szybsze przydzielanie zasobów i szybsze udostępnianie nowych aplikacji.
Kontenery to lżejszy i bardziej zwrotny sposób obsługi wirtualizacji.
Pozwalają na uruchamianie aplikacji praktycznie wszędzie — na komputerze stacjonarnym, tradycyjnej infrastrukturze IT lub w chmurze, wykorzystując formę wirtualizacji systemu operacyjnego (OS). Krótko mówiąc, korzystają z funkcji systemu operacyjnego hosta, aby izolować procesy i kontrolować dostęp tych procesów do CPU, pamięci i przestrzeni dyskowej.

Konteneryzacja i wirtualizacja są podobne, ponieważ obie technologie umożliwiają pełną izolację aplikacji, dzięki czemu mogą działać w różnych środowiskach. Główne różnice między nimi to ich rozmiar i przenośność.
Maszyny wirtualne są większe od kontenerów, zazwyczaj mierzone w gigabajtach, i zawierają własny system operacyjny, co pozwala im jednocześnie realizować wiele zasobożernych funkcji. Zwiększone zasoby dostępne dla maszyn wirtualnych pozwalają na abstrakcję, podział, duplikację i emulację całych serwerów, systemów operacyjnych, desktopów, baz danych i sieci.
Kontenery są znacznie mniejsze, zazwyczaj mierzone w megabajtach. Nie pakują niczego większego niż aplikacja i jej środowisko uruchomieniowe. Maszyny wirtualne dobrze współpracują z tradycyjną, monolityczną architekturą IT lub jako oddzielne stacje robocze do konkretnych zadań. Kontenery natomiast są zgodne z nowoczesnymi i rozwijającymi się technologiami, takimi jak chmury, CI/CD i DevOps/DevSecOps. Oferują również elastyczność i przenośność, co czyni je idealnymi do środowisk multi-cloud.
Zagrożenia związane z bezpieczeństwem kontenerów
Istnieje kilka zagrożeń bezpieczeństwa, które mogą wpłynąć na kontenery i budzą niepokój. Jednym z największych problemów bezpieczeństwa jest brak izolacji kontenerów od systemu operacyjnego gospodarza (OS). Oznacza to, że jeśli w jądrze systemu operacyjnego/gospodarza występuje luka, może to potencjalnie wpłynąć na wszystkie kontenery.
Dodatkowe zagrożenia związane z bezpieczeństwem kontenerów to:
- Złośliwe oprogramowanie w kontenerach: Złośliwe oprogramowanie może przedostać się do kontenerów na różnych etapach cyklu życia kontenera i zostać wdrożone w kontenerze. Po pierwsze, złośliwy atakujący, który przejmie środowisko CI/CD, może wprowadzić złośliwe oprogramowanie do repozytoriów kodu źródłowego używanych do budowania obrazów kontenerów. Po drugie, atakujący mogą złamać rejestr kontenerów i wymienić obrazy kontenerów na takie, które zawierają złośliwe oprogramowanie. Po trzecie, użytkownicy mogą zostać oszukani i pobrać obrazy kontenerów zawierające złośliwe oprogramowanie z zewnętrznych źródeł, nie zdając sobie z tego sprawy. W rezultacie złośliwe oprogramowanie, które nie zostanie wykryte w kontenerze przed jego uruchomieniem, trafi do środowiska uruchomieniowego, prowadząc do licznych problemów bezpieczeństwa, takich jak zbieranie wrażliwych danych z aplikacji lub zakłócanie pracy innych kontenerów.
- Niebezpieczne uprawnienia kontenerów: Kiedy kontenery mają więcej uprawnień, niż powinny (tj. powinny działać w trybie bez uprawnień), mogą wystąpić ryzyka bezpieczeństwa. Wynika to z faktu, że kontenery działające w trybie uprzywilejowanym mają dostęp do zasobów poza środowiskiem kontenerowym, które powinny kontrolować. Komunikacja między kontenerami powinna być ograniczona, chyba że kontenery mają uzasadniony powód, by się ze sobą komunikować. Niebezpieczne uprawnienia zwykle wynikają z błędnych konfiguracji w orchestratorze kontenerów.
- Kontenery z wrażliwymi danymi: Kontenery nie powinny przechowywać wrażliwych danych. Jednak zdarzają się błędy, i czasami startup lub organizacja może nieumyślnie przechowywać wrażliwe dane wewnątrz obrazów kontenerów. Na przykład, cały kod źródłowy Vine został ujawniony, gdy ktoś odkrył rejestr kontenerów, który Vine uważał za prywatny. Okazało się, że był on publicznie dostępny, a Vine z przerażeniem odkrył, że hostują obrazy, które zawierały kod źródłowy.
Podsumowanie
Bezpieczna konteneryzacja pozwala startupom szybko budować aplikacje i bezpiecznie skalować je w środowiskach multi-cloud, minimalizując ryzyka bezpieczeństwa od początku cyklu rozwoju oprogramowania. Zapewnia również odporność na cyberzagrożenia i wspomaga ciągłość działalności w przypadku awarii. Ryzyka bezpieczeństwa, które zapobiega bezpieczna konteneryzacja, to ataki, takie jak wstrzykiwanie złośliwego kodu, reverse shell oraz inne złośliwe procesy, w tym luki, które mogą być obecne w obrazach kontenerów, poprzez przesunięcie procesu zabezpieczania kodu w ramach procesów DevSecOps i zabezpieczania pipeline’u. Kontenery są bardziej lekkie niż maszyny wirtualne, a także elastyczne, przenośne i kosztowo efektywne, co jest idealne dla startupów. Istnieje wiele technologii i narzędzi kontenerowych, które startupy mogą zacząć wykorzystywać do wdrażania bezpiecznej konteneryzacji w swoim środowisku. Podsumowując, bezpieczne kontenery to skuteczny sposób na szybkie i bezpieczne budowanie oraz skalowanie aplikacji przez startupy.
!Ten artykuł jest częścią serii poświęconej bezpieczeństwu cybernetycznemu startupów. W następnym artykule dowiesz się, czym jest canary token i jak go wykorzystać, aby wzmocnić bezpieczeństwo swojej organizacji.
Źródła:
- https://www.redhat.com/en/topics/containers/sandboxed-containers
- https://www.ibm.com/cloud/learn/containerization
- https://securityintelligence.com/articles/considering-container-security-6-ways-to-make-a-case-for-containerization
- https://www.stackrox.io/blog/docker-security-101
- https://linfordco.com/blog/containerization-security
- https://sysdig.com/learn-cloud-native/container-security/what-is-container-security
- https://www.redhat.com/en/topics/cloud-native-apps/what-is-containerization
- https://www.ibm.com/cloud/blog/containers-vs-vms
- https://techbeacon.com/enterprise-it/30-essential-container-technology-tools-resources-0

Porozmawiajmy o przeprowadzaniu badań bezpieczeństwa aplikacji internetowej
Umów się na rozmowę z ekspertem ds. cyberbezpieczeństwa
Czy artykuł jest pomocny? Podziel się nim ze swoimi znajomymi.