GCP - KMS Privesc

htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

KMS

KMSについての情報:

pageGCP - KMS Enum

KMSでは、権限が組織、フォルダ、プロジェクトから継承されるだけでなく、Keyringsからも継承されることに注意してください。

cloudkms.cryptoKeyVersions.useToDecrypt

この権限を使用して、この権限を持っているキーで情報を復号化することができます。

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

この権限を持つ攻撃者は、情報を復号するために自分自身に権限を与えることができます

gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--location [LOCATION] \
--keyring [KEYRING_NAME] \
--member [MEMBER] \
--role roles/cloudkms.cryptoKeyDecrypter

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

この委任の仕組みについての概念的な説明は以下の通りです:

  1. Service Account A はKMSの特定のキーを使って直接データを復号するアクセス権を持っています。

  2. Service Account B には useToDecryptViaDelegation 権限が付与されます。これにより、Service Account Aを代表してKMSにデータの復号を要求することができます。

この権限の使用は、復号要求が行われたときにKMSサービスが権限をチェックする方法に暗黙的に含まれています

Google Cloud KMS APIを使用して(Pythonや他の言語で)標準的な復号要求を行うと、サービスは要求するサービスアカウントが必要な権限を持っているかどうかをチェックします。もし**useToDecryptViaDelegation** 権限を持つサービスアカウントによって要求が行われた場合、KMSはこのアカウントがキーの所有者を代表して復号を要求することを許可されているかどうかを検証します

委任の設定

  1. カスタムロールの定義: カスタムロールを定義するYAMLファイル(例:custom_role.yaml)を作成します。このファイルには cloudkms.cryptoKeyVersions.useToDecryptViaDelegation 権限を含める必要があります。以下はこのファイルがどのように見えるかの例です:

title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. gcloud CLIを使用してカスタムロールを作成する: 以下のコマンドを使用して、Google Cloudプロジェクトにカスタムロールを作成します:

gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml

[YOUR_PROJECT_ID]をあなたのGoogle CloudプロジェクトIDに置き換えてください。

  1. サービスアカウントにカスタムロールを付与する: この権限を使用するサービスアカウントにカスタムロールを割り当てます。次のコマンドを使用します:

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

<summary><strong>htARTE (HackTricks AWS Red Team Expert)で</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong>!</strong></summary>

HackTricksをサポートする他の方法:

* **HackTricksにあなたの会社を広告したい場合**、または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加する、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングテクニックを共有する。

</details>

最終更新