Pentesting Kubernetes Services

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Kubernetes, İnternete açık veya bir pod’u ele geçirdiğinizde iç ağda bulabileceğiniz birkaç özel ağ hizmeti kullanır.

Açık pod’ları OSINT ile bulma

Bir yol, kubernetes ile ilgili alt alanları bulmak için crt.sh üzerinde Identity LIKE "k8s.%.com" araması yapmaktır. Diğer bir yol ise github’da "k8s.%.com" araması yaparak bu dizeyi içeren YAML dosyaları aramaktır.

Kubernetes’in Hizmetleri Nasıl Açtığını Anlamak

Kubernetes’in hizmetleri nasıl kamusal olarak açabileceğini anlamak, onları bulmak için faydalı olabilir:

Exposing Services in Kubernetes

Port taraması ile Açık pod’ları Bulma

Aşağıdaki portlar bir Kubernetes kümesinde açık olabilir:

PortProcessAçıklama
443/TCPkube-apiserverKubernetes API port
2379/TCPetcd
6666/TCPetcdetcd
4194/TCPcAdvisorKonteyner metrikleri
6443/TCPkube-apiserverKubernetes API port
8443/TCPkube-apiserverMinikube API port
8080/TCPkube-apiserverGüvensiz API port
10250/TCPkubeletTam mod erişimine izin veren HTTPS API
10255/TCPkubeletKimlik doğrulaması yapılmamış salt okunur HTTP portu: pod’lar, çalışan pod’lar ve düğüm durumu
10256/TCPkube-proxyKube Proxy sağlık kontrol sunucusu
9099/TCPcalico-felixCalico için sağlık kontrol sunucusu
6782-4/TCPweaveMetrikler ve uç noktalar
30000-32767/TCPNodePortHizmetlere proxy
44134/TCPTillerHelm hizmeti dinliyor

Nmap

nmap -n -T4 -p 443,2379,6666,4194,6443,8443,8080,10250,10255,10256,9099,6782-6784,30000-32767,44134 <pod_ipaddress>/16

Kube-apiserver

Bu, yöneticilerin genellikle kubectl aracını kullanarak iletişim kurduğu API Kubernetes servisidir.

Yaygın portlar: 6443 ve 443, ayrıca minikube’da 8443 ve güvensiz olarak 8080.

curl -k https://<IP Address>:(8|6)443/swaggerapi
curl -k https://<IP Address>:(8|6)443/healthz
curl -k https://<IP Address>:(8|6)443/api/v1

Bu hizmetle konuşarak hassas verileri nasıl elde edeceğinizi ve hassas eylemleri nasıl gerçekleştireceğinizi öğrenmek için aşağıdaki sayfayı kontrol edin:

Kubernetes Enumeration

Kubelet API

Bu hizmet kümenin her düğümünde çalışır. Düğüm içindeki pod’ları kontrol eden hizmettir. kube-apiserver ile iletişim kurar.

Bu hizmetin açık olduğunu bulursanız, kimlik doğrulaması yapılmamış RCE bulmuş olabilirsiniz.

Kubelet API

curl -k https://<IP address>:10250/metrics
curl -k https://<IP address>:10250/pods

Eğer yanıt Unauthorized ise, kimlik doğrulama gereklidir.

Eğer düğümleri listeleyebiliyorsanız, kubelet uç noktalarının bir listesini şu şekilde alabilirsiniz:

kubectl get nodes -o custom-columns='IP:.status.addresses[0].address,KUBELET_PORT:.status.daemonEndpoints.kubeletEndpoint.Port' | grep -v KUBELET_PORT | while IFS='' read -r node; do
ip=$(echo $node | awk '{print $1}')
port=$(echo $node | awk '{print $2}')
echo "curl -k --max-time 30 https://$ip:$port/pods"
echo "curl -k --max-time 30 https://$ip:2379/version" #Check  also for etcd
done

kubelet (Sadece okunur)

curl -k https://<IP Address>:10255
http://<external-IP>:10255/pods

etcd API

curl -k https://<IP address>:2379
curl -k https://<IP address>:2379/version
etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only

Tiller

helm --host tiller-deploy.kube-system:44134 version

