AWS - IAM, Identity Center & SSO Enum

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

IAM

Eine Beschreibung von IAM finden Sie unter:

pageAWS - Basic Information

Aufzählung

Hauptberechtigungen benötigt:

  • 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

# 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

Berechtigungen Brute Force

Wenn Sie an Ihren eigenen Berechtigungen interessiert sind, aber keinen Zugriff auf die Abfrage von IAM haben, könnten Sie sie immer brute-forcen.

bf-aws-berechtigungen

Das Tool bf-aws-berechtigungen ist nur ein Bash-Skript, das unter Verwendung des angegebenen Profils alle list*, describe*, get* Aktionen ausführt, die es mithilfe der Hilfe von aws cli finden kann, und die erfolgreichen Ausführungen zurückgibt.

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

bf-aws-perms-simulate

Das Tool bf-aws-perms-simulate kann Ihre aktuellen Berechtigungen (oder die von anderen Prinzipalen) finden, wenn Sie die Berechtigung iam:SimulatePrincipalPolicy haben.

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

Perms2ManagedPolicies

Wenn Sie Berechtigungen gefunden haben, die Ihr Benutzer hat, und Sie glauben, dass sie von einer verwalteten AWS-Rolle (und nicht von einer benutzerdefinierten Rolle) gewährt werden, können Sie das Tool aws-Perms2ManagedRoles verwenden, um alle AWS-verwalteten Rollen zu überprüfen, die die von Ihnen entdeckten Berechtigungen gewähren.

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

Es ist möglich zu "wissen", ob die Berechtigungen, die Sie haben, von einer von AWS verwalteten Rolle gewährt werden, wenn Sie feststellen, dass Sie Berechtigungen für Dienste haben, die beispielsweise nicht verwendet werden.

Cloudtrail2IAM

CloudTrail2IAM ist ein Python-Tool, das AWS CloudTrail-Protokolle analysiert, um Aktionen zu extrahieren und zusammenzufassen, die von jedem oder nur einem bestimmten Benutzer oder einer bestimmten Rolle durchgeführt wurden. Das Tool wird jedes CloudTrail-Protokoll aus dem angegebenen Bucket analysieren.

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]

Wenn Sie .tfstate (Terraform-Zustandsdateien) oder CloudFormation-Dateien finden (diese befinden sich normalerweise in YAML-Dateien in einem Bucket mit dem Präfix cf-templates), können Sie diese auch lesen, um AWS-Konfigurationen zu finden und herauszufinden, welche Berechtigungen für wen erteilt wurden.

enumerate-iam

Um das Tool https://github.com/andresriancho/enumerate-iam zu verwenden, müssen Sie zuerst alle API AWS-Endpunkte herunterladen. Das Skript generate_bruteforce_tests.py wird alle "list_", "describe_" und "get_" Endpunkte aus diesen abrufen. Schließlich wird versucht, auf sie zuzugreifen, und es wird angezeigt, ob es funktioniert hat.

(In meiner Erfahrung hängt das Tool an einem bestimmten Punkt, überprüfen Sie diese Korrektur, um zu versuchen, das zu beheben).

In meiner Erfahrung ist dieses Tool wie das vorherige, funktioniert jedoch schlechter und überprüft weniger Berechtigungen.

# 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önnten auch das Tool weirdAAL verwenden. Dieses Tool überprüft mehrere gängige Operationen auf mehreren gängigen Diensten (es überprüft einige Berechtigungen für die Aufzählung und auch einige Berechtigungen für die Privilegieneskalation). Es überprüft jedoch nur die codierten Überprüfungen (der einzige Weg, um mehr zu überprüfen, besteht darin, weitere Tests zu codieren).

# 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']

Absicherungstools zum Durchsuchen von Berechtigungen

# 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

<DeinTool>

Keines der vorherigen Tools ist in der Lage, nahezu alle Berechtigungen zu überprüfen, daher sende einen Pull Request, wenn du ein besseres Tool kennst!

Nicht authentifizierter Zugriff

pageAWS - IAM & STS Unauthenticated Enum

Privilege Escalation

Auf der folgenden Seite kannst du nachsehen, wie du IAM-Berechtigungen missbrauchen kannst, um Privilegien zu eskalieren:

pageAWS - IAM Privesc

IAM Post Exploitation

pageAWS - IAM Post Exploitation

IAM Persistence

pageAWS - IAM Persistence

IAM Identity Center

Eine Beschreibung des IAM Identity Center findest du unter:

pageAWS - Basic Information

Verbindung über SSO mit 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

Auflistung

Die Hauptelemente des Identitätszentrums sind:

  • Benutzer und Gruppen

  • Berechtigungssätze: Haben Richtlinien angehängt

  • AWS-Konten

Dann werden Beziehungen erstellt, damit Benutzer/Gruppen Berechtigungssätze über AWS-Konto haben.

Beachten Sie, dass es 3 Möglichkeiten gibt, Richtlinien an einen Berechtigungssatz anzuhängen. Anhängen von AWS-Verwaltungsrichtlinien, Kundenverwaltete Richtlinien (diese Richtlinien müssen in allen Konten erstellt werden, die vom Berechtigungssatz betroffen sind), und Inline-Richtlinien (dort definiert).

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

Lokale Enumeration

Es ist möglich, innerhalb des Ordners $HOME/.aws die Datei config zu erstellen, um Profile zu konfigurieren, die beispielsweise über SSO zugänglich sind:

[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

Diese Konfiguration kann mit den Befehlen verwendet werden:

# 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 bestimmte Informationen zuzugreifen, werden die Anmeldedaten 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 Anmeldedaten 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 annehmen (ohne SSO). Konfigurationsbeispiel:

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

Nicht authentifizierter Zugriff

pageAWS - Identity Center & SSO Unauthenticated Enum

Privilege Escalation

pageAWS - SSO & identitystore Privesc

Post-Exploitation

pageAWS - SSO & identitystore Post Exploitation

Persistenz

Erstellen Sie einen Benutzer und weisen Sie ihm Berechtigungen zu

# 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
  • Erstellen Sie eine Gruppe und weisen Sie Berechtigungen zu und setzen Sie einen kontrollierten Benutzer darauf

  • Geben 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, Verwaltungstätigkeiten durchzuführen.

Last updated