AWS - IAM, Identity Center & SSO Enum

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team του HackTricks για το AWS)!

Άλλοι τρόποι υποστήριξης του HackTricks:

IAM

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

pageAWS - 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 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

Βίαιη Δύναμη Δικαιωμάτων

Εάν σας ενδιαφέρουν τα δικαιώματά σας αλλά δεν έχετε πρόσβαση για να ερευνήσετε το IAM, μπορείτε πάντα να τα αναγκάσετε με βία.

bf-aws-permissions

Το εργαλείο bf-aws-permissions είναι απλώς ένα bash script που θα εκτελέσει όλες τις ενέργειες 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 μπορεί να βρει την τρέχουσα άδεια σας (ή αυτήν άλλων αρχών) αν έχετε την άδεια iam:SimulatePrincipalPolicy

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

Perms2ManagedPolicies

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

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

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

Cloudtrail2IAM

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

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]

Εάν βρείτε αρχεία .tfstate (Terraform state files) ή αρχεία CloudFormation (αυτά είναι συνήθως αρχεία yaml που βρίσκονται μέσα σε ένα bucket με το πρόθεμα cf-templates), μπορείτε επίσης να τα διαβάσετε για να βρείτε τη διαμόρφωση aws και να βρείτε ποιες άδειες έχουν ανατεθεί σε ποιον.

enumerate-iam

Για να χρησιμοποιήσετε το εργαλείο https://github.com/andresriancho/enumerate-iam πρέπει πρώτα να κατεβάσετε όλα τα σημεία API AWS, από αυτά το script generate_bruteforce_tests.py θα πάρει όλα τα "list_", "describe_", και "get_" endpoints. Και τέλος, θα προσπαθήσει να έχει πρόσβαση σε αυτά με τα δεδομένα διαπιστευτήρια και θα υποδείξει αν λειτούργησε.

(Κατά την εμπειρία μου το εργαλείο κολλάει σε κάποιο σημείο, ελέγξτε αυτήν τη διόρθωση για να προσπαθήσετε να το διορθώσετε).

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

# 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. Αυτό το εργαλείο θα ελέγξει πολλές κοινές λειτουργίες σε διάφορες κοινές υπηρεσίες (θα ελέγξει κάποιες άδειες απαρίθμησης και επίσης κάποιες άδειες προνομιούχας αύξησης δικαιωμάτων). Αλλά θα ελέγξει μόνο τις κωδικοποιημένες ελέγξεις (η μοναδική δυνατότητα ελέγχου περισσότερων πραγμάτων είναι να κωδικοποιήσετε περισσότερα τεστ).

# 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

<ΤοΕργαλείοΣας>

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

Μη Εξουσιοδοτημένη Πρόσβαση

pageAWS - IAM & STS Unauthenticated Enum

Ανόδος Προνομίων

Στην ακόλουθη σελίδα μπορείτε να ελέγξετε πώς να καταχραστείτε τα δικαιώματα IAM για ανόδο προνομίων:

pageAWS - IAM Privesc

Μετά την Εκμετάλλευση του IAM

pageAWS - IAM Post Exploitation

Διατήρηση του IAM

pageAWS - IAM Persistence

Κέντρο Ταυτότητας IAM

Μπορείτε να βρείτε μια περιγραφή του Κέντρου Ταυτότητας IAM στο:

pageAWS - Basic Information

Σύνδεση μέσω SSO με το 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

Απαρίθμηση

Τα κύρια στοιχεία του Κέντρου Ταυτότητας είναι:

  • Χρήστες και ομάδες

  • Σύνολα Δικαιωμάτων: Έχουν πολιτικές επισυναπτόμενες

  • AWS Λογαριασμοί

Στη συνέχεια, δημιουργούνται σχέσεις ώστε οι χρήστες/ομάδες να έχουν Σύνολα Δικαιωμάτων πάνω στον AWS Λογαριασμό.

Σημείωση ότι υπάρχουν 3 τρόποι για τη σύνδεση πολιτικών σε ένα Σύνολο Δικαιωμάτων. Η σύνδεση διαχειριζόμενων πολιτικών AWS, διαχειριζόμενων πολιτικών πελατών (αυτές οι πολιτικές πρέπει να δημιουργηθούν σε όλους τους λογαριασμούς που επηρεάζει το Σύνολο Δικαιωμάτων) και ενσωματωμένων πολιτικών (ορίζονται εκεί).

# 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 για να ρυθμίσετε προφίλ που είναι προσβάσιμα μέσω 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

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

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

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

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

pageAWS - Identity Center & SSO Unauthenticated Enum

Ανόδος προνομίων

pageAWS - SSO & identitystore Privesc

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

pageAWS - SSO & identitystore Post Exploitation

Διατήρηση

Δημιουργία ενός χρήστη και ανάθεση δικαιωμάτων σε αυτόν

# 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
  • Δημιουργήστε μια ομάδα και αναθέστε της δικαιώματα και ορίστε έναν ελεγχόμενο χρήστη

  • Δώστε επιπλέον δικαιώματα σε έναν ελεγχόμενο χρήστη ή ομάδα

  • Από προεπιλογή, μόνο οι χρήστες με δικαιώματα από τον Λογαριασμό Διαχείρισης θα μπορούν να έχουν πρόσβαση και έλεγχο στο Κέντρο Ταυτότητας IAM.

Ωστόσο, είναι δυνατό μέσω του Αναθέτοντα Διαχειριστή να επιτραπεί σε χρήστες από διαφορετικό λογαριασμό να το διαχειριστοών. Δεν θα έχουν ακριβώς τα ίδια δικαιώματα, αλλά θα μπορούν να εκτελούν δραστηριότητες διαχείρισης.

Last updated