はじめに
こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。
今回は、Web アプリ開発者や Rails ユーザーが知っておくべき「DNS リバインディング攻撃」について解説します
DNS リバインディング攻撃とは?
DNS リバインディング攻撃は、外部サイト(攻撃者の用意したドメイン)を通じて、被害者のブラウザから内部ネットワークや localhost に不正アクセスさせる攻撃手法です。
攻撃の流れ
- 被害者が
trap.example.orgにアクセスすると、DNS は203.0.113.5(攻撃者のサーバー)を返す。 - 攻撃者のページ上の JavaScript が
setTimeout()などで 2 回目のアクセスを仕込む。 - DNS キャッシュが切れたタイミングで再度
trap.example.orgにアクセスさせると、今度は127.0.0.1や169.254.169.254などのローカルアドレスを返す。 - ブラウザは従来どおり「trap.example.org」へのアクセスだと認識するため、内部サービスへのアクセスが成立してしまう。
なぜ成立するのか
- TTL を 0 に設定することで、ブラウザが毎回 DNS を引き直すように誘導できる
- JavaScript の
fetch()などを使えば、画面に変化を伴わずに内部の情報を抽出可能 - オリジンは「trap.example.org」のままなので、同一オリジンポリシーをすり抜けられる
被害例
以下のようなローカルまたは内部アドレスへのアクセスが発生します:
http://localhost:3000/admin/confighttp://127.0.0.1:8000/debughttp://169.254.169.254/latest/meta-data/
これらの URL が返す内容には、認証情報・設定ファイル・API トークンなど、権限の高い情報が含まれていることがあります。
Rails における対策:config.hosts
Rails 6 以降では、Hostヘッダーの検証によってこの攻撃を防ぐ仕組みが標準で備わっています。
development 環境(デフォルト)
# config/environments/development.rb
config.hosts.clear
clearによってすべてのホスト名が一時的に許可されますが、実際には Rails 側で localhost, 127.0.0.1, ::1などのローカルホストに限定されており、安全な範囲で許可される設計になっています。
production 環境(明示的に設定が必要)
# config/environments/production.rb
config.hosts << "myapp.example.com"
本番環境では許可するホストを明示的に指定する必要があります。
AWS 環境におけるリスクと対策
AWS の EC2 インスタンスでは、メタデータが以下のリンクローカルアドレスで提供されます:
http://169.254.169.254/latest/meta-data/
攻撃者が trap.example.org → 169.254.169.254 に切り替えることで、ブラウザ経由でこの情報が盗まれるリスクがあります。
対策:IMDSv2 の実装
IMDSv2(Instance Metadata Service v2)では、メタデータアクセス時にセッション用トークン取得を必須にすることで、JavaScript などの単純なリクエストでは情報を取得できなくなります。
有効化方法(CLI 例)
aws ec2 modify-instance-metadata-options \
--instance-id i-xxxxxxxxxxxxxxxxx \
--http-endpoint enabled \
--http-put-response-hop-limit 1 \
--http-token required
-
--http-token requiredにより、IMDSv1 を無効化 - トークンはサーバーサイドでしか発行できず、ブラウザからのリクエストでは取得不可
その他の対策
| 対策 | 内容 |
|---|---|
| GUI つきサーバの回避 | EC2 にブラウザをインストールしない |
| localhost バインドを確認 | localhost で起動しているサービスを特定 IP に限定しない |
| CSRF 対策や認証の強化 | ステージング環境も含めて保護する |
まとめ
- DNS リバインディングは、DNS の応答 IP を切り替えることで、ブラウザから内部リソースへのアクセスを成立させる攻撃。
- 主なターゲットは開発中のローカル環境
参考文献