DNSキャッシュポイズニング、DNSキャッシュサーバ、DNS権威サーバ、ID、ポート番号53、Kaminsky攻撃
DNS(Domain Name System)とは、ドメイン名やホスト名などとIPアドレスとを対応付けるシステムです。その仕組みは「DNS」を参照してください。
DNSキャッシュサーバは、クライアント(利用者のPC)から最初に接続するDNSサーバで、企業では社内ネットワークにあります。個人ではインターネットプロバイダにあります。
それに対して、DNSキャッシュサーバの上位にあり、DNSキャッシュサーバからの問い合わせに応じるサーバをDNS権威サーバといい、社内でのインターネットとの接続点や社外のインターネットに存在します。
DNSキャッシュサーバは、クライアントからのDNS問合せに際して、毎度DNS権威サーバに問い合わせるのではなく、以前の問合せで得た結果を一時的にキャッシュしておき、それを返すことで効率をよくするとともにでDNS権威サーバの負荷を低減しています。自ら再帰的な(完全な)名前解決を実行できるため、「フルサービスリゾルバ」(full service resolver)ともいいます。
DNSキャッシュポイズニングとは、外部からDNSキャッシュサーバに不正アクセスして、このキャッシュの内容を、悪意のあるサーバのIPアドレスに書き換える攻撃手口です。利用者は、自分が関与せず信頼しているDNSキャッシュサーバで悪意サーバにアクセスしてしまうことになります。
DNS権威サーバもキャッシュ化しており、それを改ざんされることもあります。このときは被害が広範囲になります。
正しいURLを入力してもDNSサーバが悪意のページへ接続してしまうのですから、利用者が個人で対処するのは困難です。表示されたページに違和感を感じ、すぐにページから離れること程度しかできません。
それで、DNSサーバ管理者の対策に絞れれます。
DNSキャッシュサーバが社内ネットワークにある場合、サーバに接続できるクライアントを指定することが簡単で効果的です。
DNSでの問合文と応答文はDNSメッセージ形式になっており、IDという16ビットの識別子があります。問合せ文でのIDとキャッシュを作成したときのIDが一致すれば応答しますし。一致しなければ不正アクセスとします。
しかし、16ビットなので、総当たり法でも調べることできます。
これを防ぐために、IDを固定せずにランダムに変更すること、DNSサーバへの集中アクセスの監視をすることが効果的です。
Source port randomization といいます。DNSでの通信は主にUDPが用いられ、標準的なポート番号は53です。これを固定せずに変更することにより、不正アクセスを防止できます。
セキュリティ研究者のDan Kaminskyが2008年に発表した、新たなキャッシュポイズニング攻撃の方法。TTLの長さに関係なく攻撃することが可能
DNSSEC: DNS権威サーバからの応答に電子署名をつけ、DNSキャッシュサーバがその署名を検証することで、応答が偽装・改ざんされているかどうかを確認できます。
しかし、これにはDNS権威サーバやDNSキャッシュサーバの電子署名に必要な鍵の管理や配布方法の確立などが必要で普及には時間がかかる状況です。