AWS - IAM Post Exploitation

Reading time: 8 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

IAM

Kwa taarifa zaidi kuhusu ufikiaji wa IAM:

AWS - IAM, Identity Center & SSO Enum

Tatizo la Confused Deputy

Ikiwa utamruhusu akaunti ya nje (A) kufikia role katika akaunti yako, huenda ukawa na hakuna uwazi juu ya ni nani hasa anayeweza kufikia akaunti hiyo ya nje. Hii ni tatizo, kwa sababu ikiwa akaunti nyingine ya nje (B) inaweza kufikia akaunti ya nje (A) inawezekana kwamba B pia atakuwa na uwezo wa kufikia akaunti yako.

Kwa hiyo, unapomruhusu akaunti ya nje kufikia role katika akaunti yako inawezekana kubainisha ExternalId. Hii ni msururu wa "siri" ambao akaunti ya nje (A) inahitaji kuitaja ili assume the role in your organization. Kwa kuwa akaunti ya nje B hatajui msururu huu, hata kama ana upatikanaji juu ya A hatataweza kufikia role yako.

Hata hivyo, kumbuka kwamba siri hii ya ExternalId sio siri, yeyote anayeweza read the IAM assume role policy will be able to see it. Lakini mradi tu akaunti ya nje A inajua, na akaunti ya nje B haijui, inazuia B kumtumia vibaya A ili kufikia role yako.

Mfano:

json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}

warning

Ili attacker aweza kuchukua faida ya confused deputy, atahitaji kwa njia fulani kugundua ikiwa principals za akaunti ya sasa zinaweza kujifanya roles katika akaunti nyingine.

Imani zisizotarajiwa

Wildcard kama principal

json
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" }
}

Sera hii inaruhusu AWS zote kuchukua jukumu.

Huduma kama principal

json
{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}

Sera hii inaruhusu akaunti yoyote kusanidi apigateway yao kuitwa Lambda hii.

S3 kama mhusika

json
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}

Ikiwa S3 bucket imetolewa kama principal, kwa sababu S3 buckets hazina Account ID, ikiwa wewe ulifuta bucket yako na attacker aliitengeneza katika account yao wenyewe, basi wanaweza kuitumia vibaya.

Haiungwa mkono

json
{
"Effect": "Allow",
"Principal": { "Service": "cloudtrail.amazonaws.com" },
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}

Njia ya kawaida kuepuka matatizo ya Confused Deputy ni kutumia sharti na AWS:SourceArn kuthibitisha ARN ya asili. Hata hivyo, huduma zingine huenda haziiungi mkono hili (kama CloudTrail kulingana na vyanzo vingine).

Ufutaji wa Kredenshali

Kwa kutumia mojawapo ya ruhusa zifuatazo — iam:DeleteAccessKey, iam:DeleteLoginProfile, iam:DeleteSSHPublicKey, iam:DeleteServiceSpecificCredential, iam:DeleteInstanceProfile, iam:DeleteServerCertificate, iam:DeleteCloudFrontPublicKey, iam:RemoveRoleFromInstanceProfile — mtendaji anaweza kuondoa vifunguo vya ufikiaji, wasifu za kuingia, SSH keys, kredenshali maalum za huduma, wasifu za instance, vyeti au CloudFront public keys, au kutenganisha majukumu kutoka kwa wasifu za instance. Vitendo hivi vinaweza kubana mara moja watumiaji halali na programu na kusababisha denial-of-service au kupoteza ufikiaji kwa mifumo inayotegemea kredenshali hizo, hivyo idhini hizi za IAM zinapaswa kudhibitiwa kwa ukali na kufuatiliwa.

bash
# Remove Access Key of a user
aws iam delete-access-key \
--user-name <Username> \
--access-key-id AKIAIOSFODNN7EXAMPLE

## Remove ssh key of a user
aws iam delete-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE

Kufutwa kwa Vitambulisho

Kwa ruhusa kama iam:DeleteUser, iam:DeleteGroup, iam:DeleteRole, au iam:RemoveUserFromGroup, mhusika anaweza kufuta watumiaji, nafasi (roles), au vikundi—au kubadilisha uanachama wa kikundi—kuondoa vitambulisho na alama zinazohusiana. Hii inaweza mara moja kuvunja upatikanaji kwa watu na huduma zinazotegemea vitambulisho hivyo, ikasababisha denial-of-service au kupoteza upatikanaji, hivyo vitendo hivi vya IAM vinapaswa kuzuiwa kwa ukali na kusimamiwa.

bash
# Delete a user
aws iam delete-user \
--user-name <Username>

# Delete a group
aws iam delete-group \
--group-name <Username>

# Delete a role
aws iam delete-role \
--role-name <Role>

