GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak hodnotit zabezpečení Docker Engine

Docker umožňuje vývojářům softwaru a inženýrům DevOps rychle balit aplikace pro produkci. Docker kontejnery fungují do značné míry nezávisle na svém hostiteli, ale nejsou odolné vůči bezpečnostním hrozbám. Zde je návod, jak provést audit vaší instalace Docker Engine, abyste zajistili maximální zabezpečení vašeho hostitele a vaší pracovní zátěže.

Pochopení Docker's Architecture

Prvním krokem k posouzení rizik Dockeru je pochopit, jak technologie skutečně funguje. Docker je poháněn třemi odlišnými komponentami:

  • Démon Docker Engine – Služba na pozadí, která spravuje zákulisní operace s kontejnery a obrázky.
  • REST API – Docker Engine poskytuje REST API, které odesílá příkazy démonovi Docker. Rozhraní API je obvykle poskytováno přes soket REST, ale může být také vystaveno přes HTTP.
  • Klient příkazového řádku Docker – Docker CLI se spouští, když používáte docker v terminálu. Odesílá příkazy démonovi Docker. Příkazy se zpracovávají k určení akce, která se má provést.

Útočník, který kompromituje kteroukoli z těchto komponent, by mohl získat přístup do vašeho prostředí. Správnou konfigurací můžete chránit své pracovní zatížení a zvýšit zabezpečení ve srovnání se spouštěním aplikací přímo na hostiteli.

Útočná plocha

Démon Docker představuje největší útočnou plochu. Získání kontroly nad démonem poskytuje přístup k hostiteli a všem vašim kontejnerům. Démon obvykle běží jako root , takže úspěšná infiltrace může poskytnout neomezený přístup k vašemu fyzickému počítači.

Měli byste zajistit soket démona Docker (/var/run/docker.sock ) není přístupný nikomu jinému než root uživatel. Vzhledem k tomu, že démon může přistupovat k hostiteli, poskytnutí přístupu k soketu účinně znemožňuje kontrolu nad vaším počítačem.

Démon Docker podporuje TCP socket, který umožňuje vzdálené ovládání přes síť. Pokud tuto funkci povolíte, bude nabídnuta nešifrovaná komunikace bez jakéhokoli ověření.

Nepoužívejte připojení TCP, pokud se nenacházíte v síťovém prostředí, které jste speciálně nakonfigurovali jako bezpečné. Měli byste nastavit TLS a zajistit, aby se mohli připojit pouze autorizovaní klienti.

Některé obrazy Dockeru mohou vyžadovat připojení zásuvky Docker do kontejneru. Toho často využívají nástroje pro správu Dockeru, které poskytují rozhraní pro kontejnery běžící na vašem hostiteli. Namontováním zásuvky tímto způsobem může cokoli uvnitř kontejneru získat kontrolu nad vaším systémem. Kontejnery by nikdy neměly obdržet zásuvku Docker, pokud si nejste jisti, že ji zátěž vyžaduje.

Režim bez root

Docker nyní podporuje režim bez rootu, který vám umožňuje spouštět Docker bez root přístup. To pomáhá zlepšit zabezpečení, ale přináší to další složitost při nastavování.

Pomocí režimu bez root se Docker a vaše kontejnery spouští v uživatelském jmenném prostoru. Většina funkcí Dockeru bude fungovat, i když existují určitá omezení.

Ne každý ovladač úložiště je k dispozici, překryvné sítě nejsou podporovány a kontejnerové sítě mají plný jmenný prostor. To znamená, že nemůžete přímo přistupovat k IP kontejnerům z hostitele, aniž byste nejprve zadali vyhrazený síťový jmenný prostor.

Použití režimu bez root může být užitečné v prostředích s vysokým zabezpečením, kde je prvořadá integrita hostitele. Pomáhá zmírnit dopad úspěšného útoku tím, že omezuje příležitosti k manipulaci s širším systémem.

Zabezpečení REST API

K rozhraní Docker REST API se obvykle přistupuje prostřednictvím soketu UNIX. Kontroly oprávnění se provádějí pomocí standardních mechanismů UNIX.

Rozhraní API můžete vystavit přes soket TCP, což umožňuje přístup přes HTTP. To zvyšuje riziko kompromisu. Měli byste se ujistit, že řízení přístupu k síti je nastaveno tak, aby provoz mohl pocházet pouze ze schválených hostitelů.

Měli byste zkontrolovat zásady brány firewall, abyste nepřehlédli zařízení, které by mohlo interagovat s rozhraním Docker API. Pamatujte, že omezení připojení k localhost nestačí – to by stále umožňovalo přístup z kontejnerů Docker běžících na vašem počítači, což by potenciálně umožnilo nechtěnou eskalaci oprávnění.

