用語「DNS Rebinding」について
DNS Rebinding (でぃーえぬえす りばいんでぃんぐ)
話題 : セキュリティ
DNS の情報を再読込させることで「同ドメインだが IP アドレスが違う」という状況を作り出し、same originポリシーを破ろうとする攻撃手法。攻撃者は有効なドメイン名をもち、その DNS サーバを管理している必要があります。
たとえば、攻撃者が bakera.jp ドメインを管理していて、218.219.246.132 という IP アドレスを持っていたとします。そして、以下のようにしておきます。
- 攻撃者は、自身の管理するDNSに、bakera.jp → 218.219.246.132 という情報を登録しておく。このとき、TTLの値を非常に短いものにしておき、情報がキャッシュされないようにしておく。
- 攻撃者は、スクリプトを含む罠のWebページを http://bakera.jp/ に置いておく。
- 罠ページのスクリプトは、一定時間待った後に http://bakera.jp/ にアクセスしてデータを取得し、別の (攻撃者の) サーバに送信する。
誰かが http://bakera.jp/ にアクセスすると、スクリプトが動作します。一定時間経つと、スクリプトは http://bakera.jp/ のデータを取得して、別のサーバにデータを送信します。http://bakera.jp/ 上のスクリプトから http://bakera.jp/ のデータを参照していますから、これは same originポリシーに抵触することはなく、普通に動作します。
このとき、途中で DNS のデータを書き換えられたらどうなるでしょうか。上記の動作に、以下のような動作が加わったとします。
- 誰かが http://bakera.jp/ にアクセスすると、自動的に DNS 情報が書き換えられ、bakera.jp → 127.0.0.1 となる。
最初のアクセスの瞬間は、bakera.jp → 218.219.246.132 でした。ここで 218.219.246.132 に置かれた悪意あるスクリプトが動作します。そしてしばらくすると、スクリプトは http://bakera.jp/ の内容を他のサーバに送出しようとします。
TTL が異常に短く設定されているためキャッシュは無効となり、再び bakera.jp の名前解決が行われます。そしてこの時は bakera.jp → 127.0.0.1 になっていますから、スクリプトは 127.0.0.1 の内容にアクセスすることになります。しかしドメインはあくまで bakera.jp ですから、same originポリシーに抵触することはありません。
このようにして、通常外部からは読み取れない内容を読み出すのが DNS Rebinding の手法です。
もっとも、実際にはプログラム側は短すぎる TTL を無視する (TTL の値以上の時間キャッシュする) ようになっていることが多く、その場合はこのような攻撃は通用しません。プログラムのこのような動作は DNS Pinning と呼ばれます。
- 「DNS Rebinding」にコメントを書く