AWS - IAM, Identity Center & SSO Απογραφή

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

IAM

Μπορείτε να βρείτε μια περιγραφή του IAM στο:

AWS - Basic Information

Απογραφή

Κύριες άδειες που απαιτούνται:

  • iam:ListPolicies, iam:GetPolicy και iam:GetPolicyVersion
  • iam:ListRoles
  • iam:ListUsers
  • iam:ListGroups
  • iam:ListGroupsForUser
  • iam:ListAttachedUserPolicies
  • iam:ListAttachedRolePolicies
  • iam:ListAttachedGroupPolicies
  • iam:ListUserPolicies και iam:GetUserPolicy
  • iam:ListGroupPolicies και iam:GetGroupPolicy
  • iam:ListRolePolicies και 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.
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 <username> --ssh-public-key-id <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 <username> #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 <username> #Get inline policies of the user
aws iam get-user-policy --user-name <username> --policy-name <policyname> #Get inline policy details
## attached policies
aws iam list-attached-user-policies --user-name <username> #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 <username> #Get groups of a user
aws iam get-group --group-name <name> #Get group name info
## inline policies
aws iam list-group-policies --group-name <username> #Get inline policies of the group
aws iam get-group-policy --group-name <username> --policy-name <policyname> #Get an inline policy info
## attached policies
aws iam list-attached-group-policies --group-name <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 <role-name> #Get role
## inline policies
aws iam list-role-policies --role-name <name> #Get inline policies of a role
aws iam get-role-policy --role-name <name> --policy-name <name> #Get inline policy details
## attached policies
aws iam list-attached-role-policies --role-name <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 <identity> --service-namespaces <svc> # Get list of policies that give access to the user to the service
## Get policy content
aws iam get-policy --policy-arn <policy_arn>
aws iam list-policy-versions --policy-arn <arn>
aws iam get-policy-version --policy-arn <arn:aws:iam::975426262029:policy/list_apigateways> --version-id <VERSION_X>

# Enumerate providers
aws iam list-saml-providers
aws iam get-saml-provider --saml-provider-arn <ARN>
aws iam list-open-id-connect-providers
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>

# Password Policy
aws iam get-account-password-policy

# MFA
aws iam list-mfa-devices
aws iam list-virtual-mfa-devices

Σιωπηρή επιβεβαίωση δικαιωμάτων μέσω σκόπιμων αποτυχιών

Όταν τα List* ή τα simulator APIs είναι μπλοκαρισμένα, μπορείτε να επιβεβαιώσετε δικαιώματα που τροποποιούν χωρίς να δημιουργήσετε μόνιμους πόρους εξαναγκάζοντας προβλέψιμα σφάλματα επικύρωσης. Η AWS εξακολουθεί να αξιολογεί το IAM πριν επιστρέψει αυτά τα σφάλματα, οπότε η εμφάνιση του σφάλματος αποδεικνύει ότι ο καλών έχει την ενέργεια:

# Confirm iam:CreateUser without creating a new principal (fails only after authz)
aws iam create-user --user-name <existing_user>  # -> EntityAlreadyExistsException

# Confirm iam:CreateLoginProfile while learning password policy requirements
aws iam create-login-profile --user-name <target_user> --password lower --password-reset-required  # -> PasswordPolicyViolationException

Αυτές οι απόπειρες εξακολουθούν να δημιουργούν CloudTrail γεγονότα (με το errorCode ορισμένο) αλλά αποφεύγουν να αφήνουν νέα IAM artifacts, καθιστώντας τις χρήσιμες για επικύρωση δικαιωμάτων με χαμηλό θόρυβο κατά τη διάρκεια του interactive recon.

Permissions Brute Force

Αν ενδιαφέρεστε για τα δικά σας permissions αλλά δεν έχετε πρόσβαση να κάνετε query στο IAM, μπορείτε πάντα να τα brute-force.

bf-aws-permissions

Το εργαλείο bf-aws-permissions είναι απλώς ένα bash script που, χρησιμοποιώντας το καθορισμένο profile, θα εκτελέσει όλες τις list*, describe*, get* ενέργειες που μπορεί να βρει μέσω των μηνυμάτων βοήθειας του aws cli και θα επιστρέψει τις επιτυχείς εκτελέσεις.

# Bruteforce permissions
bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt

