Sunpillar備忘録

最近多忙で、HTMLを書いている暇がない。そのうち纏めるかもしれないものを適当にメモしているブログです。

DNSキャッシュ汚染の脆弱性問題

2008-08-02 17:41:14 | TIPS
DNSキャッシュポイズニング脆弱性、JPCERT/CCが“緊急”で再注意喚起
http://enterprise.watch.impress.co.jp/cda/security/2008/07/25/13492.html
JVNVU#800113 複数の DNS 実装にキャッシュポイズニングの脆弱性
http://jvn.jp/cert/JVNVU800113/

何が起きるかというと、自分の使用している(プロバイダの)DNSサーバが攻撃を受けてレコードが汚染されると、本来のドメイン名が指すIPアドレスではないIPアドレスを結果として返してしまうようになります。

例えば、Yahoo! Japanを閲覧しようとhttp://www.yahoo.co.jp/へアクセスしたときに、Yahoo!Japanに偽装したフィッシングサイトへ誘導されてしまうといったことが考えられます。

ちなみに、こちらの記事によると攻撃実証コードはすでにあり、数分から数秒で攻撃を成功させることができるそうです。

DNSの脆弱性に対する攻撃コードが公開される
http://japan.zdnet.com/sp/feature/07zeroday/story/0,3800083088,20377716,00.htm

自分の使用しているDNSサーバが脆弱性を修正しているかどうかを確かめるためには、以下のページで"Test My DNS"をクリックします。

Web-based DNS Randomness Test
https://www.dns-oarc.net/oarc/services/dnsentropy

コマンドプロンプトでやる方法も存在します。digが使える場合は以下のコマンドを使用します。
dig +short porttest.dns-oarc.net TXT

Windowsのようにdigコマンドが無い場合は、nslookupでも代用できます。
nslookup -type=TXT porttest.dns-oarc.net
※タイムアウトになったら、何度か繰り返してください。

POORが出たら、そのDNSサーバは脆弱性を抱えているということです。
具体的には、DNSで使用するポート番号とトランザクションIDのランダム性を測定し、ランダム性が高いとGREAT、ランダム性が低い(ない)とPOORとなります。

ちなみに、この脆弱性はDNSプロトコル自体の問題なので、パッチを当ててGREATにしても根本的解決にはならないそうです。使用するポートがランダムになることで攻撃性成功率は下がりますが、数秒~数分が数日~1週間に延びるだけで、数年とか数百年といった非現実的なレベルになるわけではありません。

完全に解決するためにはDNSSECなるものを導入する必要があるそうです。