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]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
Permessi Brute Force
Se sei interessato ai tuoi permessi ma non hai accesso per interrogare IAM, puoi sempre forzarli.
bf-aws-permissions
Lo strumento bf-aws-permissions è semplicemente uno script bash che eseguirà utilizzando il profilo indicato tutte le azioni list*, describe*, get* che può trovare utilizzando i messaggi di aiuto di aws cli e restituirà le esecuzioni riuscite.
Lo strumento bf-aws-perms-simulate può trovare le tue attuali autorizzazioni (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 controllare 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 eseguite 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 (questi sono solitamente file yaml situati all'interno di un bucket con il prefisso cf-templates), puoi anche leggerli per trovare la configurazione aws e scoprire quali permessi sono stati assegnati a chi.
enumerate-iam
Per utilizzare lo strumento https://github.com/andresriancho/enumerate-iam devi prima scaricare tutti gli endpoint API AWS, da questi lo script generate_bruteforce_tests.py otterrà tutti gli endpoint "list_", "describe_" e "get_". E infine, cercherà di accedere a essi con le credenziali fornite e indicherà se ha funzionato.
(Nella mia esperienza, lo strumento si blocca a un certo punto, controlla questa soluzione per cercare di risolvere il problema).
Nella mia esperienza, questo strumento è simile al precedente ma funziona peggio e controlla meno permessi.
Puoi anche utilizzare lo strumento weirdAAL. Questo strumento controllerà diverse operazioni comuni su diversi servizi comuni (verificherà alcune autorizzazioni di enumerazione e anche alcune autorizzazioni di privesc). Ma controllerà solo i controlli codificati (l'unico modo per controllare 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
<YourTool>
Nessuno degli strumenti precedenti è in grado di controllare quasi tutti i permessi, quindi se conosci uno strumento 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 Identità sono:
Utenti e gruppi
Set di Permessi: Hanno politiche collegate
Account AWS
Poi, vengono create relazioni in modo che utenti/gruppi abbiano Set di Permessi su Account AWS.
Nota che ci sono 3 modi per allegare politiche a un Set di Permessi. Allegare politiche gestite da AWS, politiche gestite dal cliente (queste politiche devono essere create in tutti gli account che il Set di Permessi sta influenzando) e politiche inline (definite 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 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>
Local Enumeration
È possibile creare all'interno della cartella $HOME/.aws il file config per configurare i profili 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 un profilo da SSO è utilizzato per accedere a alcune informazioni, le credenziali sono memorizzate in un file all'interno della cartella $HOME/.aws/sso/cache. Pertanto possono essere lette e utilizzate da lì.
Inoltre, ulteriori credenziali possono essere memorizzate nella cartella $HOME/.aws/cli/cache. Questa directory di cache è utilizzata principalmente quando si lavora con i profili AWS CLI che utilizzano credenziali di utenti 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 un utente controllato
Dai permessi extra a un utente o gruppo controllato
Per impostazione predefinita, solo gli utenti con permessi dall'Account di Gestione potranno accedere e controllare l'IAM Identity Center.
Tuttavia, è possibile tramite Delegate Administrator consentire agli utenti di un account diverso di gestirlo. Non avranno esattamente gli stessi permessi, ma potranno eseguire attività di gestione.