Docker Security
Gebruik Trickest om maklik te bou en werkstrome outomatiseer wat aangedryf word deur die wêreld se mees gevorderde gemeenskapshulpmiddels. Kry Vandag Toegang:
Basiese Docker-enjinsikuriteit
Die Docker-enjin maak gebruik van die Linux-kernel se Namespaces en Cgroups om houers te isoleer, wat 'n basiese veiligheidslaag bied. Addisionele beskerming word gebied deur Capabilities dropping, Seccomp, en SELinux/AppArmor, wat houer-isolasie verbeter. 'n Auth-plugin kan verdere beperkings op gebruikersaksies plaas.
Veilige Toegang tot die Docker-enjin
Die Docker-enjin kan óf plaaslik via 'n Unix-aansluiting óf op afstand deur middel van HTTP benader word. Vir afgeleë toegang is dit noodsaaklik om HTTPS en TLS te gebruik om vertroulikheid, integriteit, en outentisiteit te verseker.
Die Docker-enjin luister standaard na die Unix-aansluiting by unix:///var/run/docker.sock
. Op Ubuntu-stelsels word Docker se aanvangsopsies in /etc/default/docker
gedefinieer. Om afgeleë toegang tot die Docker-API en -klient moontlik te maak, stel die Docker-daemon bloot oor 'n HTTP-aansluiting deur die volgende instellings by te voeg:
Egter, die blootstelling van die Docker daemon oor HTTP word nie aanbeveel nie weens sekuriteitskwessies. Dit word aanbeveel om verbindings te beveilig deur HTTPS te gebruik. Daar is twee hoofbenaderings om die verbinding te beveilig:
Die klient verifieer die identiteit van die bediener.
Beide die klient en bediener verifieer mekaar se identiteit.
Sertifikate word gebruik om 'n bediener se identiteit te bevestig. Vir gedetailleerde voorbeelde van beide metodes, verwys na hierdie gids.
Sekuriteit van Houverbeelding
Houverbeeldings kan gestoor word in privaat of openbare repose. Docker bied verskeie stooropsies vir houverbeeldings:
Docker Hub: 'n Openbare registerdiens van Docker.
Docker Registry: 'n oopbronprojek wat gebruikers toelaat om hul eie register te hê.
Docker Trusted Registry: Docker se kommersiële registeraanbod, met rolgebaseerde gebruikersverifikasie en integrasie met LDAP-gidsdiens.
Beeldskandering
Houverhouers kan sekuriteitskwessies hê weens die basisbeeld of die sagteware wat bo-op die basisbeeld geïnstalleer is. Docker werk aan 'n projek genaamd Nautilus wat sekuriteitskandering van Houers doen en die kwessies lys. Nautilus werk deur elke Houerbeeldlaag met die kwessierepositorium te vergelyk om sekuriteitsgate te identifiseer.
Vir meer inligting lees hierdie.
docker scan
Die docker scan
bevel stel jou in staat om bestaande Docker-beelde te skandeer deur die beeldnaam of ID te gebruik. Voer byvoorbeeld die volgende bevel uit om die hello-world beeld te skandeer:
Docker Beeldondertekening
Docker beeldondertekening verseker die veiligheid en integriteit van beelde wat in houers gebruik word. Hier is 'n beknopte verduideliking:
Om Docker-inhoudsvertroue te aktiveer, stel
export DOCKER_CONTENT_TRUST=1
in. Hierdie funksie is standaard af in Docker weergawe 1.10 en later.Met hierdie funksie geaktiveer, kan slegs ondertekende beelde afgelaai word. Die aanvanklike beeldstoot vereis die instelling van wagwoorde vir die hoof- en etikettering sleutels, met Docker wat ook Yubikey ondersteun vir verbeterde veiligheid. Meer besonderhede kan hier gevind word: hier.
'n Poging om 'n ondertekende beeld met inhoudsvertroue geaktiveer af te trek, lei tot 'n "Geen vertroue data vir die nuutste" fout.
Vir beeldstote na die eerste, vra Docker vir die wagwoord van die stoor sleutel om die beeld te onderteken.
Om jou privaat sleutels te rugsteun, gebruik die bevel:
Wanneer jy oorskakel na Docker-gashere, is dit nodig om die hoof- en bewaarpleksleutels te skuif om werksaamhede te handhaaf.
Gebruik Trickest om maklik te bou en werkstrome te outomatiseer wat aangedryf word deur die wêreld se mees gevorderde gemeenskapsinstrumente. Kry Toegang Vandag:
Kontainer Sekuriteitskenmerke
Namespaces
Namespaces is 'n kenmerk van die Linux-kernel wat kernelbronne verdeel sodat een stel prosesse een stel bronne sien terwyl 'n ander stel prosesse 'n verskillende stel bronne sien. Die kenmerk werk deur dieselfde namespace vir 'n stel bronne en prosesse te hê, maar daardie namespaces verwys na afsonderlike bronne. Bronne kan in meervoudige ruimtes bestaan.
Docker maak gebruik van die volgende Linux-kernel Namespaces om houer-isolasie te bereik:
pid-namespace
berg-namespace
netwerk-namespace
ipc-namespace
UTS-namespace
Vir meer inligting oor die namespaces kyk na die volgende bladsy:
pageNamespacescgroups
Linux-kernelkenmerk cgroups bied die vermoë om bronne soos cpu, geheue, io, netwerkbandwydte onder 'n stel prosesse te beperk. Docker maak dit moontlik om Houers te skep met behulp van die cgroup-funksie wat hulpbronnebeheer vir die spesifieke Houer moontlik maak. Hieronder is 'n Houer geskep met gebruikerspasiëntgeheue beperk tot 500m, kernelgeheue beperk tot 50m, cpu-aandeel tot 512, blkioweight tot 400. CPU-aandeel is 'n verhouding wat die Houer se CPU-gebruik beheer. Dit het 'n standaardwaarde van 1024 en 'n reeks tussen 0 en 1024. As drie Houers dieselfde CPU-aandeel van 1024 het, kan elke Houer tot 33% van die CPU neem in geval van CPU-hulpbronstrydigheid. blkio-weight is 'n verhouding wat die Houer se IO beheer. Dit het 'n standaardwaarde van 500 en 'n reeks tussen 10 en 1000.
Om die cgroup van 'n houer te kry, kan jy doen:
Vir meer inligting kyk:
pageCGroupsBevoegdhede
Bevoegdhede maak fyn beheer vir die bevoegdhede wat aan die root-gebruiker toegelaat kan word. Docker gebruik die Linux-kernel bevoegdheidseienskap om die operasies wat binne 'n houer gedoen kan word te beperk ongeag die tipe gebruiker.
Wanneer 'n docker-houer uitgevoer word, laat die proses sensitiewe bevoegdhede vall wat die proses kon gebruik om te ontsnap uit die isolasie. Dit probeer verseker dat die proses nie sensitiewe aksies kan uitvoer en ontsnap nie:
pageLinux CapabilitiesSeccomp in Docker
Dit is 'n sekuriteitskenmerk wat Docker toelaat om die syscalls te beperk wat binne die houer gebruik kan word:
pageSeccompAppArmor in Docker
AppArmor is 'n kernel-verbetering om houers tot 'n beperkte stel hulpbronne met per-program profiele te beperk:
pageAppArmorSELinux in Docker
Etiketteringstelsel: SELinux ken 'n unieke etiket toe aan elke proses en lêersisteemobjek.
Beleidshandhawing: Dit dwing sekuriteitsbeleide af wat definieer watter aksies 'n prosesetiket op ander etikette binne die stelsel kan uitvoer.
Houerprosesetikette: Wanneer houermasjiene houerprosesse inisieer, word hulle gewoonlik toegewys aan 'n beperkte SELinux-etiket, gewoonlik
container_t
.Lêeretikettering binne Houers: Lêers binne die houer word gewoonlik geëtiketteer as
container_file_t
.Beleidreëls: Die SELinux-beleid verseker hoofsaaklik dat prosesse met die
container_t
-etiket slegs kan interaksie hê (lees, skryf, uitvoer) met lêers wat geëtiketteer is ascontainer_file_t
.
Hierdie meganisme verseker dat selfs as 'n proses binne 'n houer gekompromitteer is, dit beperk is tot interaksie slegs met objekte wat die ooreenstemmende etikette het, wat die potensiële skade van sulke kompromitterings aansienlik beperk.
pageSELinuxAuthZ & AuthN
In Docker speel 'n outorisasie-inprop 'n kritieke rol in sekuriteit deur te besluit of versoek aan die Docker-daemon toegelaat of geblokkeer moet word. Hierdie besluit word geneem deur twee sleutelkontekste te ondersoek:
Outentiseringskonteks: Dit sluit omvattende inligting oor die gebruiker in, soos wie hulle is en hoe hulle hulself geoutentiseer het.
Bevelkonteks: Dit sluit alle relevante data in wat verband hou met die versoek wat gedoen word.
Hierdie kontekste help verseker dat slegs legitieme versoek van geoutentiseerde gebruikers verwerk word, wat die sekuriteit van Docker-operasies verbeter.
pageAuthZ& AuthN - Docker Access Authorization PluginDoS vanuit 'n houer
As jy nie die hulpbronne wat 'n houer kan gebruik behoorlik beperk nie, kan 'n gekompromitteerde houer die gasheer waarop dit hardloop, DoS.
CPU DoS
Bandbreedte DoS
Interessante Docker-vlakke
--bevoorregte vlag
Op die volgende bladsy kan jy leer wat impliseer die --bevoorregte
vlag:
--sekuriteit-optie
geen-nuwe-bevoorregting
As jy 'n houer hardloop waar 'n aanvaller daarin slaag om toegang te kry as 'n lae-bevoorregte gebruiker. As jy 'n sleg-gekonfigureerde suid-binêre lêer het, kan die aanvaller dit misbruik en bevoorregting binne die houer opgradeer. Dit kan hom moontlik toelaat om daaruit te ontsnap.
Die houer hardloop met die geen-nuwe-bevoorregting
opsie geaktiveer sal hierdie soort bevoorregtingsopgradering voorkom.
Ander
Vir meer --security-opt
-opsies, kyk na: https://docs.docker.com/engine/reference/run/#security-configuration
Ander Sekuriteits-oorwegings
Bestuur van Geheime: Beste Praktyke
Dit is noodsaaklik om te vermy om geheime direk in Docker-beelde in te sluit of om omgewingsveranderlikes te gebruik, aangesien hierdie metodes jou sensitiewe inligting blootstel aan enigiemand met toegang tot die houer deur bevele soos docker inspect
of exec
.
Docker volumes is 'n veiliger alternatief, aanbeveel vir die benadering van sensitiewe inligting. Hulle kan gebruik word as 'n tydelike lêersisteem in die geheue, wat die risiko's wat verband hou met docker inspect
en logging verminder. Nietemin kan root-gebruikers en diegene met exec
-toegang tot die houer steeds die geheime benader.
Docker-geheime bied 'n selfs veiliger metode vir die hantering van sensitiewe inligting. Vir gevalle waar geheime tydens die beeldboufase benodig word, bied BuildKit 'n doeltreffende oplossing met ondersteuning vir bou-tyd-geheime, wat bou spoed verbeter en addisionele kenmerke bied.
Om van BuildKit gebruik te maak, kan dit op drie maniere geaktiveer word:
Deur 'n omgewingsveranderlike:
export DOCKER_BUILDKIT=1
Deur bevele te voorafgaan:
DOCKER_BUILDKIT=1 docker build .
Deur dit standaard in die Docker-konfigurasie te aktiveer:
{ "features": { "buildkit": true } }
, gevolg deur 'n Docker-herlaai.
BuildKit maak die gebruik van bou-tyd-geheime met die --secret
-opsie moontlik, wat verseker dat hierdie geheime nie ingesluit word in die beeldbou-kas of die finale beeld nie, deur 'n bevel soos:
Vir geheime wat benodig word in 'n lopende houer, bied Docker Compose en Kubernetes robuuste oplossings. Docker Compose maak gebruik van 'n secrets
sleutel in die diensdefinisie om geheime lêers te spesifiseer, soos getoon in 'n docker-compose.yml
voorbeeld:
Hierdie konfigurasie maak dit moontlik om geheime te gebruik wanneer dienste met Docker Compose begin.
In Kubernetes-omgewings word geheime ondersteun en kan verder bestuur word met gereedskap soos Helm-Secrets. Kubernetes se Rol Gebaseerde Toegangsbeheer (RBAC) verbeter geheimbestuursekuriteit, soortgelyk aan Docker Enterprise.
gVisor
gVisor is 'n aansoek-kernel, geskryf in Go, wat 'n aansienlike deel van die Linux-sisteemoppervlak implementeer. Dit sluit 'n Open Container Initiative (OCI) uitvoertyd genaamd runsc
in wat 'n isoleringgrens tussen die aansoek en die gasheerkernel bied. Die runsc
-uitvoertyd integreer met Docker en Kubernetes, wat dit eenvoudig maak om gesandbokte houers te hardloop.
Kata Containers
Kata Containers is 'n oopbron-gemeenskap wat werk om 'n veilige houeruitvoertyd met ligte virtuele masjiene te bou wat soos houers voel en optree, maar sterker werklas-isolering bied deur hardeware-virtualisasietegnologie as 'n tweede verdedigingslaag te gebruik.
Opsomming van Wenke
Moenie die
--privileged
vlag gebruik of 'n Docker-socket binne die houer koppel. Die docker-socket maak dit moontlik om houers te skep, dus is dit 'n maklike manier om volle beheer oor die gasheer te neem, byvoorbeeld deur 'n ander houer met die--privileged
vlag te hardloop.Moet nie as wortel binne die houer hardloop nie. Gebruik 'n verskillende gebruiker en gebruikersnaamruimtes. Die wortel in die houer is dieselfde as op die gasheer tensy dit met gebruikersnaamruimtes herkart is. Dit word slegs lig beperk deur, hoofsaaklik, Linux-naamruimtes, vermoëns en cgroups.
Laat alle vermoëns val (
--cap-drop=all
) en aktiveer slegs dié wat benodig word (--cap-add=...
). Baie werklaste benodig nie enige vermoëns nie en die byvoeging daarvan verhoog die omvang van 'n potensiële aanval.Gebruik die "no-new-privileges" veiligheidsoptie om te voorkom dat prosesse meer vermoëns verkry, byvoorbeeld deur suid-binêre lêers.
Beperk hulpbronne wat aan die houer beskikbaar is. Hulpbronlimiete kan die masjien teen ontkenning van diensaanvalle beskerm.
Gebruik amptelike docker-beelde en vereis handtekeninge of bou jou eie gebaseer op hulle. Moet nie erfenis of agterdeur beelde gebruik nie. Berg ook wortelsleutels, wagwoord op 'n veilige plek op. Docker het planne om sleutels met UCP te bestuur.
Herbou gereeld jou beelde om sekuriteitsopdaterings op die gasheer en beelde toe te pas.
Bestuur jou geheime wys sodat dit moeilik is vir die aanvaller om daartoe toegang te verkry.
As jy die docker-daemon blootstel, gebruik HTTPS met klient- en bedienerverifikasie.
In jou Dockerfile, gee voorkeur aan KOPIE in plaas van BYVOEG. BYVOEG onttrek outomaties gezip-lêers en kan lêers vanaf URL's kopieer. KOPIE het nie hierdie vermoëns nie. Vermy waar moontlik die gebruik van BYVOEG sodat jy nie vatbaar is vir aanvalle deur afgeleë URL's en Zip-lêers nie.
Het afsonderlike houers vir elke mikrodiens
Moenie ssh binne die houer sit nie, "docker exec" kan gebruik word om na die houer te ssh.
Het kleiner houer beelde
Docker Uitbreek / Voorreg-escalasie
As jy binne 'n docker-houer is of jy toegang het tot 'n gebruiker in die docker-groep, kan jy probeer om te ontsnap en voorregte te eskaleer:
pageDocker Breakout / Privilege EscalationDocker-verifikasiepropbypass
As jy toegang het tot die docker-socket of toegang het tot 'n gebruiker in die docker-groep, maar jou aksies word beperk deur 'n docker-verifikasieprop, kyk of jy dit kan verbygaan:
pageAuthZ& AuthN - Docker Access Authorization PluginVerharding van Docker
Die gereedskap docker-bench-security is 'n skrip wat tientalle algemene beste praktyke ondersoek rakende die implementering van Docker-houers in produksie. Die toetse is almal geoutomatiseer en is gebaseer op die CIS Docker Benchmark v1.3.1. Jy moet die gereedskap vanaf die gasheer wat Docker hardloop of vanaf 'n houer met genoeg voorregte hardloop. Vind uit hoe om dit in die README te hardloop: https://github.com/docker/docker-bench-security.
Verwysings
Gebruik Trickest om maklik werkstrome te bou en te outomatiseer met die wêreld se mees gevorderde gemeenskapsgereedskap. Kry Vandag Toegang:
Last updated