Pentesting Kubernetes Services
Kubernetes maak gebruik van verskeie spesifieke netwerkdienste wat jy dalk blootgestel aan die internet of in 'n interne netwerk kan vind sodra jy een pod gekompromitteer het.
Blootgestelde pods vind met OSINT
Een manier kan wees om te soek na Identity LIKE "k8s.%.com"
in crt.sh om subdomeine wat verband hou met kubernetes te vind. 'n Ander manier kan wees om "k8s.%.com"
in github te soek en te soek na YAML-lêers wat die string bevat.
Hoe Kubernetes Dienste Blootstel
Dit kan nuttig wees vir jou om te verstaan hoe Kubernetes dienste openbaar blootstel om hulle te vind:
Exposing Services in KubernetesBlootgestelde pods vind deur poetskandering
Die volgende poorte mag oop wees in 'n Kubernetes-kluster:
Poort | Proses | Beskrywing |
---|---|---|
443/TCP | kube-apiserver | Kubernetes API-poort |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | Kontainermetriek |
6443/TCP | kube-apiserver | Kubernetes API-poort |
8443/TCP | kube-apiserver | Minikube API-poort |
8080/TCP | kube-apiserver | Onveilige API-poort |
10250/TCP | kubelet | HTTPS API wat volle toegang toelaat |
10255/TCP | kubelet | Ongeagte lees-slegs HTTP-poort: pods, lopende pods en nodestatus |
10256/TCP | kube-proxy | Kube Proxy gesondheidskontroleserver |
9099/TCP | calico-felix | Gesondheidskontroleserver vir Calico |
6782-4/TCP | weave | Metriek en eindpunte |
30000-32767/TCP | NodePort | Proksi na die dienste |
44134/TCP | Tiller | Helm-diens wat luister |
Nmap
Kube-apiserver
Dit is die API Kubernetes-diens waarmee die administrateurs gewoonlik kommunikeer met die hulpmiddel kubectl
.
Gewone poorte: 6443 en 443, maar ook 8443 in minikube en 8080 as onveilig.
Kyk na die volgende bladsy om te leer hoe om sensitiewe data te verkry en sensitiewe aksies uit te voer deur met hierdie diens te kommunikeer:
Kubernetes EnumerationKubelet API
Hierdie diens hardloop op elke node van die groep. Dit is die diens wat die peule binne die node sal beheer. Dit kommunikeer met die kube-apiserver.
As jy hierdie diens blootgestel vind, het jy moontlik 'n onbevoegde RCE gevind.
Kubelet API
Indien die antwoord Onbevoegd
is, vereis dit verifikasie.
As jy nodusse kan lys, kan jy 'n lys van kubelet-eindpunte kry met:
kubelet (Net lees)
etcd API
Tiller
Tiller is 'n komponent van Helm wat gebruik word om Helm charts op 'n Kubernetes cluster te installeer en te bestuur. Tiller hardloop binne die Kubernetes cluster en kommunikeer met die Helm CLI om operasies uit te voer soos die installeer, opgradeer en verwyder van Helm charts. Tiller is 'n potensiële sekuriteitsrisiko en is in nuwer weergawes van Helm verwyder weens sekuriteitskwessies.
Jy kan hierdie diens misbruik om voorregte binne Kubernetes te eskaleer:
cAdvisor
Diens nuttig om metriek in te samel.
NodePort
Wanneer 'n poort blootgestel word in al die nodes via 'n NodePort, word dieselfde poort oopgemaak in al die nodes wat die verkeer na die aangekondigde Service stuur. Standaard sal hierdie poort in die reeks 30000-32767 wees. Dus kan nuwe ongekontroleerde dienste toeganklik wees deur hierdie poorte.
Kwesbare Verkeerde Konfigurasies
Kube-apiserver Anonieme Toegang
Anonieme toegang tot kube-apiserver API-eindpunte is nie toegelaat nie. Maar jy kan sekere eindpunte nagaan:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fwww.cyberark.com%2Fwp-content%2Fuploads%2F2019%2F09%2FKube-Pen-2-fig-5.png&width=768&dpr=4&quality=100&sign=ff25c70&sv=1)
Nagaan vir ETCD Anonieme Toegang
Die ETCD stoor die groep geheime, konfigurasie lêers en meer sensitiewe data. Standaard kan die ETCD nie anoniem benader word nie, maar dit is altyd goed om te kontroleer.
As die ETCD anoniem benader kan word, mag jy nodig hê om die etcdctl werktuig te gebruik. Die volgende bevel sal al die gestoorde sleutels kry:
Kubelet RCE
Die Kubelet-dokumentasie verduidelik dat standaard anonieme toegang tot die diens toegelaat word:
Maak anonieme versoek aan die Kubelet-bediener moontlik. Versoeke wat nie deur 'n ander verifikasiemetode verwerp word nie, word as anonieme versoek behandel. Anonieme versoek het 'n gebruikersnaam van
system:anonymous
, en 'n groepnaam vansystem:unauthenticated
Om beter te verstaan hoe die verifikasie en magtiging van die Kuebelet API werk, kyk na hierdie bladsy:
Kubelet Authentication & AuthorizationDie Kubelet-diens API is nie gedokumenteer nie, maar die bronkode kan hier gevind word en dit is so maklik as om die blootgestelde eindpunte te vind deur eenvoudig te hardloop:
Almal klink interessant.
Jy kan die Kubeletctl gereedskap gebruik om met Kubelets en hul eindpunte te interageer.
/pods
Hierdie eindpunt lys pods en hul houers:
/exec
Hierdie eindpunt maak dit baie maklik om kode binne enige houer uit te voer:
Om hierdie aanval te voorkom, moet die kubelet diens uitgevoer word met --anonymous-auth false
en die diens moet op netwerkvlak geskei word.
Nagaan van Kubelet (Lees-slegs Poort) Inligting Blootstelling
Wanneer 'n kubelet lees-slegs poort blootgestel word, word dit moontlik vir ongemagtigde partye om inligting van die API te onttrek. Die blootstelling van hierdie poort kan lei tot die bekendmaking van verskeie klusterkonfigurasie-elemente. Alhoewel die inligting, insluitend pod name, plekke van interne lêers, en ander konfigurasies, nie krities mag wees nie, stel sy blootstelling steeds 'n sekuriteitsrisiko en moet vermy word.
'n Voorbeeld van hoe hierdie kwesbaarheid uitgebuit kan word, behels 'n afgeleë aanvaller wat toegang verkry tot 'n spesifieke URL. Deur te navigeer na http://<eksterne-IP>:10255/pods
, kan die aanvaller potensieel sensitiewe inligting van die kubelet onttrek:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fwww.cyberark.com%2Fwp-content%2Fuploads%2F2019%2F09%2FKUbe-Pen-2-fig-6.png&width=768&dpr=4&quality=100&sign=66aa23e7&sv=1)
Verwysings
Last updated