Bezpečnosť pre kontajnery Docker

Pozn. prekl.: Téma zabezpečenia Dockeru je jednou z večných v súčasnom IT svete. Preto bez zbytočných vysvetlení predstavujeme preklad ďalšej zbierky relevantných odporúčaní. Ak ste sa už týmto problémom zaoberali, mnohé z nich vám budú známe. A samotnú zbierku sme doplnili zoznamom užitočných utilít a niekoľkými zdrojmi na ďalšie štúdium otázky.

Bezpečnosť pre kontajnery Docker

Predkladám na zreteľ príručku na zabezpečenie Dockeru. Ohlasy sú vítané, keďže ide skôr o zbierku úryvkov z rôznych zdrojov a nie všetky prešli dôkladnou kontrolou. Odporúčania sú rozdelené do troch kategórií:

  1. Nezbytné opatrenia v rámci operačného systému hostiteľa pri práci s Dockerom;
  2. Pokyny týkajúce sa konfiguračného súboru zostavy a vytvárania kontajnerov;
  3. Nástroje na zabezpečenie, ktoré môžu byť integrované so špecifickými funkciami Docker Enterprise.


Bázou pre príručku boli rôzne zdroje, z ktorých mnohé sú uvedené nižšie. Nemožno ho nazvať komplexným, avšak pokrýva všetky základy. Ďalšie informácie nájdete v popise testov CIS (odkaz uvedený na konci tejto príručky) a taktiež v dokumentácii k Dockeru.

Docker Security Benchmark

Docker Bench for Security automaticky kontroluje váš Docker na súlad s najbežnejšími osvedčenými postupmi. Skript slúži ako slušný heuristický test zabezpečenia, avšak nemal by sa považovať za nástroj komplexnej analýzy.

OS hostiteľa

Je zrejmé, že Docker-kontajner nemôže byť zabezpečený, ak samotný hostiteľský systém nie je chránený. Preto je potrebné dodržiavať najlepšie praktiky v oblasti zabezpečenia operačných systémov. Okrem toho by bolo rozumné vykonať analýzu zraniteľností ako doplnok k nasledujúcim odporúčaniam.

Pravidlá auditu

Vytvárajte a používajte pravidlá auditu pre súbory týkajúce sa Dockeru pomocou auditctl. Napríklad môžete pridať -w /usr/bin/dockerd -k docker k /etc/audit.rules a reštartovať auditný servis.

Režim FIPS

Aktivácia režimu FIPS pr núti kryptografické nástroje prepnúť na algoritmy zahrnuté v FIPS (americké Federal Information Processing Standards — pozn. prekl.), čím sa zhodujú s federálnymi a odvetvovými normami a požiadavkami. Ak hostiteľský operačný systém podporuje režim FIPS, môžete ho aktivovať vykonaním týchto príkazov:

sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && reboot

Tiež je potrebné aktivovať 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

Pre viac informácií pozrite dokumentáciu Docker a Red Hat.

Docker Secrets

Tajné údaje by sa mali uchovávať ako tajomstvá. Zodpovedajúcu službu môžete spustiť pomocou prí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 pozri v dokumenácie.

Konfiguračný súbor Dockeru

