AWS - IAM, Identity Center & SSO Enum

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

IAM

Jy kan 'n beskrywing van IAM vind in:

pageAWS - Basic Information

Enumerasie

Hoofmags wat benodig word:

  • iam:ListPolicies, iam:GetPolicy en iam:GetPolicyVersion

  • iam:ListRoles

  • iam:ListUsers

  • iam:ListGroups

  • iam:ListGroupsForUser

  • iam:ListAttachedUserPolicies

  • iam:ListAttachedRolePolicies

  • iam:ListAttachedGroupPolicies

  • iam:ListUserPolicies en iam:GetUserPolicy

  • iam:ListGroupPolicies en iam:GetGroupPolicy

  • iam:ListRolePolicies en 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

Toestemmings Brute Force

Indien jy belangstel in jou eie toestemmings maar nie toegang het om IAM te ondervra nie, kan jy altyd hulle brute force.

bf-aws-toestemmings

Die instrument bf-aws-toestemmings is net 'n bash-skrip wat sal loop met die aangeduide profiel al die lys*, beskryf*, kry* aksies wat dit kan vind deur aws cli hulpboodskappe en die suksesvolle uitvoerings teruggee.

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

bf-aws-perms-simulate

Die gereedskap bf-aws-perms-simulate kan jou huidige toestemming (of dié van ander hoofde) vind as jy die toestemming iam:SimulatePrincipalPolicy het.

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

Perms2ManagedPolicies

Indien jy sekere toestemmings wat jou gebruiker het gevind het, en jy dink dat hulle verleen word deur 'n bestuurde AWS rol (en nie deur 'n aangepaste een nie). Jy kan die instrument aws-Perms2ManagedRoles gebruik om al die AWS bestuurde rolle wat die toestemmings verleen wat jy ontdek het wat jy het te kontroleer.

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

Dit is moontlik om te "weet" of die toestemmings wat jy het, verleen word deur 'n AWS-bestuurde rol as jy sien dat jy toestemmings het oor dienste wat nie gebruik word nie byvoorbeeld.

Cloudtrail2IAM

CloudTrail2IAM is 'n Python-werktuig wat AWS CloudTrail-logboeke analiseer om aksies te onttrek en saam te vat wat deur almal gedoen is of net 'n spesifieke gebruiker of rol. Die werktuig sal elke cloudtrail-logboek van die aangeduide emmer ontleden.

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]

As jy .tfstate (Terraform staat lêers) of CloudFormation lêers vind (hierdie is gewoonlik yaml lêers wat binne 'n emmer met die voorvoegsel cf-templates geleë is), kan jy hulle ook lees om aws konfigurasie te vind en te bepaal watter toestemmings aan wie toegeken is.

enumereer-iam

Om die instrument https://github.com/andresriancho/enumerate-iam te gebruik, moet jy eers al die API AWS eindpunte aflaai, waaruit die skriffie generate_bruteforce_tests.py al die "lys_", "beskryf_", en "kry_" eindpunte sal kry. En uiteindelik sal dit probeer om toegang tot hulle te verkry met die gegewe geloofsbriewe en aandui of dit gewerk het.

(In my ervaring hang die instrument op 'n stadium, kyk na hierdie regstelling om te probeer om dit reg te stel).

In my ervaring is hierdie instrument soos die vorige een, maar werk swakker en kontroleer minder toestemmings.

# 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

Jy kan ook die instrument weirdAAL gebruik. Hierdie instrument sal verskeie algemene operasies op verskeie algemene dienste nagaan (sal sekere opsporingstoestemmings en ook sekere privesc-toestemmings nagaan). Maar dit sal slegs die gekodeerde kontroles nagaan (die enigste manier om meer dinge te toets is deur meer toetse te kodeer).

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

Verhardingsgereedskap om toestemmings te 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

<JouTool>

Geen van die vorige gereedskap is in staat om naby aan alle regte te kontroleer nie, so as jy 'n beter gereedskap ken, stuur 'n PR!

Ongeagte Toegang

pageAWS - IAM & STS Unauthenticated Enum

Voorregverhoging

Op die volgende bladsy kan jy sien hoe om IAM-regte te misbruik om voorregte te verhoog:

pageAWS - IAM Privesc

IAM Na-Exploitasie

pageAWS - IAM Post Exploitation

IAM Volharding

pageAWS - IAM Persistence

IAM Identiteitsentrum

Jy kan 'n beskrywing van IAM Identiteitsentrum vind in:

pageAWS - Basic Information

Koppel via SSO met 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

Opsomming

Die hoofelemente van die Identiteitsentrum is:

  • Gebruikers en groepe

  • Toestemmingsreeks: Het beleide geheg

  • AWS-rekeninge

Daarna word verhoudings geskep sodat gebruikers/groepe Toestemmingsreeks oor AWS-rekening het.

Let daarop dat daar 3 maniere is om beleide aan 'n Toestemmingsreeks te heg. Bevestiging van AWS-bestuurde beleide, Kliëntbestuurde beleide (hierdie beleide moet in al die rekeninge geskep word waar die Toestemmingsreeks 'n invloed het), en inline-beleide (daarin gedefinieer).

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

Plaaslike Opsomming

Dit is moontlik om binne die $HOME/.aws-gids die lêer config te skep om profiele te konfigureer wat toeganklik is via SSO, byvoorbeeld:

[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

Hierdie konfigurasie kan gebruik word met die opdragte:

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

Wanneer 'n profiel vanaf SSO gebruik word om toegang tot sekere inligting te verkry, word die geloofsbriewe in 'n lêer binne die $HOME/.aws/sso/cache-vouer gekas. Daarom kan hulle van daar gelees en gebruik word.

Verder kan meer geloofsbriewe gestoor word in die $HOME/.aws/cli/cache-vouer. Hierdie kasvouer word hoofsaaklik gebruik wanneer jy werk met AWS CLI-profiels wat IAM-gebruikergeloofsbriewe gebruik of rolle aanneem deur IAM (sonder SSO). Konfigurasievoorbeeld:

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

Ongeverifieerde Toegang

pageAWS - Identity Center & SSO Unauthenticated Enum

Voorregverhoging

pageAWS - SSO & identitystore Privesc

Post Exploitatie

pageAWS - SSO & identitystore Post Exploitation

Volharding

Skep 'n gebruiker en ken toestemmings daaraan toe

# 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
  • Skep 'n groep en ken dit toestemmings toe en stel 'n beheerde gebruiker daarop in

  • Gee ekstra toestemmings aan 'n beheerde gebruiker of groep

  • Standaard kan slegs gebruikers met toestemmings van die Bestuursrekening toegang verkry en die IAM-identiteitsentrum beheer.

Dit is egter moontlik via die Delegeer-administrator om gebruikers van 'n ander rekening toe te laat om dit te bestuur. Hulle sal nie presies dieselfde toestemming hê nie, maar hulle sal in staat wees om bestuursaktiwiteite uit te voer.

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated