AWS - IAM, Identity Center & SSO Enum
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
IAM
Você pode encontrar uma descrição do IAM em:
Enumeration
Principais permissões necessárias:
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
Confirmação furtiva de permissões via falhas intencionais
Quando List* ou as APIs do simulador estão bloqueadas, você pode confirmar permissões de mutação sem criar recursos duráveis forçando erros de validação previsíveis. AWS ainda avalia o IAM antes de retornar esses erros, então ver o erro comprova que o chamador tem permissão para executar a ação:
# 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
Essas tentativas ainda geram eventos do CloudTrail (com errorCode definido) mas evitam deixar novos artefatos do IAM, tornando-as úteis para validação de permissões com baixo ruído durante recon interativo.
Força Bruta de Permissões
Se você está interessado nas suas próprias permissões mas não tem acesso para consultar o IAM, você sempre pode fazer brute-force nelas.
bf-aws-permissions
A ferramenta bf-aws-permissions é apenas um script bash que irá executar, usando o perfil indicado, todas as ações list*, describe*, get* que conseguir encontrar nas mensagens de ajuda do aws cli e retornar as execuções bem-sucedidas.
# Bruteforce permissions
bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt
bf-aws-perms-simulate
A ferramenta bf-aws-perms-simulate pode descobrir suas permissões atuais (ou as de outros principals) se você tiver a permissão iam:SimulatePrincipalPolicy
# Ask for permissions
python3 aws_permissions_checker.py --profile <AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Se você encontrou algumas permissões que seu usuário possui, e acha que elas estão sendo concedidas por uma role gerenciada da AWS (e não por uma personalizada). Você pode usar a ferramenta aws-Perms2ManagedRoles para verificar todos os roles gerenciados da AWS que concedem as permissões que você descobriu possuir.
# Run example with my profile
python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt
Warning
É possível “saber” se as permissões que você tem foram concedidas por uma função gerenciada pela AWS se você vir que, por exemplo, você tem permissões sobre serviços que não são usados.
Cloudtrail2IAM
CloudTrail2IAM é uma ferramenta Python que analisa logs do AWS CloudTrail para extrair e resumir ações realizadas por todos ou apenas por um usuário ou função específica. A ferramenta irá processar cada log do CloudTrail do bucket indicado.
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
Se você encontrar .tfstate (Terraform state files) ou arquivos CloudFormation (estes geralmente são arquivos yaml localizados dentro de um bucket com o prefixo cf-templates), você também pode lê-los para encontrar a configuração do aws e descobrir quais permissões foram atribuídas a quem.
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.
(Na minha experiência a ferramenta trava em algum ponto, confira esta correção para tentar corrigir isso).
Warning
Na minha experiência esta ferramenta é parecida com a anterior, mas funciona pior e verifica menos permissões
# 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
Você também pode usar a ferramenta weirdAAL. Esta ferramenta verificará várias operações comuns em vários serviços comuns (verificará algumas enumeration permissions e também algumas privesc permissions). Mas ela apenas executa as verificações codificadas (a única forma de testar mais coisas é implementar mais testes).
# 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']
Ferramentas de Hardening para permissões 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>
Nenhuma das ferramentas anteriores é capaz de verificar quase todas as permissões; se você conhece uma ferramenta melhor, envie um PR!
Acesso Não Autenticado
AWS - IAM & STS Unauthenticated Enum
Escalada de Privilégios
Na página a seguir você pode ver como abusar das permissões do IAM para escalar privilégios:
Pós-Exploração do IAM
Persistência do IAM
IAM Identity Center
Você pode encontrar uma descrição do IAM Identity Center em:
Conectar via SSO com a 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
Enumeração
Os principais elementos do Identity Center são:
- Usuários e grupos
- Permission Sets: possuem políticas anexadas
- Contas AWS
Em seguida, são criados relacionamentos para que usuários/grupos tenham Permission Sets em Contas AWS.
Note
Observe que existem 3 maneiras de anexar políticas a um Permission Set: políticas gerenciadas pela AWS, políticas gerenciadas pelo cliente (essas políticas precisam ser criadas em todas as contas que o Permission Set afeta) e políticas inline (definidas no próprio Permission Set).
# 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>
Enumeração Local
É possível criar dentro da pasta $HOME/.aws o arquivo config para configurar perfis que são acessíveis via SSO, por exemplo:
[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
Esta configuração pode ser usada com os comandos:
# Login in ms-sso-profile
aws sso login --profile my-sso-profile
# Use dependent-profile
aws s3 ls --profile dependent-profile
Quando um perfil do SSO é usado para acessar alguma informação, as credenciais são armazenadas em cache em um arquivo dentro da pasta $HOME/.aws/sso/cache. Portanto, elas podem ser lidas e usadas a partir daí.
Além disso, mais credenciais podem ser armazenadas na pasta $HOME/.aws/cli/cache. Esse diretório de cache é usado principalmente quando você está trabalhando com perfis do AWS CLI que usam credenciais de usuário IAM ou assumem funções através do IAM (sem SSO). Exemplo de configuração:
[profile crossaccountrole]
role_arn = arn:aws:iam::234567890123:role/SomeRole
source_profile = default
mfa_serial = arn:aws:iam::123456789012:mfa/saanvi
external_id = 123456
Acesso Não Autenticado
AWS - Identity Center & SSO Unauthenticated Enum
Escalonamento de Privilégios
AWS - SSO & identitystore Privesc
Pós-Exploração
AWS - SSO & identitystore Post Exploitation
Persistência
Criar um usuário e atribuir permissões a ele
# 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
- Criar um grupo, atribuir permissões e configurar um usuário controlado nele
- Conceder permissões extras a um usuário controlado ou a um grupo
- Por padrão, apenas usuários com permissões da Management Account poderão acessar e controlar o IAM Identity Center.
No entanto, é possível, via Delegate Administrator, permitir que usuários de uma conta diferente o gerenciem. Eles não terão exatamente as mesmas permissões, mas poderão executar management activities.
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

