Pentesting Kubernetes Services
Kubernetes koristi nekoliko specifičnih mrežnih servisa koje možda pronađete izložene Internetu ili u internoj mreži nakon što ste kompromitovali jedan pod.
Pronalaženje izloženih podova pomoću OSINT-a
Jedan način može biti pretraga Identity LIKE "k8s.%.com"
na crt.sh kako biste pronašli poddomene povezane sa Kubernetes-om. Drugi način može biti pretraga "k8s.%.com"
na github-u i traženje YAML fajlova koji sadrže taj string.
Kako Kubernetes Izlaže Usluge
Može biti korisno da razumete kako Kubernetes može javno izložiti usluge kako biste ih pronašli:
pageExposing Services in KubernetesPronalaženje Izloženih podova putem skeniranja portova
Sledeći portovi mogu biti otvoreni u Kubernetes klasteru:
Port | Proces | Opis |
---|---|---|
443/TCP | kube-apiserver | Port Kubernetes API-a |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | Metrike kontejnera |
6443/TCP | kube-apiserver | Port Kubernetes API-a |
8443/TCP | kube-apiserver | Minikube API port |
8080/TCP | kube-apiserver | Nesiguran API port |
10250/TCP | kubelet | HTTPS API koji omogućava pun pristup |
10255/TCP | kubelet | Neautentifikovani samo-čitajući HTTP port: podovi, pokrenuti podovi i stanje čvora |
10256/TCP | kube-proxy | Kube Proxy server za proveru zdravlja |
9099/TCP | calico-felix | Server za proveru zdravlja za Calico |
6782-4/TCP | weave | Metrike i endpointi |
30000-32767/TCP | NodePort | Proxy ka uslugama |
44134/TCP | Tiller | Helm servis koji osluškuje |
Nmap
Kube-apiserver
Ovo je API Kubernetes servis sa kojim administratori obično komuniciraju koristeći alat kubectl
.
Uobičajeni portovi: 6443 i 443, ali i 8443 u minikube-u i 8080 kao nesiguran.
Proverite sledeću stranicu da biste saznali kako da dobijete osetljive podatke i izvršite osetljive radnje komunicirajući sa ovom uslugom:
pageKubernetes EnumerationKubelet API
Ova usluga radi na svakom čvoru klastera. To je usluga koja će kontrolisati podove unutar čvora. Komunicira sa kube-apiserverom.
Ako pronađete ovu uslugu izloženu, možda ste pronašli neovlašćeni RCE.
Kubelet API
Ako je odgovor Unauthorized
, onda je potrebna autentikacija.
Ako možete da nabrojite čvorove, možete dobiti listu kubelet endpointa sa:
kubelet (Samo čitanje)
etcd API
Tiler
Možete zloupotrebiti ovu uslugu da biste eskalirali privilegije unutar Kubernetes-a:
cAdvisor
Usluga korisna za prikupljanje metrika.
NodePort
Kada je port izložen na svim čvorovima putem NodePort, isti port je otvoren na svim čvorovima koji prosleđuju saobraćaj u deklarisani Service. Podrazumevano, ovaj port će biti u opsegu 30000-32767. Dakle, novi neprovereni servisi mogu biti dostupni preko tih portova.
Ranjive nesigurnosti
Pristup anonimnom pristupu kube-apiserver API endpointima
Anoniman pristup kube-apiserver API endpointima nije dozvoljen. Međutim, možete proveriti neke endpointe:
Provera anonimnog pristupa ETCD-u
ETCD čuva tajne klastera, konfiguracione datoteke i više osetljivih podataka. Podrazumevano, ETCD ne može biti pristupljen anonimno, ali uvek je dobro proveriti.
Ako se ETCD može pristupiti anonimno, možda će vam biti potrebno koristiti etcdctl alat. Sledeća komanda će dohvatiti sve sačuvane ključeve:
Kubelet RCE
Dokumentacija za Kubelet objašnjava da je podrazumevano dozvoljen anoniman pristup servisu:
Omogućava anonimne zahteve ka Kubelet serveru. Zahtevi koji nisu odbijeni drugim metodama autentifikacije tretiraju se kao anonimni zahtevi. Anonimni zahtevi imaju korisničko ime
system:anonymous
, i ime grupesystem:unauthenticated
.
Za bolje razumevanje kako autentifikacija i autorizacija Kubelet API-ja funkcionišu, pogledajte ovu stranicu:
pageKubelet Authentication & AuthorizationAPI servisa Kubelet nije dokumentovan, ali izvorni kod može se pronaći ovde, a pronalaženje izloženih tačaka je jednostavno kao pokretanje:
Možete koristiti alat Kubeletctl da biste komunicirali sa Kubeletima i njihovim endpointima.
/pods
Ovaj endpoint prikazuje podove i njihove kontejnere:
/exec
Ovaj endpoint omogućava izvršavanje koda unutar bilo kog kontejnera vrlo jednostavno:
Da biste izbegli ovaj napad, servis kubelet treba pokrenuti sa --anonymous-auth false
i servis treba izolovati na nivou mreže.
Provera Izloženih Informacija o Kubeletu (Samo za čitanje)
Kada je kubelet read-only port izložen, postaje moguće da neovlašćene strane povuku informacije sa API-ja. Izloženost ovog porta može dovesti do otkrivanja različitih elemenata konfiguracije klastera. Iako informacije, uključujući imena podova, lokacije internih fajlova i druge konfiguracije, možda nisu kritične, njihova izloženost ipak predstavlja sigurnosni rizik i treba je izbeći.
Primer kako ova ranjivost može biti iskorišćena uključuje udaljenog napadača koji pristupa određenom URL-u. Navigiranjem na http://<external-IP>:10255/pods
, napadač potencijalno može povući osetljive informacije sa kubeleta:
Reference
Last updated