GCP - KMS Privesc

Reading time: 4 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 का समर्थन करें

KMS

KMS के बारे में जानकारी:

GCP - KMS Enum

ध्यान दें कि KMS में अनुमतियाँ केवल संस्थाओं, फ़ोल्डरों और परियोजनाओं से विरासत में नहीं मिलती हैं बल्कि कीरिंग्स से भी मिलती हैं।

cloudkms.cryptoKeyVersions.useToDecrypt

आप इस अनुमति का उपयोग कुंजी के साथ जानकारी को डिक्रिप्ट करने के लिए कर सकते हैं जिसके ऊपर आपके पास यह अनुमति है।

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

इस अनुमति के साथ एक हमलावर अपने लिए अनुमति दे सकता है कि वह कुंजी का उपयोग करके जानकारी को डिक्रिप्ट करे।

bash
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 अनुमति शामिल होनी चाहिए। यहाँ इस फ़ाइल का एक उदाहरण है:
yaml
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. gcloud CLI का उपयोग करके कस्टम भूमिका बनाएं: अपने Google Cloud प्रोजेक्ट में कस्टम भूमिका बनाने के लिए निम्नलिखित कमांड का उपयोग करें:
bash
gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml

[YOUR_PROJECT_ID] को अपने Google Cloud प्रोजेक्ट ID से बदलें।

  1. एक सेवा खाते को कस्टम भूमिका दें: इस अनुमति का उपयोग करने वाले सेवा खाते को अपनी कस्टम भूमिका सौंपें। निम्नलिखित कमांड का उपयोग करें:
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] को क्रमशः अपने प्रोजेक्ट आईडी और सेवा खाते के ईमेल से बदलें।

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 का समर्थन करें