概要
みなさんはセキュリティについて意識していますか?
セキュリティについて意識し出すと、気にする部分がたくさんあり、きりがないです。
そこで、今回はDNSキャッシュポイズニングの対策について、私が調べたことや実施していることを紹介します。
DNSキャッシュポイズニングとは
最初に、DNSキャッシュポイズニングについて説明します。これは、DNSサーバーがIPアドレスとドメイン、ドメインとIPアドレスを変換する際に、その対応をすぐに返せるよう、またサーバーの負荷を下げる目的で、結果をキャッシュしています。そのキャッシュとして嘘の情報を保存する可能性があります。
DNSの仕組み上、IPアドレスとドメインの対応をもっているDNSサーバーにたどり着くまで、いくつものサーバーを経由します。この問い合わせをしている最中に、問い合わせの結果を返すようなパケットを偽装して送り、キャッシュとして保存してもらうということが可能です。このような流れがDNSキャッシュポイズニングです。
DNSSECについて
これらの問題に対応するものとして、DNSSECがあります。これは、DNSの応答に署名を行い、その署名がただしいかどうかで、正規のDNSサーバーの応答かどうかを判断します。
しかし、DNSSECはサーバーやドメインの方が対応していなければならず、微妙に使い勝手が悪いです。実際に私が利用しているドメインの方でもDNSSECは提供していません。さらにいうならば、昔使っていたドメインの管理会社ではDNSSECに対応していたのですが、追加料金がかかってしまうというような状況です。
もちろん、DNSSECを無料で利用できるところもあります。もしもそのようなところでドメインを管理しているのであれば、DNSSECを有効にするだけで、今回の問題への対応は終わりです。
DNSSECが使えないときは
それでは、DNSSECが使えないときはどうすればよいのでしょうか。そのような場合には、DNSのTTLを長くする対策がとれます。
TTLはキャッシュをする時間を設定するものです。TTLが長ければ、キャッシュが長く残るので、DNSキャッシュポイズニングの攻撃をできる回数が減ります。
私の場合は、私の利用しているDNSサーバーで設定できる最大のTTLである86400秒(24時間)を設定しました。
これで、キャッシュが長く残り続け、DNSキャッシュポイズニングの成功率が下がります。
TTLを長くすることの欠点としては、頻繁にDNSのレコードを書き換える場合、キャッシュが長く残ってしまうため、その変更が広く反映されるまでに時間のかかる可能性があります。もしも、このような状況の時は、今回の方法を実施することはおすすめできません。
さいごに
DNSはかなり脆弱性が見つかっているものになりますが、現在のインターネットでは必須の技術です。そのため、DNSとはうまく付き合っていく必要があります。
みなさんも、DNSSECが使えないDNSサーバーなどを使っている場合は、この記事と同じようにすることをおすすめします。