GCP - KMS Privesc
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
KMS
KMS に関する情報:
KMS では、権限は組織、フォルダ、プロジェクトからだけでなく、Keyrings からも継承されます。
cloudkms.cryptoKeyVersions.useToDecrypt
この権限があると、対象のキーを使って情報を復号することができます。
KMSキーを使ってデータを復号する
```bash gcloud kms decrypt \ --location=[LOCATION] \ --keyring=[KEYRING_NAME] \ --key=[KEY_NAME] \ --version=[KEY_VERSION] \ --ciphertext-file=[ENCRYPTED_FILE_PATH] \ --plaintext-file=[DECRYPTED_FILE_PATH] ```cloudkms.cryptoKeys.setIamPolicy
この権限を持つ攻撃者は、鍵を使用して情報を復号する権限を自分に付与することができます。
自分に KMS decrypter role を付与する
```bash gcloud kms keys add-iam-policy-binding [KEY_NAME] \ --location [LOCATION] \ --keyring [KEYRING_NAME] \ --member [MEMBER] \ --role roles/cloudkms.cryptoKeyDecrypter ```cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
この委任がどのように機能するかの概念的な内訳は次の通りです:
- サービスアカウントA は KMS の特定のキーを使って復号する直接的なアクセス権を持っています。
- サービスアカウントB に
useToDecryptViaDelegation権限が付与されます。これによりサービスアカウントB は、サービスアカウントA に代わって KMS にデータの復号をリクエストできます。
この 権限の使用は、復号リクエスト時に KMS サービスが権限をチェックする方法に暗黙的に組み込まれています。
Google Cloud KMS API(Python や他の言語)を使って標準的な復号リクエストを行うと、サービスは リクエスト元のサービスアカウントが必要な権限を持っているかをチェックします。もしそのリクエストが useToDecryptViaDelegation を持つサービスアカウントによって行われた場合、KMS はこの アカウントがキーの所有者に代わって復号をリクエストすることを許可されているか を検証します。
委任の設定
- カスタムロールの定義:
custom_role.yamlなどの YAML ファイルを作成し、カスタムロールを定義します。このファイルにはcloudkms.cryptoKeyVersions.useToDecryptViaDelegation権限を含める必要があります。以下はこのファイルの例です:
カスタムロール YAML 定義
```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```- gcloud CLI を使用してカスタム ロールを作成する: 次のコマンドを使用して、Google Cloud プロジェクトにカスタム ロールを作成します:
カスタム KMS ロールを作成
```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` [YOUR_PROJECT_ID] をあなたの Google Cloud プロジェクト ID に置き換えてください。- Grant the Custom Role to a Service Account: このカスタムロールをこの権限を使用する service account に割り当てます。次のコマンドを使用してください:
Grant custom role to service account
```bash # Give this permission to the service account to impersonate gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member "serviceAccount:[SERVICE_ACCOUNT_B_EMAIL]" \ --role "projects/[PROJECT_ID]/roles/[CUSTOM_ROLE_ID]"Give this permission over the project to be able to impersonate any SA
gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID]
–member=“serviceAccount:[SERVICE_ACCOUNT_EMAIL]”
–role=“projects/[YOUR_PROJECT_ID]/roles/kms_decryptor_via_delegation”
`[YOUR_PROJECT_ID]` と `[SERVICE_ACCOUNT_EMAIL]` をそれぞれプロジェクトIDとサービスアカウントのメールアドレスに置き換えてください。
</details>
> [!TIP]
> AWSハッキングを学び、実践する:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCPハッキングを学び、実践する:<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azureハッキングを学び、実践する:<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricksをサポートする</summary>
>
> - [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
> - **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
>
> </details>
HackTricks Cloud

