AWS - IAM Post Exploitation

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

IAM

Za više informacija o IAM pristupu:

AWS - IAM, Identity Center & SSO Enum

Confused Deputy Problem

Ako dozvolite eksternom nalogu (A) pristup ulogi u vašem nalogu, verovatno ćete imati 0 vidljivosti o tome ko tačno može da pristupi tom eksternom nalogu. Ovo predstavlja problem, jer ako drugi eksterni nalog (B) može da pristupi eksternom nalogu (A), moguće je da B takođe bude u stanju da pristupi vašem nalogu.

Zato, prilikom dozvole eksternom nalogu da pristupi ulozi u vašem nalogu, moguće je navesti ExternalId. To je “tajni” string koji eksterni nalog (A) mora da navede da bi preuzeo ulogu u vašoj organizaciji. Pošto eksterni nalog B neće znati ovaj string, čak i ako ima pristup A on neće moći da pristupi vašoj ulozi.

Međutim, imajte na umu da ovaj ExternalId “tajna” nije prava tajna — svako ko može da pročita IAM assume role policy moći će je videti. Ali sve dok eksterni nalog A zna taj string, a eksterni nalog B ga ne zna, to sprečava B da zloupotrebi A da bi pristupio vašoj ulozi.

Primer:

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

Warning

Da bi napadač iskoristio confused deputy, mora nekako da utvrdi da li principals iz trenutnog account-a mogu da impersonate roles u drugim account-ima.

Neočekivana poverenja

Wildcard kao principal

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

Ova politika dozvoljava svim entitetima AWS da preuzmu ulogu.

Servis kao principal

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

Ova politika dozvoljava bilo kojem nalogu da konfiguriše svoj apigateway da pozove ovu Lambda.

S3 kao principal

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

Ako je S3 bucket naveden kao principal — pošto S3 buckets nemaju Account ID — ukoliko ste obrisali svoj bucket, a napadač ga je kreirao u svom nalogu, mogao bi to zloupotrebiti.

Nije podržano

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

Uobičajen način da se izbegnu Confused Deputy problemi je upotreba uslova sa AWS:SourceArn da se proveri ARN izvora. Međutim, neke usluge možda to ne podržavaju (poput CloudTrail prema nekim izvorima).

Brisanje kredencijala

Sa bilo kojom od sledećih dozvola — iam:DeleteAccessKey, iam:DeleteLoginProfile, iam:DeleteSSHPublicKey, iam:DeleteServiceSpecificCredential, iam:DeleteInstanceProfile, iam:DeleteServerCertificate, iam:DeleteCloudFrontPublicKey, iam:RemoveRoleFromInstanceProfile — akter može ukloniti pristupne ključeve, prijavne profile, SSH ključeve, servisno-specifične kredencijale, instance profile, sertifikate ili CloudFront javne ključeve, ili odvojiti role od instance profile-ova. Takve akcije mogu odmah onemogućiti legitimne korisnike i aplikacije i prouzrokovati denial-of-service ili gubitak pristupa za sisteme koji zavise od tih kredencijala, zato ove IAM dozvole moraju biti strogo ograničene i nadgledane.

# 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

Brisanje identiteta

Sa dozvolama kao što su iam:DeleteUser, iam:DeleteGroup, iam:DeleteRole, ili iam:RemoveUserFromGroup, subjekat može obrisati korisnike, role ili grupe — ili promeniti članstvo u grupi — uklanjajući identitete i pripadajuće tragove. Ovo može odmah prekinuti pristup osobama i servisima koji zavise od tih identiteta, izazivajući denial-of-service ili gubitak pristupa, zato ove IAM actions moraju biti strogo ograničene i nadgledane.

# 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>

Sa bilo kojom od sledećih dozvola — iam:DeleteGroupPolicy, iam:DeleteRolePolicy, iam:DeleteUserPolicy, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRolePermissionsBoundary, iam:DeleteUserPermissionsBoundary, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy — akter može obrisati ili odvojiti managed/inline policies, ukloniti verzije politika ili permissions boundaries, i ukloniti povezivanje politika sa korisnicima, grupama ili ulogama. Ovo uništava autorizacije i može promeniti model dozvola, prouzrokujući trenutni gubitak pristupa ili denial-of-service za principals koji su zavisili od tih politika, zato ove IAM akcije moraju biti strogo ograničene i nadgledane.

# 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>

Brisanje federisanih identiteta

Korišćenjem iam:DeleteOpenIDConnectProvider, iam:DeleteSAMLProvider i iam:RemoveClientIDFromOpenIDConnectProvider, napadač može obrisati OIDC/SAML provajdere identiteta ili ukloniti client IDs. To prekida federisanu autentifikaciju, onemogućava validaciju tokena i odmah uskraćuje pristup korisnicima i servisima koji se oslanjaju na SSO dok IdP ili konfiguracije ne budu obnovljeni.

# 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

Neovlašćeno aktiviranje MFA

Sa iam:EnableMFADevice, napadač može registrovati MFA uređaj na identitet korisnika, sprečavajući legitimnog korisnika da se prijavi. Kada je omogućen neovlašćeni MFA uređaj, korisnik može biti zaključan sve dok uređaj ne bude uklonjen ili resetovan (napomena: ako je registrovano više MFA uređaja, za prijavu je potreban samo jedan, tako da ovaj napad neće onemogućiti pristup).

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

Manipulacija metapodacima sertifikata/ključeva

Korišćenjem iam:UpdateSSHPublicKey, iam:UpdateCloudFrontPublicKey, iam:UpdateSigningCertificate, iam:UpdateServerCertificate, napadač može da promeni status ili metapodatke javnih ključeva i sertifikata. Označavanjem ključeva/sertifikata kao neaktivnih ili izmenom referenci, mogu da onemoguće SSH autentifikaciju, ponište X.509/TLS validacije i odmah poremete servise koji zavise od tih kredencijala, prouzrokujući gubitak pristupa ili dostupnosti.

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*

IAM wildcard iam:Delete* dodeljuje mogućnost uklanjanja mnogih vrsta IAM resursa—users, roles, groups, policies, keys, certificates, MFA devices, policy versions, etc. —i stoga ima veoma veliki blast radius: akter kome je dodeljen iam:Delete* može trajno uništiti identitete, kredencijale, politike i povezane artefakte, ukloniti revizijske zapise/dokaze i prouzrokovati prekide usluge ili operativne zastoje. Neki primeri su

# 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

Entitet kojem je dodeljena iam:EnableMFADevice akcija može registrovati MFA device na identitetu u nalogu, pod uslovom da user nije već imao omogućen jedan. Ovo se može iskoristiti za ometanje pristupa user‑a: čim attacker registruje MFA device, legitimni user može biti sprečen da se sign in zato što ne kontroliše attacker-registrisani MFA.

Ovaj denial-of-access attack funkcioniše samo ako user nije imao registrovan MFA; ako attacker registruje MFA device za tog user‑a, legitimni user će biti zaključan iz bilo kojih flow‑ova koji zahtevaju taj novi MFA. Ako user već ima jedan ili više MFA devices pod svojom kontrolom, dodavanje attacker‑kontrolisanog MFA ne blokira legitimnog user‑a — on može nastaviti da authenticate koristeći bilo koji MFA koji već poseduje.

To enable (register) an MFA device for a user an attacker could run:

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

Reference

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks