Kontejnery v DevOps nejsou žádnou novinkou. Jsou to virtuální sandboxy se všemi potřebnými nástroji pro provozování mikroslužeb, včetně velkých aplikací.
Kontejnery si můžete představit jako balicí systémy, které vám (jako vývojáři) umožňují uložit vše, co potřebujete ke spuštění aplikace, například běhové prostředí a binární kódy, z centralizovaného bodu.
Kontejnery pomáhají vývojářům přesouvat aplikace z jednoho prostředí do druhého (jako je odeslání aplikace z místního počítače do virtuálního prostředí nebo její přesun z počáteční do produkční fáze), čímž se eliminují všechny problémy spojené s různým nastavením softwaru a konfigurace ve vývojářích a produkci. konec.
Statista Zpráva o technologii kontejnerů ukazuje, že 50 % organizací na celém světě přijalo orchestraci kontejnerů. I když se tato technologie díky svým výhodám rozšířila, kontejnery by mohly otevřít bránu pro útoky na kybernetickou bezpečnost, pokud by nebyly kontrolovány.
Podrobnosti CVEhlavní zdroj dat o zranitelnosti zabezpečení, zaznamenal 62 Zranitelností šitých na míru Dockeru od tohoto psaní. Nevyžaduje to osvědčené postupy pro vývojáře, které by tyto úskalí řešily a chránily kontejnery pro úspěšné procesy DevOps?
Tento příspěvek rozebírá koncept zabezpečení kontejnerů, zdůrazňuje několik výzev a vede vás osvědčenými postupy, které je třeba dodržovat při používání technologie kontejnerů.
Table of Contents
Co je zabezpečení kontejnerů?
Zabezpečení kontejnerů je nepřetržitý proces, který využívá bezpečnostní protokoly (nástroje a zásady) k ochraně kontejnerů a jejich prostředí před potenciálními hrozbami.
Pokud není zaškrtnuto, mohou hrozby poškodit vaši aplikaci, její infrastrukturu, doby běhu, systémové knihovny, operační systém a jádro a další funkce.
Vzhledem k tomu, že kontejnery jsou dostupné v přechodných stavech (momentálně) a jsou také určeny pro dynamické nasazení a škálování, existuje potřeba automatizovaného zabezpečení a každé fáze životního cyklu vývoje softwaru (SDLC).
Čtěte také: Úvod do Kubernetes Kops pro začátečníky
Jaké jsou výzvy v zabezpečení kontejnerů?
I když kontejnery mají spoustu odměn (jako je urychlení dodávky softwaru), nejsou imunní vůči výzvám, hlavně proto, že potřebují bezpečnostní opatření (chybí jim možnosti vlastního zabezpečení).
Je to proto, že kontejnery přistupují k hardwaru prostřednictvím hostovaného operačního systému (OS). To znamená, že jeden kontejner může mít několik podkladových obrázků kontejneru, což představuje širší rozsah pro útočné plochy, což představuje určité problémy.
První je nesprávná konfigurace kontejneru, kde vývojáři zapomínají přizpůsobit a používat výchozí konfigurace kontejnerů, které mají určitá úskalí, jako jsou některé odhalené, nezabezpečené porty, které nemusí být ideální pro vaši aplikaci, uniklé přihlašovací údaje, jako jsou hesla a ověřovací tokeny, a nadměrné vydávání oprávnění k kontejnerové runtime (při spuštění jako root). Pokud tyto výchozí konfigurace nejsou přepsány, poskytují cesty k útokům.
Další je zranitelnost kontejnerové infrastruktury. Zde balíčky zabudované do kontejneru, jako je kód aplikace, knihovny a konfigurace nebo balíčky v hostitelském operačním systému, představují zranitelnosti. Náchylnost může být zavedena v jakékoli fázi životního cyklu aplikace, například když jsou externí závislosti zabudovány do bitové kopie kontejneru, knihovny s otevřeným zdrojovým kódem jsou instalovány jako součást aplikace, základní obrazy kontejnerů pocházející z registrů kontejnerů a hostitelů třetích stran které jsou zneužitelné prostřednictvím sítí a koncových bodů.
Viditelnost na kontejnerové pracovní zatížení patří mezi největší kontejnerové výzvy. Důvodem je vysoce dynamická povaha kontejnerů, která znemožňuje monitorovacím nástrojům zjistit, které kontejnery jsou spuštěny, a zkontrolovat jejich chování v síti. Zlepšená viditelnost zabraňuje narušení a zkracuje dobu odezvy na dopad, pokud k němu dojde.
Kromě toho je kontejner náchylný, pokud je některá fáze kanálu CI/CD nezabezpečená, ať už v kódu aplikace nebo v infrastruktuře pracovního zatížení kontejneru. I když je na vývojářích, aby řešili zabezpečení na konci životního cyklu aplikace, jeho administrace v každém kroku vývoje chrání vaše aplikace před tímto neúspěchem.
Které nástroje mohou vyřešit výzvy v zabezpečení kontejnerů?
Zajištěním zabezpečení a integrity kontejnerů pomocí bezpečnostních nástrojů můžete zajistit, aby vaše nasazená podniková řešení byla bezpečná. Tyto nástroje vyhledávají zranitelnosti a neustále je sledují, zda neobsahují útoky, chyby nebo jakékoli problémy.
Ať už hledáte open-source nástroje pro zabezpečení kontejnerů nebo komerční typ, všechny budou sloužit stejnému účelu. Všechny fungují tak, že auditují vaši kontejnerovou infrastrukturu a běží proti běžným zranitelnostem a rizikům (CVE).
Zde je několik nástrojů, které můžete vyzkoušet: 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ů
Navzdory výše uvedeným výzvám v zabezpečení kontejnerů je zde uveden rozpis nejlepších konvencí, které můžete implementovat pro optimalizaci zabezpečení kontejnerů ve všech fázích životního cyklu aplikace.
Zabezpečení vašich snímků
K vytváření kontejnerů se používají obrazy kontejnerů. Sebemenší nesprávná konfigurace nebo škodlivé akce mohou způsobit zranitelnosti kontejnerů ve výrobě. Proti tomu můžete bojovat:
- Používání důvěryhodných obrázků – Když nevytváříte své obrázky od začátku, vždy byste se rozhodli pracovat s obrázky z důvěryhodných zdrojů. Veřejná úložiště jako Docker Hub mají obrázky, včetně těch s malwarem a nesprávnou konfigurací.
- Včetně pouze nezbytných součástí – Pokud existují součásti, které vaše aplikace nepotřebuje, bylo by nejlepší je odstranit. Například systém UNIX přirozeně obsahuje binární soubory „awk“ a „sed“.
- Zahrnutí vaší aplikace do obrazu kontejneru – Obraz kontejneru spojuje podmnožinu operačního systému (OS) a spuštěné aplikace. Pro každý nástroj a knihovnu vtaženou do kontejneru je to potenciální hrozba. K vyřešení tohoto problému by bylo nejlepší zahrnout aplikaci do obrázku kontejneru. To se provádí prostřednictvím staticky zkompilovaného binárního souboru se všemi požadovanými závislostmi.
Automatizace prohledávání zranitelnosti a správy
Pravidelné skenování zranitelnosti a správa vašeho kontejneru a hostitelů pomáhá detekovat zranitelnosti v jakékoli fázi životního cyklu aplikace.
V tomto případě můžete aktivovat skenování kódu pro detekci chyb a statické testování zabezpečení aplikací (SAST), abyste našli zranitelnosti v kódu vaší aplikace. Analýza složení softwaru (SCA) může poskytnout přehled o komponentách softwaru s otevřeným zdrojovým kódem a generovat softwarový kusovník, který lze porovnat s dokumentovanými zranitelnostmi open source.
Skenování obrazu navíc analyzuje obsah a proces vytváření obrazu kontejneru, aby bylo možné zjistit náchylnost. S nástroji jako Clair, můžete vyhledat známá zranitelnost. Případně použijte dynamické testování zabezpečení aplikací (DAST), které poukazuje na bezpečnostní rizika založená na chování kontejneru. Nástroje DAST mohou také provádět skenování hostitele, kde kontrolujete součásti hostitele kontejneru (hostitelské jádro a OS), zda nedošlo k nesprávné konfiguraci.
Zatímco výše uvedená opatření jsou přijímána v probíhajícím procesu životního cyklu kontejneru, můžete přijmout filozofii „posunout doleva“. Znamená to implementovat zabezpečení hned od začátku vašeho životního cyklu vývoje. Dobrým nástrojem, pokud zvolíte tento přístup, je Trivy.
Zabezpečení registrů kontejnerů
Registry kontejnerů jsou efektivní centralizovaný způsob ukládání obrázků a jejich distribuce. Organizace budou mít často tisíce obrázků uložených ve veřejných nebo soukromých registrech. Existuje několik opatření, která zajistí, aby všichni členové týmu a spolupracovníci používali obrázky bez zranitelnosti.
Za prvé, implementace řízení přístupu uživatelů (pro soukromé registry) stanoví, kdo může publikovat a přistupovat k obrázků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 obrázky.
Dalším opatřením je podepisování obrázků, které spojuje každý obrázek s osobou, která jej podepsala, takže je obtížné nahradit obrázek kompromitovaným. Můžete použít Docker Content Trust techniky pro přidávání digitálních podpisů k datům odeslaným a přijatým z registrů. Nakonec nezapomeňte, že skenování vašich obrázků (nepřetržitě) pomáhá při odhalování jakýchkoli kritických zranitelností.
Monitorování kontejnerů
Pomocí nástrojů pro sledování můžete optimalizovat viditelnost pracovních zátěží kontejnerů. Nástroje by měly být schopny monitorovat a testovat zranitelnosti všech komponent a umožnit protokolování v reálném čase pro kontejnerová prostředí.
Nástroje pozorovatelnosti odhalují hrozby auditováním metrik a protokolů ze všech součástí zásobníku kontejnerů a analýzou jejich abnormalit. S tímto přístupem jste schopni napravit nesprávné konfigurace okamžitě, když jsou identifikovány.
Chcete-li shromažďovat metriky 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.
Pokud chcete 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 dobrý pro protokolování a sledování; používat Amazon Cloud Watch.
Implementace zabezpečení sítě
Opatření pro kontrolu zabezpečení sítě mohou pomoci chránit před neoprávněným přístupem ke kontejneru. Zde použitým kritériem je segmentace sítě, která izoluje kontejnery a omezuje je pouze na přístup k nezbytným službám.
Pokud provozujete své kontejnerové aplikace na Kubernetes, můžete použít síťové zásady K8s ke konfiguraci příchozího a odchozího provozu pod v clusterech. To zase omezuje provoz na konkrétní pody na základě štítků.
Zabezpečení transportní vrstvy (TLS) může být rozšířeno pro komunikaci pod. Pro bezpečnou komunikaci mezi serverem API a dalšími komponentami si můžete zvolit buď TLS, nebo techniku SSL (Secure Socket Layer). Nástroj pro vyrovnávání zatížení je dobrým řešením, pokud chcete také omezit vstup provozu do vašich clusterů.
Pokud vaše clustery mají mikroslužby, můžete zajistit bezpečný provoz pomocí nástrojů pro síť služeb, jako je Meshery nebo Linkerd. A konečně, zabezpečte svou síť, pokud k hostování svých clusterů používáte cloud prodder.
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í povrchových útoků
Minimalizace povrchu útoků má dvě výhody; zvýšení rychlosti služeb a snížení potenciálu narušení bezpečnosti.
Pomocí vícefázového sestavení můžete vytvářet lehké obrázky s malým povrchovým útokem a vylepšenou dobou spouštění a výkonem. Existuje několik řešení, jak to udělat. Pokud používáte Linux, můžete použít Alpine Linux, BusyBox nebo Tiny Core Linux.
Pro Ubuntu existuje Ubuntu Minimal. Můžete také použít Scratch, speciální obrázek Docker – v podstatě otevřený kontejner, k vytvoření minimalistických obrázků od začátku.
Omezení oprávnění kontejneru
Princip zde použitý znamená poskytnutí minimálního oprávnění k provedení daného úkolu. Když jsou kontejnery spuštěny jako root, udělují uživateli různá provozní oprávnění, jako je instalace balíčků nebo výkon operace čtení a zápisu na vašem operačním systému.
Riziko spočívá v tom, že útočníci mohou využít eskalace výkonu na běhové prostředí kontejneru, pokud budou kompromitováni. V takovém případě existují dvě životaschopná řešení. Kontejnery můžete spouštět v režimu bez kořenů nebo omezit schopnosti jádra LINUX pouze na ty, které jsou potřebné pro zátěž kontejnerů.
Bezpečná správa tajemství
Vaše konfigurační soubory kontejneru a dockeru by neměly obsahovat tajemství. Mezi tajemství patří certifikáty, hesla, klíče rozhraní API a tokeny. A i když je to nejlepší postup, často uvidíte tato tajemství pevně zakódovaná v procesu sestavení nebo v obrázcích zdrojového kódu.
V takových případech se citlivá data dostanou do kontejnerů a ukládají se do mezipaměti v mezilehlých vrstvách kontejnerů, i když byly kontejnery odstraněny. V takových případech je nejlepším přístupem nasazení řešení správy tajemství, jako je Správce tajemství AWS a Klenba k ukládání a správě tajných přihlašovacích údajů.
Posílení vašeho týmu
Jako poslední z bezpečnostních opatření je zásadní vzdělávat svůj tým o nejlepších bezpečnostních postupech. To znamená, že všichni hráči vašeho týmu mohou identifikovat bezpečnostní hrozby a reagovat na ně.
Dobrým způsobem, jak toho dosáhnout, je přidat zabezpečení kontejneru do procesů registrace vašeho týmu. Nabídka praktických školení, neustálého učení a pravidelných hodnocení zabezpečení odlišuje váš tým DevOps tím, že je vybavuje aktualizovanými bezpečnostními trendy.
Závěrečné myšlenky
Zabezpečení kontejnerů je zásadní nepřetržitý proces životního cyklu vývoje softwaru. Nejlepším přístupem k tomuto dotazu je začlenění zabezpečení přímo z kódu aplikace do běhového prostředí kontejneru, hostitelského operačního systému a základní síťové infrastruktury.
Toho můžete dosáhnout dodržováním strategického plánu zahrnujícího ověřování kontejnerů a používání pouze těch z důvěryhodných zdrojů. Proveďte kalení kontejnerů, abyste zajistili, že v nich budou pouze nezbytné služby. Zaveďte metody protokolování, které lze snadno implementovat pomocí monitorovacích nástrojů. Segmentujte svou síť tak, aby kontejnery byly odděleny od celkové infrastruktury.
Vždy podepište své obrázky, abyste ověřili vstup a výstup dat prostřednictvím vašich služeb. Kromě toho byste měli pravidelně provádět kontroly a penetrační testy, abyste zkontrolovali případné chyby zabezpečení a okamžitě provedli nápravná opatření. A jak se technologické prostředí vyvíjí, buďte vždy informováni o nejnovějších bezpečnostních postupech.
Dále se podívejte, jak automatizovat zabezpečení.