Amazon S3 静的サイトホスティングに対して、ワイルドカードによる DNS レコードは使わないでください
旬の生魚おじさん、都元です。弊社は本日を最終営業日として、これから冬季休業となります。 今年も一年、どうもありがとうございました。というわけで恒例の書き納め三本締め、その1。
だいぶ昔に「AWSにおける静的コンテンツ配信パターンカタログ(アンチパターン含む)」というエントリーでご紹介しましたが、Amazon S3 には静的ウェブサイトホスティングという機能があります。
静的 (つまり、状況に応じて異なるコンテンツを返さない、常に同じコンテンツを返す) ウェブサイトは、特に EC2 などのサーバーを立ち上げずに、S3 の機能を使って実現できます。古くからある機能です。
この機能は、さらに Amazon Route 53 によって ALIAS レコードを設定することにより、独自ドメインによるホスティングも可能です。これも古くからある機能です。
このあたりの詳細は AWS ドキュメントのチュートリアル「独自ドメインを使用して静的ウェブサイトをセットアップする」を参照してください。
静的サイトホスティング機能の理解
とりあえず、東京リージョンで S3 バケットを作り、aaa.foobar.example.com
というドメインでこの設定を行ったことを考えます。
この状態を観察してみると、aaa.foobar.example.com
というドメインに対して s3-website-ap-northeast-1.amazonaws.com
の IP アドレスを設定したことになります。そして S3 は名前ベースのバーチャルホストの挙動をしているようで、HTTP リクエストにおける Host
ヘッダと同じ名前の S3 バケットを探し、そこにルーティングしているようです。
また「S3 静的ウェブサイトホスティングのドメインを別のAWSアカウントで管理する」でご紹介したように、Route 53 の Hosted zone がある AWS アカウントと S3 のバケットがある AWS アカウントは同じである必要がありません。
ワイルドカードによる DNS レコードと、その危険性
さて、ここからが本題です。
Route 53 にはワイルドカードを使ったレコードを登録、ハンドリングする機能があります。例えば *.foobar.example.com
というレコードを登録することにより、aaa.foobar.example.com
でも bbb.foobar.example.com
でも同じ A レコードを返すような設定ができます。
この機能を静的サイトホスティングに対して適用して、複数のサブドメインについてサイト公開できるようにしたい! と思ったとしても、絶対にやめましょう。
aaa.foobar.example.com
bbb.foobar.example.com
という 2 つのサイトを運営しているとき、xxx.foobar.example.com
にアクセスすると次のような 404 エラーレスポンスが返ります。
悪意を持った第三者がこの画面を見たとき、まず「このドメインが S3 の静的サイトホスティング機能で動いている」ことが容易に判断できます。その上で、その第三者が xxx.foobar.example.com
というバケットを作った場合、どうなるでしょうか?
そう、このドメインで任意のコンテンツ (悪意のあるスクリプト等) を配信できてしまいます。あー危ない。
まとめ
一言。S3 の静的サイトホスティングにおいて、ワイルドカードの DNS レコードを使うのはやめましょう。
ちなみに本件を書こうとしたきっかけは、単純にとあるドメインにアクセスした時に前述のような 404 が表示されているのを見かけたことでした。これは単純に「かつて運用していたサイトを閉鎖するにあたって、S3 バケットを消しただけで DNS レコードの削除を行わなかった」ことによって発生したのだと思われます。このサイト、かんたんに乗っ取れてしまいます…。みなさまも、かつて静的サイトホスティングで運用していたけど「閉鎖したあのドメイン」みたいなものが頭に浮かんだら、チェックしてみてください。
ワイルドカードの話ではなくても、とにかく危険です。
ではみなさま、良いお年を。