AWS - IAM, Identity Center & SSO Enumeracja
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
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
IAM
Możesz znaleźć opis IAM w:
Enumeracja
Główne wymagane uprawnienia:
iam:ListPolicies,iam:GetPolicyandiam:GetPolicyVersioniam:ListRolesiam:ListUsersiam:ListGroupsiam:ListGroupsForUseriam:ListAttachedUserPoliciesiam:ListAttachedRolePoliciesiam:ListAttachedGroupPoliciesiam:ListUserPoliciesandiam:GetUserPolicyiam:ListGroupPoliciesandiam:GetGroupPolicyiam:ListRolePoliciesandiam:GetRolePolicy
# All IAMs
## Retrieves information about all IAM users, groups, roles, and policies
## in your Amazon Web Services account, including their relationships to
## one another. Use this operation to obtain a snapshot of the configura-
## tion of IAM permissions (users, groups, roles, and policies) in your
## account.
aws iam get-account-authorization-details
# List users
aws iam get-user #Get current user information
aws iam list-users
aws iam list-ssh-public-keys #User keys for CodeCommit
aws iam get-ssh-public-key --user-name <username> --ssh-public-key-id <id> --encoding SSH #Get public key with metadata
aws iam list-service-specific-credentials #Get special permissions of the IAM user over specific services
aws iam get-user --user-name <username> #Get metadata of user, included permissions boundaries
aws iam list-access-keys #List created access keys
## inline policies
aws iam list-user-policies --user-name <username> #Get inline policies of the user
aws iam get-user-policy --user-name <username> --policy-name <policyname> #Get inline policy details
## attached policies
aws iam list-attached-user-policies --user-name <username> #Get policies of user, it doesn't get inline policies
# List groups
aws iam list-groups #Get groups
aws iam list-groups-for-user --user-name <username> #Get groups of a user
aws iam get-group --group-name <name> #Get group name info
## inline policies
aws iam list-group-policies --group-name <username> #Get inline policies of the group
aws iam get-group-policy --group-name <username> --policy-name <policyname> #Get an inline policy info
## attached policies
aws iam list-attached-group-policies --group-name <name> #Get policies of group, it doesn't get inline policies
# List roles
aws iam list-roles #Get roles
aws iam get-role --role-name <role-name> #Get role
## inline policies
aws iam list-role-policies --role-name <name> #Get inline policies of a role
aws iam get-role-policy --role-name <name> --policy-name <name> #Get inline policy details
## attached policies
aws iam list-attached-role-policies --role-name <role-name> #Get policies of role, it doesn't get inline policies
# List policies
aws iam list-policies [--only-attached] [--scope Local]
aws iam list-policies-granting-service-access --arn <identity> --service-namespaces <svc> # Get list of policies that give access to the user to the service
## Get policy content
aws iam get-policy --policy-arn <policy_arn>
aws iam list-policy-versions --policy-arn <arn>
aws iam get-policy-version --policy-arn <arn:aws:iam::975426262029:policy/list_apigateways> --version-id <VERSION_X>
# Enumerate providers
aws iam list-saml-providers
aws iam get-saml-provider --saml-provider-arn <ARN>
aws iam list-open-id-connect-providers
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Password Policy
aws iam get-account-password-policy
# MFA
aws iam list-mfa-devices
aws iam list-virtual-mfa-devices
Potwierdzanie uprawnień w ukryciu przez celowe niepowodzenia
Kiedy List* lub API symulatora są zablokowane, możesz potwierdzić uprawnienia do modyfikacji bez tworzenia trwałych zasobów przez wymuszenie przewidywalnych błędów walidacji. AWS nadal ocenia IAM przed zwróceniem tych błędów, więc pojawienie się takiego błędu dowodzi, że wywołujący posiada daną akcję:
# Confirm iam:CreateUser without creating a new principal (fails only after authz)
aws iam create-user --user-name <existing_user> # -> EntityAlreadyExistsException
# Confirm iam:CreateLoginProfile while learning password policy requirements
aws iam create-login-profile --user-name <target_user> --password lower --password-reset-required # -> PasswordPolicyViolationException
Te próby nadal generują zdarzenia CloudTrail (z ustawionym errorCode), ale unikają pozostawiania nowych artefaktów IAM, dzięki czemu są przydatne do mało hałaśliwej weryfikacji uprawnień podczas interaktywnego recon.
Uprawnienia Brute Force
Jeśli chcesz sprawdzić swoje uprawnienia, ale nie masz dostępu do wykonywania zapytań do IAM, zawsze możesz spróbować brute-force.
bf-aws-permissions
Narzędzie bf-aws-permissions to po prostu skrypt bash, który uruchomi, używając wskazanego profilu, wszystkie akcje list*, describe*, get* które znajdzie, analizując komunikaty pomocy aws cli, i zwróci pomyślne wykonania.
# Bruteforce permissions
bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt
bf-aws-perms-simulate
Narzędzie bf-aws-perms-simulate może ustalić twoje bieżące uprawnienia (lub uprawnienia innych podmiotów), jeśli posiadasz uprawnienie iam:SimulatePrincipalPolicy.
# Ask for permissions
python3 aws_permissions_checker.py --profile <AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Jeśli znalazłeś jakieś uprawnienia, które posiada Twój użytkownik, i uważasz, że są one nadawane przez zarządzaną rolę AWS (a nie przez rolę niestandardową). Możesz użyć narzędzia aws-Perms2ManagedRoles do sprawdzenia wszystkich zarządzanych ról AWS, które przyznają uprawnienia, które odkryłeś, że posiadasz.
# Run example with my profile
python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt
Warning
Możliwe jest “stwierdzenie”, czy uprawnienia, które posiadasz, zostały przyznane przez zarządzaną rolę AWS, jeśli zauważysz, że masz uprawnienia do usług, które nie są używane, na przykład.
Cloudtrail2IAM
CloudTrail2IAM to narzędzie w Pythonie, które analizuje logi AWS CloudTrail, aby wyodrębnić i podsumować działania wykonywane przez wszystkich lub tylko konkretnego użytkownika albo rolę. Narzędzie będzie parsować każdy log CloudTrail z wskazanego bucketu.
git clone https://github.com/carlospolop/Cloudtrail2IAM
cd Cloudtrail2IAM
pip install -r requirements.txt
python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PROFILE [--filter-name FILTER_NAME] [--threads THREADS]
Warning
Jeśli znajdziesz .tfstate (Terraform state files) lub pliki CloudFormation (zwykle są to pliki yaml znajdujące się w bucketu z prefiksem cf-templates), możesz także je odczytać, aby znaleźć konfigurację aws i sprawdzić, komu przypisano które uprawnienia.
enumerate-iam
To use the tool https://github.com/andresriancho/enumerate-iam you first need to download all the API AWS endpoints, from those the script generate_bruteforce_tests.py will get all the “list_”, “describe_”, and “get_” endpoints. And finally, it will try to access them with the given credentials and indicate if it worked.
(W moim doświadczeniu narzędzie zawiesza się w pewnym momencie, checkout this fix aby spróbować to naprawić).
Warning
Z mojego doświadczenia to narzędzie jest podobne do poprzedniego, ale działa gorzej i sprawdza mniej uprawnień
# Install tool
git clone git@github.com:andresriancho/enumerate-iam.git
cd enumerate-iam/
pip install -r requirements.txt
# Download API endpoints
cd enumerate_iam/
git clone https://github.com/aws/aws-sdk-js.git
python3 generate_bruteforce_tests.py
rm -rf aws-sdk-js
cd ..
# Enumerate permissions
python3 enumerate-iam.py --access-key ACCESS_KEY --secret-key SECRET_KEY [--session-token SESSION_TOKEN] [--region REGION]
weirdAAL
Możesz też użyć narzędzia weirdAAL. To narzędzie sprawdzi kilka powszechnych operacji w kilku powszechnych usługach (sprawdzi niektóre enumeration permissions oraz niektóre privesc permissions). Jednak przeprowadza tylko zakodowane kontrole — jedyny sposób, żeby sprawdzić więcej rzeczy, to zakodować dodatkowe testy.
# Install
git clone https://github.com/carnal0wnage/weirdAAL.git
cd weirdAAL
python3 -m venv weirdAAL
source weirdAAL/bin/activate
pip3 install -r requirements.txt
# Create a .env file with aws credentials such as
[default]
aws_access_key_id = <insert key id>
aws_secret_access_key = <insert secret key>
# Setup DB
python3 create_dbs.py
# Invoke it
python3 weirdAAL.py -m ec2_describe_instances -t ec2test # Just some ec2 tests
python3 weirdAAL.py -m recon_all -t MyTarget # Check all permissions
# You will see output such as:
# [+] elbv2 Actions allowed are [+]
# ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups']
Narzędzia do hardeningu uprawnień BF
# Export env variables
./index.js --console=text --config ./config.js --json /tmp/out-cloudsploit.json
# Filter results removing unknown
jq 'map(select(.status | contains("UNKNOWN") | not))' /tmp/out-cloudsploit.json | jq 'map(select(.resource | contains("N/A") | not))' > /tmp/out-cloudsploit-filt.json
# Get services by regions
jq 'group_by(.region) | map({(.[0].region): ([map((.resource | split(":"))[2]) | unique])})' ~/Desktop/pentests/cere/greybox/core-dev-dev-cloudsploit-filtered.json
<YourTool>
Żadne z poprzednich narzędzi nie jest w stanie sprawdzić niemal wszystkich uprawnień, więc jeśli znasz lepsze narzędzie, wyślij PR!
Dostęp bez uwierzytelnienia
AWS - IAM & STS Unauthenticated Enum
Privilege Escalation
Na następnej stronie możesz sprawdzić, jak abuse IAM permissions to escalate privileges:
IAM Post Exploitation
IAM Persistence
IAM Identity Center
Możesz znaleźć opis IAM Identity Center w:
Połącz się przez SSO za pomocą CLI
# Connect with sso via CLI aws configure sso
aws configure sso
[profile profile_name]
sso_start_url = https://subdomain.awsapps.com/start/
sso_account_id = <account_numbre>
sso_role_name = AdministratorAccess
sso_region = us-east-1
Enumeracja
Główne elementy Identity Center to:
- Użytkownicy i grupy
- Permission Sets: Mają przypisane polityki
- AWS Accounts
Następnie tworzone są relacje tak, aby użytkownicy/grupy posiadały Permission Sets dla AWS Accounts.
Note
Zwróć uwagę, że istnieją 3 sposoby dołączania polityk do Permission Set. Dołączanie AWS managed policies, Customer managed policies (te polityki muszą być utworzone we wszystkich kontach, których dotyczy Permission Set), oraz inline policies (zdefiniowane w nim).
# Check if IAM Identity Center is used
aws sso-admin list-instances
# Get Permissions sets. These are the policies that can be assigned
aws sso-admin list-permission-sets --instance-arn <instance-arn>
aws sso-admin describe-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## Get managed policies of a permission set
aws sso-admin list-managed-policies-in-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## Get inline policies of a permission set
aws sso-admin get-inline-policy-for-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## Get customer managed policies of a permission set
aws sso-admin list-customer-managed-policy-references-in-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## Get boundaries of a permission set
aws sso-admin get-permissions-boundary-for-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## List accounts a permission set is affecting
aws sso-admin list-accounts-for-provisioned-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## List principals given a permission set in an account
aws sso-admin list-account-assignments --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --account-id <account_id>
# Get permissions sets affecting an account
aws sso-admin list-permission-sets-provisioned-to-account --instance-arn <instance-arn> --account-id <account_id>
# List users & groups from the identity store
aws identitystore list-users --identity-store-id <store-id>
aws identitystore list-groups --identity-store-id <store-id>
## Get members of groups
aws identitystore list-group-memberships --identity-store-id <store-id> --group-id <group-id>
## Get memberships or a user or a group
aws identitystore list-group-memberships-for-member --identity-store-id <store-id> --member-id <member-id>
Lokalna enumeracja
W folderze $HOME/.aws można utworzyć plik config, aby skonfigurować profile dostępne przez SSO, na przykład:
[default]
region = us-west-2
output = json
[profile my-sso-profile]
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region = us-west-2
sso_account_id = 123456789012
sso_role_name = MySSORole
region = us-west-2
output = json
[profile dependent-profile]
role_arn = arn:aws:iam::<acc-id>:role/ReadOnlyRole
source_profile = Hacktricks-Admin
Ta konfiguracja może być używana z następującymi poleceniami:
# Login in ms-sso-profile
aws sso login --profile my-sso-profile
# Use dependent-profile
aws s3 ls --profile dependent-profile
Gdy profil z SSO jest używany do uzyskania dostępu do informacji, poświadczenia są zapisane w pamięci podręcznej w pliku wewnątrz folderu $HOME/.aws/sso/cache. W związku z tym mogą być odczytane i użyte stamtąd.
Ponadto więcej poświadczeń może być przechowywanych w folderze $HOME/.aws/cli/cache. Ten katalog pamięci podręcznej jest wykorzystywany głównie, gdy pracujesz z profilami AWS CLI, które używają poświadczeń użytkownika IAM lub przyjmują role za pośrednictwem IAM (bez SSO). Przykład konfiguracji:
[profile crossaccountrole]
role_arn = arn:aws:iam::234567890123:role/SomeRole
source_profile = default
mfa_serial = arn:aws:iam::123456789012:mfa/saanvi
external_id = 123456
Unauthenticated Access
AWS - Identity Center & SSO Unauthenticated Enum
Privilege Escalation
AWS - SSO & identitystore Privesc
Post Exploitation
AWS - SSO & identitystore Post Exploitation
Persistence
Utwórz użytkownika i przydziel mu uprawnienia
# Create user identitystore:CreateUser
aws identitystore create-user --identity-store-id <store-id> --user-name privesc --display-name privesc --emails Value=sdkabflvwsljyclpma@tmmbt.net,Type=Work,Primary=True --name Formatted=privesc,FamilyName=privesc,GivenName=privesc
## After creating it try to login in the console using the selected username, you will receive an email with the code and then you will be able to select a password
- Utwórz grupę, przypisz jej uprawnienia i dodaj do niej kontrolowanego użytkownika
- Nadaj dodatkowe uprawnienia kontrolowanemu użytkownikowi lub grupie
- Domyślnie tylko użytkownicy z uprawnieniami z Management Account będą mogli uzyskać dostęp do i kontrolować IAM Identity Center.
Jednakże możliwe jest, przy użyciu Delegate Administrator, umożliwić użytkownikom z innego konta zarządzanie nim. Nie będą mieć dokładnie tych samych uprawnień, ale będą mogli wykonywać management activities.
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
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

