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 cimer se bistveno razlikujejo od virtualnih strojev. Napacno konfiguriran vsebnik lahko napadalcu odpre neposredno pot do polnega nadzora nad gostiteljem in v orkestriranih okoljih nad celotno gruco. Organizacije dosledno podcenjujejo to napadalno povrsino.

Varnostni model vsebnikov

  • Imenski prostori -- PID, omrezje, pripenjanje, uporabnik, UTS, IPC in cgroup zagotavljajo logicno izolacijo, vendar niso bili zasnovani kot varnostna meja proti sovraznim procesom.
  • Cgroups -- Omejujejo porabo virov (CPE, pomnilnik, V/I), ne preprecujejo pa dostopa do obcutljivih virov gostitelja ob oslabljenih mejah.
  • Zmogljivosti -- Docker privzeto zavrze vecino, 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 onemogoci skoraj vso izolacijo: poln dostop /dev, vse zmogljivosti, brez seccomp, brez AppArmor/SELinux.
  • Pripeta vticnica Docker -- /var/run/docker.sock daje dejanski korenski dostop na gostitelja. Ustvarjanje novih vsebnikov s pripetjem datotecnega sistema gostitelja.
  • Obcutljive poti gostitelja -- Pripetje /, /etc, /root zagotavlja neposreden dostop do datotek gostitelja. Zapisljiva pripetja omogocajo 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 prikljucite 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; kaze / kot koren na gostitelju.
  • Spremenljivke okolja -- KUBERNETES_SERVICE_HOST, imena storitev Docker Compose razkrivajo orkestracisko platformo.
  • Omejen imenski prostor PID -- ps aux pokaze zelo malo procesov v primerjavi s stotinami na gostitelju.

Tehnike pobega

  • Vticnica Docker -- docker run -v /:/hostfs -it alpine chroot /hostfs za korensko lupino na gostitelju. Uporabite curl proti API Docker, ce CLI ni na voljo.
  • Privilegirani nacin -- mount /dev/sda1 /mnt za dostop do datotecnega sistema gostitelja. Zapisite kljuce SSH ali vnose crontab za obstojnost.
  • CAP_SYS_ADMIN prek release_agent cgroup -- Ustvarite cgroup, nastavite release_agent na skripto gostitelja, sprozite z izpraznitvijo. Izvede se na gostitelju kot root, ker operacije cgroup pobegnejo iz imenskega prostora pripenjanja.
  • Ranljivosti runc -- CVE-2019-5736 je omogocil 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 kasnejsih plasteh. docker history --no-trunc razkrije vgrajene poverilnice.
  • Vecstopenjske gradnje -- Kopirajte le koncne 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 kriticnih CVE-jih.

Tezave specificne za Kubernetes

  • Zetoni storitvenih racunov -- Privzeto pripeti na /var/run/secrets/kubernetes.io/serviceaccount/token. Povišana dovoljenja RBAC omogocajo interakcijo z API za izpis skrivnosti ali ustvarjanje podov.
  • Neavtentificiran etcd -- Hrani celotno stanje gruce vkljucno s skrivnostmi v base64. Vrata 2379 brez avtentikacije izpostavljajo vsako skrivnost.
  • API Kubelet (10250) -- Anonymous-auth omogoca izvajanje ukazov v kateremkoli podu na vozliscu.
  • Obvod Pod Security Admission -- Napacne konfiguracije oznak imenskih prostorov ali izjem omogocijo privilegirane pode v omejenih imenskih prostorih.
  • Napacne konfiguracije RBAC -- Preohlapne vezave ClusterRoleBinding in dovoljenja z nadomestnimi znaki omogocajo eskalacijo privilegijev po celotni gruci.
  • Skrivnosti kot spremenljivke okolja -- Vidne v /proc/[pid]/environ. Namesto tega pripnite kot datoteke z omejenimi dovoljenji.

Dobavna veriga in omrezje

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

Orodja in utrjevanje

  • deepce -- Presevanje vsebnika, eskalacija privilegijev in zaznava pobega iz notranjosti.
  • CDK -- Orodje za penetracijsko testiranje vsebnikov za zbiranje informacij in izkoriscanje.
  • Trivy -- Pregledovanje slik in gruc za CVE-je, napacne konfiguracije in skrivnosti.
  • Falco -- Izvajalno spremljanje za zaznavo anomalnega vedenja (generiranje lupin, dostop do obcutljivih datotek).
  • kube-hunter / peirates -- Penetracijsko testiranje Kubernetes za eskalacijo privilegijev in bocno premikanje.

Utrjevanje: zagon vsebnikov brez korenskih pravic, uveljavljanje datotecnih sistemov samo za branje, uporaba strogih varnostnih kontekstov (runAsNonRoot, drop ALL capabilities), omogocanje Pod Security Admission v nacinu uveljavljanja in redno pregledovanje slik ter konfiguracij gruc.

Vid Grosek

Vid Grosek

Etični heker & Penetracijski tester

Pomagam slovenskim podjetjem odkriti varnostne ranljivosti, preden jih odkrijejo napadalci. Vec kot 5 let izkusenj s penetracijskim testiranjem.

Vse objave

Komentarji

Ni se komentarjev. Bodite prvi!

Dodaj komentar

Vam je bil clanek vsec?

Prijavite se na newsletter za mesecne varnostne vpoglede.

Prijavite se