1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】DNSリバイディング

1
Posted at

はじめに

こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。

今回は、Web アプリ開発者や Rails ユーザーが知っておくべき「DNS リバインディング攻撃」について解説します


DNS リバインディング攻撃とは?

DNS リバインディング攻撃は、外部サイト(攻撃者の用意したドメイン)を通じて、被害者のブラウザから内部ネットワークや localhost に不正アクセスさせる攻撃手法です。


攻撃の流れ

  1. 被害者が trap.example.org にアクセスすると、DNS は 203.0.113.5(攻撃者のサーバー)を返す。
  2. 攻撃者のページ上の JavaScript が setTimeout() などで 2 回目のアクセスを仕込む。
  3. DNS キャッシュが切れたタイミングで再度 trap.example.org にアクセスさせると、今度は 127.0.0.1169.254.169.254 などのローカルアドレスを返す。
  4. ブラウザは従来どおり「trap.example.org」へのアクセスだと認識するため、内部サービスへのアクセスが成立してしまう。

なぜ成立するのか

  • TTL を 0 に設定することで、ブラウザが毎回 DNS を引き直すように誘導できる
  • JavaScript の fetch() などを使えば、画面に変化を伴わずに内部の情報を抽出可能
  • オリジンは「trap.example.org」のままなので、同一オリジンポリシーをすり抜けられる

被害例

以下のようなローカルまたは内部アドレスへのアクセスが発生します:

  • http://localhost:3000/admin/config
  • http://127.0.0.1:8000/debug
  • http://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 を切り替えることで、ブラウザから内部リソースへのアクセスを成立させる攻撃。
  • 主なターゲットは開発中のローカル環境

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?