AWS - IAM Enum

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки 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, який буде виконувати всі дії 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, який аналізує журнали CloudTrail AWS для вилучення та узагальнення дій, виконаних кожним або лише конкретним користувачем або роллю. Інструмент розбере кожен журнал 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) або файли CloudFormation (зазвичай це файли yaml, розташовані всередині відра з префіксом cf-templates), ви також можете їх прочитати, щоб знайти конфігурацію aws та визначити, які дозволи були надані кому.

enumerate-iam

Для використання інструменту https://github.com/andresriancho/enumerate-iam спочатку потрібно завантажити всі кінцеві точки API AWS, з яких скрипт generate_bruteforce_tests.py отримає всі кінцеві точки "list_", "describe_" та "get_". І, нарешті, він спробує отримати до них доступ за вказаними обліковими даними та вказати, якщо це працює.

(За моєю думкою, інструмент зупиняється на певному етапі, перевірте це виправлення, щоб спробувати виправити це).

За моєю думкою, цей інструмент схожий на попередній, але працює гірше та перевіряє менше дозволів.

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

Інструменти зміцнення для перебору дозволів

# 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. Ця папка кешу використовується в основному, коли ви працюєте з профілями 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 - SSO & identitystore Privesc

Післяексплуатаційна діяльність

pageAWS - SSO & identitystore Post Exploitation

Настійливість

Створення користувача та надання йому дозволів

```bash # Create user identitystore:CreateUser aws identitystore create-user --identity-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