AWS - IAM Post Exploitation

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

IAM

For more information about IAM access:

AWS - IAM, Identity Center & SSO Enum

Confused Deputy Problem

If you pozwolisz kontu zewnętrznemu (A) uzyskać dostęp do role w Twoim koncie, prawdopodobnie będziesz mieć 0 widoczności co do tego, kto dokładnie może uzyskać dostęp do tego konta zewnętrznego. To jest problem, ponieważ jeśli inne konto zewnętrzne (B) ma dostęp do konta zewnętrznego (A), możliwe że B również będzie w stanie uzyskać dostęp do Twojego konta.

Dlatego, przy zezwalaniu kontu zewnętrznemu na dostęp do role w Twoim koncie, można określić ExternalId. To jest “sekretny” ciąg znaków, który konto zewnętrzne (A) musi podać, aby assume the role in your organization. Ponieważ konto zewnętrzne B nie będzie znało tego ciągu, nawet jeśli ma dostęp do A, nie będzie mogło uzyskać dostępu do Twojej role.

Należy jednak pamiętać, że ten ExternalId “sekret” nie jest sekretem — każdy, kto potrafi odczytać IAM assume role policy, będzie w stanie go zobaczyć. Ale o ile konto zewnętrzne A go zna, a konto zewnętrzne B go nie zna, to zapobiega to wykorzystaniu A przez B do uzyskania dostępu do Twojej role.

Przykład:

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

Warning

Aby attacker mógł wykorzystać confused deputy, będzie musiał w jakiś sposób sprawdzić, czy principals z current account mogą impersonate roles w other accounts.

Nieoczekiwane relacje zaufania

Wildcard jako principal

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

Ta polityka pozwala wszystkim AWS na przyjęcie roli.

Usługa jako podmiot

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

Ta polityka pozwala dowolnemu kontu skonfigurować własne apigateway, aby wywołać tę Lambda.

S3 jako principal

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

Jeśli S3 bucket jest podany jako principal, ponieważ S3 buckets nie mają Account ID, jeśli usunąłeś swój bucket i atakujący go stworzył na swoim koncie, wtedy atakujący może to wykorzystać.

Nieobsługiwane

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

Jednym z powszechnych sposobów uniknięcia problemów typu Confused Deputy jest użycie warunku z AWS:SourceArn do sprawdzenia ARN źródła. Jednak niektóre usługi mogą tego nie obsługiwać (np. CloudTrail według niektórych źródeł).

Usuwanie poświadczeń

Posiadając któreś z następujących uprawnień — iam:DeleteAccessKey, iam:DeleteLoginProfile, iam:DeleteSSHPublicKey, iam:DeleteServiceSpecificCredential, iam:DeleteInstanceProfile, iam:DeleteServerCertificate, iam:DeleteCloudFrontPublicKey, iam:RemoveRoleFromInstanceProfile — podmiot może usunąć klucze dostępu, profile logowania, klucze SSH, poświadczenia specyficzne dla usługi, profile instancji, certyfikaty lub publiczne klucze CloudFront, albo odłączyć role od profili instancji. Takie działania mogą natychmiast zablokować prawidłowych użytkowników i aplikacje oraz spowodować odmowę usługi lub utratę dostępu dla systemów zależnych od tych poświadczeń, dlatego uprawnienia IAM muszą być ściśle ograniczone i monitorowane.

# 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

Usuwanie tożsamości

Z uprawnieniami takimi jak iam:DeleteUser, iam:DeleteGroup, iam:DeleteRole, lub iam:RemoveUserFromGroup, aktor może usuwać użytkowników, role lub grupy — lub zmieniać członkostwo w grupie — usuwając tożsamości i powiązane ślady. Może to natychmiast przerwać dostęp dla osób i usług zależnych od tych tożsamości, powodując denial-of-service lub utratę dostępu, dlatego te akcje IAM muszą być ściśle ograniczone i monitorowane.

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