Omezení komunikace mezi kontejnery

Docker umožňuje všem kontejnerům komunikovat mezi sebou přes výchozí docker0 přemostěná síť. Kompromitovaný kontejner by mohl tuto síť slídit, aby se dozvěděl o jejím prostředí. Mohlo by to využít síť mostu jako výhodný bod k zahájení širší infiltrace vašich pracovních zátěží.

Zakázání mezikontejnerové komunikace zlepší vaši bezpečnost tím, že posílí izolaci kontejnerů. Kontejnery budete muset explicitně propojit pomocí --link=ContainerName příznak nebo vlastní síť Docker.

Spusťte démona Docker s --icc=false příznak pro zakázání komunikace přes docker0 most.

Omezit možnosti kontejneru

Možnosti jádra Linuxu definují akce dostupné uživatelům s root přístup. Schopnosti pomáhají zablokovat procesy, které běží jako root , jako jsou kontejnery Docker. Každý proces by měl mít minimální sadu schopností, které potřebuje.

Docker automaticky spouští kontejnery s omezeným výběrem možností. I tento seznam je často nadměrný pro jednoduchou zátěž, jako je webový server. Můžete jej dále omezit zadáním vlastního seznamu možností dostupných pro kontejner.

docker run --cap-drop all --cap-add SYSLOG example-image:latest

Výše uvedený příkaz spustí kontejner pouze s SYSLOG schopnost. --cap-drop příznak ignoruje výchozí seznam schopností. Schopnosti jsou poté přidány zpět pomocí --cap-add , vytvoření bílé listiny.

Stojí za to posoudit váš kontejner podle seznamu schopností jádra. Odstraňte všechny nepoužívané funkce z kontejnerů běžících v produkci. To pomáhá omezit škody, které může kompromitovaný kontejner způsobit.

Povolit vestavěné funkce jádra

Nezanedbávejte bezpečnostní funkce zabudované do vašeho jádra. Docker pracuje se stávajícími technologiemi, jako jsou AppArmor a SELinux.

Některé distribuce, jako je RedHat Linux, přicházejí s předdefinovanými systémovými zásadami SELinux, které rozšiřují zabezpečení Dockeru. Podporu SELinux můžete přidat ručně spuštěním démona Docker s --selinux-enabled vlajka. Tím se aktivuje zásada Dockeru pro nastavení štítků SELinux na vašich kontejnerech. SELinux poskytuje lepší izolaci kontejnerových procesů od hostitelských procesů, čímž zlepšuje vaši pozici zabezpečení.

Základy

Je snadné se zaměřit na složité aspekty zabezpečení Dockeru:režim bez root, přístup k démonům a kontejnerová komunikace. Nepřehlédněte však základy – stále platí standardní bezpečnostní postupy.

Vždy mějte Docker Engine aktualizovaný, abyste měli nejnovější opravy chyb. Měli byste se také ujistit, že jádro vašeho hostitele je plně opraveno. Jelikož kontejnery sdílejí stejné jádro jako váš hostitel, vaše kontejnerizované aplikace mohou zneužít jakékoli zranitelnosti.

Je dobrou praxí vyhradit konkrétní fyzický počítač nebo virtuální počítač pro běh Dockeru. Nespouštějte žádné další služby přímo na hostiteli. Místo toho je můžete spouštět jako kontejnery, čímž se sníží dopad úspěšného kompromisu hostitele.

Při správné konfiguraci zvyšuje Docker zabezpečení izolováním aplikací. Pokud si uděláte čas na posouzení své pozice, pomůže vám to identifikovat potenciální rizika a pochopit, jak by útoky mohly začít. Uzamčení oprávnění kontejneru, ochrana démona Docker a aktualizace vašeho hostitele vám pomůže posílit vaše kontejnery.


Docker
  1. Jak nainstalovat Docker Engine na Debian 11

  2. Jak získat přístup k síťovému jmennému prostoru Docker Container z hostitele

  3. Jak nakonfigurovat Btrfs jako Storage Engine v Dockeru

  1. Jak nainstalovat Docker engine na Debian 9 Stretch Linux

  2. Jak nainstalovat Docker Engine na Ubuntu:Průvodce krok za krokem

  3. Jak změnit nastavení zabezpečení FTP

  1. Jak nainstalovat Docker na Raspberry Pi

  2. 10 doporučených postupů zabezpečení Dockeru

  3. Jak nastavit vzdálený přístup k Docker Daemon