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.awsiamget-account-authorization-details# List usersawsiamget-user#Get current user informationawsiamlist-usersawsiamlist-ssh-public-keys#User keys for CodeCommitawsiamget-ssh-public-key--user-name<username>--ssh-public-key-id<id>--encodingSSH#Get public key with metadataawsiamlist-service-specific-credentials#Get special permissions of the IAM user over specific servicesawsiamget-user--user-name<username>#Get metadata of user, included permissions boundariesawsiamlist-access-keys#List created access keys## inline policiesawsiamlist-user-policies--user-name<username>#Get inline policies of the userawsiamget-user-policy--user-name<username>--policy-name<policyname>#Get inline policy details## attached policiesawsiamlist-attached-user-policies--user-name<username>#Get policies of user, it doesn't get inline policies# List groupsawsiamlist-groups#Get groupsawsiamlist-groups-for-user--user-name<username>#Get groups of a userawsiamget-group--group-name<name>#Get group name info## inline policiesawsiamlist-group-policies--group-name<username>#Get inline policies of the groupawsiamget-group-policy--group-name<username>--policy-name<policyname>#Get an inline policy info## attached policiesawsiamlist-attached-group-policies--group-name<name>#Get policies of group, it doesn't get inline policies# List rolesawsiamlist-roles#Get rolesawsiamget-role--role-name<role-name>#Get role## inline policiesawsiamlist-role-policies--role-name<name>#Get inline policies of a roleawsiamget-role-policy--role-name<name>--policy-name<name>#Get inline policy details## attached policiesawsiamlist-attached-role-policies--role-name<role-name>#Get policies of role, it doesn't get inline policies# List policiesawsiamlist-policies [--only-attached] [--scope Local]awsiamlist-policies-granting-service-access--arn<identity>--service-namespaces<svc># Get list of policies that give access to the user to the service## Get policy contentawsiamget-policy--policy-arn<policy_arn>awsiamlist-policy-versions--policy-arn<arn>awsiamget-policy-version--policy-arn<arn:aws:iam::975426262029:policy/list_apigateways>--version-id<VERSION_X># Enumerate providersawsiamlist-saml-providersawsiamget-saml-provider--saml-provider-arn<ARN>awsiamlist-open-id-connect-providersawsiamget-open-id-connect-provider--open-id-connect-provider-arn<ARN># Password Policyawsiamget-account-password-policy# MFAawsiamlist-mfa-devicesawsiamlist-virtual-mfa-devices
Permissões Brute Force
Se você está interessado em suas próprias permissões, mas não tem acesso para consultar o IAM, você pode sempre forçá-las.
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 puder encontrar usando as mensagens de ajuda do cli aws e retornar as execuções bem-sucedidas.
A ferramenta bf-aws-perms-simulate pode encontrar suas permissões atuais (ou as de outros principais) se você tiver a permissão iam:SimulatePrincipalPolicy
# Ask for permissionspython3aws_permissions_checker.py--profile<AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Se você encontrou algumas permissões que seu usuário possui, e você acha que elas estão sendo concedidas por um papel gerenciado da AWS (e não por um personalizado). Você pode usar a ferramenta aws-Perms2ManagedRoles para verificar todos os papéis gerenciados da AWS que concedem as permissões que você descobriu que possui.
# Run example with my profilepython3aws-Perms2ManagedPolicies.py--profilemyadmin--permissions-fileexample-permissions.txt
É possível "saber" se as permissões que você tem são concedidas por um papel gerenciado da 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 todos ou apenas um usuário ou papel específico. A ferramenta irá analisar cada log do cloudtrail do bucket indicado.
Se você encontrar arquivos .tfstate (arquivos de estado do Terraform) ou arquivos do CloudFormation (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
Para usar a ferramenta https://github.com/andresriancho/enumerate-iam, você primeiro precisa baixar todos os endpoints da API AWS, a partir dos quais o script generate_bruteforce_tests.py obterá todos os endpoints "list_", "describe_" e "get_". E finalmente, ele tentará acessá-los com as credenciais fornecidas e indicar se funcionou.
(Com base na minha experiência, a ferramenta trava em algum ponto, veja esta correção para tentar corrigir isso).
Na minha experiência, esta ferramenta é como a anterior, mas funciona pior e verifica menos permissões.
Você também pode usar a ferramenta weirdAAL. Esta ferramenta verificará várias operações comuns em vários serviços comuns (verificará algumas permissões de enumeração e também algumas permissões de privesc). Mas ela só verificará os testes codificados (a única maneira de verificar mais coisas é codificando mais testes).
# Installgitclonehttps://github.com/carnal0wnage/weirdAAL.gitcdweirdAALpython3-mvenvweirdAALsourceweirdAAL/bin/activatepip3install-rrequirements.txt# Create a .env file with aws credentials such as[default]aws_access_key_id=<insertkeyid>aws_secret_access_key=<insertsecretkey># Setup DBpython3create_dbs.py# Invoke itpython3weirdAAL.py-mec2_describe_instances-tec2test# Just some ec2 testspython3weirdAAL.py-mrecon_all-tMyTarget# Check all permissions# You will see output such as:# [+] elbv2 Actions allowed are [+]# ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups']
# https://github.com/turbot/steampipe-mod-aws-insightssteampipecheckall--export=json# https://github.com/turbot/steampipe-mod-aws-perimeter# In this case you cannot output to JSON, so heck it in the dashboardsteampipedashboard
<YourTool>
Nenhuma das ferramentas anteriores é capaz de verificar todas as permissões, então se você conhece uma ferramenta melhor, envie um PR!
Acesso Não Autenticado
Escalação de Privilégios
Na página seguinte, você pode verificar como abusar das permissões do IAM para escalar privilégios:
Pós Exploração do IAM
Persistência do IAM
Centro de Identidade do IAM
Você pode encontrar uma descrição do Centro de Identidade do IAM em:
Conectar via SSO com CLI
# Connect with sso via CLI aws configure ssoawsconfiguresso[profile profile_name]sso_start_url=https://subdomain.awsapps.com/start/sso_account_id=<account_numbre>sso_role_name=AdministratorAccesssso_region=us-east-1
Enumeração
Os principais elementos do Identity Center são:
Usuários e grupos
Conjuntos de Permissões: Têm políticas anexadas
Contas AWS
Então, relacionamentos são criados para que usuários/grupos tenham Conjuntos de Permissões sobre a Conta 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 inline (definidas lá).
# Check if IAM Identity Center is usedawssso-adminlist-instances# Get Permissions sets. These are the policies that can be assignedawssso-adminlist-permission-sets--instance-arn<instance-arn>awssso-admindescribe-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## Get managed policies of a permission setawssso-adminlist-managed-policies-in-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## Get inline policies of a permission setawssso-adminget-inline-policy-for-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## Get customer managed policies of a permission setawssso-adminlist-customer-managed-policy-references-in-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## Get boundaries of a permission setawssso-adminget-permissions-boundary-for-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## List accounts a permission set is affectingawssso-adminlist-accounts-for-provisioned-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## List principals given a permission set in an accountawssso-adminlist-account-assignments--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>--account-id<account_id># Get permissions sets affecting an accountawssso-adminlist-permission-sets-provisioned-to-account--instance-arn<instance-arn>--account-id<account_id># List users & groups from the identity storeawsidentitystorelist-users--identity-store-id<store-id>awsidentitystorelist-groups--identity-store-id<store-id>## Get members of groupsawsidentitystorelist-group-memberships--identity-store-id<store-id>--group-id<group-id>## Get memberships or a user or a groupawsidentitystorelist-group-memberships-for-member--identity-store-id<store-id>--member-id<member-id>
Local Enumeration
É possível criar dentro da pasta $HOME/.aws o arquivo config para configurar perfis que são acessíveis via SSO, por exemplo:
# Login in ms-sso-profileawsssologin--profilemy-sso-profile# Use dependent-profileawss3ls--profiledependent-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 é 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:
# Create user identitystore:CreateUserawsidentitystorecreate-user--identity-store-id<store-id>--user-nameprivesc--display-nameprivesc--emailsValue=sdkabflvwsljyclpma@tmmbt.net,Type=Work,Primary=True--nameFormatted=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
Crie um grupo e atribua permissões a ele e defina um usuário controlado
Dê 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 IAM Identity Center.
No entanto, é possível, através do Administrador Delegado, permitir que usuários de uma conta diferente o gerenciem. Eles não terão exatamente as mesmas permissões, mas poderão realizar atividades de gerenciamento.