Pentesting Kubernetes Services

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Kubernetes hutumia huduma za mtandao maalum ambazo unaweza kuzipata zikiwa wazi kwa Ulimwengu wa Mtandao au kwenye mtandao wa ndani mara baada ya kudukua pod moja.

Kupata pods zilizofichuliwa kwa OSINT

Njia moja inaweza kuwa kutafuta Identity LIKE "k8s.%.com" katika crt.sh ili kupata subdomains zinazohusiana na kubernetes. Njia nyingine inaweza kuwa kutafuta "k8s.%.com" kwenye github na kutafuta faili za YAML zinazoleta neno hilo.

Jinsi Kubernetes Inavyofichua Huduma

Inaweza kuwa muhimu kwako kuelewa jinsi Kubernetes inavyoweza kufichua huduma kwa umma ili kuzipata:

pageExposing Services in Kubernetes

Kupata Pods Zilizofichuliwa kupitia uchunguzi wa bandari

Bandari zifuatazo zinaweza kuwa wazi katika kikundi cha Kubernetes:

BandariMchakatoMaelezo

443/TCP

kube-apiserver

Bandari ya API ya Kubernetes

2379/TCP

etcd

6666/TCP

etcd

etcd

4194/TCP

cAdvisor

Vipimo vya kontena

6443/TCP

kube-apiserver

Bandari ya API ya Kubernetes

8443/TCP

kube-apiserver

Bandari ya API ya Minikube

8080/TCP

kube-apiserver

Bandari isiyo salama ya API

10250/TCP

kubelet

API ya HTTPS inayoruhusu ufikiaji kamili

10255/TCP

kubelet

Bandari ya HTTP isiyothibitishwa ya kusoma tu: pods, pods zinazoendesha na hali ya node

10256/TCP

kube-proxy

Seva ya uchunguzi wa afya ya Kube Proxy

9099/TCP

calico-felix

Seva ya uchunguzi wa afya kwa Calico

6782-4/TCP

weave

Vipimo na vituo vya mwisho

30000-32767/TCP

NodePort

Proksi kwa huduma

44134/TCP

Tiller

Huduma ya Helm inayosikiliza

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

Hii ni huduma ya API ya Kubernetes ambayo waendeshaji wanazungumza nayo kawaida kwa kutumia zana ya kubectl.

Bandari za kawaida: 6443 na 443, lakini pia 8443 katika minikube na 8080 kama isiyo salama.

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

Angalia ukurasa ufuatao kujifunza jinsi ya kupata data nyeti na kutekeleza hatua nyeti kuzungumza na huduma hii:

pageKubernetes Enumeration

Kubelet API

Huduma hii inaendeshwa kwenye kila node ya kikundi. Ni huduma itakayosaidia kudhibiti makasha ndani ya node. Inazungumza na kube-apiserver.

Ukipata huduma hii imefunuliwa unaweza kuwa umepata RCE isiyo na uthibitisho.

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

Ikiwa jibu ni Unauthorized basi inahitaji uwakilishi.

Ikiwa unaweza kuorodhesha nodes unaweza kupata orodha ya kubelets endpoints kwa:

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 (Soma tu)

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

Tiller

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

Unaweza kutumia huduma hii kwa kujipandisha viwango vya mamlaka ndani ya Kubernetes:

cAdvisor

Huduma inayofaa kwa kukusanya takwimu.

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

NodePort

Wakati bandari inafunuliwa kwenye nodes zote kupitia NodePort, bandari hiyo hiyo inafunguliwa kwenye nodes zote ikipeleka trafiki kwenye Service iliyotajwa. Kwa chaguo-msingi, bandari hii itakuwa katika mbalimbali ya 30000-32767. Kwa hivyo huduma mpya ambazo hazijachunguzwa zinaweza kupatikana kupitia bandari hizo.

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

Mipangilio Hatarishi

Kufikia Kube-apiserver Bila Kujulikana

Kufikia kwa endpoints za API za kube-apiserver bila kujulikana haikubaliki. Lakini unaweza kuchunguza baadhi ya endpoints:

Kuchunguza Kufikia ETCD Bila Kujulikana

ETCD huhifadhi siri za kikundi, faili za mipangilio na data nyeti zaidi. Kwa chaguo-msingi, ETCD haiwezi kufikiwa bila kujulikana, lakini ni vizuri kuchunguza.

Ikiwa ETCD inaweza kufikiwa bila kujulikana, unaweza kutumia zana ya etcdctl. Amri ifuatayo itapata funguo zote zilizohifadhiwa:

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

Kubelet RCE

[**Hati

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/").

Unaweza kutumia zana ya Kubeletctl kuingiliana na Kubelets na vituo vyao.

/pods

Hii ni mwisho wa kuorodhesha pods na vyombo vyao:

kubeletctl pods

/exec

Endpoint hii inaruhusu kutekeleza nambari ndani ya kontena yoyote kwa urahisi sana:

kubeletctl exec [command]

Ili kuepuka shambulio hili huduma ya kubelet inapaswa kuendeshwa na --anonymous-auth false na huduma inapaswa kutengwa kwenye kiwango cha mtandao.

Kuangalia Ufunuo wa Taarifa za Kubelet (Bandari ya Kusoma tu)

Wakati bandari ya kusoma tu ya kubelet inafunuliwa, inawezekana kupata taarifa kutoka kwa API na vyama visivyoruhusiwa. Ufunuo wa bandari hii unaweza kusababisha ufunuo wa vipengele mbalimbali vya usawazishaji wa kikundi. Ingawa taarifa, ikiwa ni pamoja na majina ya podi, maeneo ya faili za ndani, na mipangilio mingine, inaweza isiwe muhimu sana, ufunuo wake bado unaweka hatari ya usalama na inapaswa kuepukwa.

Mfano wa jinsi udhaifu huu unaweza kutumika ni pamoja na mshambuliaji wa mbali kupata URL maalum. Kwa kwenda kwenye http://<external-IP>:10255/pods, mshambuliaji anaweza kupata taarifa nyeti kutoka kwa kubelet:

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated