AWS - IAM, Identity Center & SSO Enum

Sıfırdan kahraman olana kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

IAM

IAM hakkında bir açıklama bulabilirsiniz:

AWS - Basic Information

Enumerasyon

Ana izinler gereklidir:

  • iam:ListPolicies, iam:GetPolicy ve iam:GetPolicyVersion

  • iam:ListRoles

  • iam:ListUsers

  • iam:ListGroups

  • iam:ListGroupsForUser

  • iam:ListAttachedUserPolicies

  • iam:ListAttachedRolePolicies

  • iam:ListAttachedGroupPolicies

  • iam:ListUserPolicies ve iam:GetUserPolicy

  • iam:ListGroupPolicies ve iam:GetGroupPolicy

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

İzinlerin Zorla Kaba Kuvvet Yöntemi

Eğer kendi izinlerinizle ilgileniyorsanız ancak IAM sorgulama erişiminiz yoksa her zaman izinleri kaba kuvvet yöntemiyle deneyebilirsiniz.

bf-aws-permissions

bf-aws-permissions aracı, yalnızca belirtilen profil kullanılarak çalıştırılacak olan bir bash betiğidir ve aws cli yardım mesajlarını kullanarak bulduğu tüm list*, describe*, get* eylemlerini gerçekleştirir ve başarılı yürütümleri döndürür.

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

bf-aws-perms-simulate

Araç bf-aws-perms-simulate, eğer iam:SimulatePrincipalPolicy izniniz varsa, mevcut izinlerinizi (veya diğer prensiplerin izinlerini) bulabilir.

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

Perms2ManagedPolicies

Eğer kullanıcınızın sahip olduğu bazı izinleri bulduysanız ve bunların özel bir rol tarafından değil de bir yönetilen AWS rolü tarafından verildiğini düşünüyorsanız, aws-Perms2ManagedPolicies aracını kullanarak sahip olduğunuz izinleri keşfettiğiniz tüm AWS yönetilen rollerini kontrol edebilirsiniz.

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

Eğer sahip olduğunuz izinlerin AWS tarafından yönetilen bir rol tarafından verilip verilmediğini "bilmek" mümkündür, örneğin kullanılmayan hizmetler üzerinde izinleriniz varsa.

Cloudtrail2IAM

CloudTrail2IAM, herkesin veya belirli bir kullanıcının veya rolün yaptığı eylemleri çıkarmak ve özetlemek için AWS CloudTrail günlüklerini analiz eden bir Python aracıdır. Aracı, belirtilen kovandan her cloudtrail günlüğünü ayrıştıracaktır.

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]

Eğer .tfstate (Terraform durum dosyaları) veya CloudFormation dosyaları bulursanız (genellikle bir kova içinde cf-templates öneki ile bulunan yaml dosyalarıdır), bunları okuyarak aws yapılandırmasını bulabilir ve hangi izinlerin kime atandığını bulabilirsiniz.

enumerate-iam

Araç https://github.com/andresriancho/enumerate-iam kullanmak için öncelikle tüm API AWS uç noktalarını indirmeniz gerekmektedir, bu uç noktalardan betik generate_bruteforce_tests.py tüm "list_", "describe_", ve "get_" uç noktalarını alacaktır. Ve son olarak, verilen kimlik bilgileri ile bunlara erişmeye çalışacak ve çalışıp çalışmadığını belirtecektir.

(Benim deneyimime göre araç bazı noktalarda takılıyor, bu düzeltmeyi kontrol edin bunu düzeltmeye çalışmak için).

Deneyimime göre bu araç öncekine benziyor ancak daha kötü çalışıyor ve daha az izni kontrol ediyor.

# 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

Ayrıca weirdAAL aracını da kullanabilirsiniz. Bu araç birkaç yaygın hizmette birkaç yaygın işlemi kontrol edecek (bazı numaralandırma izinlerini ve bazı ayrıcalık yükseltme izinlerini kontrol edecek). Ancak yalnızca kodlanmış kontrolleri kontrol edecektir (daha fazla şey kontrol etmenin tek yolu daha fazla test kodlamaktır).

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

İzinleri BF için Sıkılaştırma Araçları

# 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

<SeninAraç>

Önceki araçlardan hiçbiri tüm izinleri kontrol edebilme yeteneğine sahip değildir, bu yüzden daha iyi bir araç biliyorsanız bir PR gönderin!

Kimlik Doğrulamasız Erişim

AWS - IAM & STS Unauthenticated Enum

Yetki Yükseltme

Aşağıdaki sayfada IAM izinlerini kötüye kullanarak ayrıcalıkları yükseltme nasıl kontrol edebileceğinizi görebilirsiniz:

AWS - IAM Privesc

IAM Saldırı Sonrası İstismarı

AWS - IAM Post Exploitation

IAM Kalıcılığı

AWS - IAM Persistence

IAM Kimlik Merkezi

IAM Kimlik Merkezi hakkında bir açıklama bulabilirsiniz:

AWS - Basic Information

CLI ile SSO üzerinden Bağlanma

# 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

Numaralandırma

Kimlik Merkezi'nin ana unsurları şunlardır:

  • Kullanıcılar ve gruplar

  • İzin Setleri: Bağlı politikaları vardır

  • AWS Hesapları

Daha sonra, ilişkiler oluşturulur, böylece kullanıcılar/gruplar AWS Hesabı üzerinde İzin Setlerine sahip olurlar.

Dikkat edin, İzin Setine politikalar eklemenin 3 yolu vardır. AWS yönetilen politikaları eklemek, Müşteri yönetilen politikalar (bu politikalar, İzin Setini etkileyen tüm hesaplarda oluşturulmalıdır) ve iç içe politikalar (orada tanımlanmış).

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

Yerel Sıralama

$HOME/.aws klasörü içine erişilebilir profilleri yapılandırmak için config dosyasını oluşturmak mümkündür, örneğin:

[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

Bu yapılandırma aşağıdaki komutlarla kullanılabilir:

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

SSO'dan bir profil kullanılarak bazı bilgilere erişildiğinde, kimlik bilgileri $HOME/.aws/sso/cache klasörü içinde bir dosyada önbelleğe alınır. Dolayısıyla oradan okunup kullanılabilir.

Ayrıca, daha fazla kimlik bilgisi $HOME/.aws/cli/cache klasöründe saklanabilir. Bu önbellek dizini genellikle AWS CLI profilleriyle çalışırken kullanılır ve bu profiller IAM kullanıcı kimlik bilgilerini veya IAM üzerinden roller assume eder. Yapılandırma örneği:

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

Kimlik Doğrulamasız Erişim

AWS - Identity Center & SSO Unauthenticated Enum

Yetki Yükseltme

AWS - SSO & identitystore Privesc

Saldırı Sonrası İşlemler

AWS - SSO & identitystore Post Exploitation

Kalıcılık

Bir kullanıcı oluşturun ve ona izinler atayın

# 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
  • Bir grup oluşturun ve izinleri atayın ve üzerine kontrol edilen bir kullanıcı belirleyin

  • Kontrol edilen bir kullanıcıya veya gruba ek izinler verin

  • Varsayılan olarak, Yönetim Hesabından izin alan kullanıcılar yalnızca IAM Kimlik Merkezine erişebilir ve kontrol edebilir.

Ancak, Farklı bir hesaptan kullanıcıların bunu yönetmesine izin vermek için Delege Yönetici aracılığıyla mümkündür. Tam olarak aynı izne sahip olmayacaklar, ancak yönetim faaliyetlerini gerçekleştirebilecekler.

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Last updated