Bem. overs.: Emnet for Docker-sikkerhed er uden tvivl et af de tidløse emner i den moderne IT-verden. Uden yderligere forklaring præsenterer vi hermed en oversættelse af endnu en samling relevante anbefalinger. Hvis du allerede har været interesseret i dette emne, vil mange af dem være velkendte for dig. Vi har desuden tilføjet en liste over nyttige værktøjer og nogle ressourcer til yderligere studier af emnet.

Jeg præsenterer hermed en vejledning til sikring af Docker. Feedback er velkommen, da dette snarere er en samling af uddrag fra forskellige ressourcer, og ikke alle er blevet underkastet grundig kontrol. Anbefalingerne er opdelt i tre kategorier:
- Nødvendige foranstaltninger inden for værtsoperativsystemet ved brug af Docker;
- Instruktioner vedrørende konfigurationsfilen til opbygning og oprettelse af containere;
- Sikkerhedsværktøjer, der kan integreres med specifikke funktioner i Docker Enterprise.
Guiden er baseret på forskellige ressourcer, hvoraf mange er angivet nedenfor. Den kan ikke kaldes udtømmende, men den dækker alle grundlæggende emner. Yderligere oplysninger findes i beskrivelsen af CIS-tests (linket er angivet i slutningen af denne guide) samt i dokumentationen til Docker.
Docker Security Benchmark
kontrollerer automatisk din Docker i forhold til de mest almindelige bedste praksis. Scriptet fungerer som en god heuristisk sikkerhedstest, men bør ikke betragtes som et værktøj til omfattende analyse.
Værts-OS
Det er indlysende, at en Docker-container ikke kan være sikker, hvis selve værtsystemet ikke er sikkert. Derfor er det nødvendigt at følge bedste praksis for sikkerhed inden for operativsystemer. Desuden ville det være fornuftigt at udføre en sårbarhedsanalyse ud over følgende anbefalinger.
Auditregler
Opret og brug auditregler for filer, der er relateret til Docker, ved hjælp af auditctl. For eksempel kan du tilføje -w /usr/bin/dockerd -k docker pull-requesten på GitHub /etc/audit.rules og genstarte auditservicen.
FIPS-tilstand
Aktivering af FIPS-tilstand tvinger kryptografiske værktøjer til at skifte til algoritmer, der er optaget i FIPS (amerikanske — red. anm.), i overensstemmelse med de føderale og branchemæssige normer og krav. Hvis værtens OS understøtter FIPS-tilstand, kan den aktiveres ved at køre følgende kommandoer:
sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && rebootFIPS skal også aktiveres 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 dockerFor yderligere information, se dokumentationen og .
Docker Secrets
Fortrolige oplysninger skal opbevares som hemmeligheder. Den relevante tjeneste kan startes med kommandoen 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 nginxSe detaljer i .
Docker-konfigurationsfilen
Følgende indstillinger kan tilføjes i konfigurationsfilen /etc/docker/daemon.json:
-
"icc":false— deaktiverer datadeling mellem containere for at undgå unødvendige lækager af information. -
log-level: "info"— indfanger alle logfiler undtagen fejllogs. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp:\/\/1.2.3.4:1111" } }— aktiverer fjernlogning, sender logs til den angivne adresse. Virker kun, hvis syslog-dæmonen kører. TCP og UDP understøttes. Det er også muligt at aktivere for hver enkelt container. For dette sættes et specialflag ved start af Docker (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— forhindrer hævning af privilegier (privilege escalation) ved at isolere navneområdet under en bestemt bruger.
Sikkerhed på transportniveau
Adgang til Docker-dæmonen (hvis fjernadgang er nødvendig) bør kun være for brugere med adgang til TLS-klientens legitimationsoplysninger.
Autorisationsplugins
Bestem, hvilke brugere der må udføre hvilke kommandoer, og opret det relevante autorisationsplugin til Docker. Start derefter Docker-dæmonen og tilføj plugin'et:
dockerd --authorization-plugin=PLUGIN_IDFor at lære mere om oprettelse af autorisationsplugins, se .
Daemon-indstillinger
Docker-dæmonen kører med et sæt standardindstillinger.
-
--live-restore— denne indstilling hjælper med at reducere nedetid for containere ved systemafbrydelser eller genstart. Det bliver lettere at patch'e eller opdatere dem med minimal nedetid; -
--userland-proxy=false— når hairpin NAT er tilgængelige eller bruges, bliver proxy i brugerrummet en overflødig tjeneste, der kun øger antallet af mulige angrebsvektorer; -
--no-new-privileges— forhindrer, at containere får ekstra privilegier ved hjælp af suid eller sguid; -
--seccomp-profile /path/to/profile— hvis du har din egen seccomp-profil, kan den anvendes med denne flag. Læs mere om Seccomp og Docker .
Container- og buildfiler konfiguration
Oprettelse af bruger
Sørg for, at der er oprettet en bruger til containeren, og kør den under denne bruger (KØR IKKE containeren som root).
Fjernadgang
Forbud mod fjernadgang til dæmonen. Hvis det er nødvendigt, beskytt det med certifikater.
Isoler brugerens navnerum
Det er især vigtigt at sikre, at brugerens navnerum i Docker er isoleret, da det som standard deles med værtsnavnerummet. I nogle tilfælde kan dette udnyttes til at opnå privilegier eller endda for at udtræde af containeren. Brugerens navnerum kan isoleres ved at redigere konfigurationsfilen (som beskrevet ovenfor i afsnittet 'Docker-konfigurationsfil'). Den ekstra omtale af dette problem her skyldes dets betydning.
Healthchecks
Healthcheck (sundhedstjek) – et kraftfuldt værktøj, der giver mulighed for at kontrollere containerens integritet. Det konfigureres i Dockerfile ved hjælp af instruktionen HEALTHCHECK. Healthchecks gør det muligt at sikre, at containeren fungerer korrekt. I det følgende eksempel afsluttes sundhedstjekket med 0, hvis serveren fungerer, og 1, hvis den "nedbrudt":
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Hvis SELinux understøttes af værtsoperativsystemet, skal du oprette eller importere en SELinux-politik og køre Docker i dæmon-tilstand med SELinux aktiveret:
docker daemon --selinux-enableI dette tilfælde kan Docker-containere køres med sikkerhedsindstillinger, for eksempel:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashNetværksinterfacer
Som standard lytter Docker på alle netværksgrænseflader. Da trafikken i de fleste tilfælde kun forventes på én af dem, øger denne tilgang uforholdsmæssigt risikoen for angreb. Derfor kan du ved opstart af en container knytte dens porte til specifikke grænseflader på værten:
docker run --detach --publish 10.2.3.4:49153:80 nginxCachede versioner af billeder
Når du downloader billeder, skal du sikre dig, at den lokale cache svarer til indholdet i repository'et. Ellers kan du få en forældet version af billedet eller et billede, der indeholder sårbarheder.
Netværksbro
Standard netværksmodel, docker0, er sårbar over for ARP-spoofing og MAC-flooding angreb. For at løse dette problem skal du oprette en netværksbro i overensstemmelse med dine specifikationer, som beskrevet .
Advarsel om Docker-socket
Kontroller aldrig Docker-socket ind i containeren. Ellers får containeren mulighed for at udføre Docker-kommandoer og dermed interagere med værtens operativsystem og kontrollere det. Gør ikke dette.
Konfigurering af Docker Enterprise
Docker Trust
Docker Trust gør det muligt at generere nøgler, der kan bruges til at kontrollere den kryptografiske integritet af billeder. Docker Trust-nøgler kan bruges til at signere Docker-billeder med private nøgler, som verificeres af offentlige nøgler på Notary Server. Yderligere information — . Aktivering af Docker Trust i Enterprise Engine er detaljeret beskrevet i .
Scanning for sårbarheder
Docker Enterprise har en indbygget sårbarhedsscanner, der giver mulighed for at downloade en CVE-database til offline scanning af sårbarheder i billeder. Regelmæssig scanning af billeder hjælper med at gøre dem mere sikre: brugeren får straks advarsler om fundne sårbarheder. Læs mere om, hvordan dette kan gøres, se .
Bem. overs.: Der findes også Open Source-sårbarhedsscannere i Docker-billeder, eksempler på disse findes i slutningen af materialet.
Integration af LDAP og UCP
Universal Control Plane kan integreres med LDAP. Resultatet vil være et forenklet autentificeringssystem, der kan undgå unødvendig duplikering. Du kan læse mere om dette i artiklen .
Yderligere materialer
Yderligere information om bedste praksis for sikkerhed i Docker kan findes på . Vi anbefaler også at downloade .
Bonus from the translator
As a logical addition to this article, we publish a list of 10 popular Open Source utilities for ensuring security in Docker. It was borrowed from (authored by Bill Doerrfeld from Doerrfeld.io).
NB: Learn more about many of the projects mentioned here in the article “».
- — the script mentioned at the very beginning of the article that checks Docker containers for compliance with common security practices.

- — probably the most popular utility for static vulnerability analysis in containers. It uses numerous CVE vulnerability databases (including trackers from leading Linux distributions such as Red Hat, Debian, and Ubuntu). It offers an API for developers and an easy way to extend functionality (by adding "drivers"). Used in the popular public container image registry (similar to Docker Hub) — Quay.io.
- — a solution for ensuring network security at the kernel level, based on BPF network packet filtering technology.
- — a utility for analyzing image contents for security vulnerabilities based on the CVE database. In addition, it allows applying custom policies (based on various data including whitelists/blacklists, file contents, etc.) to assess container security.
- — a whole ecosystem for creating and maintaining security policies across platforms. It offers a utility for checking containers,
oscap-docker. - — a utility for scanning Docker containers for vulnerabilities, trojans, viruses, and malware. CVE databases include checks against dependencies from OWASP, Red Hat Oval database, and the Exploit Database repository.
- — a framework for signing Docker images, initially created at Docker Inc (and later transferred for development to CNCF). Its use allows delegating roles and distributing responsibilities across containers, as well as verifying the cryptographic integrity of images.
- — an API for metadata aimed at managing internal security policies. For example, it helps improve the operation of container security scanners. Shopify uses this API to manage metadata for its 500,000 images.
- – et værktøj til Kubernetes, der overvåger systemets adfærd: aktivitet i containere, på værter og i netværket. Muliggør opsætning af kontinuerlige kontroller i infrastrukturen, opdagelse af anomalier og afsendelse af alarmer ved enhver systemopkald i Linux.
- – endnu et værktøj til statisk analyse af Docker-containerbilleder. Muliggør "at kigge ind" i billedfilerne, indsamle de nødvendige data, anvende de relevante politikker osv.
Endnu en god samling praktiske anbefalinger til, hvordan man gør Docker mere sikkert, kan findes hos Aqua Security. Mange af deres råd overlapper med de allerede nævnte, men der er også andre. For eksempel foreslår forfatterne at organisere overvågning af aktiviteten i containere og angiver, hvad man skal være opmærksom på ved brug af Docker Swarm.
For dem, der ønsker at dykke endnu dybere ind i dette emne, udkom der sidste år en bog "»", hvis uddrag er frit tilgængelige. .
Endelig, for praktisk at blive bekendt med nogle aspekter af Docker-sikkerhed: Seccomp-profiler og brug af Linux-kernekapabiliteter i containere – kan man gennemføre de relevante laboratorieøvelser på * – se sektionen "Sikkerhed".

* Om selve denne ressource har vi for to år siden, og i november 2018 skete der en meget interessant (sikkerhedsmæssigt) hændelse med den. Kort sagt lykkedes det fagfolk fra CyberArk Software Ltd. at hacke den: at opnå muligheden for at udføre kommandoer uden for containerne, det vil sige på værtsystemet. En glimrende illustration af sikkerhedsproblemet i Docker, ikke sandt? Læs alle detaljer om, hvad der skete .
P.S. fra oversætteren
Læs også på vores blog:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Kilde: habr.com

