Contents
1. DNS/毒盛/入門
リゾルバーになんらかの「偽造返答を受け取らせる」ことが最初の関門です。
- それにはリゾルバーに「問い合わせを送りださせる」ことが重要です。
- 送ってもいない問い合わせに対する返答を受け取るリゾルバーがないとは言えませんが。
- どこからの問い合わせにも返答する「オープンリゾルバー」はこの危険性を抱えています。
../キャッシュサーバはキャッシュにある情報は通常は問い合わせを送出しません。
- Kaminskyはリゾルバーに「次々と」問い合わせを送り出させる攻撃手法を示しました。(2008年)
そして、ここでは、どういう返答であればキャッシュに取り込まれるか、 つまり/有効な毒となるかを考えます。
あとは誰かがキャッシュにある偽の情報を参照するのを待ちます。
1.1. 関連用語
- 入門書(!!)で説明をする必要のある項目、チェックリストとしても使おう。
DNSの基礎知識は前提にする。
2. 毒盛シナリオ
2.1. 利用者と攻撃者
人間あるいはソフトウェア
- どこからどこを攻撃するか (おなじネットワークなら簡単。内部犯)
2.2. DNS キャッシュサーバ
毒盛対象のキャッシュサーバ(ホスト)
実装の種類にもよる(BINDが一番あやしげ)
2.3. DNS問い合せ(きっかけ)
攻撃開始: Kaminsky 流攻撃では「キャッシュされていないレコード」を問い合せる。
外部に問い合せを送らせて、その偽返答で毒入れする。
- 攻撃対象のキャッシュサーバに直接問い合せするのが簡単(オープンリゾルバー)だが、それだけではない。
- ISPの共用キャッシュサーバはオープンリゾルバーも同然だ。 spam 対策のためにDNSを利用していたら、 内輪で利用しているキャッシュサーバだって。
2.4. DNS問い合せ
キャッシュにないレコードが(返答のために)必要になると、キャッシュサーバは外部(ゾーンサーバなど)へ問い合せる。
- 通常はゾーン(権威)サーバへ問い合せられる。 別のキャッシュサーバに問い合せることもある。(fowarding)
このときに「問い合せポートが固定」だと毒を受けとり易い。 (DNSの仕様不備といえる)
2.5. DNS返答(期待される返答)
Kaminsky 流攻撃の問い合せに対しては、本来のサーバからはNXDOMAIN返答が返ってくる。
- キャッシュ(ネガティブ)されるが、影響はない。
2.6. DNS偽返答(毒)
返答に見せかけた返答を送り込む。(委譲返答を使うのがMueller)
そんなことがなぜ可能なのか。 --> UDP だから
2.6.1. 受け取らせる条件
タイミング、問い合せ(query string)、TXID、port
2.6.2. 受け取らないための対策
ポートランダム化、 問い合せのエントロピー増強、 拡張仕様(TXID が16ビットだなんて)
そもそも問い合せをするのが問題かもしれない。
2.7. 偽返答をキャッシュさせるには
現状は受け取った返答が偽返答だと疑う実装はすくない。 (Deadwood は別格)
- 偽返答はこないという前提になっている。 (RFC2181なども)
参照返答(上位からの委譲返答、あるいはゾーンサーバからの移転返答)がキャッシュされやすい。 (Kaminsky, Mueller )
- いまや、毒盛の常識。 Kaminsky の示した例はなぜか毒として有効にならない。
- 民田による改訂版がKaminsky の意図したものだということにはならない。
キャッシュにないレコード(ドメイン名、レコードタイプ)がキャッシュされやすい。(Mueller 手法、 前野らの探索)
上書き: Ranking(RFC2181)を考慮すると毒をいれやすい。 (鈴木)
2.8. 毒の有効性
期間, 効果
キャッシュさせても、直ちに毒の効果が現れるとはかぎらない。 (TTLが関係する)
キャッシュさせても、正規の返答で上書きされると毒の効果が発揮されない。 (RFC2181や glue の扱い)
-- ToshinoriMaeno 2014-04-19 21:50:44
2.9. 毒盛対策
毒が入るまでの手順が理解できたら、それが成功しないようにじゃまをすること
- いろんな対策が考えられるだろう。
-- ToshinoriMaeno 2014-04-19 23:12:27
2.10. ゾーンサーバを使った毒
Kaminsky 流攻撃だけが、毒盛手段ではない。
「浸透いうな!」、DNS/脆弱性/GhostDomainNames
../Kashpureff型攻撃 https://en.wikipedia.org/wiki/AlterNIC
こんなサービス: http://www.ipillion.com/ip/208.91.197.132