DNSリバインディング攻撃とは、ドメイン名(FQDN)に対応するIPアドレスを短時間に変更することにより、罠サイトに仕掛けたJavaScriptから、攻撃対象サイトに対して同一生成元ポリシーの範囲で攻撃を仕掛ける技法である。

 DNSリバインディングは特殊な攻撃であり、認証を回避したりセッションを乗っ取ることができるわけではない。このため、インターネット上のサイトがこの手法で攻撃されることはあまりなく、ファイアウォールの内側のサーバーで、かつパスワードが分かっているもの(デフォルトパスワードを変更していないルーターなど)が典型的な攻撃対象だった。

 しかしIPアドレスをなりすます目的には、DNSリバインディング攻撃が悪用可能だ。攻撃者は図5のように罠のページを用意して、被害者が閲覧するのを待つ。被害者が罠のページを閲覧すると、以下の仕組みが動き出す。

図1●DNSリバインディングの仕組み
図5●DNSリバインディングの仕組み
[画像のクリックで拡大表示]
(1)DNSサーバーのAレコードを操作して、evil.example.comがIPアドレス203.0.113.22(攻撃対象サイトのIPアドレス)を指すようにする
(2) TTL=5秒と短いのでDNSキャッシュサーバーに保持されたAレコードは5秒後にクリアされる
(3)罠を閲覧後30秒後にJavaScriptからevil.example.comにアクセスする

 JavaScriptからHTTPリクエストするXHRには同一生成元ポリシーの制限があるため、evil.exmaple.comから読み出したHTMLページからは、同じevil.exmaple.com上のURLのみにアクセスできる。DNSリバインディングは、ホスト名は変えずに、ホストと対応するIPアドレスを変更することにより、同一生成元ポリシーの制限の範囲で他のホストにアクセスする技法である。

 DNSリバインディングの対策はブラウザー側で、ホスト名に対するIPアドレスを一定時間変更しないDNS Pinningという方法が採られているが完全ではなく、ブラウザーによって攻撃に要する時間に差はあるものの、攻撃は成立する。