DNSキャッシュポイズニング
DNSサーバを利用した悪いことだよ
DNSサーバの使うカンペをコッソリ書き換えるよ
変なホームページに誘導するのが目的だよ
簡単に書くよ
DNSキャッシュポイズニング(読:ディーエヌエスキャッシュポイズニング 英:DNS cache poisoning)とは
「DNSサーバさん
(IPアドレスとドメイン名の対応を管理するのが仕事のコンピュータ)の使っているカンペを変な内容に書き換えてやるぜ!」攻撃のこと。
もう少し具体的に書くと
フルサービスリゾルバさん(DNSキャッシュサーバさん)
(答えが分からなかったら他のDNSサーバに聞きに行くDNSサーバ)に悪意のある情報を覚えさせることで、変なホームページに誘導したりする嫌がらせ
です。
詳しく書くよ
最初に留意事項です。
・DNS
・DNSサーバ
・フルサービスリゾルバ
の意味が分からない方は、おそらく、ここから先を読むのは早いです。
これらの用語の意味を先に勉強してきてください。
のんびり、お待ちします。

準備OKでしょうか?
それではDNSキャッシュポイズニングの説明を始めます。
フルサービスリゾルバ(DNSキャッシュサーバ)さんは他のDNSサーバさんに問い合わせた内容をカンペにメモって一定期間保存しています。
ちなみに、このカンペは「キャッシュ」と呼ばれたりします。
カンペに記載のある内容の問い合わせがあった場合は、そのカンペの内容に従ってお返事してやります。
カンペに記載がない場合のみ、他のDNSサーバさんに問い合わせにいくのです。
それを踏まえて
「DNSサーバさんの使うカンペを変な内容に書き換えてやるぜ!」な攻撃
が「DNSキャッシュポイズニング」です。
例えば、そうですね。
ドメイン名「i-3-i.info」は元々IPアドレス「198.51.100.1」の「ピヨピヨサーバ」と関連付けられていました。
それをIPアドレス「198.51.100.2」のウイルスたっぷり「デビルサーバ」と関連付くように書き換えてしまいます。
そうすると、どうなるでしょう?
そうですね。
「『i-3-i.info』のIPアドレスは何~?」という問い合わせに対して「『198.51.100.2』(デビルサーバ)だよ~」と答えるようになってしまいます。
本当はIPアドレス「198.51.100.1」のピヨピヨサーバに遊びに行くはずが、IPアドレス「198.51.100.2」のデビルサーバに到着してウイルスと格闘することになります。
このような
「DNSサーバさんのカンペを書き換えて、問い合わせに対して変な回答をするようにしてやるぜ!」な嫌がらせ
がDNSキャッシュポイズニングです。
上でも書きましたが、カンペを使う仕組みは「キャッシュ」と言います。
DNSサーバさんのキャッシュに毒(悪意のある情報)を混ぜる攻撃だから「DNSキャッシュポイズニング」です。
それでは、実際には、どうやってカンペを書き換えるのでしょうかね?
せっかくなので簡単に見ていきます。
興味のない方は適当に読み飛ばしてください。
フルサービスリゾルバさんは、答えが分からないときは他のDNSサーバさんに問い合わせにいきます。
ここでポイントとなるのが「フルサービスリゾルバさんは結構忙しい」ということです。
2つも3つも同時に問い合わせなくてはいけない場合があります。
複数同時に問い合わせるとき、戻ってきたお返事がどの問い合わせに対する回答か分からないと困りますよね。
そこで、お問い合わせするときは質問番号をくっつけて送ってやります。
問い合わせ1には質問番号1、問い合わせ2には質問番号2、のような形です。
そうすると他のDNSサーバさんは、この質問番号をくっつけてお返事をくれます。
「この答えは質問番号1の問い合わせに対する回答だよ」のような形です。
さぁ、いよいよ本題です。
DNSキャッシュポイズニングをやってみましょう。
まず普通にパソコンさんからDNSサーバさんに対してお問い合わせをします。
そうすると、答えの分からないDNSサーバさんは他のDNSサーバさんに問い合わせます。
今がチャンスです!
他のDNSサーバさんから本当の答えが返る前に悪い人の方で他のDNSサーバさんに成りすまして偽物の答えを送るのです。
えっ?質問番号が分からない?だったら片っ端から試せば良いじゃないですか。
「これは質問番号1の答えです」「これは質問番号2の答えです」のように順番に試して行けば、いつかは本物の質問番号と一致します。
偽物の答えを受け取ったDNSサーバさんは、その内容を問い合わせた人に返します。
その後、偽物の答えをカンペにメモってしまうのです。
次に同じ内容の問い合わせがあったときは、わざわざ他のDNSサーバさんに聞きません。
カンペにメモってあるからです。
カンペを見て、カンペの内容を返します。
ということは、ですよ。
悪い人が仕組んだ偽物の答えを返しちゃいます。
おーまいがっ。
これがDNSキャッシュポイズニングの仕組みです。
ふーん。
でも、これって他のDNSサーバさんに問い合わせに行くときにやれることでしょ?
その通りです。
1回問い合わせたらカンペにメモっちゃうよね?
その通りです。
その内容がカンペから消えるまで他のDNSサーバさんに問い合わせに行かないよね?
その通りです。
ということは、悪さをするタイミングってカンペに内容が書かれていないときに1回だけだよね?
失敗したらカンペにメモられた内容が消えるまで待たないといけないんだよね?
まったくもって、その通りです。
じゃあ、そんなに神経質にならなくても良いんじゃない?
成功する可能性は低いでしょ。
その通りです。
そんなふうに考えていた時期が俺にもありました。
悪さをできるタイミングは他のDNSサーバさんに問い合わせるときです。
問い合わせた内容がすでにカンペにメモられているときは、できません。
それでは、どうするか?
カンペにメモられていない内容を問い合わせれば良いのです。
例えば、そうですね。
存在しないドメイン名「tekitou001.example.com」のIPアドレスを問い合わせます。
存在しないドメイン名なので、おそらくカンペにはメモられていません。
きっと他のDNSサーバさんにお問い合わせするでしょう。
その間に攻撃を仕掛けましたが失敗しました。
でも諦めたらそこで試合終了です。
次に、存在しないドメイン名「tekitou002.example.com」のIPアドレスを問い合わせます。
存在しないドメイン名なので、おそらくカンペにはメモられていません。
きっと他のDNSサーバさんにお問い合わせするでしょう。
その間に攻撃を仕掛けましたが失敗しました。
でも諦めたらそこで試合終了です。
存在しないドメイン名「tekitou003.example.com」のIPアドレスを問い合わせます。
以下、同じことを繰り返します。
実質的にチャンスは無限ですね。
これだけだと、成功しても存在しないドメイン名とIPアドレスの組み合わせがカンペにメモられるだけです。
しかし、もう一工夫することで実質的な被害を出せちゃうのです。
このようなDNSキャッシュポイズニングの効率を上げるやり方をカミンスキーさんという人が発見してしまいました。
そのため、このやり方は「カミンスキー型攻撃」と呼ばれています。
あまり具体的なやり方を書くと怒られちゃうかもしれないので、説明はこれ位にしておきますね。
一言でまとめるよ
まぁ「DNSキャッシュポイズニング」って単語が出てきたら「DNSサーバさん
(IPアドレスとドメイン名の対応を管理するのが仕事のコンピュータ)のカンペを書き換えてやるぜ攻撃なんだな~」と お考えください。
おまけ
■訳してみるよ
「DNS」は「Domain Name System(ドメイン・ネーム・システム)」の略です。
「domain(ドメイン)」の意味は「領域」とか「区域」とか「領土」とかです。
「name(ネーム)」の意味は「名前」とかです。
「system(システム)」はカタカナで「システム」と解釈してください。
「cache(キャッシュ)」の意味は「隠したもの」とか「隠し場所」とか「貯蔵所」とか「貯蔵物」とかです。
「poisoning(ポイズニング)」の意味は「中毒」とか「毒殺」とか「毒を盛る」とかです。
何となく くっつけると
領域名システムの貯蔵物に毒を盛る
となります。
■検索してみる?






