GCP - Containers & GKE Enum

Wesprzyj HackTricks

Kontenery

W kontenerach GCP znajdziesz większość usług opartych na kontenerach oferowanych przez GCP, tutaj możesz zobaczyć, jak wyliczyć najczęstsze z nich:

gcloud container images list
gcloud container images list --repository us.gcr.io/<project-name> #Search in other subdomains repositories
gcloud container images describe <name>
gcloud container subnets list-usable
gcloud container clusters list
gcloud container clusters describe <name>
gcloud container clusters get-credentials [NAME]

# Run a container locally
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh

# Login & Download
sudo docker login -u oauth2accesstoken -p $(gcloud auth print-access-token) https://HOSTNAME
## where HOSTNAME is gcr.io, us.gcr.io, eu.gcr.io, or asia.gcr.io.
sudo docker pull HOSTNAME/<project-name>/<image-name>

Eskalacja uprawnień

Na następnej stronie możesz sprawdzić, jak nadużyć uprawnień kontenera w celu eskalacji uprawnień:

GCP - Container Privesc

Grupy węzłów

Są to grupy maszyn (węzłów), które tworzą klastry Kubernetes.

# Pool of machines used by the cluster
gcloud container node-pools list --zone <zone> --cluster <cluster>
gcloud container node-pools describe --cluster <cluster> --zone <zone> <node-pool>

Kubernetes

Aby uzyskać informacje na temat tego, czym jest Kubernetes, sprawdź tę stronę:

Kubernetes Pentesting

Po pierwsze, możesz sprawdzić, czy istnieją jakiekolwiek klastry Kubernetes w Twoim projekcie.

gcloud container clusters list

Jeśli masz klaster, możesz skonfigurować plik ~/.kube/config automatycznie za pomocą gcloud. Ten plik służy do uwierzytelniania Ciebie podczas korzystania z kubectl, natywnego interfejsu wiersza poleceń do interakcji z klastrami K8s. Wypróbuj to polecenie.

gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]

Następnie spójrz na plik ~/.kube/config, aby zobaczyć wygenerowane poświadczenia. Ten plik będzie używany do automatycznego odświeżania tokenów dostępu na podstawie tego samego tożsamości, którą używa Twoja aktywna sesja gcloud. Oczywiście wymaga to odpowiednich uprawnień.

Gdy to jest skonfigurowane, możesz spróbować następującej komendy, aby uzyskać konfigurację klastra.

kubectl cluster-info

Możesz przeczytać więcej o gcloud dla kontenerów tutaj.

To proste narzędzie do wyliczania klastrów Kubernetes w GCP: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

Eskalacja uprawnień TLS Boostrap

Początkowo ta technika eskalacji uprawnień pozwalała na privesc wewnątrz klastra GKE, co efektywnie pozwalało atakującemu na pełne skompromitowanie go.

Dzieje się tak, ponieważ GKE udostępnia poświadczenia TLS Bootstrap w metadanych, które są dostępne dla każdego, kto skompromituje pojedynczy pod.

Technika użyta jest wyjaśniona w następujących postach:

A to narzędzie zostało stworzone w celu zautomatyzowania procesu: https://github.com/4ARMED/kubeletmein

Jednakże, technika nadużywała faktu, że z poświadczeniami metadanych było możliwe wygenerowanie CSR (Certificate Signing Request) dla nowego węzła, który był automatycznie zatwierdzany. W moim teście sprawdziłem, że te żądania nie są już automatycznie zatwierdzane, więc nie jestem pewien, czy ta technika jest nadal ważna.

Sekrety w interfejsie API Kubelet

W tym poście odkryto adres interfejsu API Kubelet dostępny z wnętrza poda w GKE, który udostępnia szczegóły działających podów:

curl -v -k http://10.124.200.1:10255/pods

Nawet jeśli API nie pozwala na modyfikację zasobów, możliwe jest znalezienie wrażliwych informacji w odpowiedzi. Punktem końcowym /pods został znaleziony za pomocą Kiterunner.

Last updated