
Terraformを使用して、設計上脆弱なAWS IAM権限昇格のプレイグラウンドを自分で作成しましょう。
Terraform を使用して、独自の 意図的に脆弱な AWS IAM 権限昇格プレイグラウンドを作成します。

IAM Vulnerable は Terraform バイナリとあなたの AWS 認証情報を使用して、選択した AWS アカウントに 250 以上の IAM リソースをデプロイします。数分以内に、権限昇格を可能にする脆弱な IAM 構成を特定し、悪用する方法を学び始めることができます。
皆さん、こんにちは。IAM Vulnerable は AWS IAM 権限昇格の基本的な構成要素を理解する上で今でも非常に有用です。しかし、IAM Vulnerable を作成してから数年後、私は CloudFoxable を作成しました。これは CTF スタイルのバージョンで、クラウドペネトレーションテストの基礎をより総合的に教えてくれます。- @sethsec
私たちの RedSec Discord サーバー に参加してください
🦊 現在サポートされている権限昇格パス: 31
ブログ記事: IAM Vulnerable - AWS IAM 権限昇格プレイグラウンド
このクイックスタートでは、IAM Vulnerable を AWS アカウントでできるだけ早く稼働させるための特定のアプローチを概説します。これらの手順の多くは既に完了しているかもしれませんし、現在の設定に合わせて微調整したい場合もあるでしょう。追加の設定オプションについては、このリポジトリのその他のユースケースセクションを参照してください。
aws sts get-caller-identity を実行して、CLI が期待通りに動作することを確認します。git clone https://github.com/BishopFox/iam-vulnerablecd iam-vulnerable/terraform initexport TF_VAR_aws_local_profile=PROFILE_IN_AWS_CREDENTIALS_FILE_IF_OTHER_THAN_DEFAULTexport TF_VAR_aws_local_creds_file=FILE_LOCATION_IF_NON_DEFAULTterraform planterraform applycp ~/.aws/credentials ~/.aws/credentials.backuptail -n +7 aws_credentials_file_example | sed s/111111111111/$(aws sts get-caller-identity | grep Account | awk -F\" '{print $4}')/g >> ~/.aws/credentialsクリーンアップ
IAM Vulnerable によって作成されたすべてのリソースを削除したい場合は、以下のコマンドを実行します:
cd iam-vulnerable/terraform destroy代替クリーンアップ(Terraform 状態が失われた場合)
Terraform を使用して iam-vulnerable をデプロイしたが、状態ファイルにアクセスできなくなった場合(そして terraform destroy が機能しない場合)、以下のクリーンアップスクリプトを使用できます:```bash
./cleanup-scripts/cleanup_iam_vulnerable.py --dry-run
./cleanup-scripts/cleanup_iam_vulnerable.sh --dry-run
これらのスクリプトは次のことを行います:
- AWSアカウント内のIAM脆弱性リソースを自動的に特定
- 削除前に何が削除されるかを正確に表示
- 依存関係の競合を避けるため適切な順序でリソースを削除
- AWSプロファイルをサポートし、詳細なログを提供
**重要**: 最初に必ず `--dry-run` を実行して、削除される内容を確認してください。詳細な使用方法については `cleanup-scripts/CLEANUP_README.md` を参照してください。
## 作成されたリソースは何ですか?
Terraformバイナリは、デフォルトのAWSアカウントプロファイルの認証情報を使用して以下を作成しました:
* **31個のユーザー、ロール、ポリシー**。それぞれがプレイグラウンドアカウントへの管理者アクセス権を取得する独自のエクスプロイトパスを持ちます
* 特定のエクスプロイトパスを完全に実現するために必要な、いくつかの追加のユーザー、グループ、ロール、ポリシー
* 他のツールの検出機能をテストするための、いくつかの追加のユーザー、ロール、ポリシー
デフォルトでは、このTerraformモジュールによって作成されたすべてのロールは、Terraformを実行するために使用したユーザーまたはロールから引き受け可能です。
* Terraformがデフォルトプロファイル以外のプロファイルを使用するようにしたい場合、または `assume_role_policy` ARNをハードコードしたい場合は、[その他のユースケース](#other-use-cases)を参照してください。
## これにはどれくらいの費用がかかりますか?
IAM Vulnerableを**デフォルト構成でデプロイする場合、費用は一切かかりません**。次のセクションでは、費用が発生する非デフォルトモジュールを有効にする方法と、デプロイした場合の各モジュールの月額費用について学びます。
# モジュール方式のアプローチ
IAM Vulnerableは、特定のリソースをモジュールごとにグループ化しています。デフォルトで有効になっているモジュール(費用がかからないもの)と、デフォルトで無効になっているモジュール(デプロイすると費用がかかるもの)があります。これにより、必要に応じて特定のモジュールを有効にできます。
たとえば、IAM以外のリソースを含む `ssm:StartSession` などのエクスプロイトパスで遊ぶ準備ができたら、`iam-vulnerable/main.tf` ファイルのモジュールをコメント解除し、`terraform apply` を再実行することで、これらのリソースをオンデマンドでデプロイおよび破棄できます。```
# Uncomment the next four lines to create an ec2 instance and related resources
#module "ec2" {
# source = "./modules/non-free-resources/ec2"
# aws_assume_role_arn = (var.aws_assume_role_arn != "" ? var.aws_assume_role_arn : data.aws_caller_identity.current.arn)
#}
ec2 モジュールのコメントを解除した後、次のコマンドを実行してください:```
terraform init
terraform apply
必要なコンポーネントをデプロイして、SSM privesc パスを試せるようになりました。
## Free Resource Modules
`free-resources` 内にデプロイされたものはすべて無料です。
| 名前 | デフォルト状態 | 推定コスト | 説明 |
| --- | --- | --- | --- |
| privesc-paths | 有効 | なし | IAM privesc パスをすべて含む |
| tool-testing | 有効 | なし | さまざまな IAM privesc ツールの機能を評価するテストケースを含む |
## Non-free Resource Modules
これらの追加モジュールをデプロイすると、コストが発生する可能性があります。
| 名前 | デフォルト状態 | 推定コスト | 説明 | 必要な場合 |
| --- | --- | --- | --- | --- |
| EC2 | 無効 | :heavy_dollar_sign: <br> 月額 $4.50 | EC2 インスタンスと、どこからでも SSH を許可するセキュリティグループを作成する | `ssm-SendCommand` <br> `ssm-StartSession` <br> `ec2InstanceConnect-SendSSHPublicKey` |
| Lambda | 無効 | :slightly_smiling_face: <br> 月額コストは使用状況に依存(コストはゼロのはず) | Lambda 関数を作成する | `Lambda-EditExistingLambdaFunctionWithRole` |
| Glue | 無効 | :heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign: <br> 時給 $4 | Glue 開発エンドポイントを作成する | `Glue-UpdateExistingGlueDevEndpoint` |
| SageMaker | 無効 | 未確定 | SageMaker ノートブックを作成する | `sageMakerCreatePresignedNotebookURL` |
| CloudFormation | 無効 | :slightly_smiling_face: <br> CloudFormation 経由で作成されたシークレットは月額 $0.40。スタック自体は無料またはほぼ無料 | CloudFormation スタックを作成し、シークレットマネージャーにシークレットを作成する | `privesc-cloudFormationUpdateStack` |
# サポートされている権限昇格パス