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
--privilegedali 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 --
--privilegedonemogoč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 auxpokaže zelo malo procesov v primerjavi s stotinami na gostitelju.
Tehnike pobega
- Vtičnica Docker --
docker run -v /:/hostfs -it alpine chroot /hostfsza korensko lupino na gostitelju. Uporabite curl proti API Docker, če CLI ni na voljo. - Privilegirani način --
mount /dev/sda1 /mntza 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-truncrazkrije 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.
Zanima vas več o tej temi? Preberite mojo strokovno stran o Web Application Security →
Komentarji
Ni še komentarjev. Bodite prvi!
Dodaj komentar