GCP - KMS Privesc

HackTricksのサポート

KMS

KMSに関する情報:

GCP - KMS Enum

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

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. サービスアカウントA は、KMS内の特定のキーを使用して復号化するための直接アクセス権を持っています。

  2. サービスアカウントB には useToDecryptViaDelegation 権限が付与されています。これにより、KMSに対してサービスアカウントAの代わりにデータの復号化をリクエストすることができます。

この 権限の使用は、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とサービスアカウントのメールアドレスに置き換えてください。

HackTricksをサポート

Last updated