2008年7月,企業などが運用するDNSサーバーに偽の情報を埋め込む「DNSキャッシュ・ポイズニング」の新たな攻撃手法が見付かった。ぜい弱性を抱えるDNSサーバーは,攻撃者からの不正な応答を受け取ると,偽情報をキャッシュしてしまう。対策は各ベンダーが提供するセキュリティ・パッチを適用することだ。

 今回見付かった攻撃手法は,7月下旬にある研究者が公開した。攻撃を仕掛けられたDNSサーバーを参照したユーザーは,知らないうちに悪意あるWebサイトに誘導される。7月末にはインターネット上に多くの攻撃コードが出回り,米国では実際に被害も見られた。

 DNSキャッシュ・ポイズニング攻撃は以前から知られている。ただ今回の手法では,「単位時間当たりの攻撃回数が増え,効率的に攻撃を仕掛けられる」(ラック コンピュータセキュリティ研究所の岩井博樹所長)点が新しい。

 しかも,不正なDNS情報を受け入れてしまうぜい弱性は,BIND 8/9のほかMicrosoft DNSサーバー,シスコやジュニパーネットワークスの製品など多くのDNSサーバーに存在していた。事態を重く見たセキュリティ関連企業や組織は,管理者に対して,セキュリティ・パッチを適用するなどの対策を早急に施すよう呼びかけた。

キャッシュ生存時間を無視できる

 具体的な攻撃の手口を図1に示す。まず攻撃者は標的のDNSサーバー(DNS1)に,実在しないホスト名のアドレスを問い合わせる(図1の(1))。そのアドレスを知らないDNS1は上位のDNS2に問い合わせる(同(2))。ここで攻撃者は,DNS2の応答が返る前にDNS1に偽の応答を送る(同(3))。

図1●効率化されたDNSキャッシュ・ポイズニングの手口<br>DNSサーバー(DNS1)に最初にリクエストを送る際,毎回異なるホスト名を要求することで,短時間に何度も攻撃を仕掛けられる。従来は,同じホスト名を繰り返し要求していたため,DNS1のキャッシュ生存時間ごとにしか攻撃を仕掛けられなかった。
図1●効率化されたDNSキャッシュ・ポイズニングの手口
DNSサーバー(DNS1)に最初にリクエストを送る際,毎回異なるホスト名を要求することで,短時間に何度も攻撃を仕掛けられる。従来は,同じホスト名を繰り返し要求していたため,DNS1のキャッシュ生存時間ごとにしか攻撃を仕掛けられなかった。
[画像のクリックで拡大表示]

 DNSはその仕様上,問い合わせと応答を対応付けるための識別子(トランザクションID)などの情報が一致すれば応答を受け付ける。そこで攻撃者はトランザクションIDなどを偽ってDNS2になりすまし,DNS1に不正な情報をキャッシュさせる(同(4))。

 従来の手法では,攻撃者の最初の問い合わせには実在するURLが使われた。攻撃に失敗した場合,次の攻撃にも同じURLを問い合わせる。このやり方では,攻撃に失敗してDNS1にDNS2から返った本来の情報がキャッシュされてしまうと,攻撃者はキャッシュ生存時間が過ぎるまで次の攻撃を仕掛けられず,効率が悪い。

 この点,新手法ではURLに実在しないホスト名をランダムに設定するため,キャッシュ生存時間を無視して攻撃を続けられる。結果として,攻撃の成功率が高まる。

 これだけでは,DNSには「存在しないURLとそのIPアドレス」しかキャッシュされない。そこで今回の手法では,DNS応答に含まれる「Additional」領域を悪用して,DNS1に偽の情報を覚えさせる。

 通常,問い合わせURLと応答のIPアドレスは「Answer」領域に収めてやり取りされる。これに対して今回の手法では,Answer領域ではなく,付属情報を収めるAdditional領域に悪質なWebサーバーのIPアドレスと,なりすましたい正規のWebサイトのURLを入れて送る。