Bu hizmeti Kubernetes içinde ayrıcalıkları artırmak için kötüye kullanabilirsiniz:

cAdvisor

Metrikleri toplamak için yararlı bir hizmet.

curl -k https://<IP Address>:4194

NodePort

Bir port NodePort aracılığıyla tüm düğümlerde açıldığında, aynı port tüm düğümlerde açılır ve trafiği belirtilen Service’e yönlendirir. Varsayılan olarak bu port 30000-32767 aralığında olacaktır. Bu nedenle, yeni kontrol edilmemiş hizmetler bu portlar üzerinden erişilebilir olabilir.

sudo nmap -sS -p 30000-32767 <IP>

Güvenlik Açıkları

Kube-apiserver Anonim Erişim

kube-apiserver API uç noktalarına anonim erişim izin verilmez. Ancak bazı uç noktaları kontrol edebilirsiniz:

ETCD Anonim Erişimini Kontrol Etme

ETCD, küme gizli anahtarlarını, yapılandırma dosyalarını ve daha fazla hassas veriyi saklar. Varsayılan olarak, ETCD anonim olarak erişilemez, ancak kontrol etmek her zaman iyidir.

Eğer ETCD anonim olarak erişilebiliyorsa, şu aracı kullanmanız gerekebilir: etcdctl. Aşağıdaki komut, saklanan tüm anahtarları alacaktır:

etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only

Kubelet RCE

The Kubelet documentation açıklamaktadır ki varsayılan olarak anonim erişim hizmete izin verilmektedir:

Kubelet sunucusuna anonim istekleri etkinleştirir. Başka bir kimlik doğrulama yöntemi tarafından reddedilmeyen istekler anonim istekler olarak kabul edilir. Anonim isteklerin kullanıcı adı system:anonymous ve grup adı system:unauthenticated’dır.

Kubelet API’sinin kimlik doğrulama ve yetkilendirme işlemlerinin nasıl çalıştığını daha iyi anlamak için bu sayfayı kontrol edin:

Kubelet Authentication & Authorization

Kubelet hizmetinin API’si belgelenmemiştir, ancak kaynak kodu burada bulunabilir ve maruz kalan uç noktaları bulmak çalıştırmak kadar kolaydır:

curl -s https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/server/server.go | grep 'Path("/'

Path("/pods").
Path("/run")
Path("/exec")
Path("/attach")
Path("/portForward")
Path("/containerLogs")
Path("/runningpods/").

Hepsi ilginç görünüyor.

Kubeletler ve onların uç noktalarıyla etkileşimde bulunmak için Kubeletctl aracını kullanabilirsiniz.

/pods

Bu uç nokta pod’ları ve onların konteynerlerini listeler:

kubeletctl pods

/exec

Bu uç nokta, herhangi bir konteyner içinde kodu çok kolay bir şekilde çalıştırmaya olanak tanır:

kubeletctl exec [command]

Note

Bu saldırıyı önlemek için kubelet servisi --anonymous-auth false ile çalıştırılmalı ve servis ağ düzeyinde ayrılmalıdır.

Kubelet (Salt Okuma Portu) Bilgi Sızıntısını Kontrol Etme

Bir kubelet salt okuma portu açıldığında, yetkisiz taraflar tarafından API’den bilgi alınması mümkün hale gelir. Bu portun açılması, çeşitli küme yapılandırma unsurlarının ifşasına yol açabilir. Pod isimleri, iç dosyaların konumları ve diğer yapılandırmalar gibi bilgiler kritik olmasa da, ifşası yine de bir güvenlik riski oluşturur ve kaçınılmalıdır.

Bu zafiyetin nasıl istismar edilebileceğine dair bir örnek, uzaktan bir saldırganın belirli bir URL’ye erişim sağlamasıdır. http://<external-IP>:10255/pods adresine giderek, saldırgan kubelet’ten hassas bilgileri potansiyel olarak alabilir:

https://www.cyberark.com/wp-content/uploads/2019/09/KUbe-Pen-2-fig-6.png

Referanslar

Kubernetes Pentest Methodology Part 2

https://labs.f-secure.com/blog/attacking-kubernetes-through-kubelet

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin