GCP - KMS プライベートエスカレーション
Reading time: 6 minutes
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では、権限は組織、フォルダ、プロジェクトから継承されるだけでなく、キーリングからも継承されることに注意してください。
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
この委任がどのように機能するかの概念的な内訳は次のとおりです:
- サービスアカウントA は、KMS内の特定のキーを使用して復号化する直接的なアクセス権を持っています。
- サービスアカウントB は
useToDecryptViaDelegation
権限を付与されます。これにより、サービスアカウントAの代わりにKMSにデータの復号化を要求することができます。
この権限の使用は、復号化リクエストが行われる際にKMSサービスが権限をチェックする方法に暗黙的に含まれています。
Google Cloud KMS API(Pythonや他の言語で)を使用して標準の復号化リクエストを行うと、サービスはリクエストを行っているサービスアカウントが必要な権限を持っているかどうかをチェックします。リクエストが**useToDecryptViaDelegation
** 権限を持つサービスアカウントによって行われた場合、KMSはこのアカウントがキーを所有するエンティティの代わりに復号化を要求することを許可されているかどうかを確認します。
委任の設定
- カスタムロールの定義: カスタムロールを定義するYAMLファイル(例:
custom_role.yaml
)を作成します。このファイルにはcloudkms.cryptoKeyVersions.useToDecryptViaDelegation
権限が含まれている必要があります。以下は、このファイルの例です:
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
- 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 に置き換えます。
- カスタムロールをサービスアカウントに付与する: この権限を使用するサービスアカウントにカスタムロールを割り当てます。次のコマンドを使用します:
# 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とサービスアカウントのメールに置き換えてください。
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を提出してハッキングトリックを共有してください。