AWS - IAM, Identity Center & SSO Enum
Reading time: 17 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
IAM
IAMの説明は以下で見つけることができます:
列挙
必要な主な権限:
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 get-user #Get current user information
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 は、指定されたプロファイルを使用して、aws
cli ヘルプメッセージを利用して見つけたすべての list*
, describe*
, get*
アクションを実行し、成功した実行を返すだけのbashスクリプトです。
# 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
warning
あなたが持っている権限がAWS管理ロールによって付与されているかどうかを「知る」ことができるのは、例えば使用されていないサービスに対する権限を持っている場合です。
Cloudtrail2IAM
CloudTrail2IAMは、AWS CloudTrailログを分析して、全員または特定のユーザーやロールによって行われたアクションを抽出および要約するPythonツールです。このツールは、指定されたバケットからすべての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]
warning
.tfstate(Terraformステートファイル)やCloudFormationファイル(これらは通常、cf-templatesというプレフィックスが付いたバケット内にあるyamlファイル)を見つけた場合、それらを読み取ってawsの設定を見つけ、誰にどの権限が割り当てられているかを確認できます。
enumerate-iam
ツールhttps://github.com/andresriancho/enumerate-iamを使用するには、まずすべてのAPI AWSエンドポイントをダウンロードする必要があります。そこからスクリプト**generate_bruteforce_tests.py
がすべての"list_", "describe_", および "get_"エンドポイントを取得します。** 最後に、指定された資格情報でそれらにアクセスしようとし、成功したかどうかを示します。
(私の経験では、ツールはある時点でハングします、この修正を確認してくださいそれを修正しようとするために)。
warning
私の経験では、このツールは前のものと似ていますが、動作が悪く、権限のチェックが少ないです。
# 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
<YourTool>
前のツールのいずれもすべての権限を確認することはできないので、より良いツールを知っている場合はPRを送ってください!
認証されていないアクセス
AWS - IAM & STS Unauthenticated Enum
権限昇格
次のページでは、IAM権限を悪用して権限を昇格させる方法を確認できます:
IAMポストエクスプロイト
IAM持続性
IAMアイデンティティセンター
IAMアイデンティティセンターの説明は以下で見つけることができます:
CLIでSSO経由で接続
# 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
列挙
Identity Centerの主な要素は次のとおりです:
- ユーザーとグループ
- パーミッションセット:ポリシーが添付されています
- AWSアカウント
その後、ユーザー/グループがAWSアカウントに対してパーミッションセットを持つように関係が作成されます。
note
ポリシーをパーミッションセットに添付する方法は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
内に、SSO 経由でアクセス可能なプロファイルを設定するための config ファイルを作成することができます。例えば:
[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
フォルダーに保存できます。このキャッシュディレクトリは、IAMユーザー資格情報を使用するAWS CLIプロファイルで作業しているときに主に使用されます。または、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
認証されていないアクセス
AWS - Identity Center & SSO Unauthenticated Enum
権限昇格
AWS - SSO & identitystore Privesc
ポストエクスプロイト
AWS - 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
- グループを作成し、権限を割り当て、制御されたユーザーを設定します
- 制御されたユーザーまたはグループに追加の権限を付与します
- デフォルトでは、Management Accountからの権限を持つユーザーのみがIAM Identity Centerにアクセスし、制御できるようになります。
ただし、Delegate Administratorを介して、別のアカウントのユーザーがそれを管理できるようにすることが可能です。彼らは正確に同じ権限を持つわけではありませんが、管理活動を実行することができます。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。