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 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
Forza bruta delle autorizzazioni
Se sei interessato alle tue autorizzazioni ma non hai accesso per interrogare IAM, puoi sempre forzarle.
bf-aws-permissions
Lo strumento bf-aws-permissions è solo uno script bash che verrà eseguito utilizzando il profilo indicato per tutte le azioni list*, describe*, get* che può trovare utilizzando i messaggi di aiuto della cli aws e restituirà le esecuzioni riuscite.
Lo strumento bf-aws-perms-simulate può trovare le tue autorizzazioni attuali (o quelle di altri principali) se hai l'autorizzazione iam:SimulatePrincipalPolicy
# Ask for permissionspython3aws_permissions_checker.py--profile<AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Se hai trovato alcuni permessi che il tuo utente ha, e pensi che siano concessi da un ruolo AWS gestito (e non da uno personalizzato), puoi utilizzare lo strumento aws-Perms2ManagedRoles per verificare tutti i ruoli gestiti da AWS che concedono i permessi che hai scoperto di avere.
# Run example with my profilepython3aws-Perms2ManagedPolicies.py--profilemyadmin--permissions-fileexample-permissions.txt
È possibile "sapere" se i permessi che hai sono concessi da un ruolo gestito da AWS se vedi che hai permessi su servizi che non vengono utilizzati, ad esempio.
Cloudtrail2IAM
CloudTrail2IAM è uno strumento Python che analizza i log di AWS CloudTrail per estrarre e riassumere le azioni effettuate da chiunque o solo da un utente o ruolo specifico. Lo strumento analizzerà ogni log di cloudtrail dal bucket indicato.
Se trovi file .tfstate (file di stato di Terraform) o file CloudFormation (solitamente file yaml situati all'interno di un bucket con il prefisso cf-templates), puoi leggerli per trovare la configurazione aws e scoprire quali permessi sono stati assegnati a chi.
enumerare-iam
Per utilizzare lo strumento https://github.com/andresriancho/enumerate-iam devi prima scaricare tutti i punti finali API AWS, da questi lo script generate_bruteforce_tests.py otterrà tutti i punti finali "list_", "describe_" e "get_". Infine, proverà ad accedervi con le credenziali fornite e indicherà se ha funzionato.
(Nella mia esperienza lo strumento si blocca a un certo punto, controlla questa correzione per cercare di risolvere il problema).
Nella mia esperienza questo strumento è simile al precedente ma funziona peggio e controlla meno permessi.
È possibile utilizzare lo strumento weirdAAL. Questo strumento controllerà diverse operazioni comuni su diversi servizi comuni (verificherà alcuni permessi di enumerazione e anche alcuni permessi di privesc). Tuttavia, controllerà solo i controlli codificati (l'unico modo per verificare più cose è codificare più test).
# 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
<TuoStrumento>
Nessuno dei tool precedenti è in grado di controllare tutte le autorizzazioni, quindi se conosci un tool migliore invia una 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
Enumerazione
Gli elementi principali del Centro di Identità sono:
Utenti e gruppi
Set di autorizzazioni: Hanno policy collegate
Account AWS
Successivamente, vengono create relazioni in modo che gli utenti/gruppi abbiano Set di autorizzazioni sull'Account AWS.
Nota che ci sono 3 modi per collegare le policy a un Set di autorizzazioni. Collegando le policy gestite da AWS, le policy gestite dal cliente (queste policy devono essere create in tutti gli account sui quali il Set di autorizzazioni sta agendo) e le policy inline (definite all'interno).
# 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>
Enumerazione Locale
È possibile creare all'interno della cartella $HOME/.aws il file config per configurare i profili che sono accessibili tramite SSO, ad esempio:
Questa configurazione può essere utilizzata con i comandi:
# Login in ms-sso-profileawsssologin--profilemy-sso-profile# Use dependent-profileawss3ls--profiledependent-profile
Quando viene utilizzato un profilo da SSO per accedere a determinate informazioni, le credenziali vengono memorizzate nella cartella$HOME/.aws/sso/cache. Di conseguenza, possono essere letti e utilizzati da lì.
Inoltre, ulteriori credenziali possono essere memorizzate nella cartella $HOME/.aws/cli/cache. Questa directory di cache viene principalmente utilizzata quando si lavora con i profili AWS CLI che utilizzano le credenziali dell'utente IAM o assumono ruoli tramite IAM (senza SSO). Esempio di configurazione:
# 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 gruppo e assegnagli permessi e imposta su di esso un utente controllato
Concedi permessi extra a un utente o gruppo controllato
Per impostazione predefinita, solo gli utenti con permessi dall'Account di Gestione saranno in grado di accedere e controllare il Centro Identità IAM.
Tuttavia, è possibile tramite l'Amministratore Delegato consentire agli utenti di un account diverso di gestirlo. Non avranno esattamente gli stessi permessi, ma saranno in grado di eseguire attività di gestione.