SÀkerhet för Docker-containrar

Obs. övers.: SÀkerhetstemat kring Docker Àr förmodligen ett av de eviga Àmnena i dagens IT-vÀrld. Utan vidare förklaringar presenterar vi here en översÀttning av en ny samling relevanta rekommendationer. Om du redan har intresserat dig för detta Àmne kommer mÄnga av dem att vara bekanta för dig. Vi har ocksÄ lagt till en lista över anvÀndbara verktyg och nÄgra resurser för fortsatt fördjupning.

SÀkerhet för Docker-containrar

Jag erbjuder hÀr ett vÀgledande dokument för att sÀkra Docker. Feedback Àr vÀlkommen, eftersom detta snarare Àr en samling utdrag frÄn olika resurser, och inte alla har granskats noggrant. Rekommendationerna Àr indelade i tre kategorier:

  1. NödvÀndiga ÄtgÀrder inom vÀrdoperativsystemet vid arbete med Docker;
  2. Instruktioner relaterade till konfigurationsfilen för bygget och skapandet av containrar;
  3. Verktyg för sÀkerhet som kan integreras med specifika funktioner i Docker Enterprise.


Grunden för vÀgledningen bestÄr av olika resurser, mÄnga av vilka anges nedan. Det kan inte kallas uttömmande, men det tÀcker alla grunder. Ytterligare information kan hittas i beskrivningen av CIS-testerna (lÀnken finns i slutet av denna vÀgledning), samt i dokumentationen för Docker.

Docker Security Benchmark

Docker Bench for Security kontrollerar automatiskt din Docker för att sÀkerstÀlla efterlevnad av de vanligaste bÀsta praxis. Skriptet fungerar som ett bra heuristiskt sÀkerhetstest, men bör inte betraktas som ett verktyg för en omfattande analys.

VĂ€rd-OS

Det Àr uppenbart att en Docker-container inte kan vara sÀker om sjÀlva vÀrdsystemet inte Àr skyddat. DÀrför Àr det nödvÀndigt att följa bÀsta praxis för att sÀkra operativsystem. Det skulle dessutom vara klokt att genomföra en sÄrbarhetsanalys utöver följande rekommendationer.

Revisionsregler

Skapa och anvÀnd revisionsregler för filer relaterade till Docker, genom att anvÀnda auditctl.. Till exempel, du kan lÀgga till -w /usr/bin/dockerd -k docker till /etc/audit.rules och starta om revisionsservicen.

FIPS-lÀge

Aktivering av FIPS-lĂ€get fĂ„r kryptografiska verktyg att vĂ€xla till algoritmer som ingĂ„r i FIPS (amerikanska Federal Information Processing Standards — anm. red.), i enlighet med federala och branschstandarder och krav. Om vĂ€rdoperativsystemet stöder FIPS-lĂ€ge kan det aktiveras genom att köra följande kommandon:

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

FIPS mÄste ocksÄ aktiveras i 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

För mer information, se dokumentationen Docker och Red Hat.

Docker Secrets

KÀnslig information bör lagras som hemligheter. Den relevanta tjÀnsten kan startas med kommandot 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

Se detaljer i dokumentationen.

Docker-konfigurationsfilen

