GCP - Containers & GKE Enum

Підтримайте HackTricks

Контейнери

У контейнерах GCP ви можете знайти більшість контейнеризованих сервісів, які пропонує GCP, тут ви можете побачити, як перерахувати найбільш поширені з них:

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

На наступній сторінці ви можете перевірити, як зловживати дозволами контейнера для ескалації привілеїв:

GCP - Container Privesc

Node Pools

Це пул машин (вузлів), які формують кластери 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

Для отримання інформації про те, що таке Kubernetes, перегляньте цю сторінку:

Kubernetes Pentesting

Спочатку ви можете перевірити, чи існують які-небудь кластери Kubernetes у вашому проекті.

gcloud container clusters list

Якщо у вас є кластер, ви можете налаштувати gcloud для автоматичної конфігурації вашого ~/.kube/config файлу. Цей файл використовується для аутентифікації, коли ви використовуєте kubectl, рідний CLI для взаємодії з K8s кластерами. Спробуйте цю команду.

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

Тоді перегляньте файл ~/.kube/config, щоб побачити згенеровані облікові дані. Цей файл буде використовуватися для автоматичного оновлення токенів доступу на основі тієї ж ідентичності, яку використовує ваша активна сесія gcloud. Це, звичайно, вимагає наявності правильних дозволів.

Коли це буде налаштовано, ви можете спробувати наступну команду, щоб отримати конфігурацію кластера.

kubectl cluster-info

Ви можете дізнатися більше про gcloud для контейнерів тут.

Це простий скрипт для перерахунку kubernetes у GCP: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

Підвищення привілеїв через TLS Bootstrap

Спочатку ця техніка підвищення привілеїв дозволяла привести до підвищення привілеїв всередині кластера GKE, що ефективно дозволяло зловмиснику повністю його скомпрометувати.

Це пов'язано з тим, що GKE надає TLS Bootstrap облікові дані у метаданих, які доступні будь-кому, просто скомпрометувавши под.

Використана техніка пояснюється в наступних постах:

І цей інструмент був створений для автоматизації процесу: https://github.com/4ARMED/kubeletmein

Однак техніка зловживала тим фактом, що з обліковими даними метаданих було можливим згенерувати CSR (Запит на підписання сертифіката) для нового вузла, який був автоматично схвалений. У моєму тесті я перевірив, що ці запити більше не схвалюються автоматично, тому я не впевнений, чи ця техніка все ще дійсна.

Секрети в Kubelet API

У цьому пості було виявлено адресу Kubelet API, доступну зсередини пода в GKE, що надає деталі про запущені поди:

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

Навіть якщо API не дозволяє змінювати ресурси, можливо, що можна знайти чутливу інформацію у відповіді. Точка доступу /pods була знайдена за допомогою Kiterunner.

Support HackTricks

Last updated