AWS - IAM, Identity Center & SSO Перерахування
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
IAM
Ви можете знайти опис IAM в:
Перерахування
Основні необхідні дозволи:
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
Приховане підтвердження дозволів через навмисні помилки
Коли List* або API симуляторів заблоковано, ви можете підтвердити права на зміну без створення довготривалих ресурсів, спричинивши передбачувані помилки валідації. AWS все ще оцінює IAM перед поверненням цих помилок, тому побачена помилка доводить, що запитувач має право виконати цю дію:
# 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
Ці спроби все ще генерують CloudTrail події (з встановленим errorCode), але уникають створення нових IAM артефактів, що робить їх корисними для перевірки прав із мінімальним рівнем шуму під час interactive recon.
Permissions Brute Force
If you are interested in your own permissions but you don’t have access to query IAM you could always brute-force them.
bf-aws-permissions
The tool bf-aws-permissions is just a bash-скрипт that під вказаним профілем виконає всі list*, describe*, get* дії, які зможе знайти у help-повідомленнях aws cli, і поверне успішно виконані дії.
# Bruteforce permissions
bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt
bf-aws-perms-simulate
Інструмент bf-aws-perms-simulate може визначити ваші поточні дозволи (або дозволи інших принципалів), якщо у вас є дозвіл iam:SimulatePrincipalPolicy
# Ask for permissions
python3 aws_permissions_checker.py --profile <AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Якщо ви виявили деякі дозволи, які має ваш користувач, і припускаєте, що вони надаються керованою роллю AWS (а не користувацькою). Ви можете скористатися інструментом aws-Perms2ManagedRoles, щоб перевірити всі керовані ролі AWS, які надають виявлені у вас дозволи.
# Run example with my profile
python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt
Warning
Можна “з’ясувати”, чи надані вам дозволи через AWS managed role, якщо, наприклад, ви бачите, що ви маєте дозволи на сервіси, які не використовуються.
Cloudtrail2IAM
CloudTrail2IAM — це Python-інструмент, який аналізує журнали AWS CloudTrail, щоб витягти й підсумувати виконані дії будь-ким або лише конкретним користувачем чи роллю. Інструмент розбирає кожен CloudTrail лог з вказаного bucket.
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
Якщо ви знайдете .tfstate (Terraform state files) або файли CloudFormation (зазвичай це yaml файли, розташовані всередині bucket з префіксом cf-templates), ви також можете прочитати їх, щоб знайти aws конфігурацію та з’ясувати, яким користувачам призначені які права.
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 доступитись до них with the given credentials and повідомити, чи це спрацювало.
(За моїми спостереженнями інструмент зависає в якийсь момент, checkout this fix щоб спробувати це виправити).
Warning
За моїми спостереженнями цей інструмент схожий на попередній, але працює гірше і перевіряє менше прав
# 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
Ви також можете використовувати інструмент weirdAAL. Цей інструмент перевіряє кілька поширених операцій на кількох поширених сервісах (перевіряє деякі enumeration permissions і також деякі privesc permissions). Але він перевіряє лише закодовані перевірки — єдиний спосіб додати більше перевірок — написати додаткові тести.
# 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']
Інструменти для захисту прав доступу від 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>
Жоден із наведених інструментів не може перевірити майже всі дозволи, тому якщо ви знаєте кращий інструмент — надішліть PR!
Unauthenticated Access
AWS - IAM & STS Unauthenticated Enum
Privilege Escalation
На наступній сторінці ви можете дізнатися, як abuse IAM permissions to escalate privileges:
IAM Post Exploitation
IAM Persistence
IAM Identity Center
Тут можна знайти опис IAM Identity Center:
Connect via SSO with 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
Перерахування
Основні елементи Identity Center:
- Користувачі та групи
- Permission Sets: мають прикріплені політики
- AWS Accounts
Потім встановлюються зв’язки так, щоб користувачі/групи мали Permission Sets для AWS Account.
Note
Зверніть увагу, що існує 3 способи прикріплення політик до Permission Set: AWS managed policies, Customer managed policies (ці політики потрібно створити у всіх облікових записах, на які впливає Permission Set), та inline policies (визначені у ньому).
# 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>
Local Enumeration
Можна створити в папці $HOME/.aws файл config для налаштування профілів, доступних через SSO, наприклад:
[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
Цю конфігурацію можна використовувати з командами:
# Login in ms-sso-profile
aws sso login --profile my-sso-profile
# Use dependent-profile
aws s3 ls --profile dependent-profile
Коли профіль із SSO використовується для доступу до деякої інформації, облікові дані кешуються у файлі всередині папки $HOME/.aws/sso/cache. Отже їх можна прочитати і використати звідти.
Крім того, більше облікових даних може зберігатися в папці $HOME/.aws/cli/cache. Цей каталог кешу переважно використовується, коли ви працюєте з AWS CLI профілями, які використовують облікові дані користувача IAM або assume ролі через IAM (без SSO). Приклад конфігурації:
[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
Створити користувача та призначити йому дозволи
# 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
- Створіть групу, призначте їй дозволи та додайте до неї керованого користувача
- Надайте додаткові дозволи керованому користувачу або групі
- За замовчуванням лише користувачі з правами з Management Account зможуть отримати доступ до IAM Identity Center та керувати ним.
Однак через Delegate Administrator можна дозволити користувачам з іншого облікового запису керувати ним. Вони не матимуть точно таких самих прав, але зможуть виконувати management activities.
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
HackTricks Cloud

