9 osvědčených postupů pro zabezpečení kontejnerů v DevOps

Kontejnery jsou v oblasti DevOps již dobře zavedenou technologií. Jedná se o izolovaná virtuální prostředí, která obsahují všechny potřebné nástroje pro provoz mikroslužeb i rozsáhlých aplikací.

Představte si kontejnery jako balíčky, které vývojářům umožňují uchovávat vše potřebné pro spuštění aplikace na jednom místě. To zahrnuje například běhová prostředí a binární kódy. Vše je přístupné z centralizovaného bodu.

Kontejnery usnadňují vývojářům přesun aplikací mezi různými prostředími, například z lokálního počítače do virtuálního prostředí, nebo mezi vývojovou a produkční fází. Tím se eliminují problémy s odlišným nastavením softwaru a konfigurací v různých fázích vývoje a provozu.

Zpráva společnosti Statista o technologii kontejnerů uvádí, že 50 % organizací po celém světě zavedlo orchestraci kontejnerů. I přes rozšíření této technologie a jejích výhod, mohou kontejnery představovat bezpečnostní riziko, pokud nejsou dostatečně chráněny.

CVE Details, významný zdroj dat o zranitelnostech, zaznamenal 62 specifických zranitelností v Dockeru. Je tedy nezbytné, aby vývojáři dodržovali osvědčené postupy, které chrání kontejnery a zajišťují úspěšné procesy DevOps.

Tento článek se zabývá konceptem zabezpečení kontejnerů, upozorňuje na klíčové výzvy a poskytuje osvědčené postupy, které by měly být dodržovány při používání kontejnerových technologií.

Co je zabezpečení kontejnerů?

Zabezpečení kontejnerů je neustálý proces, který využívá bezpečnostní protokoly, nástroje a strategie k ochraně kontejnerů a jejich prostředí před potenciálními hrozbami.

Pokud nejsou kontejnery adekvátně zabezpečeny, mohou hrozby poškodit vaši aplikaci, infrastrukturu, běhové prostředí, systémové knihovny, operační systém a další klíčové funkce.

Vzhledem k tomu, že kontejnery jsou proměnlivé a navržené pro dynamické nasazení a škálování, je nutné automatizovat zabezpečení v každé fázi vývojového cyklu softwaru (SDLC).

Přečtěte si také: Úvod do Kubernetes Kops pro začátečníky

Jaké jsou výzvy v zabezpečení kontejnerů?

I přes mnohé výhody, které kontejnery přinášejí, jako je zrychlení dodávky softwaru, nejsou imunní vůči bezpečnostním výzvám. Hlavním problémem je to, že samotné kontejnery postrádají vlastní bezpečnostní mechanismy a vyžadují další opatření.

Kontejnery přistupují k hardwaru prostřednictvím hostitelského operačního systému (OS). To znamená, že jeden kontejner může sdílet několik základních obrazů kontejnerů, což zvětšuje prostor pro potenciální útoky a představuje specifické problémy.

Jednou z hlavních výzev je nesprávná konfigurace kontejnerů. Vývojáři často zapomínají upravit výchozí nastavení, která mohou skrývat rizika, jako jsou nezabezpečené porty, které nemusí být vhodné pro danou aplikaci, uniklé přihlašovací údaje (hesla, autentizační tokeny) nebo nadměrná oprávnění pro běh kontejneru (spouštění s root oprávněními). Pokud nejsou tato výchozí nastavení přepsána, mohou se stát vstupními body pro útoky.

Další výzvou jsou zranitelnosti v infrastruktuře kontejnerů. To zahrnuje balíčky, které jsou součástí kontejneru – kód aplikace, knihovny a konfigurace – ale také balíčky hostitelského OS. Zranitelnosti se mohou objevit v jakékoli fázi životního cyklu aplikace, například při integraci externích závislostí do obrazu kontejneru, instalaci knihoven s otevřeným zdrojovým kódem, používání základních obrazů z veřejných registrů a napadením hostitelských systémů přes sítě a koncové body.

Viditelnost do kontejnerového provozu představuje další významnou výzvu. Dynamická povaha kontejnerů ztěžuje monitorovacím nástrojům sledování běžících kontejnerů a analýzu jejich chování v síti. Zlepšená viditelnost je klíčová pro prevenci útoků a zkrácení reakční doby v případě incidentů.

Kontejnery jsou také zranitelné, pokud je jakákoli fáze CI/CD kanálu nezabezpečená, ať už se jedná o kód aplikace nebo infrastrukturu pracovního zatížení. Přestože primární zodpovědnost za zabezpečení na konci životního cyklu aplikace leží na vývojářích, jeho administrace v každém kroku vývoje pomáhá chránit aplikace před selháním.

Které nástroje mohou vyřešit výzvy v zabezpečení kontejnerů?

Zajištěním bezpečnosti a integrity kontejnerů pomocí vhodných nástrojů můžete zajistit, že vaše nasazená řešení budou v bezpečí. Tyto nástroje vyhledávají zranitelnosti a neustále monitorují kontejnery s cílem odhalit útoky, chyby nebo jiné problémy.

Ať už hledáte open-source nástroje pro zabezpečení kontejnerů nebo komerční řešení, jejich účelem je ochrana kontejnerové infrastruktury. Nástroje auditují infrastrukturu kontejnerů a porovnávají ji s databázemi známých zranitelností a rizik (CVE).

Mezi nástroje, které můžete vyzkoušet, patří Pingsafe Editors Choice, Datadog Cloud SIEM, Anchore, Sophos Cloud-Native Security, Bitdefender GravityZone, Sysdig secure, Aqua Security a RedHat Advanced Cluster Security pro Kubernetes.

Přečtěte si také: 11 bezpečnostních skenerů kontejnerů k nalezení zranitelností

Nejlepší postupy pro zabezpečení kontejnerů

Následující text shrnuje doporučené postupy, které je vhodné implementovat pro maximalizaci zabezpečení kontejnerů ve všech fázích životního cyklu aplikace.

Zabezpečení vašich obrazů

Obrazy kontejnerů slouží k vytváření kontejnerů. I drobná nesprávná konfigurace nebo škodlivá akce může vést ke zranitelnostem v produkčním prostředí. Můžete tomu předcházet:

  • Používáním důvěryhodných obrazů – Pokud nevytváříte vlastní obrazy, používejte obrazy z důvěryhodných zdrojů. Veřejná úložiště, jako je Docker Hub, obsahují i obrazy, které mohou být infikované malwarem nebo špatně nakonfigurované.
  • Zahrnutím pouze nezbytných komponent – Pokud aplikace nepotřebuje nějaké součásti, je nejlepší je odstranit. Například systém UNIX obvykle obsahuje binární soubory jako „awk“ a „sed“.
  • Zahrnutím aplikace do obrazu kontejneru – Obraz kontejneru zahrnuje podmnožinu operačního systému (OS) a spouštěnou aplikaci. Každý nástroj a knihovna v kontejneru představuje potenciální hrozbu. Pro řešení tohoto problému je vhodné zahrnout aplikaci do obrazu kontejneru, což se provádí prostřednictvím staticky zkompilovaného binárního souboru se všemi potřebnými závislostmi.

Automatizace prohledávání zranitelností a správy

Pravidelné skenování zranitelností a správa kontejnerů a hostitelských systémů pomáhá odhalovat zranitelnosti v kterékoli fázi životního cyklu aplikace.

Můžete aktivovat skenování kódu pro detekci chyb a statické testování zabezpečení aplikací (SAST) pro odhalení zranitelností v kódu vaší aplikace. Analýza složení softwaru (SCA) poskytuje přehled o komponentách softwaru s otevřeným zdrojovým kódem a generuje seznam softwaru, který je možné porovnat s databází známých zranitelností.