Posiadając któreś z następujących uprawnień — iam:DeleteGroupPolicy, iam:DeleteRolePolicy, iam:DeleteUserPolicy, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRolePermissionsBoundary, iam:DeleteUserPermissionsBoundary, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy — podmiot może usuwać lub odłączać zarządzane/inline polityki, usuwać wersje polityk lub granice uprawnień oraz odłączać polityki od użytkowników, grup lub ról. To niszczy autoryzacje i może zmienić model uprawnień, powodując natychmiastową utratę dostępu lub odmowę świadczenia usługi (DoS) dla podmiotów, które polegały na tych politykach, dlatego te akcje IAM muszą być ściśle ograniczone i monitorowane.

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

Federated Identity Deletion

Za pomocą iam:DeleteOpenIDConnectProvider, iam:DeleteSAMLProvider, i iam:RemoveClientIDFromOpenIDConnectProvider aktor może usunąć dostawców tożsamości OIDC/SAML lub usunąć client IDs. To przerywa federacyjne uwierzytelnianie, uniemożliwiając token validation i natychmiast odmawiając dostępu użytkownikom i usługom, które polegają na SSO, dopóki IdP lub konfiguracje nie zostaną przywrócone.

# 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

Nieuprawniona aktywacja MFA

Z uprawnieniem iam:EnableMFADevice, osoba atakująca może zarejestrować urządzenie MFA do tożsamości użytkownika, uniemożliwiając prawowitemu użytkownikowi zalogowanie się. Gdy nieautoryzowane urządzenie MFA zostanie włączone, użytkownik może zostać zablokowany aż do usunięcia lub zresetowania urządzenia (uwaga: jeśli zarejestrowanych jest kilka urządzeń MFA, do logowania wymagana jest tylko jedna, więc ten atak nie spowoduje odmowy dostępu).

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

Certificate/Key Metadata Tampering

Za pomocą iam:UpdateSSHPublicKey, iam:UpdateCloudFrontPublicKey, iam:UpdateSigningCertificate, iam:UpdateServerCertificate aktor może zmienić status lub metadane kluczy publicznych i certyfikatów. Oznaczając klucze/certyfikaty jako nieaktywne lub zmieniając odwołania, może przerwać uwierzytelnianie SSH, unieważnić walidacje X.509/TLS i natychmiast zakłócić działanie usług zależnych od tych poświadczeń, powodując utratę dostępu lub niedostępność usług.

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 IAM iam:Delete* daje możliwość usunięcia wielu rodzajów zasobów IAM — użytkowników, ról, grup, polityk, kluczy, certyfikatów, urządzeń MFA, wersji polityk itd. — i w związku z tym ma bardzo duże pole rażenia: podmiot, któremu przyznano iam:Delete*, może trwale zniszczyć tożsamości, poświadczenia, polityki i powiązane artefakty, usunąć ślady audytu i dowody oraz spowodować przerwy w działaniu usług lub zakłócenia operacyjne. Oto kilka przykładów

# 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

Podmiot, któremu przyznano uprawnienie iam:EnableMFADevice, może zarejestrować urządzenie MFA dla tożsamości w koncie, pod warunkiem że użytkownik nie miał wcześniej włączonego urządzenia.

Może to zostać użyte do zakłócenia dostępu użytkownika: gdy atakujący zarejestruje urządzenie MFA, uprawniony użytkownik może zostać pozbawiony możliwości logowania, ponieważ nie kontroluje MFA zarejestrowanego przez atakującego.

Ten atak polegający na odmowie dostępu działa tylko jeśli użytkownik nie miał zarejestrowanego MFA; jeśli atakujący zarejestruje MFA dla tego użytkownika, uprawniony użytkownik zostanie zablokowany we wszystkich przepływach, które wymagają tego nowego MFA. Jeśli użytkownik ma już jedno lub więcej urządzeń MFA pod swoją kontrolą, dodanie MFA kontrolowanego przez atakującego nie uniemożliwia korzystania z konta — może nadal uwierzytelniać się przy użyciu dowolnego posiadanego MFA.

Aby włączyć (zarejestrować) urządzenie MFA dla użytkownika, atakujący może uruchomić:

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

Źródła

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks