Nazaj na blog

Varnost vsebnikov: Pobeg iz Docker

October 14, 2024 4 min branja
Varnost vsebnikov: Pobeg iz Docker
Nazadnje posodobljeno:

Vsebniki zagotavljajo izolacijo procesov, vendar si delijo jedro gostitelja, s čimer se bistveno razlikujejo od virtualnih strojev. Napačno konfiguriran vsebnik lahko napadalcu odpre neposredno pot do polnega nadzora nad gostiteljem in v orkestriranih okoljih nad celotno gručo. Organizacije dosledno podcenjujejo to napadalno površino.

Omejevanje pravic vsebnikov, zaščito vtičnice Docker in varnost slik obravnava OWASP Docker Security Cheat Sheet.

Varnostni model vsebnikov

  • Imenski prostori -- PID, omrežje, pripenjanje, uporabnik, UTS, IPC in cgroup zagotavljajo logično izolacijo, vendar niso bili zasnovani kot varnostna meja proti sovražnim procesom.
  • Cgroups -- Omejujejo porabo virov (CPE, pomnilnik, V/I), ne preprečujejo pa dostopa do občutljivih virov gostitelja ob oslabljenih mejah.
  • Zmogljivosti -- Docker privzeto zavrže večino, vendar --privileged ali izrecne dodelitve obnovijo nevarne zmogljivosti kot CAP_SYS_ADMIN.
  • Seccomp in AppArmor/SELinux -- Privzeti seccomp blokira ~44 sistemskih klicev; prilagojeni profili ali odsotnost profilov znatno oslabijo izolacijo.

Vektorji pobega iz vsebnika

  • Privilegirani vsebniki -- --privileged onemogoči skoraj vso izolacijo: poln dostop /dev, vse zmogljivosti, brez seccomp, brez AppArmor/SELinux.
  • Pripeta vtičnica Docker -- /var/run/docker.sock daje dejanski korenski dostop na gostitelja. Ustvarjanje novih vsebnikov s pripetjem datotečnega sistema gostitelja.
  • Občutljive poti gostitelja -- Pripetje /, /etc, /root zagotavlja neposreden dostop do datotek gostitelja. Zapisljiva pripetja omogočajo spreminjanje.
  • Izkoriščanja jedra -- Deljeno jedro pomeni, da vsaka izkoristljiva ranljivost (CVE-2022-0185, CVE-2022-0847 Dirty Pipe, CVE-2020-14386) vodi do popolnega pobega.
  • Zloraba SYS_PTRACE -- S CAP_SYS_PTRACE in deljenim imenskim prostorom PID se priključite na procese gostitelja za vbrizgavanje kode ali branje pomnilnika.

Zaznava iz notranjosti

  • /.dockerenv -- Docker ustvari to datoteko v korenu vsebnika.
  • /proc/1/cgroup -- Vsebuje reference docker/kubepods/containerd v vsebniku; kaže / kot koren na gostitelju.
  • Spremenljivke okolja -- KUBERNETES_SERVICE_HOST, imena storitev Docker Compose razkrivajo orkestracijsko platformo.
  • Omejen imenski prostor PID -- ps aux pokaže zelo malo procesov v primerjavi s stotinami na gostitelju.

Tehnike pobega

  • Vtičnica Docker -- docker run -v /:/hostfs -it alpine chroot /hostfs za korensko lupino na gostitelju. Uporabite curl proti API Docker, če CLI ni na voljo.
  • Privilegirani način -- mount /dev/sda1 /mnt za dostop do datotečnega sistema gostitelja. Zapišite ključe SSH ali vnose crontab za obstojnost.
  • CAP_SYS_ADMIN prek release_agent cgroup -- Ustvarite cgroup, nastavite release_agent na skripto gostitelja, sprožite z izpraznitvijo. Izvede se na gostitelju kot root, ker operacije cgroup pobegnejo iz imenskega prostora pripenjanja.
  • Ranljivosti runc -- CVE-2019-5736 je omogočil prepisovanje binarne datoteke runc gostitelja med zagonom. Ranljivosti izvajalnega okolja ne zahtevajo posebne konfiguracije vsebnika.