Följande instÀllningar kan lÀggas till i konfigurationsfilen /etc/docker/daemon.json:

  • "icc":false — inaktiverar datakommunikation mellan containrar för att undvika onödig informationslĂ€ckage.
  • log-level: "info" — fĂ„ngar alla loggar utom debug-loggar.
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp:\/\/1.2.3.4:1111"
      }
    }

    — ansluter till fjĂ€rrloggning, vidarebefordrar loggarna till den angivna adressen. Fungerar endast om syslog-daemonen Ă€r igĂ„ng. BĂ„de TCP och UDP accepteras som alternativ. Det Ă€r ocksĂ„ möjligt att ansluta för varje specifik container. För detta stĂ€lls ett sĂ€rskilt flagga vid start av Docker (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Your_User" — förhindrar privilegied höjning (privilege escalation) genom att isolera namnomrĂ„det under en specifik anvĂ€ndare.

SÀkerhet pÄ transportnivÄ

Anslutning till Docker-daemonen (om fjÀrrÄtkomst behövs) bör endast vara möjlig för anvÀndare med Ätkomst till TLS-klientens autentiseringsuppgifter.

Autentiseringsplugins

BestÀm vilka anvÀndare som fÄr köra vilka kommandon, och skapa motsvarande autentiseringsplugin för Docker. Starta sedan Docker-daemonen och lÀgg till pluginen:

dockerd --authorization-plugin=PLUGIN_ID

För att lÀra dig mer om skapande av autentiseringsplugins, se dokumentationen.

Daemonalternativ

Docker-daemonen kör med ett standardset av alternativ.

  • --live-restore — detta alternativ hjĂ€lper till att minska stillestĂ„ndstiden för containrar vid avstĂ€ngning eller omstart av systemet. Det blir enklare att patcha eller uppdatera dem med minimal stillestĂ„ndstid;
  • --userland-proxy=false — nĂ€r hairpin NAT anvĂ€nds eller Ă€r tillgĂ€ngligt, blir proxy i anvĂ€ndarrummet en överflödig tjĂ€nst som bara ökar antalet potentiella angreppsvektorer;
  • --no-new-privileges — förhindrar att containrar fĂ„r ytterligare privilegier via suid eller sguid;
  • --seccomp-profile /path/to/profile — om du har en egen seccomp-profil kan du tillĂ€mpa den med hjĂ€lp av denna flagga. Ta reda pĂ„ mer om Seccomp och Docker hĂ€r.

Konfiguration av containrar och byggfiler

Skapa anvÀndare

Se till att en anvĂ€ndare har skapats för containern och kör den under denna anvĂ€ndare (KÖR INTE containern som root).

FjÀrrÄtkomst

Förbjud fjÀrrÄtkomst till demon. Om det Àr nödvÀndigt, skydda det med certifikat.

Isolera anvÀndarnamnsrymden

Det Àr sÀrskilt viktigt att sÀkerstÀlla att anvÀndarnamnsrymden i Docker Àr isolerad, eftersom den som standard delas med vÀrdens namnutrymme. I vissa fall kan detta utnyttjas för att höja privilegierna eller till och med för att komma utanför containern. AnvÀndarnamnsrymden kan isoleras genom att redigera konfigurationsfilen (som beskrivits ovan i avsnittet "Docker-konfigurationsfil"). Ytterligare nÀmning av detta problem hÀr har att göra med dess betydelse.

Healthchecks

Healthcheck (livskontroll) Àr ett kraftfullt verktyg för att kontrollera en containers integritet. Den konfigureras i Dockerfile med hjÀlp av instruktionen HEALTHCHECK. Healthchecks gör att vi kan sÀkerstÀlla att containern fungerar korrekt. I följande exempel avslutas livskontrollen med 0 om servern fungerar och 1 om den "har kraschat":

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

SELinux

Om SELinux stöds av vÀrdsystemet, skapa eller importera en SELinux-policy och kör Docker i demonlÀge med SELinux aktiverat:

docker daemon --selinux-enable

I det hÀr fallet kan Docker-containrar köras med sÀkerhetsinstÀllningar, till exempel:

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

NÀtverksgrÀnssnitt

Som standard lyssnar Docker pÄ alla nÀtverksgrÀnssnitt. Eftersom trafik i de flesta fall förvÀntas endast pÄ ett av dem, Àr en sÄdan metod oansvarig och ökar attackrisken. DÀrför kan portar för containern kopplas till specifika grÀnssnitt pÄ vÀrden:

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

Cacheade versioner av bilder

NÀr du laddar ner bilder, se till att den lokala cachen motsvarar innehÄllet i repositoriet. Annars kan du fÄ en förÄldrad version av bilden eller en bild som innehÄller sÄrbarheter.

NĂ€tverksbro

Standard nÀtverksmodell, docker0, sÄrbar för ARP-spoofing och MAC-flooding-attacker. För att lösa detta problem, skapa en nÀtverksbro enligt dina specifikationer, som beskrivs hÀr.

Docker-socketvarning

Överför aldrig Docker-socketen in i containern. Annars fĂ„r containern möjlighet att köra Docker-kommandon och dĂ€rmed kommunicera med vĂ€rdsystemet och kontrollera det. Gör inte detta.

Konfigurering av Docker Enterprise

Docker Trust

Docker Trust gör det möjligt att generera nycklar som kan anvĂ€ndas för att verifiera den kryptografiska integriteten av bilder. Docker Trust-nycklar kan anvĂ€ndas för att signera Docker-bilder med privata nycklar, som verifieras med offentliga nycklar pĂ„ Notary Server. Mer information — hĂ€r. Aktivering av Docker Trust i Enterprise Engine beskrivs i detalj i detta avsnitt av dokumentationen.

SÄrbarhetsskanning

Docker Enterprise har en inbyggd sÄrbarhetsskanner som ger möjlighet att ladda ner CVE-databasen för offline-skanning av sÄrbarheter i bilder. Regelbunden skanning av bilder hjÀlper till att göra dem sÀkrare: anvÀndaren fÄr omedelbara varningar om upptÀckta sÄrbarheter. Mer om hur detta kan göras, se hÀr.

Obs. övers.: Det finns Àven Open Source-sÄrbarhetsskannrar för Docker-bilder, exempel pÄ vilka finns i slutet av materialet.

Integration av LDAP och UCP

Universal Control Plane kan integreras med LDAP. Resultatet blir ett förenklat autentiseringystem som möjliggör att undvika onödig duplicering. Mer om detta kan lÀsas i artikeln Integrate with an LDAP directory.

Övriga resurser

Ytterligare information om bÀsta praxis för sÀkerhet i Docker finns pÄ docs.docker.com. Vi rekommenderar ocksÄ att ladda ner Center for Internet Security:s tester för Docker.

ÖversĂ€ttarens bonus

Som ett logiskt tillÀgg till denna artikel publicerar vi en lista med 10 populÀra Open Source-verktyg för sÀkerhet i Docker. Den har hÀmtats frÄn en annan artikel (av Bill Doerrfeld frÄn Doerrfeld.io).

NB: LÀs mer om mÄnga av de projekt som nÀmns hÀr i artikeln "33+ verktyg för Kubernetes-sÀkerhet».

  1. Docker Bench for Security – redan nĂ€mnd i början av artikeln, Ă€r ett skript som kontrollerar Docker-containrar för att sĂ€kerstĂ€lla överensstĂ€mmelse med allmĂ€nt vedertagna sĂ€kerhetsmetoder.

    SÀkerhet för Docker-containrar

  2. Clair – förmodligen det mest populĂ€ra verktyget för statisk sĂ„rbarhetsanalys i containrar. Det anvĂ€nder en mĂ€ngd CVE-sĂ„rbarhetsdatabaser (inklusive spĂ„rare frĂ„n ledande Linux-distributioner som Red Hat, Debian, Ubuntu). Erbjuder ett API för utvecklare och en enkel lösning för att utöka funktioner (genom att lĂ€gga till "drivrutiner"). AnvĂ€nds i det populĂ€ra offentliga registreringssystemet för containrar (motsvarighet till Docker Hub) – Quay.io.
  3. Cilium – en lösning för att sĂ€kerstĂ€lla nĂ€tverkssĂ€kerhet pĂ„ kĂ€rnnivĂ„, baserat pĂ„ teknik för paketfiltrering BPF.
  4. Anchore – verktyg för att analysera bildinnehĂ„ll för sĂ€kerhetssĂ„rbarheter enligt CVE-databasen. Dessutom möjliggör det tillĂ€mpning av anvĂ€ndardefinierade policyer (baserade pĂ„ olika data inklusive vita/svarta listor, filinnehĂ„ll, etc.) för att bedöma sĂ€kerheten hos containrar.
  5. OpenSCAP Workbench – ett helt ekosystem för att skapa och underhĂ„lla sĂ€kerhetspolicyer pĂ„ olika plattformar. För att kontrollera containrar erbjuder det verktyget oscap-docker.
  6. Dagda – ett verktyg för att skanna Docker-containrar för sĂ„rbarheter, trojaner, virus och malware. Databasen CVE inkluderar kontroller för beroenden frĂ„n OWASP, Red Hat Oval-databasen, samt Exploit Database-repositoriet.
  7. Notary – ett ramverk för att signera Docker-bilder, ursprungligen skapat av Docker Inc (och sedan överfört för vidareutveckling till CNCF). Dess anvĂ€ndning gör det möjligt att delegera roller och fördela ansvar för containrar, samt verifiera den kryptografiska integriteten hos bilder.
  8. Grafaes – ett API för metadata som syftar till att hantera interna sĂ€kerhetspolicyer. Som exempel gör det det möjligt att förbĂ€ttra sĂ€kerhetsskannerns funktionalitet för containrar. Shopify anvĂ€nder detta API för att hantera metadata för sina 500 000 bilder.
  9. Sysdig Falco – ett verktyg för Kubernetes som övervakar systembeteende: aktivitet i containrar, pĂ„ vĂ€rdar, i nĂ€tverket. Möjliggör instĂ€llning av kontinuerliga kontroller i infrastrukturen, upptĂ€ckta anomalier och notifieringar om alla Linux-systemanrop.
  10. Banyanops Collector — ett annat verktyg för statisk analys av Docker-kontaineravbilder. Gör det möjligt att "titta" in i avbildsfiler, samla nödvĂ€ndig information, tillĂ€mpa önskade policyer osv.

Ytterligare en bra samling praktiska rekommendationer om hur man gör Docker sÀkrare kan hittas hos denna artikel företaget Aqua Security. MÄnga av deras rÄd överlappar med de som redan nÀmnts ovan, men det finns ocksÄ andra. Till exempel föreslÄr författarna att organisera övervakning av aktiviteten i containrarna och pekar pÄ vad man ska vara uppmÀrksam pÄ vid anvÀndning av Docker Swarm.

För de som vill dyka djupare in i detta Àmne publicerades förra Äret boken "Docker Security: Quick Reference»", vars utdrag Àr fritt tillgÀngliga hÀr.

Slutligen, för en praktisk bekantskap med vissa aspekter av Docker-sĂ€kerhet: Seccomp-profiler och anvĂ€ndning av Linux-kĂ€rnans capabilities i containrar — kan man genomföra relevanta laboratorieövningar pĂ„ resursen Play with Docker* — se avsnittet "Security".

SÀkerhet för Docker-containrar

* Om denna resurs skrev vi om hur de tillĂ€mpar teknologin för en ovanlig uppgift — att hitta fel i rubriker.) I slutĂ€ndan lyckades vi automatisera upp till 90 % av flödet beroende pĂ„ tjĂ€nsten. för tvĂ„ Ă„r sedan, och i november 2018 hĂ€nde det nĂ„got mycket intressant (ur sĂ€kerhetssynpunkt) med den. Kort sagt lyckades experter frĂ„n CyberArk Software Ltd. hacka den: uppnĂ„ möjligheten att köra kommandon utanför containrar, dvs. pĂ„ vĂ€rdsystemet. En utmĂ€rkt illustration av sĂ€kerhetsproblemet i Docker, eller hur? LĂ€s om alla detaljer i den hĂ€ndelsen hĂ€r.

P.S. frÄn översÀttaren

LÀs Àven i vÄr blogg:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster