AWS - IAM, Identity Center & SSO Enum

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

IAM

Você pode encontrar uma descrição do IAM em:

pageAWS - Basic Information

Enumeração

Principais permissões necessárias:

  • iam:ListPolicies, iam:GetPolicy e iam:GetPolicyVersion

  • iam:ListRoles

  • iam:ListUsers

  • iam:ListGroups

  • iam:ListGroupsForUser

  • iam:ListAttachedUserPolicies

  • iam:ListAttachedRolePolicies

  • iam:ListAttachedGroupPolicies

  • iam:ListUserPolicies e iam:GetUserPolicy

  • iam:ListGroupPolicies e iam:GetGroupPolicy

  • iam:ListRolePolicies e iam: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 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

Força Bruta de Permissões

Se você está interessado em suas próprias permissões, mas não tem acesso para consultar o IAM, você sempre pode forçá-las.

bf-aws-permissions

A ferramenta bf-aws-permissions é apenas um script bash que será executado usando o perfil indicado todas as ações list*, describe*, get* que ele pode encontrar usando 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 encontrar suas permissões atuais (ou as de outros princípios) 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 acredita que elas estão sendo concedidas por uma função AWS gerenciada (e não por uma personalizada). Você pode usar a ferramenta aws-Perms2ManagedRoles para verificar todas as funções gerenciadas da AWS que concedem as permissões que você descobriu que possui.

# Run example with my profile
python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt

É possível "saber" se as permissões que você possui são concedidas por uma função gerenciada pela AWS se você perceber que tem permissões sobre serviços que não são utilizados, por exemplo.

Cloudtrail2IAM

CloudTrail2IAM é uma ferramenta Python que analisa logs do AWS CloudTrail para extrair e resumir ações realizadas por qualquer pessoa ou apenas por um usuário ou função específica. A ferramenta irá analisar 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]

Se encontrar arquivos .tfstate (arquivos de estado do Terraform) ou arquivos CloudFormation (geralmente arquivos yaml localizados dentro de um bucket com o prefixo cf-templates), você também pode lê-los para encontrar a configuração aws e descobrir quais permissões foram atribuídas a quem.

enumerar-iam

Para usar a ferramenta https://github.com/andresriancho/enumerate-iam primeiro é necessário baixar todos os endpoints da API AWS, a partir desses endpoints o script generate_bruteforce_tests.py irá obter todos os endpoints "list_", "describe_" e "get_". E finalmente, ele tentará acessá-los com as credenciais fornecidas e indicará se funcionou.

(Em minha experiência, a ferramenta trava em algum momento, verifique esta correção para tentar corrigir isso).

Em minha experiência, esta ferramenta é semelhante à 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 irá verificar várias operações comuns em vários serviços comuns (irá verificar algumas permissões de enumeração e também algumas permissões de escalonamento de privilégios). Mas ela só irá verificar os checks codificados (a única maneira de verificar mais coisas é codificando 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 Reforço para Enumeração de Permissões

# 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

<SeuFerramenta>

Nenhum dos tools anteriores é capaz de verificar perto de todas as permissões, então se você conhece uma ferramenta melhor, envie um PR!

Acesso não autenticado

pageAWS - IAM & STS Unauthenticated Enum

Escalação de privilégios

Na página seguinte, você pode verificar como abusar das permissões do IAM para escalar privilégios:

pageAWS - IAM Privesc

Pós exploração do IAM

pageAWS - IAM Post Exploitation

Persistência do IAM

pageAWS - IAM Persistence

Centro de Identidade do IAM

Você pode encontrar uma descrição do Centro de Identidade do IAM em:

pageAWS - Basic Information

Conectar via SSO com 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 Centro de Identidade são:

  • Usuários e grupos

  • Conjuntos de Permissões: Possuem políticas anexadas

  • Contas AWS

Em seguida, são criados relacionamentos para que usuários/grupos tenham Conjuntos de Permissões sobre Contas AWS.

Observe que existem 3 maneiras de anexar políticas a um Conjunto de Permissões. Anexando políticas gerenciadas pela AWS, políticas gerenciadas pelo cliente (essas políticas precisam ser criadas em todas as contas que o Conjunto de Permissões está afetando) e políticas embutidas (definidas ali).

# 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 algumas informações, 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. Este diretório de cache é principalmente usado quando você está trabalhando com perfis do AWS CLI que usam credenciais de usuário IAM ou assumem funções por meio 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

pageAWS - Identity Center & SSO Unauthenticated Enum

Escalação de privilégios

pageAWS - SSO & identitystore Privesc

Pós-exploração

pageAWS - 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 e atribuir permissões e definir um usuário controlado nele

  • Dar permissões extras a um usuário ou grupo controlado

  • Por padrão, apenas usuários com permissões da Conta de Gerenciamento poderão acessar e controlar o Centro de Identidade IAM.

No entanto, é possível, por meio do Administrador Delegado, permitir que usuários de uma conta diferente o gerenciem. Eles não terão exatamente as mesmas permissões, mas serão capazes de realizar atividades de gerenciamento.

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización