今更だけどDNSキャッシュポイズニングについて簡単に説明するよ! - そして、DNSポイズニングがなかなか対応されない理由。

先日IIJの一日インターンに行ってきました。
NDAがあるので、事細かに書くことは出来ないのですが、教育的なプログラムが組まれていて非常に面白かったです。
そこで、色々お話しして、その中でDNSポイズニングがなかなか対応されない理由、当たり前の理由が聞けたので、「DNSポイズニングって何がヤヴァイのか良くわかんね」って人に向けた簡単な解説とあわせて書きたいと思います。

まず、DNSキャッシュポイズニングの何が怖いか?

簡単に言うと、
googleに繋いだはずが全く別サイトに繋がっちゃう!」
って話です。
本当に繋ぎたいサイトと違うサイトに繋いじゃう事が出来るので、例えば
実在するショッピングサイトそっくりの偽サイト作って、ショッピングさせて。クレジットカードの番号ゲットしちゃったり、住所ゲットしちゃったり。
夢が広がる怖い事が出来ちゃいます。
きちんとしたセキュリティ対策していれば大丈夫なのですが……結構な数のサイトさんが、酷いセキュリティのまま運用されてたりしますので、不可能じゃないのです!詳しく知りたい人は「オレオレ証明書」とかで検索してみよう!

DNSの簡単な説明。

  • ドメイン名(たとえば2ch.netとかgoogle.comとか)をip(コンピュータの住所みたいなもん)に変換してくれるDNSさんがおいでやす。
  • このDNSさん、自分が「直接」知らないドメイン名だったら、他のDNSさんに聞きに行く。
  • ほかのDNSさんも、知らなかったら聞きに行く。
    • 最初に一番お偉いさんに聞いて、そして階層的に一つ下のレベルの人に聞きに行く。それでも分からなかったら、その一つ下のレベルの人に……それの繰り返し。
  • そして、一度聞いた分については覚えて(キャッシュして)おく。

こんな感じかな!
そして、DNSは殆どの場合、各プロバイダが提供しています。
ルータの設定に「DNSのアドレス」とかいう欄があると思うよ!

んで、どうやって汚染するの?

他のサーバに聞きに行くときに、ポートと呼ばれる窓口を通して聞きに行きます。
んで、このポートってのは65535個あるんだけど、ランダムに聞きに行くのが理想。
それと、一回聞きに行くごとに違うID(0-65535)を付けて送っています。
でも、これらの番号がもし予想しやすかったら?固定されていたら?
そこに目がけて嘘のデータを投げ込んでしまえば、嘘の住所をDNSが覚えちゃう。つまり、googleに繋ぎたい人を全く別のサイトに接続させたりすることが出来ちゃう!
ポート番号とクエリidがそれぞれ一致しないと、この汚染攻撃は成功しないんだけど、どっちかが予測可能であったら65535通り試す程度で済んじゃうよね。
今回の問題としては、そのポート番号のランダム性が足りなかったり、決め打ち(53番)だったりする事です。
ヤバイ、ヤバイね!

そして、問題点は?

DNSってのは、「2ch.netは。。。206.223.154.230か。DNSさんが言っているんだから間違っていないはず!」って信用されていています。
だから、暗号化通信のSSLも、このDNSを基本にして動いています
全ての基本になっているのです。

なので

接続先のサイトが信用出来なくなってしまうのです。
自分が繋いでいるサイトは本当にgoogleなの?いつものショッピングサイトなの?クレジットカードの番号入れてもいいの?
そして、それを確実に確認する方法は、ありません。信用出来るDNSでなければ、です。
但し、きちんとSSLによって暗号化されており(アドレスがhttp://〜でなく、https://で始まっているページ)、尚且つエラーが出なかった場合は大丈夫です。

で、今は安心できるの?

YAHOO BBは対応されているそうです。
確認したい人は、こちらで確認できます。POORって出たら、残念なDNSを使っているプロバイダって事です。

そんで、何で対応しないプロバイダがあんのさ。

「そんなヤバイのに、何でなかなか対応しない所があるのさ。」って思う人が殆どだと思います。
そして、今回それを尋ねてみました。何で対応しないプロバイダが多いのか、と。
頂いた返答としては

  • 面倒。
  • パフォーマンス(性能)が落ちる。

って事だそうで。
DNSのプログラムを新しいのに入れ替えるのもプロバイダとかのレベルになると大掛かり。んで、53番とか決め打ちしちゃってる方が勿論簡単で、機器の負荷が少ない。
後は、地方プロバイダとかの小さい所になると、技術者一人が担当する範囲が広くて、それぞれの部分について知識がそんなに無い=よく分からないから、デフォルトの設定(53番決め打ち)で使っている、とかいう理由もあったりするみたいで。
「良くわかんないけど、ウィルス対策ソフトってパソコンが重たくなるから切っちゃった。ウィルス感染なんて、滅多にしないよね!」的な事ですかね。

あとがき

って、これ書いている実家のプロバイダ「おりべネットワーク」のケーブルテレビインターネットのDNSはワロス状態。
ポート番号が連続していて一直線。「ランダム性?何それ?おいしいの?」
後で問い合わせてみようかなぁ。

thanks id:kidmin!

追記 8/13 0:30

"SSL証明書がオレオレでなく、警告が出ていないのならば本物のサーバ(アドレスバーに表示されたURLのドメインの本物サーバ)である。"
という事です。
ソースは高木先生。
http://takagi-hiromitsu.jp/diary/20070407.html

お詫びして訂正致します。

ってな訳で、やっぱりオレオレ証明書使ってるショッピングサイトさんとかはどうにかして欲しいですね。
後、そもそもSSLも使ってないサイトとか。あるんですよ、本当にそういうサイト。某ソフトハウスソフパル(のいじ的な意味で)や、プルトップ(遙かに仰ぎたくなるような意味で)の通販ページとか

追記 9/18

独立行政法人情報処理推進機構より、この問題についてのページが作成されました。
非常に良い資料ですので、一度目を通しておく事をお薦めします。