GCP - KMS Privesc

Support HackTricks

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

यहाँ इस प्रतिनिधित्व के काम करने का एक वैचारिक विश्लेषण है:

  1. Service Account A को KMS में एक विशिष्ट कुंजी का उपयोग करके डिक्रिप्ट करने का सीधा अधिकार है।

  2. Service Account B को useToDecryptViaDelegation अनुमति दी गई है। यह इसे Service Account A की ओर से डेटा डिक्रिप्ट करने के लिए KMS से अनुरोध करने की अनुमति देता है।

इस अनुमति का उपयोग उस तरीके में निहित है जिसमें KMS सेवा अनुमतियों की जांच करती है जब एक डिक्रिप्शन अनुरोध किया जाता है।

जब आप Google Cloud KMS API का उपयोग करके एक मानक डिक्रिप्शन अनुरोध करते हैं (Python या किसी अन्य भाषा में), तो सेवा जांचती है कि क्या अनुरोध करने वाले सेवा खाते के पास आवश्यक अनुमतियाँ हैं। यदि अनुरोध एक सेवा खाते द्वारा किया जाता है जिसके पास useToDecryptViaDelegation अनुमति है, तो KMS यह सत्यापित करता है कि क्या यह खाता उस इकाई की ओर से डिक्रिप्शन का अनुरोध करने के लिए अधिकृत है जो कुंजी का मालिक है

Setting Up for Delegation

  1. Define the Custom Role: एक 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

अपने Google Cloud प्रोजेक्ट ID के साथ [YOUR_PROJECT_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] को अपने प्रोजेक्ट आईडी और सेवा खाते के ईमेल से क्रमशः बदलें।

HackTricks का समर्थन करें

Last updated