Pentesting Kubernetes Services
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kubernetes, bir podu ele geçirdiğinizde İnternete açık veya iç ağda bulabileceğiniz birkaç özel ağ hizmeti kullanır.
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 YAML dosyalarını içeren stringleri aramaktır.
Kubernetes'in hizmetleri kamusal olarak nasıl açabileceğini anlamak sizin için faydalı olabilir:
Exposing Services in KubernetesAşağıdaki portlar bir Kubernetes kümesinde açık olabilir:
443/TCP
kube-apiserver
Kubernetes API port
2379/TCP
etcd
6666/TCP
etcd
etcd
4194/TCP
cAdvisor
Container metrics
6443/TCP
kube-apiserver
Kubernetes API port
8443/TCP
kube-apiserver
Minikube API port
8080/TCP
kube-apiserver
Insecure API port
10250/TCP
kubelet
HTTPS API which allows full mode access
10255/TCP
kubelet
Kimlik doğrulaması yapılmamış salt okunur HTTP portu: podlar, çalışan podlar ve düğüm durumu
10256/TCP
kube-proxy
Kube Proxy sağlık kontrol sunucusu
9099/TCP
calico-felix
Calico için sağlık kontrol sunucusu
6782-4/TCP
weave
Metrics and endpoints
30000-32767/TCP
NodePort
Hizmetlere proxy
44134/TCP
Tiller
Helm servisi dinliyor
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.
Aşağıdaki sayfayı kontrol ederek bu hizmetle konuşarak hassas verileri nasıl elde edeceğinizi ve hassas eylemleri nasıl gerçekleştireceğinizi öğrenin:
Kubernetes EnumerationBu 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.
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:
Bu hizmeti Kubernetes içinde yetki yükseltmek için kötüye kullanabilirsiniz:
Metrikleri toplamak için yararlı bir hizmet.
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.
kube-apiserver API uç noktalarına anonim erişim izin verilmez. Ancak bazı uç noktaları kontrol edebilirsiniz:
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, **etcdctl aracını kullanmanız gerekebilir. Aşağıdaki komut, saklanan tüm anahtarları alacaktır:
The Kubelet belgeleri varsayılan olarak anonim erişime hizmete izin verildiğini açıklar:
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şleminin nasıl çalıştığını daha iyi anlamak için bu sayfayı kontrol edin:
Kubelet Authentication & AuthorizationKubelet hizmetinin API'si belgelenmemiştir, ancak kaynak kodu burada bulunabilir ve maruz kalan uç noktaları bulmak çalıştırmak kadar kolaydır:
Hepsi ilginç görünüyor.
Kubeletler ve onların uç noktaları ile etkileşimde bulunmak için Kubeletctl aracını kullanabilirsiniz.
Bu uç nokta pod'ları ve onların konteynerlerini listeler:
Bu uç nokta, herhangi bir konteynerin içinde kodu çok kolay bir şekilde çalıştırmaya olanak tanır:
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.
Bir kubelet sadece okuma portu açıldığında, yetkisiz tarafların API'den bilgi alması 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 adları, 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 açığın 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 alabilir:
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)