Kwa ruhusa zozote zifuatazo — iam:DeleteGroupPolicy, iam:DeleteRolePolicy, iam:DeleteUserPolicy, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRolePermissionsBoundary, iam:DeleteUserPermissionsBoundary, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy — mtendaji anaweza kufuta au kuondoa managed/inline policies, kuondoa matoleo ya sera au vizuizi vya ruhusa, na kuondoa uhusiano wa sera kutoka kwa watumiaji, vikundi, au nyadhifa. Hii inaangamiza idhini na inaweza kubadilisha mfumo wa ruhusa, kusababisha kupoteza ufikiaji mara moja au kukataliwa kwa huduma kwa wadau waliotegemea sera hizo, hivyo vitendo hivi vya IAM vinapaswa kuwekwa vikwazo vikali na kufuatiliwa.

bash
# Delete a group policy
aws iam delete-group-policy \
--group-name <GroupName> \
--policy-name <PolicyName>

# Delete a role policy
aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>

Ufutaji wa Utambulisho wa Ushirikiano

Kwa kutumia iam:DeleteOpenIDConnectProvider, iam:DeleteSAMLProvider, na iam:RemoveClientIDFromOpenIDConnectProvider, mtendaji anaweza kufuta watoa utambulisho wa OIDC/SAML au kuondoa client IDs. Hii inavunja uthibitishaji ulioshirikishwa, ikizuia uthibitishaji wa tokeni na kukatisha mara moja upatikanaji kwa watumiaji na huduma zinazotegemea SSO hadi IdP au usanidi utakaporejeshwa.

bash
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com

# Delete SAML provider
aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS

Uwezeshaji wa MFA Bila Ruhusa

Kwa kutumia iam:EnableMFADevice, mwovu anaweza kusajili kifaa cha MFA kwenye utambulisho wa mtumiaji, akizuia mtumiaji halali kuingia. Mara tu MFA isiyoidhinishwa inapowezeshwa, mtumiaji anaweza kufungiwa hadi kifaa hicho kiondolewe au kuwekwa upya (kumbuka: ikiwa vifaa vingi vya MFA vimesajiliwa, kuingia kunahitaji kimoja tu, hivyo shambulio hili halitaathiri kuzuia ufikiaji).

bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012

Kupotosha Metadata ya Vyeti na Funguo

Kwa kutumia iam:UpdateSSHPublicKey, iam:UpdateCloudFrontPublicKey, iam:UpdateSigningCertificate, iam:UpdateServerCertificate, mtendaji anaweza kubadilisha hali au metadata ya funguo za umma na vyeti. Kwa kuweka funguo/vyeti kuwa zisizo hai au kwa kubadilisha references, wanaweza kuvunja uthibitishaji wa SSH, kuharibu uthibitisho za X.509/TLS, na kusababisha huduma zinazotegemea credentials kuathirika mara moja, na hivyo kusababisha kupoteza ufikiaji au upatikanaji.

bash
aws iam update-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE \
--status Inactive

aws iam update-server-certificate \
--server-certificate-name <Certificate_Name> \
--new-path /prod/

iam:Delete*

Wildcard ya IAM iam:Delete* inatoa uwezo wa kuondoa aina mbalimbali za rasilimali za IAM — users, roles, groups, policies, keys, certificates, MFA devices, policy versions, etc. — na kwa hivyo ina blast radius kubwa sana: actor aliyepewa iam:Delete* anaweza kuharibu milele identities, credentials, policies na artifacts zinazohusiana, kuondoa audit/evidence, na kusababisha outages za huduma au za kiutendaji. Baadhi ya mifano ni

bash
# Delete a user
aws iam delete-user --user-name <Username>

# Delete a role
aws iam delete-role --role-name <RoleName>

# Delete a managed policy
aws iam delete-policy --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/<PolicyName>

iam:EnableMFADevice

Mhusika aliyepewa kitendo cha iam:EnableMFADevice anaweza kusajili kifaa cha MFA kwenye kitambulisho ndani ya akaunti, mradi mtumiaji hakuwa tayari amewezesha MFA. Hii inaweza kutumika kuingilia upatikanaji wa mtumiaji: mara mshambuliaji anaposajili kifaa cha MFA, mtumiaji halali anaweza kuzuiwa kuingia kwa sababu hawana udhibiti wa kifaa cha MFA kilichoandikishwa na mshambuliaji.

Shambulio hili la kuzuia upatikanaji linafanya kazi tu ikiwa mtumiaji hakuwa na kifaa cha MFA kilichosajiliwa; ikiwa mshambuliaji atasajili kifaa cha MFA kwa mtumiaji huyo, mtumiaji halali atafungiwa kutoka kwa taratibu zote zinazotegemea MFA hiyo mpya. Ikiwa mtumiaji tayari ana kifaa kimoja au zaidi cha MFA wanachodhibiti, kuongeza kifaa cha MFA kinachodhibitiwa na mshambuliaji hakutazuia mtumiaji halali — wanaweza kuendelea kuthibitisha utambulisho kwa kutumia kifaa chochote cha MFA walichonacho.

Ili kuwezesha (kusajili) kifaa cha MFA kwa mtumiaji, mshambuliaji anaweza kuendesha:

bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012

Marejeo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks