AWS - Federation Abuse

htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

SAML

SAMLについての情報は以下をチェックしてください:

SAMLを通じたアイデンティティフェデレーションを設定するには、名前とSAML設定(エンドポイント、公開鍵を含む証明書)を含むメタデータXMLを提供するだけです。

OIDC - Github Actionsの悪用

Githubアクションをアイデンティティプロバイダとして追加するには:

  1. Provider type で、OpenID Connectを選択します。

  2. Provider URLhttps://token.actions.githubusercontent.com を入力します。

  3. Get thumbprint をクリックしてプロバイダのサムプリントを取得します。

  4. Audiencests.amazonaws.com を入力します。

  5. Githubアクションが必要とする権限を持つ新しいロールを作成し、プロバイダを信頼する信頼ポリシーを設定します。例えば:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::0123456789:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:sub": [ "repo:ORG_OR_USER_NAME/REPOSITORY:pull_request", "repo:ORG_OR_USER_NAME/REPOSITORY:ref:refs/heads/main" ], "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" } } } ] }

6. 前述のポリシーでは、特定の**トリガー**を持つ**組織**の**リポジトリ**の**ブランチ**のみが許可されていることに注意してください。
7. Githubアクションが**なりすます**ことができる**ロール**の**ARN**は、Githubアクションが知る必要がある"秘密"になるので、**環境**内の**シークレット**に**保存**してください。
8. 最後に、ワークフローで使用されるAWSクレデンシャルを設定するためにgithubアクションを使用します。
```yaml
name: 'test AWS Access'

# The workflow should only trigger on pull requests to the main branch
on:
pull_request:
branches:
- main

# Required to get the ID Token that will be used for OIDC
permissions:
id-token: write
contents: read # needed for private repos to checkout

jobs:
aws:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: eu-west-1
role-to-assume: ${{ secrets.READ_ROLE }}
role-session-name: OIDCSession

- run: aws sts get-caller-identity
shell: bash

OIDC - EKS の悪用

# Crate an EKS cluster (~10min)
eksctl create cluster --name demo --fargate
# Create an Identity Provider for an EKS cluster
eksctl utils associate-iam-oidc-provider --cluster Testing --approve

EKSクラスターでは、クラスターのOIDC URLを新しいOpen ID Identity providerとして設定することで、OIDC providersを生成することが可能です。これは一般的なデフォルトポリシーです:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::123456789098:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:aud": "sts.amazonaws.com"
}
}
}
]
}

このポリシーは、id 20C159CDF6F2349B68846BEC03BE031B を持つEKSクラスターのみがロールを引き受けることができると正しく示しています。しかし、どのサービスアカウントがそれを引き受けることができるかを示していないため、ウェブアイデンティティトークンを持つ任意のサービスアカウントがロールを引き受けることができます。

どのサービスアカウントがロールを引き受けることができるべきかを指定するためには、サービスアカウント名が指定されている条件を指定する必要があります。例えば:

```bash "oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account", ``` ## 参考文献

htARTE (HackTricks AWS Red Team Expert)で ゼロからヒーローまでAWSハッキングを学ぶ

HackTricksをサポートする他の方法:

最終更新