Varnost slik

  • Ranljivosti osnovnih slik -- Zastarele osnovne plasti podedujejo vse znane CVE-je. Pregledujte s Trivy ali Grype pred uvedbo.
  • Skrivnosti v plasteh -- Nespremenljive plasti ohranjajo skrivnosti tudi ko so "odstranjene" v kasnejših plasteh. docker history --no-trunc razkrije vgrajene poverilnice.
  • Večstopenjske gradnje -- Kopirajte le končne artefakte v minimalne izvajalne slike brez orodij za gradnjo in izvorne kode.
  • Pregledovanje v CI/CD -- Trivy, Snyk Container in Anchore lahko prekinejo gradnje ob kritičnih CVE-jih.

Težave specifične za Kubernetes

  • Žetoni storitvenih računov -- Privzeto pripeti na /var/run/secrets/kubernetes.io/serviceaccount/token. Povišana dovoljenja RBAC omogočajo interakcijo z API za izpis skrivnosti ali ustvarjanje podov.
  • Neavtenticiran etcd -- Hrani celotno stanje gruče vključno s skrivnostmi v base64. Vrata 2379 brez avtentikacije izpostavljajo vsako skrivnost.
  • API Kubelet (10250) -- Anonymous-auth omogoča izvajanje ukazov v kateremkoli podu na vozlišču.
  • Obvod Pod Security Admission -- Napačne konfiguracije oznak imenskih prostorov ali izjem omogočijo privilegirane pode v omejenih imenskih prostorih.
  • Napačne konfiguracije RBAC -- Preohlapne vezave ClusterRoleBinding in dovoljenja z nadomestnimi znaki omogočajo stopnjevanje pravic po celotni gruči.
  • Skrivnosti kot spremenljivke okolja -- Vidne v /proc/[pid]/environ. Namesto tega pripnite kot datoteke z omejenimi dovoljenji.

Dobavna veriga in omrežje

  • Typosquatting -- Zlonamerne slike s podobnimi imeni uradnim v javnih registrih. Preverite vire in uporabite podpisovanje slik (cosign, Docker Content Trust).
  • Omrežna segmentacija -- Privzeto omogoča vso komunikacijo med vsebniki. Kubernetes NetworkPolicy omejuje vstop/izstop na ravni poda.
  • Storitvena mreža -- Istio/Linkerd zagotavljata medsebojni TLS, šifriranje in nadzor dostopa na plasti 7.

Orodja in utrjevanje

  • deepce -- Popis vsebnika, stopnjevanje pravic in zaznava pobega iz notranjosti.
  • CDK -- Orodje za penetracijsko testiranje vsebnikov za zbiranje informacij in izkoriščanje.
  • Trivy -- Pregledovanje slik in gruč za CVE-je, napačne konfiguracije in skrivnosti.
  • Falco -- Izvajalno spremljanje za zaznavo anomalnega vedenja (generiranje lupin, dostop do občutljivih datotek).
  • kube-hunter / peirates -- Penetracijsko testiranje Kubernetes za stopnjevanje pravic in lateralno premikanje.

Utrjevanje: zagon vsebnikov brez korenskih pravic, uveljavljanje datotečnih sistemov samo za branje, uporaba strogih varnostnih kontekstov (runAsNonRoot, drop ALL capabilities), omogočanje Pod Security Admission v načinu uveljavljanja in redno pregledovanje slik ter konfiguracij gruč.

Sorodno branje: Testiranje varnosti AWS: IAM, S3 in naprej in CI/CD in GitHub Actions: upravljanje skrivnosti in kontrole dobavne verige.

Vid Grosek

Vid Grosek

Etični heker & Penetracijski tester

Pomagam slovenskim podjetjem odkriti varnostne ranljivosti, preden jih odkrijejo napadalci. Z več kot 18 leti izkušenj v kibernetski varnosti.

Vse objave

Komentarji

Ni še komentarjev. Bodite prvi!

Dodaj komentar

Vam je bil članek všeč?

Prijavite se na newsletter za mesečne varnostne vpoglede.

Prijavite se