S3バケットのAWSアカウントIDを見つける
- 2021年にBen Bridtsが、公開されたS3バケットのAWSアカウントIDを見つける独創的な方法を発表した。
- この記事では、非公開および公開S3バケットの両方についてアカウントIDを見つける手法を説明する。
S3バケットからAWSアカウントIDへ
- シェル出力を通じて、
bucket-alphaというバケットの、これまで不明だったAWSアカウントIDを見つける手法を示す。
この手法は正確にはどのように動作するのか?
- Benの手法が機能する理由を分析し、次の3つの重要な要素を組み合わせている:
- IAMポリシーをリクエストに適用できる能力
- IAMポリシーがリクエストを許可したかどうかを推測できる能力
s3:ResourceAccount 条件キーにワイルドカードマッチを適用できる能力
解決策
- S3向けVPCエンドポイントを使用し、CloudTrailでリクエストが拒否されたときの挙動の違いを利用する解決策を見つけた。
ステップごとに見ていく
- バケット
bucket-alpha のアカウントIDを見つけたい場合の手順:
- バケットのリージョンを特定する
- 同じリージョンにVPCとVPCエンドポイントをデプロイする
- VPC内でEC2インスタンスを起動し、S3へのVPCエンドポイントが使われていることを確認する
- 対象バケットのアカウントIDが「0」で始まるかどうかを判定するためにVPCエンドポイントポリシーを変更する
- 対象バケットにリクエストする
- CloudTrailにリクエストが現れるか確認する
- 結果に応じてVPCエンドポイントポリシーを変更し、アカウントIDに関する情報をさらに見つける
結果
- このプロセスを自動化するスクリプトを書き、バケットのアカウントIDを信頼性高く見つけられるようにした。
- 各桁について二分探索を行い、必要なテスト回数を減らした。
高速化
- VPCエンドポイントポリシーが反映されるまでの時間と、CloudTrailで結果を個別に待つ時間を短縮するためにVPCエンドポイントポリシーを変更した。
- これにより、アカウントIDの特定にかかる時間を10分未満まで短縮した。
所感
- AWSセキュリティチームと相談したうえで、このブログ記事を公開した。
- AWSアカウントIDを機密情報と見なすべきかどうかについて、興味深い議論があった。
- この手法はS3以外の他のサービスにも適用できる可能性がある。
- これらの手法が可能なのは、
s3:ResourceAccount に対して StringLike 条件を使えるためである。
- VPCエンドポイントポリシーによって拒否されたイベントがCloudTrailに記録されると有益かもしれない。
謝辞
- Ben Bridtsの元の手法がこの作業の着想源となった。
- Chris Farrisの支援と助言に感謝する。
GN⁺の見解
- この手法は、クラウド環境でセキュリティ監査を行う際に非常に有用であり、特にAWS S3バケットの所有権確認に役立つ可能性がある。
- この手法が提供する情報の機微性に関する議論は、クラウドサービス提供者と利用者の間で続くデータセキュリティとプライバシーに関する対話を反映している。
- 類似の機能を提供する別のツールとしては、AWS自身のサービスであるCloudTrailがあり、これはユーザーのAWS環境で発生するすべての活動を記録・監視するために使われる。
- この手法を導入する前に、利用者はその手法がAWSのポリシーおよびセキュリティのベストプラクティスに沿っていることを確認する必要がある。
- この手法を使うことで得られる利点は、効率的なセキュリティ監査と迅速なデータ所有権確認だが、潜在的なプライバシー露出のようなリスクも考慮すべきである。
1件のコメント
Hacker Newsのコメント