Zkoumání (chybějícího) zabezpečení typických instalací Docker a Kubernetes

Zkoumání (chybějícího) zabezpečení typických instalací Docker a Kubernetes
V IT pracuji více než 20 let, ale nějak jsem se nikdy nedostal ke kontejnerům. Teoreticky jsem pochopil, jak byly strukturovány a jak fungovaly. Ale protože jsem se s nimi v praxi nikdy nesetkal, nebyl jsem si jistý, jak přesně se ozubená kola pod jejich kapotou točila a točila.

Kromě toho jsem netušil, jak je na tom jejich bezpečnost. Ale opět, teorie zní pěkně a v hlavě mi utkvěla stará písnička „jak se zvyšuje bezpečnost, snižuje se použitelnost“. A tak jsem si myslel, že když je s kontejnery všechno tak snadné, bezpečnost tam je podprůměrná. Jak se ukázalo, měl jsem pravdu.

Pro rychlý začátek jsem se přihlásil do kurzů Černý klobouk 2020 s názvem "Od hadrů k bohatství: pronikání a ochrana prostředí Docker Swarm a Kubernetes".

Kurz, který vedli Sheila A. Berta a Sol Ozzan, okamžitě začal popisem toho, jak kontejnery Docker fungují, a cestu, kterou absolvují při nasazení do Kubernetes. Byla to zcela praktická hodina – studenti si před hodinou museli na své stroje nainstalovat Docker a microk8 – skvělý způsob, jak vidět, jak se nástroje vzájemně ovlivňují, najít slabá místa a hlavně se je pokusit zablokovat.

Bohužel, ačkoliv kurzy slibovaly, že se po dvou dnech stanu „princem“, cítil jsem, že vše teprve začíná a mám se ještě hodně co učit.

Zkoumání (chybějícího) zabezpečení typických instalací Docker a Kubernetes

Než se ponořím do mých vznešených pozorování, je důležité vysvětlit, co je kontejner. Ve vývojovém světě je považováno za normální, že kód napsaný na vašem osobním počítači funguje perfektně, ale když se ho pokusíte spustit někde na serveru, prostě to nefunguje. Kontejnery se snaží tento problém překonat tím, že poskytují samostatné stroje, které můžete snadno přesunout z jednoho serveru na druhý s vědomím, že budou vždy fungovat. Jak název napovídá, obsahují kód, knihovny a další software potřebný k provedení práce. Kubernetes na druhou stranu ano orchestrační platforma pro kontejnery. V zásadě jej lze použít k bezproblémové správě stovek nebo tisíců různých kontejnerů.

Níže jsou uvedeny některé z mých zjištění z pohledu červeného a modrého týmu.

Červený tým

Většina obsahu kontejneru běží jako root: To znamená, že pokud je kontejner kompromitován, budete mít ke kontejneru plný přístup. Tím jsou další kroky mnohem jednodušší.

Montáž docker.sock uvnitř kontejneru je nebezpečná: Pokud máte root uvnitř kontejneru a také jste nainstalovali Docker do kontejneru, který má soket Docker (/var/run/docker.sock), máte potenciál prozkoumat celý cluster, včetně přístupu k jakémukoli jinému kontejneru. Takovému přístupu nelze zabránit izolací sítě ani jinými prostředky.

Proměnné prostředí často obsahují tajná data: Ve většině případů lidé odesílají hesla do kontejneru pomocí normálních proměnných prostředí. Takže pokud máte přístup k účtu, můžete špehovat tyto proměnné prostředí, abyste později rozšířili své pravomoci.

Docker API může poskytnout spoustu informací: Když je rozhraní Docker API ve výchozím nastavení nakonfigurováno, běží bez autorizace a může produkovat spoustu informací. Pomocí Shodan můžete snadno najít seznam otevřených portů, poté získat podrobné informace o clusteru - a pokračovat v jeho úplném zachycení. TrendMicro o tom napsal nejzajímavější článek.

Modrý tým

Nespouštějte obsah kontejneru jako root: I když je jednodušší spustit jako root, neměli byste to dělat. Místo toho spouštějte aplikace s oprávněními k resetování zobrazením uid, buď pomocí volby --user při spouštění z CLI, nebo zadáním USER v Dockerfile.

Nepovolte instalaci softwaru do kontejnerů: Téměř každý útok začíná zasazením něčeho. Od nmap přes ifconfig až po samotný Docker (uvnitř kontejneru), instalace čehokoli do kontejneru byla běžná. Ze stejného důvodu byste měli vždy zablokovat všechny nepoužívané porty. To také pomáhá zabránit přenosu řídicích příkazů, když je váš počítač infikován. Kromě zamezení instalace programů se vyplatí zajistit, aby byl v samotném kontejneru nainstalován minimální počet aplikací potřebných k dokončení úkolu.

Chraňte docker.sock: Musí být chráněn, protože komunikace mezi kontejnerem a clusterem je zpracovávána přes tento soket. Protože se v tomto článku nechci rozepisovat, čtěte poznámka od Dockera, co se může stát, a také jak to vše zablokovat.

Místo proměnných prostředí použijte tajné klíče Dockeru: Existují tajemství zhruba od roku 2017. Ačkoli to není bezpečné, je to stále lepší než proměnné prostředí pro předávání tajných dat do kontejneru.

Pokud ve vás článek vzbudil zájem o kontejnery, můžete si snadno nainstalovat Docker nebo microk8s (malá verze Kubernetes). Zde jsou zde pokyny pro instalaci Dockeru pro Linux a MacOS a zde — pokyny pro instalaci microk8s pro Windows, Linux a MacOS.

Po instalaci můžete jít toto je rychlý průvodce od Docker, podobná možnost nabídl a pro microk8s.

Pokud chcete nebo potřebujete absolvovat komplexní kurz o Dockeru, ve kterém praktičtí řečníci prozkoumají všechny jeho nástroje: od základních abstrakcí po síťové parametry, nuance práce s různými operačními systémy a programovacími jazyky, pak zkuste „Docker video kurz" Seznámíte se s technologií a pochopíte, kde a jak nejlépe používat Docker. A zároveň si pořiďte příklady osvědčených postupů – je lepší učit se v bezpečí a s podporou praktikujících z příběhů o hráběch, než osobně od samotných hrábí s ostnatými násadami.

Zdroj: www.habr.com

Přidat komentář