概要

みなさんはセキュリティについて意識していますか?

セキュリティについて意識し出すと、気にする部分がたくさんあり、きりがないです。

そこで、今回は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サーバーなどを使っている場合は、この記事と同じようにすることをおすすめします。