bf-aws-perms-simulate

Το εργαλείο bf-aws-perms-simulate μπορεί να εντοπίσει τα τρέχοντα δικαιώματά σας (ή εκείνα άλλων principals) εφόσον έχετε την άδεια iam:SimulatePrincipalPolicy

# Ask for permissions
python3 aws_permissions_checker.py --profile <AWS_PROFILE> [--arn <USER_ARN>]

Perms2ManagedPolicies

Εάν βρήκατε κάποια δικαιώματα που έχει ο χρήστης σας, και πιστεύετε ότι αυτά χορηγούνται από έναν managed AWS role (και όχι από έναν προσαρμοσμένο). Μπορείτε να χρησιμοποιήσετε το εργαλείο aws-Perms2ManagedRoles για να ελέγξετε όλους τους AWS managed roles που παραχωρούν τα δικαιώματα που ανακαλύψατε ότι έχετε.

# Run example with my profile
python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt

Warning

Είναι δυνατό να “γνωρίζετε” αν τα δικαιώματα που έχετε έχουν παραχωρηθεί από έναν διαχειριζόμενο ρόλο του AWS αν δείτε, για παράδειγμα, ότι έχετε δικαιώματα πάνω σε υπηρεσίες που δεν χρησιμοποιούνται.

Cloudtrail2IAM

CloudTrail2IAM είναι ένα Python εργαλείο που αναλύει AWS CloudTrail logs για να εξάγει και να συνοψίσει τις ενέργειες που έγιναν από όλους ή μόνο από έναν συγκεκριμένο χρήστη ή ρόλο. Το εργαλείο θα αναλύσει κάθε cloudtrail log από το υποδεικνυόμενο bucket.

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

Αν βρείτε .tfstate (Terraform state files) ή CloudFormation files (these are usually yaml files located inside a bucket with the prefix cf-templates), μπορείτε επίσης να τα διαβάσετε για να βρείτε την aws configuration και να δείτε ποιες άδειες έχουν ανατεθεί σε ποιον.

enumerate-iam

To use the tool https://github.com/andresriancho/enumerate-iam you first need to download all the API AWS endpoints, from those the script generate_bruteforce_tests.py will get all the “list_”, “describe_”, and “get_” endpoints. And finally, it will try to access them with the given credentials and indicate if it worked.

(Στην εμπειρία μου το εργαλείο κολλάει σε κάποιο σημείο, checkout this fix για να προσπαθήσετε να το διορθώσετε).

Warning

Στην εμπειρία μου αυτό το εργαλείο είναι σαν το προηγούμενο αλλά δουλεύει χειρότερα και ελέγχει λιγότερα δικαιώματα

# 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

Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο weirdAAL. Αυτό το εργαλείο θα ελέγξει πολλές κοινές λειτουργίες σε πολλές κοινές υπηρεσίες (θα ελέγξει μερικά enumeration permissions και επίσης μερικά privesc permissions). Αλλά θα ελέγξει μόνο τους κωδικοποιημένους ελέγχους — ο μόνος τρόπος να ελέγξετε περισσότερα είναι να γράψετε περισσότερα tests.

# 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 = <insert key id>
aws_secret_access_key = <insert secret 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']

Εργαλεία σκληρύνσεως για δικαιώματα BF

# 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

<YourTool>

Κανένα από τα προηγούμενα εργαλεία δεν μπορεί να ελέγξει σχεδόν όλα τα δικαιώματα, οπότε αν γνωρίζετε κάποιο καλύτερο εργαλείο, στείλτε ένα PR!

Unauthenticated Access

AWS - IAM & STS Unauthenticated Enum

Privilege Escalation

Στην επόμενη σελίδα μπορείτε να δείτε πώς να abuse IAM permissions to escalate privileges:

AWS - IAM Privesc

IAM Post Exploitation

AWS - IAM Post Exploitation

IAM Persistence

AWS - IAM Persistence

IAM Identity Center

Μπορείτε να βρείτε μια περιγραφή του IAM Identity Center στο:

AWS - Basic Information

Connect via SSO with CLI

# 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 = <account_numbre>
sso_role_name = AdministratorAccess
sso_region = us-east-1

Καταγραφή

Τα κύρια στοιχεία του Identity Center είναι:

  • Χρήστες και ομάδες
  • Permission Sets: Έχουν συνημμένες πολιτικές
  • AWS Accounts

Στη συνέχεια, δημιουργούνται σχέσεις έτσι ώστε οι χρήστες/ομάδες να έχουν Permission Sets σε AWS Accounts.

Note

Σημειώστε ότι υπάρχουν 3 τρόποι για να επισυνάψετε policies σε ένα Permission Set. Επισύναψη AWS managed policies, Customer managed policies (αυτές οι πολιτικές πρέπει να δημιουργηθούν σε όλους τους λογαριασμούς που επηρεάζει το Permission Set), και inline policies (ορισμένες εκεί).

# 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 <instance-arn>
aws sso-admin describe-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>

## Get managed policies of a permission set
aws sso-admin list-managed-policies-in-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## Get inline policies of a permission set
aws sso-admin get-inline-policy-for-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## Get customer managed policies of a permission set
aws 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 set
aws sso-admin get-permissions-boundary-for-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>

## List accounts a permission set is affecting
aws 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 account
aws sso-admin list-account-assignments --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --account-id <account_id>

# Get permissions sets affecting an account
aws sso-admin list-permission-sets-provisioned-to-account --instance-arn <instance-arn> --account-id <account_id>

# List users & groups from the identity store
aws identitystore list-users --identity-store-id <store-id>
aws identitystore list-groups --identity-store-id <store-id>
## Get members of groups
aws identitystore list-group-memberships --identity-store-id <store-id> --group-id <group-id>
## Get memberships or a user or a group
aws identitystore list-group-memberships-for-member --identity-store-id <store-id> --member-id <member-id>

Τοπική Αναγνώριση

Είναι δυνατό να δημιουργηθεί μέσα στον φάκελο $HOME/.aws το αρχείο config για να οριστούν profiles που είναι προσβάσιμα μέσω SSO, για παράδειγμα:

[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::<acc-id>:role/ReadOnlyRole
source_profile = Hacktricks-Admin

Αυτή η διαμόρφωση μπορεί να χρησιμοποιηθεί με τις εντολές:

# Login in ms-sso-profile
aws sso login --profile my-sso-profile
# Use dependent-profile
aws s3 ls --profile dependent-profile

Όταν ένα profile από SSO χρησιμοποιείται για πρόσβαση σε κάποιες πληροφορίες, τα credentials είναι cached σε ένα αρχείο μέσα στον φάκελο $HOME/.aws/sso/cache. Επομένως μπορούν να διαβαστούν και να χρησιμοποιηθούν από εκεί.

Επιπλέον, περισσότερα credentials μπορούν να αποθηκευτούν στον φάκελο $HOME/.aws/cli/cache. Αυτός ο cache directory χρησιμοποιείται κυρίως όταν εργάζεστε με AWS CLI profiles που χρησιμοποιούν IAM user credentials ή assume roles μέσω IAM (χωρίς SSO). Config example:

[profile crossaccountrole]
role_arn = arn:aws:iam::234567890123:role/SomeRole
source_profile = default
mfa_serial = arn:aws:iam::123456789012:mfa/saanvi
external_id = 123456

Μη αυθεντικοποιημένη πρόσβαση

AWS - Identity Center & SSO Unauthenticated Enum

Ανύψωση προνομίων

AWS - SSO & identitystore Privesc

Μετά την εκμετάλλευση

AWS - SSO & identitystore Post Exploitation

Διατήρηση πρόσβασης

Δημιουργήστε έναν user και εκχωρήστε του permissions

# Create user identitystore:CreateUser
aws 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
  • Δημιουργήστε μια ομάδα, αναθέστε της δικαιώματα και ορίστε σε αυτήν έναν ελεγχόμενο χρήστη
  • Δώστε επιπλέον δικαιώματα σε έναν ελεγχόμενο χρήστη ή ομάδα
  • Εξ ορισμού, μόνο χρήστες με δικαιώματα από το Management Account θα μπορούν να έχουν πρόσβαση και να ελέγχουν το IAM Identity Center.

Ωστόσο, είναι δυνατό μέσω του Delegate Administrator να επιτρέψετε σε χρήστες από διαφορετικό account να το διαχειριστούν. Δεν θα έχουν ακριβώς τα ίδια δικαιώματα, αλλά θα μπορούν να εκτελούν management activities.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks