# GCP - コンテナとGKEの列挙

{{#include ../../../banners/hacktricks-training.md}}

## コンテナ

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>
```
### プライベートエスカレーション

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

{{#ref}}
../gcp-privilege-escalation/gcp-container-privesc.md
{{#endref}}

## ノードプール

これらは、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とは何かについての情報は、こちらのページを確認してください：

{{#ref}}
../../kubernetes-security/
{{#endref}}

まず、プロジェクト内にKubernetesクラスターが存在するかどうかを確認できます。
```
gcloud container clusters list
```
クラスターがある場合、`gcloud`を使用して`~/.kube/config`ファイルを自動的に構成できます。このファイルは、K8sクラスターと対話するためのネイティブCLIである[kubectl](https://kubernetes.io/docs/reference/kubectl/overview/)を使用する際に、あなたを認証するために使用されます。このコマンドを試してください。
```
gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]
```
次に、生成された資格情報を確認するために `~/.kube/config` ファイルを見てください。このファイルは、アクティブな `gcloud` セッションが使用しているのと同じアイデンティティに基づいてアクセストークンを自動的に更新するために使用されます。もちろん、これには正しい権限が必要です。

これが設定されると、クラスターの構成を取得するために次のコマンドを試すことができます。
```
kubectl cluster-info
```
`gcloud`を使用したコンテナについては[こちら](https://cloud.google.com/sdk/gcloud/reference/container/)で詳しく読むことができます。

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

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

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

これは、GKEがメタデータ内に[TLSブートストラップ資格情報](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/)を提供しており、**ポッドを侵害するだけで誰でもアクセス可能**であるためです。

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

- [https://www.4armed.com/blog/hacking-kubelet-on-gke/](https://www.4armed.com/blog/hacking-kubelet-on-gke/)
- [https://www.4armed.com/blog/kubeletmein-kubelet-hacking-tool/](https://www.4armed.com/blog/kubeletmein-kubelet-hacking-tool/)
- [https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/)

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

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

### Kubelet APIの秘密 <a href="#the-kubelet-api-git-secrets-redux" id="the-kubelet-api-git-secrets-redux"></a>

[**この投稿**](https://blog.assetnote.io/2022/05/06/cloudflare-pages-pt3/)では、GKE内のポッドからアクセス可能なKubelet APIアドレスが発見され、実行中のポッドの詳細が提供されていることが明らかになりました:
```
curl -v -k http://10.124.200.1:10255/pods
```
APIが**リソースを変更することを許可していなくても**、レスポンス内に**機密情報**を見つけることができる可能性があります。エンドポイント/podsは[**Kiterunner**](https://github.com/assetnote/kiterunner)を使用して見つかりました。

{{#include ../../../banners/hacktricks-training.md}}
