Bezpečnost pro kontejnery Docker

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.

Bezpečnost pro kontejnery Docker

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í:

  1. Nejpotřebnější opatření v rámci operačního systému hostitele při práci s Dockerem;
  2. Pokyny týkající se konfiguračního souboru buildu a vytváření kontejnerů;
  3. 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

Docker Bench for Security 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é Federální standardy zpracování informací — 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 && reboot

Je 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 docker

Pro více informací viz dokumentace Docker a Red Hat.

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 nginx

Podrobnosti viz dokumentaci.

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_ID

Pro více informací o vytváření autorizačních pluginů viz dokumentaci.

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 zde.

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 1

SELinux

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-enable

V 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/bash

Síť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 nginx

Vyrovnané 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 zde.

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 - zde. Zapnutí Docker Trust v Enterprise Engine je podrobně popsáno v této části dokumentace.

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 zde.

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 Integrate with an LDAP directory.

Další materiály

Další informace o nejlepších praktikách v oblasti zabezpečení Dockeru naleznete na docs.docker.com. Také doporučujeme stáhnout testy Center for Internet Security pro Docker.

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 jiného článku (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 „33+ nástrojů pro bezpečnost Kubernetes».

  1. Docker Bench for Security — 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.

    Bezpečnost pro kontejnery Docker

  2. Clair — 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.
  3. Cilium — ř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.
  4. Anchore — 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ů.
  5. OpenSCAP Workbench — 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.
  6. Dagda — 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.
  7. Notary — 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ů.
  8. Grafaes — 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ů.
  9. Sysdig Falco — 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.
  10. Banyanops Collector — 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 tomto článku 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 „Docker Security: Quick Reference», jejíž úryvky jsou volně dostupné. zde.

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 resursu Play with Docker* — viz sekci „Security“.

Bezpečnost pro kontejnery Docker

* O samotném tomto zdroji jsme psali 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. zde.

P.S. od překladatele

Přečtěte si také náš blog:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster