DNSサーバーのキャッシュポイズニング

キャッシュポイズニング

DNSサーバーを狙った攻撃が、2014年4月中旬以降、国内で増えています。 中でも最近になって新たな攻撃方法が発見され、緊急に対応しなければならないものが 「DNSキャッシュポイズニング」と呼ばれる攻撃です。

IT業界まるわかりガイドは、日本初Web専門スクールのインターネット・アカデミーが運営する業界情報メディアです。最新の業界情報を、初心者にも分かりやすくご紹介しています。

目次

DNSサーバーとは

インターネットの世界では、IPアドレスが住所を表します。具体的には「172.16.1.10」や「221.10.24.133」のように、 カンマで区切って4つグループの数字を繋ぎ合わせ、住所を特定します。このIPアドレスが不明であれば、当然パケットを 相手先に届けることはできません。知合いに手紙を送ろうとしても、相手の住所を知らなければ届かないですよね。

しかし、私たちは数字で住所を管理するのは苦手であり、わかりやすい文字列にして管理しやすくしたものが ドメインネーム(ドメイン名)です。例えば「internetacademy.jp」「bohr.ne.jp」のような文字列です。

そして本題ですが、DNSとは「ドメインネームシステム」の略称で、ドメイン名とIPアドレスとを対応付けるシステムのことを 指します。例えば、アクセスしたいWebサイトのドメイン名をDNSサーバーに問い合わせることにより、そのドメイン名に 対応したIPアドレスを返してくれる仕組みになっています。

DNSサーバーへの問い合わせの流れ

具体的にDNSサーバーへの問合せの流れを見ていきましょう。 ユーザーがWebサイトを閲覧したり、メールの送受信をする際、まずはユーザーPCからDNSサーバーに問い合わせが発生します (上図のフロー1)。 依頼を受けたDNSサーバーは世界に十数個存在するルートサーバーに問合せをします。 DNSルートサーバー上に調べたいドメインのIPアドレスが存在しなければ、DNSルートサーバーは別のDNSサーバーを紹介します。 別のDNSサーバー上に調べたいドメインのIPアドレスが存在しなければ、そのDNSサーバーは別のDNSサーバーを紹介します。

このように、DNSサーバー同士が順に問合せを行い、特定ドメインの情報を所有するDNSの権威サーバーから IPアドレスを取得し、ユーザーに返信します (上図のフロー2)。 また、特定のDNSサーバーが何度も同じ問い合わせを受ける場合、情報をDNSサーバー内に一時的に保存する機能もあります。 過去に発生した内容と同じ問い合わせをする場合は、他のDNSサーバーへ問い合わせることなく、 キャッシュ(情報の一時保管)として保持している情報を利用してユーザーに返信する方が効率的だからです。

DNSサーバーの種類は多岐にわたっており、サービス事業者が提供するDNSサーバーはもちろん、会社や教育機関などで 自ら立てているDNSキャッシュサーバー、各家庭にあるホームルーターも含まれます。

DNSキャッシュポイズニング

本題のDNSキャッシュポイズニングですが、このDNSサーバーのキャッシュ機能を悪用し、DNSサーバーに偽のDNS情報を キャッシュとして蓄積するよう攻撃します。これにより、該当するネームサーバーに問い合わせたユーザーをフィッシング 詐欺サイト等に誘導します (上図のフロー3)。ブラウザ上ではドメイン名が正しく表示されて見えるため、偽のWebサイトにアクセスしていることをユーザーが 見抜くのが難しいのです。さらに最近ではDNSキャッシュポイズニングを効率的に行う新たな攻撃も生まれています。

そのような背景から、日本レジストリサービス(JPRS)は2014年4月15日に「キャッシュポイズニング攻撃の危険性増加に伴う DNSサーバーの設定再確認について」という緊急注意を公開しました。この攻撃を防ぐにはDNSサーバーの送信元ポートを ランダムに変更する必要があるという内容です。ランダム変更を行う機能は「ソースポートランダマイゼーション」と呼ばれ、 この機能を有効にすれば、DNSキャッシュポイズニングの成功確率を引き下げることができます。

最近のDNSサーバーはソースポートランダマイゼーションが標準で実装されていることが多いのですが、 JPRSの調査では、国内のJPドメインのDNSサーバーの約10%が、この機能を有効にしていないようです。 JPRSはDNSサーバーの管理者に対し、この機能を有効にするように強く勧めています。