S3の管理ちゃんとしてますか
S3は今ではいろんな場面で頻繁に使われているストレージサービスです。
AWSから提供されているセキュリティ機能は強固なので、普通に・デフォルトで使っている分にはかなり安全なサービスだと思います。
とはいえ、ヒューマンエラーによって誤った設定にしてしまうことにより、脆弱性を作り出してしまう可能性もあります。
この記事はS3のリスクを簡単に解説するとともに、攻撃や倫理的ハッキング(報奨金ハント)に使用できるツールを紹介します。こうした手段や攻撃者の考えを理解することで、セキュリティへの意識を啓発することを目的としています。
S3へのハッキング対策
バケット名は全世界に公開されることを肝に銘じる
S3を少し使ったことがある人ならご存じと思いますが、S3のバケット名はグローバル(正確にはちょっとだけ違います)でユニークです。全てのS3バケットはこのパターンのURLを持ちます。
https://<BucketName>.s3.amazonaws.com
ですから、ランダムに文字を組み合わせてHTTPリクエストを送信してレスポンスコードを確認することで、バケットが存在するかどうかは簡単に確認できます。
ですので、まず1つ目の注意点として、バケットの命名から機密情報が推測されるような命名は避けるべきです。
同様に、公開されているバケットの中に非公開ファイルを置くような場合も注意が必要です。そのファイルが重要なもので、ファイル名に重要さを推測できるワードを含めた場合、攻撃者に「ここがねらい目!」と教えているようなものです。
公開範囲設定は絶対にミスしない
存在するバケット名を明らかにされたところで、バケットの公開範囲等の設定が正しく行われ、ファイルが適切に保護されていれば問題はありません。しかし、先述のとおり、ヒューマンエラーによってもし機密性の高いファイルが全世界に公開される状態になってしまったらどうでしょう?攻撃者はこの一瞬を狙っています。
また、こうしたミスはさらなる危機を招き入れる可能性もあります。ミスがあるバケットを見つけた攻撃者は、それを保持している組織について「セキュリティ意識が甘い=侵入しやすい組織」と認識して、その団体に対する他の攻撃方法を探し始めるかもしれません。
一瞬が命取りなので、バケットやファイルの公開設定を変更するときはツールやダブルチェックを行うなど、ヒューマンエラーが混入しないように慎重に設定する必要があります。
ツール
ここからは、こうした攻撃のために存在するツールをいくつか紹介します。攻撃者の方法を知ることで、セキュリティ対策意識が啓発されることを願っています。
使用の際はくれぐれも悪いことはせず、倫理的ハッキング目的で使用してください。
lazys3
とてもシンプルなRuby製スクリプトです。
リポジトリに含まれているプレフィックス・ポストフィックス用の辞書を使ってAWSS3バケット名のブルートフォースをします。
S3Scanner
この分野では最も有名なライブラリです。lazys3と同様のバケット列挙を行う機能に加え、バケットの権限や内部ファイルをダンプする機能も持ちます。
bucketkicker
S3Scannerと同等の機能を持ちます。
さいごに・リファレンス
S3バケットの適切な管理!大事!
AWS以外のほかのストレージサービスへの同様の攻撃手法や、ほかにも興味深い類似ツール、実際にこうしたツールを使って2021年にペネトレーションテストを行った結果などが記載されています。ぜひ参考に。