Skenování obrazu analyzuje obsah a proces vytváření obrazu kontejneru a hledá potenciální zranitelnosti. S nástroji jako Clair můžete vyhledat známé zranitelnosti. Dynamické testování zabezpečení aplikací (DAST) detekuje bezpečnostní rizika na základě chování kontejneru. Nástroje DAST také provádějí skenování hostitelského systému a kontrolují konfigurace hostitelského jádra a OS.

Kromě preventivních opatření v průběhu životního cyklu kontejneru můžete přijmout strategii „posunu vlevo“ (shift-left), kdy implementujete bezpečnostní opatření od samého začátku vývojového cyklu. Nástroj Trivy je skvělou volbou, pokud se rozhodnete pro tento přístup.

Zabezpečení registrů kontejnerů

Registry kontejnerů jsou efektivní centralizovaný způsob ukládání a distribuce obrazů. Organizace často uchovávají tisíce obrazů ve veřejných nebo soukromých registrech. Je nezbytné zavést opatření, která zajistí, že všichni členové týmu a spolupracovníci používají obrazy bez zranitelností.

Implementace řízení přístupu uživatelů (pro soukromé registry) stanoví, kdo může publikovat a přistupovat k obrazům. I když se jedná o základní bezpečnostní opatření, zabraňuje neoprávněným osobám zveřejňovat, upravovat nebo mazat vaše obrazy.

Dalším opatřením je podepisování obrazů, které spojuje každý obraz s osobou, která ho podepsala, čímž je ztížena možnost nahradit jej kompromitovaným. Můžete použít techniky Docker Content Trust pro přidávání digitálních podpisů k datům odesílaným a přijímaným z registrů. A nezapomeňte, že pravidelné skenování vašich obrazů pomáhá odhalovat případné kritické zranitelnosti.

Monitorování kontejnerů

Nástroje pro sledování pomáhají zlepšit viditelnost provozu kontejnerů. Nástroje by měly být schopné monitorovat a testovat zranitelnosti všech komponent a umožňovat protokolování v reálném čase pro kontejnerová prostředí.

Nástroje pozorovatelnosti odhalují hrozby auditováním metrik a protokolů všech součástí kontejnerového zásobníku a analyzováním jejich abnormalit. Tento přístup umožňuje okamžitou opravu nesprávných konfigurací.

K shromažďování metrik využití zdrojů použijte nástroje jako cAdvisor nebo kube-state-metrics. Pro sledování aktivity kontejnerů a výkonu vašich clusterů použijte nástroje jako Grafana nebo Prometheus.

Chcete-li analyzovat síťový provoz mezi kontejnery, použijte Wireshark nebo tcpdump. Pokud používáte spravovanou službu Kubernetes, jako je (AKS), použijte Azure Monitor ke sledování zdrojů a bezpečnostních hrozeb.

Azure Log Analytics navíc může shromažďovat a analyzovat vaše prostředky AKS. Pokud zvolíte Amazon EKS, Amazon CloudTrail je vhodný pro protokolování a sledování; k monitorování můžete využít Amazon Cloud Watch.

Implementace zabezpečení sítě

Opatření pro řízení zabezpečení sítě pomáhají chránit před neoprávněným přístupem ke kontejneru. Klíčem je segmentace sítě, která izoluje kontejnery a omezuje jejich přístup pouze k nezbytným službám.

Pokud provozujete kontejnerové aplikace na Kubernetes, můžete použít síťové zásady K8s ke konfiguraci příchozího a odchozího provozu uvnitř clusterů, což omezuje provoz na konkrétní pody na základě štítků.

Zabezpečení transportní vrstvy (TLS) může být rozšířeno pro komunikaci mezi pody. Pro bezpečnou komunikaci mezi API serverem a dalšími komponentami si můžete zvolit TLS nebo SSL (Secure Socket Layer). Pro omezení vstupního provozu do vašich clusterů je vhodné použít nástroj pro vyrovnávání zatížení.

Pokud vaše clustery zahrnují mikroslužby, můžete zajistit bezpečný provoz pomocí nástrojů pro síť služeb, jako je Meshery nebo Linkerd. Nakonec, pokud pro hostování clusterů využíváte cloud, zajistěte bezpečnost vaší sítě.

