iam:ListPolicies, iam:GetPolicy y iam:GetPolicyVersion
iam:ListRoles
iam:ListUsers
iam:ListGroups
iam:ListGroupsForUser
iam:ListAttachedUserPolicies
iam:ListAttachedRolePolicies
iam:ListAttachedGroupPolicies
iam:ListUserPolicies y iam:GetUserPolicy
iam:ListGroupPolicies y iam:GetGroupPolicy
iam:ListRolePolicies y 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]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 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
Fuerza Bruta de Permisos
Si estás interesado en tus propios permisos pero no tienes acceso para consultar IAM, siempre podrías forzarlos.
bf-aws-permissions
La herramienta bf-aws-permissions es solo un script de bash que ejecutará, utilizando el perfil indicado, todas las acciones list*, describe*, get* que pueda encontrar usando los mensajes de ayuda de aws cli y devolverá las ejecuciones exitosas.
La herramienta bf-aws-perms-simulate puede encontrar tus permisos actuales (o los de otros principales) si tienes el permiso iam:SimulatePrincipalPolicy
# Ask for permissionspython3aws_permissions_checker.py--profile<AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Si encontraste algunos permisos que tiene tu usuario, y piensas que están siendo otorgados por un rol gestionado de AWS (y no por uno personalizado). Puedes usar la herramienta aws-Perms2ManagedRoles para verificar todos los roles gestionados de AWS que otorgan los permisos que descubriste que tienes.
# Run example with my profilepython3aws-Perms2ManagedPolicies.py--profilemyadmin--permissions-fileexample-permissions.txt
Es posible "saber" si los permisos que tienes son otorgados por un rol administrado de AWS si ves que tienes permisos sobre servicios que no se utilizan por ejemplo.
Cloudtrail2IAM
CloudTrail2IAM es una herramienta de Python que analiza los registros de AWS CloudTrail para extraer y resumir acciones realizadas por todos o solo un usuario o rol específico. La herramienta analizará cada registro de cloudtrail del bucket indicado.
Si encuentras archivos .tfstate (archivos de estado de Terraform) o archivos de CloudFormation (que suelen ser archivos yaml ubicados dentro de un bucket con el prefijo cf-templates), también puedes leerlos para encontrar la configuración de aws y averiguar qué permisos se han asignado a quién.
enumerate-iam
Para usar la herramienta https://github.com/andresriancho/enumerate-iam primero necesitas descargar todos los puntos finales de la API de AWS, de los cuales el script generate_bruteforce_tests.py obtendrá todos los "list_", "describe_" y "get_" endpoints. Y finalmente, intentará acceder a ellos con las credenciales dadas e indicar si funcionó.
(En mi experiencia, la herramienta se cuelga en algún momento, consulta esta solución para intentar solucionarlo).
En mi experiencia, esta herramienta es como la anterior pero funciona peor y verifica menos permisos.
También puedes usar la herramienta weirdAAL. Esta herramienta verificará varias operaciones comunes en varios servicios comunes (verificará algunos permisos de enumeración y también algunos permisos de escalada de privilegios). Pero solo verificará las comprobaciones codificadas (la única forma de verificar más cosas es codificando más pruebas).
# 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>
Ninguna de las herramientas anteriores es capaz de verificar casi todos los permisos, así que si conoces una mejor herramienta, ¡envía un PR!
Acceso No Autenticado
Escalación de Privilegios
En la siguiente página puedes verificar cómo abusar de los permisos de IAM para escalar privilegios:
Post Explotación de IAM
Persistencia de IAM
Centro de Identidad de IAM
Puedes encontrar una descripción del Centro de Identidad de IAM en:
Conectar a través de SSO con 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
Enumeración
Los elementos principales del Centro de Identidad son:
Usuarios y grupos
Conjuntos de permisos: Tienen políticas adjuntas
Cuentas de AWS
Luego, se crean relaciones para que los usuarios/grupos tengan Conjuntos de permisos sobre la Cuenta de AWS.
Tenga en cuenta que hay 3 formas de adjuntar políticas a un Conjunto de permisos. Adjuntando políticas gestionadas por AWS, políticas gestionadas por el cliente (estas políticas deben ser creadas en todas las cuentas que el Conjunto de permisos está afectando), y políticas en línea (definidas allí).
# 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 setaws 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 setaws sso-admin get-permissions-boundary-for-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## List accounts a permission set is affectingaws 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 accountaws sso-admin list-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>
Enumeración Local
Es posible crear dentro de la carpeta $HOME/.aws el archivo config para configurar perfiles que son accesibles a través de SSO, por ejemplo:
Esta configuración se puede utilizar con los comandos:
# Login in ms-sso-profileawsssologin--profilemy-sso-profile# Use dependent-profileawss3ls--profiledependent-profile
Cuando se utiliza un perfil de SSO para acceder a información, las credenciales se almacenan en caché en un archivo dentro de la carpeta $HOME/.aws/sso/cache. Por lo tanto, pueden ser leídas y utilizadas desde allí.
Además, se pueden almacenar más credenciales en la carpeta $HOME/.aws/cli/cache. Este directorio de caché se utiliza principalmente cuando estás trabajando con perfiles de AWS CLI que utilizan credenciales de usuario IAM o asumen roles a través de IAM (sin SSO). Ejemplo de configuración:
# Create user identitystore:CreateUseraws 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
Crea un grupo y asígnale permisos y establece un usuario controlado en él
Da permisos adicionales a un usuario o grupo controlado
Por defecto, solo los usuarios con permisos de la Cuenta de Gestión podrán acceder y controlar el Centro de Identidad IAM.
Sin embargo, es posible a través de Administrador Delegado permitir que usuarios de una cuenta diferente lo gestionen. No tendrán exactamente los mismos permisos, pero podrán realizar actividades de gestión.