iam:ListPolicies, iam:GetPolicy et iam:GetPolicyVersion
iam:ListRoles
iam:ListUsers
iam:ListGroups
iam:ListGroupsForUser
iam:ListAttachedUserPolicies
iam:ListAttachedRolePolicies
iam:ListAttachedGroupPolicies
iam:ListUserPolicies et iam:GetUserPolicy
iam:ListGroupPolicies et iam:GetGroupPolicy
iam:ListRolePolicies et 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 usersawsiamlist-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
Brute Force des autorisations
Si vous êtes intéressé par vos propres autorisations mais que vous n'avez pas accès pour interroger IAM, vous pouvez toujours les brute-forcer.
bf-aws-permissions
L'outil bf-aws-permissions est simplement un script bash qui s'exécutera en utilisant le profil indiqué pour toutes les actions list*, describe*, get* qu'il peut trouver en utilisant les messages d'aide de la CLI aws et retourner les exécutions réussies.
L'outil bf-aws-perms-simulate peut trouver vos autorisations actuelles (ou celles d'autres principaux) si vous avez l'autorisation iam:SimulatePrincipalPolicy.
# Ask for permissionspython3aws_permissions_checker.py--profile<AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Si vous avez trouvé certaines autorisations que votre utilisateur possède, et que vous pensez qu'elles sont accordées par un rôle AWS géré (et non par un rôle personnalisé), vous pouvez utiliser l'outil aws-Perms2ManagedRoles pour vérifier tous les rôles gérés par AWS qui accordent les autorisations que vous avez découvertes.
# Run example with my profilepython3aws-Perms2ManagedPolicies.py--profilemyadmin--permissions-fileexample-permissions.txt
Il est possible de "savoir" si les autorisations que vous avez sont accordées par un rôle géré par AWS si vous constatez que vous avez des autorisations sur des services qui ne sont pas utilisés, par exemple.
Cloudtrail2IAM
CloudTrail2IAM est un outil Python qui analyse les journaux AWS CloudTrail pour extraire et résumer les actions effectuées par tout le monde ou juste un utilisateur ou un rôle spécifique. L'outil va analyser chaque journal cloudtrail du bucket indiqué.
Si vous trouvez des fichiers .tfstate (fichiers d'état Terraform) ou des fichiers CloudFormation (ceux-ci sont généralement des fichiers yaml situés dans un compartiment avec le préfixe cf-templates), vous pouvez également les lire pour trouver la configuration aws et découvrir quelles autorisations ont été attribuées à qui.
énumérer-iam
Pour utiliser l'outil https://github.com/andresriancho/enumerate-iam, vous devez d'abord télécharger tous les points de terminaison API AWS, à partir desquels le script generate_bruteforce_tests.py obtiendra tous les points de terminaison "list_", "describe_" et "get_". Enfin, il essaiera de y accéder avec les informations d'identification fournies et indiquera si cela a fonctionné.
(Dans mon expérience, l'outil se bloque à un moment donné, consultez cette correction pour essayer de résoudre ce problème).
Dans mon expérience, cet outil est similaire au précédent mais fonctionne moins bien et vérifie moins d'autorisations.
Vous pourriez également utiliser l'outil weirdAAL. Cet outil vérifiera plusieurs opérations courantes sur plusieurs services courants (il vérifiera certaines autorisations d'énumération et également certaines autorisations de privilèges). Mais il ne vérifiera que les vérifications codées (le seul moyen de vérifier plus de choses est de coder plus de tests).
# 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
<VotreOutil>
Aucun des outils précédents n'est capable de vérifier la quasi-totalité des autorisations, donc si vous connaissez un meilleur outil, envoyez une PR!
# 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
Énumération
Les principaux éléments du Centre d'Identité sont :
Utilisateurs et groupes
Ensembles de permissions : Ont des politiques attachées
Comptes AWS
Ensuite, des relations sont créées pour que les utilisateurs/groupes aient des ensembles de permissions sur le compte AWS.
Notez qu'il existe 3 façons d'attacher des politiques à un ensemble de permissions. Attacher des politiques gérées par AWS, des politiques gérées par le client (ces politiques doivent être créées dans tous les comptes sur lesquels l'ensemble de permissions a un impact), et des politiques intégrées (définies à cet endroit).
# 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>
Énumération Locale
Il est possible de créer à l'intérieur du dossier $HOME/.aws le fichier config pour configurer des profils accessibles via SSO, par exemple :
Cette configuration peut être utilisée avec les commandes :
# Login in ms-sso-profileawsssologin--profilemy-sso-profile# Use dependent-profileawss3ls--profiledependent-profile
Lorsqu'un profil de SSO est utilisé pour accéder à certaines informations, les informations d'identification sont mises en cache dans un fichier à l'intérieur du dossier $HOME/.aws/sso/cache. Par conséquent, elles peuvent être lues et utilisées à partir de là.
De plus, d'autres informations d'identification peuvent être stockées dans le dossier $HOME/.aws/cli/cache. Ce répertoire de cache est principalement utilisé lorsque vous travaillez avec des profils AWS CLI qui utilisent des informations d'identification d'utilisateur IAM ou assument des rôles via IAM (sans SSO). Exemple de configuration:
Créer un utilisateur et lui attribuer des permissions
# 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
Créez un groupe et attribuez-lui des autorisations, puis définissez un utilisateur contrôlé.
Accordez des autorisations supplémentaires à un utilisateur ou groupe contrôlé.
Par défaut, seuls les utilisateurs avec des autorisations provenant du compte de gestion pourront accéder et contrôler le Centre d'identité IAM.
Cependant, il est possible via l'Administrateur délégué d'autoriser les utilisateurs d'un compte différent à le gérer. Ils n'auront pas exactement les mêmes autorisations, mais ils pourront effectuer des activités de gestion.