Pokud používáte Azure Kubernetes Service (AKS), použijte pro správu provozu skupiny zabezpečení sítě (NSG). Pokud používáte službu Amazon Elastic Kubernetes Service (EKS), nejvhodnější by byly skupiny zabezpečení virtuálního privátního cloudu Amazon (VPC).

Snížení plochy útoku

Minimalizace plochy útoku přináší dvě výhody: zvýšení rychlosti služeb a snížení potenciálu bezpečnostních rizik.

Použitím vícefázového sestavování (multi-stage builds) můžete vytvářet lehké obrazy s menší plochou útoku a lepší dobou spouštění a výkonem. Existuje několik řešení. Pokud používáte Linux, můžete použít Alpine Linux, BusyBox nebo Tiny Core Linux.

Pro Ubuntu je k dispozici Ubuntu Minimal. Můžete také použít Scratch, speciální obraz Docker, který umožňuje vytvářet minimalistické obrazy od začátku.

Omezení oprávnění kontejneru

Zásadou je udělit kontejneru minimální oprávnění potřebná pro provedení daného úkolu. Pokud jsou kontejnery spouštěny s root oprávněními, získává uživatel různé provozní pravomoci, například možnost instalovat balíčky nebo provádět operace čtení a zápisu do operačního systému.

Riziko spočívá v tom, že útočníci mohou zneužít eskalaci práv v případě kompromitování běhového prostředí kontejneru. Existují dvě životaschopná řešení. Můžete spouštět kontejnery v režimu bez kořenových práv (rootless) nebo omezit schopnosti jádra LINUX pouze na ty, které jsou nezbytné pro provoz kontejnerů.

Bezpečná správa hesel

Konfigurační soubory kontejneru a Dockeru by neměly obsahovat žádná tajná data, jako jsou certifikáty, hesla, API klíče a tokeny. I když se jedná o doporučený postup, často se tajná data nacházejí přímo v procesu sestavení nebo v obrazech zdrojového kódu.

V takových případech se citlivá data dostávají do kontejnerů a ukládají se do mezipaměti v mezilehlých vrstvách, a to i po odstranění kontejnerů. Nejlepším přístupem je implementovat řešení pro správu hesel, jako je AWS Secrets Manager a Vault pro ukládání a správu tajných přihlašovacích údajů.

Posílení vašeho týmu

Dalším důležitým bezpečnostním opatřením je vzdělávání vašeho týmu o osvědčených bezpečnostních postupech. Všichni členové týmu by měli být schopni identifikovat bezpečnostní hrozby a reagovat na ně.

Dobrou praxí je zahrnout školení o zabezpečení kontejnerů do procesu onboardingu nových členů týmu. Praktická školení, průběžné vzdělávání a pravidelné bezpečnostní hodnocení zvyšují kompetence vašeho týmu DevOps v oblasti moderních bezpečnostních trendů.

Závěrečné myšlenky

Zabezpečení kontejnerů je klíčový a kontinuální proces v rámci celého vývojového cyklu softwaru. Nejlepším přístupem je integrovat zabezpečení od kódu aplikace přes běhové prostředí kontejneru, hostitelský operační systém až po základní síťovou infrastrukturu.

Tohoto můžete dosáhnout dodržováním strategického plánu zahrnujícího ověřování kontejnerů a používání obrazů pouze z důvěryhodných zdrojů. Dále byste měli implementovat kalení kontejnerů, aby obsahovaly pouze nezbytné služby. Nastavte metody protokolování a snadno je implementujte pomocí monitorovacích nástrojů. Segmentujte vaši síť a izolujte kontejnery od zbytku infrastruktury.

Vždy podepisujte své obrazy, abyste ověřili vstup a výstup dat prostřednictvím vašich služeb. Pravidelně provádějte kontroly a penetrační testy pro odhalení a okamžité nápravy chyb zabezpečení. A vzhledem k rychlému vývoji technologického prostředí, sledujte nejnovější bezpečnostní postupy.

Podívejte se dále, jak automatizovat zabezpečení.