Nasledujúce nastavenia je možné pridať do konfiguračného súboru /etc/docker/daemon.json:

  • "icc":false — zakazuje zdieľanie údajov medzi kontajnermi, aby sa predišlo zbytočnému úniku informácií.
  • log-level: "info" — zachytáva všetky logy okrem ladících.
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp:\/\/1.2.3.4:1111"
      }
    }

    — pripojuje vzdialené vedenie logov a presmerováva ich na zadanú adresu. Funguje iba v prípade, že je spustený démon syslog. Ako možnosti sú akceptované TCP a UDP. Tiež je možné pripojiť pre každý konkrétny kontajner. Na tento účel sa pri spustení Dockeru nastavuje špeciálny príkaz (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Your_User" — zabraňuje získaniu privilégií (privilege escalation), izolovaním priestoru mien pod konkrétnym používateľom.

Bezpečnosť transportnej úrovne

Možnosť pripojenia k démonu Dockeru (ak je vzdialený prístup nevyhnutný) by mala mať iba užívateľov s prístupom k údajom TLS-klienta.

Pluginy autorizácie

Určte, akým používateľom aké príkazy sú povolené vykonávať, a vytvorte zodpovedajúci plugin autorizácie pre Docker. Potom spustite démon Dockeru a pridajte do neho plugin:

dockerd --authorization-plugin=PLUGIN_ID

Ak sa chcete dozvedieť viac o vytváraní autorizácií, pozrite si dokumenácie.

Parametre démona

Démon Dockeru pracuje so súborom predvolených parametrov.

  • --live-restore — tento parameter pomáha skrátiť čas nečinnosti kontajnerov pri vypínaní alebo reštartovaní systému. Umožňuje ich ľahšie aktualizovať alebo opravovať s minimálnou prestávkou;
  • --userland-proxy=false — keď sú dostupné alebo používané hairpin NAT, proxy v užívateľskom priestore sa stáva nadbytočnou službou, ktorá len zvyšuje počet možných vektorov útoku;
  • --no-new-privileges — zabraňuje získaniu dodatočných privilégií kontajnermi pomocou suid alebo sguid;
  • --seccomp-profile /cesta/k/profilu — ak máte vlastný seccomp profil, môžete ho použiť pomocou tejto voľby. Viac informácií o Seccomp a Dockeri nájdete tu.

Konfigurácia kontajnerov a súborov zostavenia

Vytvorenie používateľa

Uistite sa, že pre kontajner bol vytvorený užívateľ a spúšťajte ho pod týmto užívateľom (NIE spúšťajte kontajner pod rootom).

Vzdialený prístup

Zakážte vzdialený prístup k démonovi. Ak je to stále potrebné, chráňte ho certifikátmi.

Izolujte používateľské meno priestoru

Je obzvlášť dôležité zabezpečiť, aby bol používateľský priestor v Dockeri izolovaný, pretože predvolene sa používa spolu s priestorom mena hostiteľa. V niektorých prípadoch to možno využiť na zvýšenie privilégií alebo dokonca na opustenie kontajnera. Používateľské meno priestoru možno izolovať úpravou konfiguračného súboru (ako je uvedené vyššie v časti „Konfiguračný súbor Dockera“). Ďalšie uvedenie tohto problému tu je spôsobené jeho dôležitosťou.

Healthchecky

Healthcheck (kontrola funkčnosti) — silný nástroj, ktorý umožňuje overovanie integrity kontajnera. Je nastavený v Dockerfile pomocou inštrukcie HEALTHCHECK. Healthchecky umožňujú zabezpečiť, že kontajner funguje správne. V nasledovnom príklade kontrola funkčnosti končí 0, ak server funguje, a 1, ak 'spadol':

HEALTHCHECK CMD curl --fail http://localhost || exit 1

SELinux

Ak operačná sústava hostiteľa podporuje SELinux, vytvorte alebo importujte politiku SELinux a spúšťajte Docker v režime démona s povoleným SELinux:

docker daemon --selinux-enable

V takom prípade je možné spúšťať Docker kontajnery s bezpečnostnými parametrami, napríklad:

docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash

Sieťové rozhrania

Predvolene Docker počúva na všetkých sieťových rozhraniach. Pretože v mnohých prípadoch sa očakáva, že prevádzka príde iba na jednom z nich, táto prax nezmyselne zvyšuje riziko útoku. Preto je možné pri spúšťaní kontajnera priradiť jeho porty k konkrétnym rozhraniam na hostiteľovi:

docker run --detach --publish 10.2.3.4:49153:80 nginx

Cacheované verzie obrazov

Pri sťahovaní obrazov sa uistite, že váš lokálny cache zodpovedá obsahu repozitára. Inak môžete získať zastaranú verziu obrazu alebo obraz obsahujúci zraniteľnosti.

Sieťový most

Predvolený sieťový model, docker0, je zraniteľný voči útokom ARP-spoofing a MAC-flooding. Aby ste tento problém vyriešili, vytvorte sieťový most podľa svojich špecifikácií, ako je popísané tu.

Upozornenie na dokovací soket

Nikdy neprenášajte dokovací soket do kontajnera. Inak má kontajner možnosť vykonávať príkazy Docker a tým pádom komunikovať s operačným systémom hostiteľa a kontrolovať ho. Nerobte to.

Konfigurácia Docker Enterprise

Docker Trust

Docker Trust umožňuje generovať kľúče, pomocou ktorých môžete overovať kryptografickú integritu obrazov. Kľúče Docker Trust možno použiť na podpisovanie obrazov Docker súkromnými kľúčmi, ktoré sa overujú verejnými kľúčmi na Notary Serveri. Ďalšie informácie — tu. Aktivácia Docker Trust v Enterprise Engine je podrobne popísaná v tejto sekcii dokumentácie.

Skenovanie zraniteľností

V Docker Enterprise je zabudovaný skener zraniteľností, ktorý umožňuje nahrať databázu CVE na offline skenovanie zraniteľností v obrazov. Pravidelné skenovanie obrazov pomáha zvýšiť ich bezpečnosť: používateľ okamžite dostáva upozornenia o nájdených zraniteľnostiach. Viac informácií o tom, ako to uskutočniť, nájdete v tu.

Pozn. prekl.: Existujú aj Open Source skenery zraniteľností v Docker obrazov, príklady nájdete na konci materiálu.

Integrácia LDAP a UCP

Universal Control Plane možno integrovať s LDAP. Výsledkom bude zjednodušený autentifikačný systém, ktorý zabráni zbytočnému duplikovaniu. Viac informácií nájdete v článku Integrate with an LDAP directory.

Ďalšie materiály

Ďalšie informácie o osvedčených postupoch v oblasti zabezpečenia Dockeru nájdete na docs.docker.com. Odporúčame tiež stiahnuť testy Center for Internet Security pre Docker.

Bonus od prekladateľa

Ako logické doplnenie k tomuto článku zverejňujeme zoznam 10 populárnych Open Source utilít pre zabezpečenie v Docker. Bol prevzatý z iného článku (pod autorstvom Billa Doerrfelda z Doerrfeld.io).

Poznámka: Viac informácií o mnohých projektoch spomínaných tu si prečítajte aj v článku „33+ nástrojov na bezpečnosť Kubernetes».

  1. Docker Bench for Security — už spomínaný na začiatku článku skript, ktorý kontroluje kontajnery Docker na súlad s bežnými praktikami zabezpečenia.

    Bezpečnosť pre kontajnery Docker

  2. Clair — pravdepodobne najpopulárnejší nástroj na statickú analýzu zraniteľností v kontejnery. Na tento účel používa množstvo databáz zraniteľností CVE (vrátane sledovačov popredných linuxových distribúcií ako Red Hat, Debian, Ubuntu). Ponúka API pre vývojárov a jednoduchú možnosť rozšírenia funkcií (prostredníctvom pridania „ovládačov“). Používa sa v populárnom verejnom registri obrazov kontajnerov (analóg Docker Hub) — Quay.io.
  3. Cilium — riešenie na zabezpečenie sieťovej bezpečnosti na úrovni jadra, založené na technológii filtrovania sieťových paketov BPF.
  4. Anchore — nástroj na analýzu obsahu obrazov na prítomnosť zraniteľností v bezpečnosti podľa databázy CVE. Okrem toho umožňuje aplikovať používateľské politiky (na základe rôznych údajov vrátane bielych/čiernych zoznamov, obsahu súborov atď.) na hodnotenie bezpečnosti kontajnerov.
  5. OpenSCAP Workbench — celá ekosystém na vytváranie a udržiavanie bezpečnostných politík na rôznych platformách. Na kontrolu kontajnerov ponúka nástroj oscap-docker.
  6. Dagda — nástroj na skenovanie Docker-kontajnerov na prítomnosť zraniteľností, trojanov, vírusov a malware. V databázach CVE sú zahrnuté kontroly podľa závislostí z OWASP, databáza Red Hat Oval, repozitár exploitov Exploit Database.
  7. Notary — rámec na podpisovanie Docker-obrazov, pôvodne vytvorený spoločnosťou Docker Inc (a následne postúpený na rozvoj do CNCF). Jeho použitie umožňuje delegovať úlohy a rozdeľovať zodpovednosti na kontajnery, ako aj overiť kryptografickú integritu obrazov.
  8. Grafaes — API pre metadáta, určené na správu interných bezpečnostných politík. Napríklad umožňuje zlepšiť činnosť skenerov bezpečnosti kontajnerov. Shopify používa toto API na správu metadát pre svojich 500 tisíc obrazov.
  9. Sysdig Falco — nástroj pre Kubernetes, ktorý sleduje správanie systému: aktivitu v kontajneroch, na hostiteľoch, v sieti. Umožňuje nastaviť nepretržité kontroly v infraštruktúre, odhaľovanie anomálií a zasielanie upozornení na akékoľvek systémové volania Linux.
  10. Banyanops Collector — ďalší nástroj na statickú analýzu obrazov Docker kontajnerov. Umožňuje „nazerať“ do súborov obrazu, zhromažďovať potrebné údaje, aplikovať potrebné politiky a pod.

Ešte jednu dobrú zbierku praktických odporúčaní o tom, ako spraviť Docker bezpečnejším, možno nájsť v tomto článku spoločnosti Aqua Security. Mnohé jej rady sa prekrývajú s už spomenutými, ale sú aj ďalšie. Napríklad autori navrhujú zorganizovať monitorovanie aktivity v kontajneroch a ukazujú, na čo sa zamerať pri používaní Docker Swarm.

Pre tých, ktorí sa chcú ešte hlbšie ponořiť do tejto témy, minulý rok vyšla kniha „Docker Security: Quick Reference», jej fragmenty sú voľne dostupné tu.

Nakoniec, pre praktické zoznámenie s niektorými aspektmi bezpečnosti Docker: profilmi Seccomp a využívaním capabilities Linux jadra v kontajneroch – je možné absolvovať príslušné laboratórne práce na zdroji Play with Docker* – pozri sekciu „Security“.

Bezpečnosť pre kontajnery Docker

* O samotnom tomto zdroji sme rozprávali písali pred dvoma rokmi, a v novembri 2018 sa s ním stala veľmi zaujímavá (z pohľadu bezpečnosti) udalosť. Ak to zhrnieme, odborníkom z CyberArk Software Ltd. sa podarilo ho hacknúť: dosiahnuť možnosť vykonávať príkazy mimo kontajnerov, t.j. na hostiteľskom systéme. Skvelá ilustrácia problému bezpečnosti v Dockeri, nie? O všetkých detailoch sa dočítate tu.

P.S. od prekladateľa

Prečítajte si tiež na našom blogu:

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster