Pozn. přek.: Téma bezpečnosti Dockeru je jedním z věčných témat v dnešním IT světě. Proto bez zbytečných vysvětlování představujeme překlad další sbírky příslušných doporučení. Pokud jste se tímto tématem již zabývali, mnohá z nich vám budou známá. Sbírku jsme doplnili o seznam užitečných nástrojů a několik zdrojů pro další studium této problematiky.

Předkládám k dobru průvodce zabezpečením Dockeru. Vítáme zpětnou vazbu, protože se jedná spíše o sborník úryvků z různých zdrojů, a ne všechny byly pečlivě ověřeny. Doporučení jsou rozdělena do tří kategorií:
- Nejpotřebnější opatření v rámci operačního systému hostitele při práci s Dockerem;
- Pokyny týkající se konfiguračního souboru buildu a vytváření kontejnerů;
- Nástroje pro zabezpečení, které se mohou integrovat se specifickými funkcemi Docker Enterprise.
Základem tohoto průvodce byly různé zdroje, z nichž mnohé jsou uvedeny níže. Nelze jej nazvat vyčerpávajícím, avšak pokrývá všechny základy. Další informace lze nalézt v popisu k testům CIS (odkaz je uveden na konci této příručky), stejně jako v dokumentaci k Dockeru.
Bezpečnostní benchmark Dockeru
automaticky kontroluje váš Docker na shodu s nejběžnějšími nejlepšími praktikami. Skript slouží jako dobrý heuristický test bezpečnosti, avšak nelze jej považovat za nástroj pro komplexní analýzu.
OS hostitele
Je zřejmé, že Docker kontejner nemůže být zabezpečen, pokud samotný hostitelský systém není chráněn. Proto je třeba dodržovat nejlepší praktiky v oblasti zabezpečení operačních systémů. Dále by bylo rozumné provést analýzu zranitelností vedle následujících doporučení.
Pravidla auditu
Vytvářejte a používejte pravidla auditu pro soubory související s Dockerem pomocí auditctl. Například můžete přidat -w /usr/bin/dockerd -k docker k /etc/audit.rules a restartovat auditní službu.
Režim FIPS
Povolení režimu FIPS přinutí kryptografické nástroje přepnout na algoritmy zahrnuté v FIPS (americké — pozn. překl.), čímž jsou splněny federální a odvětvové normy a požadavky. Pokud hostitelský operační systém podporuje režim FIPS, lze jej aktivovat pomocí následujících příkazů:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && rebootJe také nutné povolit FIPS v Docker Engine:
mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart dockerPro více informací viz dokumentace a .
Docker Secrets
Citlivé údaje by měly být uchovávány jako tajemství. Odpovídající službu lze spustit pomocí příkazu docker service create:
docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginxPodrobnosti viz .
Konfigurační soubor Dockeru
Následující nastavení lze přidat do konfiguračního souboru /etc/docker/daemon.json:
-
"icc":false— zakazuje výměnu dat mezi kontejnery, aby se předešlo nežádoucím únikům informací. -
log-level: "info"— zachycuje všechny protokoly kromě ladících. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— aktivuje vzdálené protokolování, které odesílá protokoly na uvedenou adresu. Funguje pouze v případě, že je spuštěn démon syslog. Přijímány jsou možnosti TCP a UDP. Také lze připojit ke každému konkrétnímu kontejneru. K tomu je při spuštění Dockeru třeba nastavit speciální příznak (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— zabraňuje zvyšování privilegovaných práv (privilege escalation) tím, že izoluje prostor názvů pro konkrétního uživatele.
Úroveň zabezpečení transportu
Možnost připojení k démona Dockeru (pokud je třeba vzdálený přístup) by měla mít pouze uživatelé, kteří mají přístup k TLS klientským údajům.
Oprávnění pluginů
Rozhodněte se, kterým uživatelům budou povoleny jaké příkazy, a vytvořte odpovídající autorizační plugin pro Docker. Poté spusťte démon Dockeru a přidejte do něj plugin:
dockerd --authorization-plugin=PLUGIN_IDPro více informací o vytváření autorizačních pluginů viz .
Parametry démona
Démon Dockeru pracuje s výchozím souborem parametrů.
-
--live-restore— tento parametr pomáhá snížit prostoje kontejnerů při vypínání nebo restartování systému. Je snazší je patchovat nebo aktualizovat s minimálním prostoje; -
--userland-proxy=false— když jsou k dispozici nebo se používají hairpin NATy, stává se proxy v uživatelském prostoru nadbytečnou službou, která jen zvyšuje počet možných vektorů útoku; -
--no-new-privileges— zabraňuje získání dalších privilegií kontejnery pomocí suid nebo sguid; -
--seccomp-profile /path/to/profile— pokud máte vlastní seccomp profil, můžete jej aplikovat pomocí této volby. Další informace o Seccomp a Dockeru najdete .
Konfigurace kontejnerů a souborů pro sestavení
Vytvoření uživatele
Ujistěte se, že pro kontejner byl vytvořen uživatel a spusťte jej pod tímto uživatelským účtem (NESPUSŤTE kontejner pod uživatelským účtem root).
Vzdálený přístup
Zakážete vzdálený přístup k démonu. Pokud je nezbytný, zabezpečte ho certifikáty.
Izolujte uživatelské jmenné prostory
Je zvlášť důležité zajistit, aby bylo uživatelské jmenné prostor v Dockeru izolováno, protože se ve výchozím nastavení sdílí s jmenným prostorem hostitele. V některých případech toho lze zneužít k získání privilegií nebo dokonce k úniku z kontejneru. Uživatelské jmenné prostory lze izolovat úpravou konfiguračního souboru (jak je popsáno výše v části „Konfigurační soubor Dockeru“). Další zmínka o tomto problému zde je způsobena jeho důležitostí.
Healthchecky
Healthcheck (kontrola funkčnosti) je mocný nástroj, který umožňuje kontrolovat integritu kontejneru. Nastavuje se v Dockerfile pomocí příkazu HEALTHCHECK. Healthchecky umožňují ujistit se, že kontejner funguje správně. V následujícím příkladu kontrola funkčnosti končí 0, pokud server funguje, a 1, pokud „spadl“:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Pokud operační systém hostitele podporuje SELinux, vytvořte nebo importujte politiku SELinux a spusťte Docker v režimu démona se zapnutým SELinux:
docker daemon --selinux-enableV takovém případě lze spouštět kontejnery Dockeru s bezpečnostními parametry, například:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashSíťová rozhraní
Ve výchozím nastavení Docker naslouchá na všech síťových rozhraních. Většinou se však očekává provoz pouze na jednom z nich, což zvyšuje riziko útoku. Proto je možné při spuštění kontejneru svázat jeho porty s konkrétními rozhraními na hostiteli:
docker run --detach --publish 10.2.3.4:49153:80 nginxVyrovnané verze obrazů
Při stahování obrazů se ujistěte, že lokální vyrovnávací paměť odpovídá obsahu repozitáře. Jinak můžete získat zastaralou verzi obrazu nebo obraz obsahující zranitelnosti.
Síťový most
Výchozí síťový model, docker0, je náchylný k útokům typu ARP-spoofing a MAC-flooding. K vyřešení tohoto problému vytvořte síťový most podle svých specifikací, jak je popsáno .
Upozornění na soket Dockeru
Nikdy nepřenášejte soket Dockeru do kontejneru. Jinak bude mít kontejner možnost vykonávat příkazy Dockeru a tedy interagovat s operačním systémem hostitele a ovládat jej. Nedělejte to.
Konfigurace Docker Enterprise
Docker Trust
Docker Trust umožňuje generovat klíče, s jejichž pomocí můžete ověřovat kryptografickou integritu obrazů. Klíče Docker Trust lze použít k podepisování obrazů Docker pomocí soukromých klíčů, které jsou ověřovány veřejnými klíči na Notary Serveru. Další informace - . Zapnutí Docker Trust v Enterprise Engine je podrobně popsáno v .
Kontrolování zranitelností
Docker Enterprise obsahuje vestavěný skener zranitelností, který umožňuje stáhnout databázi CVE pro offline skenování zranitelností v obrazech. Pravidelné skenování obrazů pomáhá zvyšovat jejich bezpečnost: uživatel okamžitě dostává oznámení o nalezených zranitelnostech. Více o tom, jak to provést, viz .
Pozn. přek.: Existují také Open Source skenery zranitelností v Docker obrazích, jejichž příklady najdete na konci materiálu.
Integrace LDAP a UCP
Universal Control Plane lze integrovat s LDAP. Výsledkem bude zjednodušený systém autentizace, který eliminuje zbytečné zdvojování. Více o tom si přečtěte v článku .
Další materiály
Další informace o nejlepších praktikách v oblasti zabezpečení Dockeru naleznete na . Také doporučujeme stáhnout .
Bonus od překladatele
Jako logické doplnění tohoto článku zveřejňujeme seznam 10 populárních open source nástrojů pro zajištění bezpečnosti v Dockeru. Byl převzat z (od autora Billa Doerrfelda z Doerrfeld.io).
NB: Více o mnoha zde zmíněných projektech si můžete přečíst také v článku „».
- — již zmíněný na začátku článku skript, který kontroluje kontejnery Docker na shodu s běžnými praktikami zajištění bezpečnosti.

- — pravděpodobně nejpopulárnější nástroj pro statickou analýzu zranitelností v kontejneru. Používá k tomu četné databáze zranitelností CVE (včetně trackerů předních linuxových distribucí, jako jsou Red Hat, Debian, Ubuntu). Nabízí API pro vývojáře a snadnou možnost rozšíření funkcí (přidáním „drivrů“). Používá se v populárním veřejném registru obrázků kontejnerů (ekvivalent Docker Hub) — Quay.io.
- — řešení pro zajištění síťové bezpečnosti na úrovni jádra, založené na technologii filtrování síťových paketů BPF.
- — nástroj pro analýzu obsahu obrázků na zranitelnosti v oblasti bezpečnosti podle databáze CVE. Kromě toho umožňuje aplikaci uživatelských politik (na základě různých dat včetně bílých/černých seznamů, obsahu souborů atd.) pro hodnocení bezpečnosti kontejnerů.
- — celá ekosystém pro vytváření a udržování bezpečnostních politik na různých platformách. Pro kontrolu kontejnerů nabízí nástroj
oscap-docker. - — nástroj pro skenování Docker kontejnerů na zranitelnosti, trojany, viry a malware. V databázi CVE jsou zahrnuty kontroly podle závislostí od OWASP, databáze Red Hat Oval, repozitář exploitů Exploit Database.
- — rámec pro podepisování Docker obrázků, původně vytvořený ve společnosti Docker Inc (a poté předaný k dalšímu vývoji do CNCF). Jeho použití umožňuje delegování rolí a rozdělení odpovědností za kontejnery, stejně jako ověřování kryptografické integrity obrázků.
- — API pro metadata, určený k řízení interních bezpečnostních politik. Například umožňuje zlepšit účinnost skenerů bezpečnosti kontejnerů. Shopify používá tento API k řízení metadat svých 500 tisíc obrazů.
- — nástroj pro Kubernetes, který sleduje chování systému: aktivitu v kontejnerech, na hostitelích, v síti. Umožňuje konfigurovat kontinuální kontroly v infrastruktuře, detekci anomálií a zasílání upozornění na jakékoli systémové výzvy Linuxu.
- — další nástroj pro statickou analýzu obrazů Docker kontejnerů. Umožňuje „nahlížet“ do souborů obrazu, shromažďovat potřebná data, aplikovat potřebné politiky atd.
Další dobrou sbírku praktických doporučení o tom, jak učinit Docker bezpečnějším, lze najít v firmě Aqua Security. Mnoho jejích rad se překrývá s již zmíněnými výše, ale jsou tam i další. Například autoři navrhují organizovat monitorování aktivity v kontejnerech a vyznačují, na co se zaměřit při používání Docker Swarm.
Pro ty, kteří chtějí ještě hlouběji proniknout do této problematiky, vyšla minulý rok kniha „», jejíž úryvky jsou volně dostupné. .
Nakonec, pro praktické seznámení s některými aspekty bezpečnosti Dockeru: profily Seccomp a použití capabilities jádra Linuxu v kontejnerech — lze absolvovat odpovídající laboratorní práce na * — viz sekci „Security“.

* O samotném tomto zdroji jsme před dvěma lety, a v listopadu 2018 se s ním stala velmi zajímavá (z pohledu bezpečnosti) událost. Stručně řečeno, odborníkům z CyberArk Software Ltd. se podařilo ho hacknout: získat možnost vykonávat příkazy mimo kontejnery, tj. na hostitelském systému. Skvělá ilustrace problému bezpečnosti v Dockeru, že? O všech podrobnostech incidentu si přečtěte. .
P.S. od překladatele
Přečtěte si také náš blog:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Zdroj: habr.com

