GCP - Containers & GKE Enum

Wsparcie dla HackTricks

Kontenery

W kontenerach GCP możesz znaleźć większość usług opartych na kontenerach, które oferuje GCP, tutaj możesz zobaczyć, jak enumerować 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>

Privesc

Na następnej stronie możesz sprawdzić, jak nadużyć uprawnień kontenera, aby eskalować przywileje:

GCP - Container Privesc

Node Pools

To są pule 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

Najpierw możesz sprawdzić, czy w twoim projekcie istnieją jakiekolwiek klastry Kubernetes.

gcloud container clusters list

Jeśli masz klaster, możesz mieć gcloud, który automatycznie skonfiguruje twój plik ~/.kube/config. Plik ten jest używany do uwierzytelniania, gdy używasz kubectl, natywnego interfejsu CLI do interakcji z klastrami K8s. Spróbuj tego polecenia.

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

Następnie sprawdź plik ~/.kube/config, aby zobaczyć wygenerowane poświadczenia. Plik ten będzie używany do automatycznego odświeżania tokenów dostępu na podstawie tej samej tożsamości, której używa Twoja aktywna sesja gcloud. Oczywiście wymaga to odpowiednich uprawnień.

Gdy to będzie skonfigurowane, możesz spróbować następującego polecenia, aby uzyskać konfigurację klastra.

kubectl cluster-info

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

To jest prosty skrypt do enumeracji 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 skutecznie pozwalało atakującemu na pełne skompromitowanie go.

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

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

A to narzędzie zostało stworzone, aby zautomatyzować ten proces: https://github.com/4ARMED/kubeletmein

Jednak technika nadużywała faktu, że z poświadczeniami metadanych możliwe było 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 API Kubelet

W tym poście odkryto adres API Kubelet dostępny z wnętrza poda w GKE, który podaje 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. Punkt końcowy /pods został znaleziony przy użyciu Kiterunner.

Wsparcie dla HackTricks

Last updated