GCP - コンテナとGKEの列挙

Reading time: 7 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

コンテナ

GCPのコンテナでは、GCPが提供するほとんどのコンテナベースのサービスを見つけることができます。ここでは、最も一般的なものを列挙する方法を示します:

bash
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>

プライベートエスカレーション

次のページでは、コンテナの権限を悪用して特権を昇格させる方法を確認できます:

GCP - Container Privesc

ノードプール

これらは、Kubernetesクラスターを形成するマシン(ノード)のプールです。

bash
# 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ファイルを自動的に構成できます。このファイルは、K8sクラスターと対話するためのネイティブCLIであるkubectlを使用する際に、あなたを認証するために使用されます。このコマンドを試してください。

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

次に、生成された資格情報を確認するために ~/.kube/config ファイルを見てください。このファイルは、アクティブな gcloud セッションが使用しているのと同じアイデンティティに基づいてアクセストークンを自動的に更新するために使用されます。もちろん、これには正しい権限が必要です。

これが設定されると、クラスターの構成を取得するために次のコマンドを試すことができます。

kubectl cluster-info

gcloudを使用したコンテナについてはこちらで詳しく読むことができます。

これはGCPでKubernetesを列挙するためのシンプルなスクリプトです: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

TLSブートストラップ特権昇格

最初にこの特権昇格技術はGKEクラスター内でのprivescを可能にし、攻撃者が完全にそれを侵害することを許可しました。

これは、GKEがメタデータ内にTLSブートストラップ資格情報を提供しており、ポッドを侵害するだけで誰でもアクセス可能であるためです。

使用される技術は以下の投稿で説明されています:

このプロセスを自動化するために作成されたツールがあります: https://github.com/4ARMED/kubeletmein

しかし、この技術はメタデータ資格情報を使用することで新しいノードのCSR(証明書署名要求)を生成することが可能であり、それが自動的に承認されていたという事実を悪用していました。
私のテストでは、これらの要求がもはや自動的に承認されないことを確認したので、この技術がまだ有効かどうかは不明です。

Kubelet APIの秘密

この投稿では、GKE内のポッドからアクセス可能なKubelet APIアドレスが発見され、実行中のポッドの詳細が提供されていることが明らかになりました:

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

APIがリソースを変更することを許可していなくても、レスポンス内に機密情報を見つけることができる可能性があります。エンドポイント/podsはKiterunnerを使用して見つかりました。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする