1. DNS/キャッシュサーバへの毒盛/攻撃2
../Kaminskyの攻撃手法ではTTLの満期を待つ必要がない。
キャッシュになさそうな問い合わせをする。 $R.qmail.jp
($R は適当にランダムに生成した文字列)
これなら本来のサーバとのレースに勝つことで毒が入るかもしれない。
でも、こんな名前に毒をつけても誰もひっかからない。使われないから。
2. ドメイン委譲の仕組みを悪用する
これはKaminsky以前から知られていた手法だが、TTLの制約で守られると思われていた。
DNS返答を以下のようにする。 (返答は一番ありそうな qmail.jp DNSサーバからのものを偽装する。)
answer: $R.qmail.jp A *.*.*.* authority: qmail.jp NS attacker-host
この返事は委譲ではないので、authorityは無視してK舞わない。
問い合わせはqmail.jp の NSのひとつ a.ns.qmail.jp に送られるものとする。
防御のあまいキャッシュだと毒を受け取ってしまう。(レースに勝つ必要はある。)
- qmail.jp の NS レコードが上書きされる。 (毒)
本来のサーバからの返事はこんなもの(当該名なし-->ネガティブキャッシュされる)
$ dnsq a zzz.qmail.jp a.ns.qmail.jp 1 zzz.qmail.jp: 84 bytes, 1+0+1+0 records, response, authoritative, nxdomain query: 1 zzz.qmail.jp authority: qmail.jp 86400 SOA a.ns.qmail.jp hostmaster.m.qmail.jp 1295430114 16384 2048 1048576 86400
この毒入れには対策法もある。
- answer section が存在する場合、authority section を無視すればよい。 キャッシュの効率は下がるが、防毒を優先すべきだ。 しかし、answer section をもたない返答をされると回避される。
3. もうひと工夫
answer は無くて、 authority (+additional)の返事なら、受け取るものが多いだろう。
authority: qmail.jp NS www.qmail.jp additional: www.qmail.jp A *.*.*.* (glue 扱いされてもよい。)
これでも、www.qmail.jpのAレコードがキャッシュにあると、防御できるかもしれない。
もし毒が入れば、あとは、www.qmail.jp の A が尽きるのを待つ。
- それまでにqmail.jp の NS レコードが上書きされないことを期待する。
- TTLを十分長くしておけば、消えることはないだろう。
www.qmail.jp の A の問い合わせをさせる。(attacker-hostに来る)
- 偽 A をキャッシュさせる。
A だけでなく、qmail.jp ドメインをまるごと乗っ取ったことになる。
Kaminsky 型の攻撃で毒が入ったと言っているページの説明はこういうのが多い。
- 内部名+glueという形のものの場合は古いBINDか、不良BINDという条件が必要になる。
- Kaminsky の説明スライドでは attacker-host が www.example.com となっていて、 そのglueも含まれている返答を用いている。
qmail.jp の NS (ホスト)に問い合わせしたのだから、 NSのキャッシュは置き換えないという対策もありえる。
DNS/Kaminskyの攻撃手法/講演のスライド(18) は間違いを含んでおり、毒入れできない。
前野のベストの修正案:
$RANDOM.www.foo.com について query を送る
問合せる相手は foo.com の権威サーバである。
その偽返答 (referral)はこういうものにする。
- www.foo.com IN NS attaker-host [authority section]
- www.foo.com の A レコードなどがキャッシュにあっても構わない。
この方法のより詳しい説明: ../攻撃3
これらの説明から、毒盛(毒入れ)の危険性は存在することが示された。 しかし、DNSSECのような大げさな対策をしなくとも実用的な対策は可能で あることも知ってほしい。