# AWS - IAM, Identity Center & SSO Enum {{#include ../../../banners/hacktricks-training.md}} ## IAM Sie finden eine **Beschreibung von IAM** in: {{#ref}} ../aws-basic-information/ {{#endref}} ### Enumeration Hauptberechtigungen, die benötigt werden: - `iam:ListPolicies`, `iam:GetPolicy` und `iam:GetPolicyVersion` - `iam:ListRoles` - `iam:ListUsers` - `iam:ListGroups` - `iam:ListGroupsForUser` - `iam:ListAttachedUserPolicies` - `iam:ListAttachedRolePolicies` - `iam:ListAttachedGroupPolicies` - `iam:ListUserPolicies` und `iam:GetUserPolicy` - `iam:ListGroupPolicies` und `iam:GetGroupPolicy` - `iam:ListRolePolicies` und `iam:GetRolePolicy` ```bash # 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. aws iam get-account-authorization-details # List users aws iam get-user #Get current user information aws iam list-users aws iam list-ssh-public-keys #User keys for CodeCommit aws iam get-ssh-public-key --user-name --ssh-public-key-id --encoding SSH #Get public key with metadata aws iam list-service-specific-credentials #Get special permissions of the IAM user over specific services aws iam get-user --user-name #Get metadata of user, included permissions boundaries aws iam list-access-keys #List created access keys ## inline policies aws iam list-user-policies --user-name #Get inline policies of the user aws iam get-user-policy --user-name --policy-name #Get inline policy details ## attached policies aws iam list-attached-user-policies --user-name #Get policies of user, it doesn't get inline policies # List groups aws iam list-groups #Get groups aws iam list-groups-for-user --user-name #Get groups of a user aws iam get-group --group-name #Get group name info ## inline policies aws iam list-group-policies --group-name #Get inline policies of the group aws iam get-group-policy --group-name --policy-name #Get an inline policy info ## attached policies aws iam list-attached-group-policies --group-name #Get policies of group, it doesn't get inline policies # List roles aws iam list-roles #Get roles aws iam get-role --role-name #Get role ## inline policies aws iam list-role-policies --role-name #Get inline policies of a role aws iam get-role-policy --role-name --policy-name #Get inline policy details ## attached policies aws iam list-attached-role-policies --role-name #Get policies of role, it doesn't get inline policies # List policies aws iam list-policies [--only-attached] [--scope Local] aws iam list-policies-granting-service-access --arn --service-namespaces # Get list of policies that give access to the user to the service ## Get policy content aws iam get-policy --policy-arn aws iam list-policy-versions --policy-arn aws iam get-policy-version --policy-arn --version-id # Enumerate providers aws iam list-saml-providers aws iam get-saml-provider --saml-provider-arn aws iam list-open-id-connect-providers aws iam get-open-id-connect-provider --open-id-connect-provider-arn # Password Policy aws iam get-account-password-policy # MFA aws iam list-mfa-devices aws iam list-virtual-mfa-devices ``` ### Berechtigungen Brute Force Wenn Sie an Ihren eigenen Berechtigungen interessiert sind, aber keinen Zugriff haben, um IAM abzufragen, können Sie sie immer brute-forcen. #### bf-aws-permissions Das Tool [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) ist nur ein Bash-Skript, das mit dem angegebenen Profil alle **`list*`, `describe*`, `get*`** Aktionen ausführt, die es mithilfe der `aws` CLI-Hilfenachrichten finden kann, und **die erfolgreichen Ausführungen zurückgibt**. ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt ``` #### bf-aws-perms-simulate Das Tool [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate) kann Ihre aktuellen Berechtigungen (oder die von anderen Prinzipalen) finden, wenn Sie die Berechtigung **`iam:SimulatePrincipalPolicy`** haben. ```bash # Ask for permissions python3 aws_permissions_checker.py --profile [--arn ] ``` #### Perms2ManagedPolicies Wenn Sie **einige Berechtigungen gefunden haben, die Ihr Benutzer hat**, und Sie denken, dass sie von einer **verwalteten AWS-Rolle** (und nicht von einer benutzerdefinierten) gewährt werden. Sie können das Tool [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) verwenden, um alle **AWS-verwalteten Rollen zu überprüfen, die die Berechtigungen gewähren, die Sie entdeckt haben, dass Sie sie haben**. ```bash # Run example with my profile python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt ``` > [!WARNING] > Es ist möglich zu "wissen", ob die Berechtigungen, die Sie haben, von einer AWS verwalteten Rolle gewährt wurden, wenn Sie sehen, dass **Sie Berechtigungen für Dienste haben, die nicht verwendet werden**. #### Cloudtrail2IAM [**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM) ist ein Python-Tool, das **AWS CloudTrail-Protokolle analysiert, um Aktionen** zu extrahieren und zusammenzufassen, die von allen oder nur einem bestimmten Benutzer oder einer Rolle durchgeführt wurden. Das Tool wird **jedes CloudTrail-Protokoll aus dem angegebenen Bucket analysieren**. ```bash git clone https://github.com/carlospolop/Cloudtrail2IAM cd Cloudtrail2IAM pip install -r requirements.txt python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PROFILE [--filter-name FILTER_NAME] [--threads THREADS] ``` > [!WARNING] > Wenn Sie .tfstate (Terraform-Zustandsdateien) oder CloudFormation-Dateien finden (diese sind normalerweise yaml-Dateien, die sich in einem Bucket mit dem Präfix cf-templates befinden), können Sie diese ebenfalls lesen, um aws-Konfigurationen zu finden und herauszufinden, welche Berechtigungen wem zugewiesen wurden. #### enumerate-iam Um das Tool [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam) zu verwenden, müssen Sie zuerst alle API AWS-Endpunkte herunterladen. Das Skript **`generate_bruteforce_tests.py`** wird dann alle **"list\_", "describe\_", und "get\_" Endpunkte** abrufen. Schließlich wird es versuchen, **auf diese zuzugreifen** mit den angegebenen Anmeldeinformationen und **anzeigen, ob es funktioniert hat**. (In meiner Erfahrung **hängt das Tool irgendwann**, [**sehen Sie sich diesen Fix an**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c), um zu versuchen, das zu beheben). > [!WARNING] > Meiner Erfahrung nach ist dieses Tool wie das vorherige, funktioniert jedoch schlechter und überprüft weniger Berechtigungen. ```bash # Install tool git clone git@github.com:andresriancho/enumerate-iam.git cd enumerate-iam/ pip install -r requirements.txt # Download API endpoints cd enumerate_iam/ git clone https://github.com/aws/aws-sdk-js.git python3 generate_bruteforce_tests.py rm -rf aws-sdk-js cd .. # Enumerate permissions python3 enumerate-iam.py --access-key ACCESS_KEY --secret-key SECRET_KEY [--session-token SESSION_TOKEN] [--region REGION] ``` #### weirdAAL Sie können auch das Tool [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki) verwenden. Dieses Tool überprüft **mehrere gängige Operationen auf mehreren gängigen Diensten** (es werden einige Enumerationsberechtigungen und auch einige Privesc-Berechtigungen überprüft). Es werden jedoch nur die codierten Überprüfungen durchgeführt (der einzige Weg, um mehr zu überprüfen, besteht darin, weitere Tests zu codieren). ```bash # Install git clone https://github.com/carnal0wnage/weirdAAL.git cd weirdAAL python3 -m venv weirdAAL source weirdAAL/bin/activate pip3 install -r requirements.txt # Create a .env file with aws credentials such as [default] aws_access_key_id = aws_secret_access_key = # Setup DB python3 create_dbs.py # Invoke it python3 weirdAAL.py -m ec2_describe_instances -t ec2test # Just some ec2 tests python3 weirdAAL.py -m recon_all -t MyTarget # Check all permissions # You will see output such as: # [+] elbv2 Actions allowed are [+] # ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups'] ``` #### Härtungswerkzeuge zur BF-Berechtigungen {{#tabs }} {{#tab name="CloudSploit" }} ```bash # Export env variables ./index.js --console=text --config ./config.js --json /tmp/out-cloudsploit.json # Filter results removing unknown jq 'map(select(.status | contains("UNKNOWN") | not))' /tmp/out-cloudsploit.json | jq 'map(select(.resource | contains("N/A") | not))' > /tmp/out-cloudsploit-filt.json # Get services by regions jq 'group_by(.region) | map({(.[0].region): ([map((.resource | split(":"))[2]) | unique])})' ~/Desktop/pentests/cere/greybox/core-dev-dev-cloudsploit-filtered.json ``` {{#endtab }} {{#tab name="SteamPipe" }} ```bash # https://github.com/turbot/steampipe-mod-aws-insights steampipe check all --export=json # https://github.com/turbot/steampipe-mod-aws-perimeter # In this case you cannot output to JSON, so heck it in the dashboard steampipe dashboard ``` {{#endtab }} {{#endtabs }} #### \ Keines der vorherigen Tools ist in der Lage, nahezu alle Berechtigungen zu überprüfen, also wenn du ein besseres Tool kennst, sende einen PR! ### Unauthenticated Access {{#ref}} ../aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md {{#endref}} ### Privilege Escalation Auf der folgenden Seite kannst du überprüfen, wie man **IAM-Berechtigungen missbraucht, um Privilegien zu eskalieren**: {{#ref}} ../aws-privilege-escalation/aws-iam-privesc.md {{#endref}} ### IAM Post Exploitation {{#ref}} ../aws-post-exploitation/aws-iam-post-exploitation.md {{#endref}} ### IAM Persistence {{#ref}} ../aws-persistence/aws-iam-persistence.md {{#endref}} ## IAM Identity Center Du kannst eine **Beschreibung des IAM Identity Center** finden in: {{#ref}} ../aws-basic-information/ {{#endref}} ### Connect via SSO with CLI ```bash # Connect with sso via CLI aws configure sso aws configure sso [profile profile_name] sso_start_url = https://subdomain.awsapps.com/start/ sso_account_id = sso_role_name = AdministratorAccess sso_region = us-east-1 ``` ### Aufzählung Die Hauptbestandteile des Identity Centers sind: - Benutzer und Gruppen - Berechtigungssätze: Haben angehängte Richtlinien - AWS-Konten Dann werden Beziehungen erstellt, sodass Benutzer/Gruppen Berechtigungssätze über das AWS-Konto haben. > [!NOTE] > Beachten Sie, dass es 3 Möglichkeiten gibt, Richtlinien an einen Berechtigungssatz anzuhängen. Anheften von AWS-verwalteten Richtlinien, von Kunden verwalteten Richtlinien (diese Richtlinien müssen in allen Konten erstellt werden, die der Berechtigungssatz betrifft) und Inline-Richtlinien (dort definiert). ```bash # Check if IAM Identity Center is used aws sso-admin list-instances # Get Permissions sets. These are the policies that can be assigned aws sso-admin list-permission-sets --instance-arn aws sso-admin describe-permission-set --instance-arn --permission-set-arn ## Get managed policies of a permission set aws sso-admin list-managed-policies-in-permission-set --instance-arn --permission-set-arn ## Get inline policies of a permission set aws sso-admin get-inline-policy-for-permission-set --instance-arn --permission-set-arn ## Get customer managed policies of a permission set aws sso-admin list-customer-managed-policy-references-in-permission-set --instance-arn --permission-set-arn ## Get boundaries of a permission set aws sso-admin get-permissions-boundary-for-permission-set --instance-arn --permission-set-arn ## List accounts a permission set is affecting aws sso-admin list-accounts-for-provisioned-permission-set --instance-arn --permission-set-arn ## List principals given a permission set in an account aws sso-admin list-account-assignments --instance-arn --permission-set-arn --account-id # Get permissions sets affecting an account aws sso-admin list-permission-sets-provisioned-to-account --instance-arn --account-id # List users & groups from the identity store aws identitystore list-users --identity-store-id aws identitystore list-groups --identity-store-id ## Get members of groups aws identitystore list-group-memberships --identity-store-id --group-id ## Get memberships or a user or a group aws identitystore list-group-memberships-for-member --identity-store-id --member-id ``` ### Lokale Enumeration Es ist möglich, im Ordner `$HOME/.aws` die Datei config zu erstellen, um Profile zu konfigurieren, die über SSO zugänglich sind, zum Beispiel: ```ini [default] region = us-west-2 output = json [profile my-sso-profile] sso_start_url = https://my-sso-portal.awsapps.com/start sso_region = us-west-2 sso_account_id = 123456789012 sso_role_name = MySSORole region = us-west-2 output = json [profile dependent-profile] role_arn = arn:aws:iam:::role/ReadOnlyRole source_profile = Hacktricks-Admin ``` Diese Konfiguration kann mit den Befehlen verwendet werden: ```bash # Login in ms-sso-profile aws sso login --profile my-sso-profile # Use dependent-profile aws s3 ls --profile dependent-profile ``` Wenn ein **Profil von SSO verwendet wird**, um auf Informationen zuzugreifen, werden die Anmeldeinformationen **in einer Datei im Ordner** **`$HOME/.aws/sso/cache`** **zwischengespeichert**. Daher können sie **von dort gelesen und verwendet werden**. Darüber hinaus können **weitere Anmeldeinformationen** im Ordner **`$HOME/.aws/cli/cache`** gespeichert werden. Dieses Cache-Verzeichnis wird hauptsächlich verwendet, wenn Sie mit **AWS CLI-Profilen** arbeiten, die IAM-Benutzeranmeldeinformationen verwenden oder Rollen über IAM (ohne SSO) **annehmen**. Konfigurationsbeispiel: ```ini [profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi external_id = 123456 ``` ### Unauthentifizierter Zugriff {{#ref}} ../aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md {{#endref}} ### Privilegienerweiterung {{#ref}} ../aws-privilege-escalation/aws-sso-and-identitystore-privesc.md {{#endref}} ### Nach der Ausnutzung {{#ref}} ../aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md {{#endref}} ### Persistenz #### Erstellen Sie einen Benutzer und weisen Sie ihm Berechtigungen zu ```bash # Create user identitystore:CreateUser aws identitystore create-user --identity-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 ``` - Erstellen Sie eine Gruppe und weisen Sie ihr Berechtigungen zu und setzen Sie einen kontrollierten Benutzer darauf - Gewähren Sie einem kontrollierten Benutzer oder einer Gruppe zusätzliche Berechtigungen - Standardmäßig können nur Benutzer mit Berechtigungen aus dem Management-Konto auf das IAM Identity Center zugreifen und es steuern. Es ist jedoch möglich, über den Delegierten Administrator Benutzern aus einem anderen Konto die Verwaltung zu ermöglichen. Sie werden nicht genau die gleichen Berechtigungen haben, aber sie werden in der Lage sein, [**Verwaltungsaktivitäten**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) durchzuführen. {{#include ../../../banners/hacktricks-training.md}}