# AWS - IAM, Identity Center & SSO Enum {{#include ../../../banners/hacktricks-training.md}} ## IAM **IAMの説明**は以下で見つけることができます: {{#ref}} ../aws-basic-information/ {{#endref}} ### 列挙 必要な主な権限: - `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` ```bash # 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 --ssh-public-key-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 #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 #Get inline policies of the user aws iam get-user-policy --user-name --policy-name #Get inline policy details ## attached policies aws iam list-attached-user-policies --user-name #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 #Get groups of a user aws iam get-group --group-name #Get group name info ## inline policies aws iam list-group-policies --group-name #Get inline policies of the group aws iam get-group-policy --group-name --policy-name #Get an inline policy info ## attached policies aws iam list-attached-group-policies --group-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 #Get role ## inline policies aws iam list-role-policies --role-name #Get inline policies of a role aws iam get-role-policy --role-name --policy-name #Get inline policy details ## attached policies aws iam list-attached-role-policies --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 --service-namespaces # Get list of policies that give access to the user to the service ## Get policy content aws iam get-policy --policy-arn aws iam list-policy-versions --policy-arn aws iam get-policy-version --policy-arn --version-id # Enumerate providers aws iam list-saml-providers aws iam get-saml-provider --saml-provider-arn aws iam list-open-id-connect-providers aws iam get-open-id-connect-provider --open-id-connect-provider-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**](https://github.com/carlospolop/bf-aws-permissions) は、指定されたプロファイルを使用して、`aws` cli ヘルプメッセージを利用して見つけたすべての **`list*`, `describe*`, `get*`** アクションを実行し、**成功した実行を返す**だけのbashスクリプトです。 ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt ``` #### bf-aws-perms-simulate ツール [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate) は、あなたの現在の権限(または他のプリンシパルの権限)を見つけることができます、もしあなたが権限 **`iam:SimulatePrincipalPolicy`** を持っている場合。 ```bash # Ask for permissions python3 aws_permissions_checker.py --profile [--arn ] ``` #### Perms2ManagedPolicies もしあなたのユーザーが**いくつかの権限を持っている**ことを見つけ、それが**カスタムではなく管理されたAWSロール**によって付与されていると思う場合、ツール[**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies)を使用して、あなたが持っていることを発見した権限を付与する**AWS管理ロール**をすべて確認できます。 ```bash # Run example with my profile python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt ``` > [!WARNING] > あなたが持っている権限がAWS管理ロールによって付与されているかどうかを「知る」ことができるのは、例えば**使用されていないサービスに対する権限を持っている場合**です。 #### Cloudtrail2IAM [**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM)は、**AWS CloudTrailログを分析して、全員または特定のユーザーやロールによって行われたアクションを抽出および要約する**Pythonツールです。このツールは、**指定されたバケットからすべてのcloudtrailログを解析します**。 ```bash 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**](https://github.com/andresriancho/enumerate-iam)を使用するには、まずすべてのAPI AWSエンドポイントをダウンロードする必要があります。そこからスクリプト**`generate_bruteforce_tests.py`**がすべての**"list\_", "describe\_", および "get\_"エンドポイントを取得します。** 最後に、指定された資格情報で**それらにアクセスしようとし**、**成功したかどうかを示します**。 (私の経験では、**ツールはある時点でハングします**、[**この修正を確認してください**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c)それを修正しようとするために)。 > [!WARNING] > 私の経験では、このツールは前のものと似ていますが、動作が悪く、権限のチェックが少ないです。 ```bash # 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**](https://github.com/carnal0wnage/weirdAAL/wiki) を使用することもできます。このツールは **いくつかの一般的なサービスに対するいくつかの一般的な操作をチェックします**(いくつかの列挙権限といくつかの特権昇格権限をチェックします)。しかし、コーディングされたチェックのみを確認します(より多くのテストをコーディングすることでのみ、より多くの情報を確認できます)。 ```bash # 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 = aws_secret_access_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するためのハードニングツール {{#tabs }} {{#tab name="CloudSploit" }} ```bash # 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 ``` {{#endtab }} {{#tab name="SteamPipe" }} ```bash # https://github.com/turbot/steampipe-mod-aws-insights steampipe check all --export=json # https://github.com/turbot/steampipe-mod-aws-perimeter # In this case you cannot output to JSON, so heck it in the dashboard steampipe dashboard ``` {{#endtab }} {{#endtabs }} #### \ 前のツールのいずれもすべての権限を確認することはできないので、より良いツールを知っている場合はPRを送ってください! ### 認証されていないアクセス {{#ref}} ../aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md {{#endref}} ### 権限昇格 次のページでは、**IAM権限を悪用して権限を昇格させる方法**を確認できます: {{#ref}} ../aws-privilege-escalation/aws-iam-privesc.md {{#endref}} ### IAMポストエクスプロイト {{#ref}} ../aws-post-exploitation/aws-iam-post-exploitation.md {{#endref}} ### IAM持続性 {{#ref}} ../aws-persistence/aws-iam-persistence.md {{#endref}} ## IAMアイデンティティセンター **IAMアイデンティティセンターの説明**は以下で見つけることができます: {{#ref}} ../aws-basic-information/ {{#endref}} ### CLIでSSO経由で接続 ```bash # 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 = sso_role_name = AdministratorAccess sso_region = us-east-1 ``` ### 列挙 Identity Centerの主な要素は次のとおりです: - ユーザーとグループ - パーミッションセット:ポリシーが添付されています - AWSアカウント その後、ユーザー/グループがAWSアカウントに対してパーミッションセットを持つように関係が作成されます。 > [!NOTE] > ポリシーをパーミッションセットに添付する方法は3つあります。AWS管理ポリシーを添付すること、カスタマー管理ポリシー(これらのポリシーは、パーミッションセットが影響を与えるすべてのアカウントで作成する必要があります)、およびインラインポリシー(ここで定義されます)。 ```bash # 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 aws sso-admin describe-permission-set --instance-arn --permission-set-arn ## Get managed policies of a permission set aws sso-admin list-managed-policies-in-permission-set --instance-arn --permission-set-arn ## Get inline policies of a permission set aws sso-admin get-inline-policy-for-permission-set --instance-arn --permission-set-arn ## Get customer managed policies of a permission set aws sso-admin list-customer-managed-policy-references-in-permission-set --instance-arn --permission-set-arn ## Get boundaries of a permission set aws sso-admin get-permissions-boundary-for-permission-set --instance-arn --permission-set-arn ## List accounts a permission set is affecting aws sso-admin list-accounts-for-provisioned-permission-set --instance-arn --permission-set-arn ## List principals given a permission set in an account aws sso-admin list-account-assignments --instance-arn --permission-set-arn --account-id # Get permissions sets affecting an account aws sso-admin list-permission-sets-provisioned-to-account --instance-arn --account-id # List users & groups from the identity store aws identitystore list-users --identity-store-id aws identitystore list-groups --identity-store-id ## Get members of groups aws identitystore list-group-memberships --identity-store-id --group-id ## Get memberships or a user or a group aws identitystore list-group-memberships-for-member --identity-store-id --member-id ``` ### ローカル列挙 フォルダ `$HOME/.aws` 内に、SSO 経由でアクセス可能なプロファイルを設定するための config ファイルを作成することができます。例えば: ```ini [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:::role/ReadOnlyRole source_profile = Hacktricks-Admin ``` この設定は次のコマンドで使用できます: ```bash # 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なし)。設定例: ```ini [profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi external_id = 123456 ``` ### 認証されていないアクセス {{#ref}} ../aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md {{#endref}} ### 権限昇格 {{#ref}} ../aws-privilege-escalation/aws-sso-and-identitystore-privesc.md {{#endref}} ### ポストエクスプロイト {{#ref}} ../aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md {{#endref}} ### 永続性 #### ユーザーを作成し、権限を割り当てる ```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 ``` - グループを作成し、権限を割り当て、制御されたユーザーを設定します - 制御されたユーザーまたはグループに追加の権限を付与します - デフォルトでは、Management Accountからの権限を持つユーザーのみがIAM Identity Centerにアクセスし、制御できるようになります。 ただし、Delegate Administratorを介して、別のアカウントのユーザーがそれを管理できるようにすることが可能です。彼らは正確に同じ権限を持つわけではありませんが、[**管理活動**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)を実行することができます。 {{#include ../../../banners/hacktricks-training.md}}