https://gigazine.net/news/20240228-s3-bucket-to-aws-account-id/
パブリック・プライベートを問わず、AWSのストレージサービスであるS3のバケット名からアカウントIDを突き止める方法をセキュリティ企業「Tracebit」のCTOであるサム・コックス氏が公開しました。
How to find the AWS Account ID of any S3 Bucket
https://tracebit.com/blog/2024/02/finding-aws-account-id-of-any-s3-bucket/
コックス氏の方法はS3のVPCエンドポイントを使用することでVPCエンドポイントポリシーを適用するのがポイントとのこと。ポリシーで「アカウントIDが1で始める場合のみ許可」などアカウントIDに基づいて許可を行う事で、ポリシーレベルでの拒否が発生するかどうかをチェックします。
具体的な方法は下記の通り。
まず最初にターゲットとなるバケットのリージョンを確認します。curlなどでアクセスすると「x-amz-bucket-region」ヘッダーにリージョンが記載されています。
続いてターゲットと同じリージョンにVPCおよびVPCエンドポイントを作成し、VPCエンドポイントポリシーに下記の通り「s3:ResourceAccount」を設定します。「0*」と設定することでアカウントIDが0で始まる場合のみ通信が許可されるというわけです。
VPCエンドポイントを経由するため、EC2インスタンスを作成してターゲットバケットへアクセスを行います。もちろんアクセスは拒否されますが、その際にVPCエンドポイントを通過していた場合はCloudTrailに下図のようなログが残ります。
10分ほど待ってもCloudTrailにログが表示されない場合はVPCエンドポイントレベルでアクセスが拒否されているため、アカウントIDの最初の文字が0ではないことが分かります。この場合は「1*」のように続いてアカウントIDの最初の文字が1かどうかを調べればOK。
一方、CloudTrailにログが表示された場合は「00*」のように2桁目を見つける作業に移行します。
この作業を繰り返すことでアカウントIDの全てが明らかになるというわけ。なお、1文字ずつ順番に探すのではなく、下図のように複数のルールをまとめて設定することで10分以内にアカウントIDを見つけることが可能と述べられています。
コードについては公開されていませんが、実際の動作の様子は下図の通りとのこと。バケット名を入力するとアカウントIDが出力されていることが分かります。
なお、アカウントIDが機密情報にあたるのかどうかについてはさまざまな考えがあり、AWS公式からも特に機密にするべきと述べられているわけではありませんが、機密にした方がセキュリティが高まることは間違いありません。また、コックス氏によるとこのブログ記事を公開する前にAWSのセキュリティチームと相談済みとのことです。
・関連記事
AWSの膨大で複雑なサービス群をすべて「たった1行」で説明していくとこうなる - GIGAZINE
Amazon倉庫のコーヒー自販機のカメラが職場の休憩室を盗撮していたことが発覚 - GIGAZINE
AWSがパブリックIPv4アドレスの利用を有料化すると発表、同時に「パブリック IPv4 インサイト」の無償提供も開始される - GIGAZINE
AWSが日本に2兆2600億円を投資する予定、クラウドコンピューティングインフラ拡大のため - GIGAZINE
5分の設定でAWSの料金を最大57%カットしてくれるサービス「Usage」の仕組み&レビュー - GIGAZINE
貼り付け終わり、