1. DNS/毒盛再考/jpゾーン毒盛
watchNS/jp を参照すれば分かるはずだが、 jp ゾーンに毒盛する手段としては以下の方法がある。 2014年当時は jp, dns.jp ゾーンは同居していた。
- NS レコードを別のものにする。 (再委譲を含め)
- NS 値の [a-g].dns.jp が指す A レコード(glue?)に毒(偽情報)を注入する。
これらについて、キャッシュの状態により、それぞれみっつの場合に分けて、検討する必要があると考える。
- TLD からの委譲レコードがキャッシュに入っている。 (委譲情報だけがキャッシュされている。)
- jp ゾーンサーバにNSを問い合せて、Answer Section から得たNS(+A) レコードがキャッシュに入っている。
- jp ゾーンサーバになんらかの問い合せをして、付随する Authority Section から得たNSレコードがキャッシュに入っている。
キャッシュサーバによってはキャッシュされているNSレコードを上書きするそうだが、 キャッシュされているものの重要度により、上書き可能かどうかが変わる。
2. 委譲レコードがキャッシュされているケース (1)
jp DNS 情報がキャッシュにある状態として一番ありそうなのはこれである。
- www.qmail.jp の A レコードを得たいときに、 jp DNS サーバがキャッシュされていなければ、 root server に問い合せる。
root server からの返事はこういうものである。
%dig -t a www.qmail.jp @a.root-servers.net ~ ; <<>> DiG 9.9.0 <<>> -t a www.qmail.jp @a.root-servers.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14710 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 14 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1472 ;; QUESTION SECTION: ;www.qmail.jp. IN A ;; AUTHORITY SECTION: jp. 172800 IN NS a.dns.jp. jp. 172800 IN NS b.dns.jp. jp. 172800 IN NS c.dns.jp. jp. 172800 IN NS d.dns.jp. jp. 172800 IN NS e.dns.jp. jp. 172800 IN NS f.dns.jp. jp. 172800 IN NS g.dns.jp. ;; ADDITIONAL SECTION: a.dns.jp. 172800 IN A 203.119.1.1 b.dns.jp. 172800 IN A 202.12.30.131 c.dns.jp. 172800 IN A 156.154.100.5 d.dns.jp. 172800 IN A 210.138.175.244 e.dns.jp. 172800 IN A 192.50.43.53 f.dns.jp. 172800 IN A 150.100.6.8 g.dns.jp. 172800 IN A 203.119.40.1 a.dns.jp. 172800 IN AAAA 2001:dc4::1 b.dns.jp. 172800 IN AAAA 2001:dc2::1 c.dns.jp. 172800 IN AAAA 2001:502:ad09::5 d.dns.jp. 172800 IN AAAA 2001:240::53 e.dns.jp. 172800 IN AAAA 2001:200:c000::35 f.dns.jp. 172800 IN AAAA 2001:2f8:0:100::153 ;; Query time: 125 msec ;; SERVER: 198.41.0.4#53(198.41.0.4) ;; WHEN: Wed Jun 25 17:07:57 2014 ;; MSG SIZE rcvd: 437
あるいは
%dnsq a www.qmail.jp a.root-servers.net ~ 1 www.qmail.jp: 426 bytes, 1+0+7+13 records, response, noerror query: 1 www.qmail.jp authority: jp 172800 NS g.dns.jp authority: jp 172800 NS f.dns.jp authority: jp 172800 NS e.dns.jp authority: jp 172800 NS d.dns.jp authority: jp 172800 NS c.dns.jp authority: jp 172800 NS b.dns.jp authority: jp 172800 NS a.dns.jp additional: g.dns.jp 172800 A 203.119.40.1 additional: f.dns.jp 172800 A 150.100.6.8 additional: f.dns.jp 172800 28 \040\001\002\370\000\000\001\000\000\000\000\000\000\000\001S additional: e.dns.jp 172800 A 192.50.43.53 additional: e.dns.jp 172800 28 \040\001\002\000\300\000\000\000\000\000\000\000\000\000\0005 additional: d.dns.jp 172800 A 210.138.175.244 additional: d.dns.jp 172800 28 \040\001\002@\000\000\000\000\000\000\000\000\000\000\000S additional: c.dns.jp 172800 A 156.154.100.5 additional: c.dns.jp 172800 28 \040\001\005\002\255\011\000\000\000\000\000\000\000\000\000\005 additional: b.dns.jp 172800 A 202.12.30.131 additional: b.dns.jp 172800 28 \040\001\015\302\000\000\000\000\000\000\000\000\000\000\000\001 additional: a.dns.jp 172800 A 203.119.1.1 additional: a.dns.jp 172800 28 \040\001\015\304\000\000\000\000\000\000\000\000\000\000\000\001 %dnsq a www.qmail.jp a.dns.jp ~ 1 www.qmail.jp: 65 bytes, 1+0+1+1 records, response, noerror query: 1 www.qmail.jp authority: qmail.jp 86400 NS a.ns.qmail.jp
jp 委譲情報を使って、 www.qmail.jp の問い合せを送るので、
- jp NS は Authority Section にあった委譲情報がキャッシュに残ったままである。
2.1. Authority Section 情報での上書きは危険
これを上書きするような状況はどういうものであるか。
RFC 2181 の ranking で関係するのは以下の部分の後半である。
The authoritative data included in the answer section of an authoritative reply. Data from the authority section of an authoritative answer,
これらは偽返答であることは考慮されていないと考えている。-- ToshinoriMaeno 2014-06-25 02:28:14
ranking の後半部分にある「委譲(移転)を示す返答」をどう扱うかが大きな問題である。
- 委譲を信用して問い合せを送っている状態であるのに、返ってきた偽返答の可能性があるものを優先して上書きするというのか。
委譲情報(NS)を含むスーパーセットであっても、毒の可能性がある。
防衛策:
- 委譲情報を使い続けて、決して上書きしない。
- 委譲情報を使って、権威のあるNS(とA) を取り込みキャッシュし、以降は決して上書きしない。 (次のケース)
3. jp サーバから Answer として得たNSレコード (2)
Answer (section) として得られた NS がキャッシュされている場合を考える。
- キャッシュサーバが委譲情報を使って、NSを問い合せた場合にはこの状態になる。
存在しない $random. jp (A)を問い合せた場合、返事に含まれるのはNXDOMAINを示すSOAレコードだけである。
存在する *.jp (A) を問い合せた場合に、 Authority Section に NS がある(ことがある)が、 この情報で「委譲を示すNSレコード」を上書きしてよいかは疑問(議論)の余地がある。 (民田スライド)
- 毒盛される危険がある。
4. Mueller 手法
ここでは Mueller 手法により [a-g].dns.jp をサブドメインとして委譲する攻撃が可能であることを指摘しておく。
- glue あるいは通常のA レコードのTTLが尽きれば、委譲されたサブドメインとして毒が入るはず。
この方法での毒盛の難点は個別に毒盛するとしたら時間がかかることである。 (port randomize はされているとして)
- 特定のサーバのA・glue のTTLが尽きても他のglue が有効であれば、その時のquery に対して毒入りサーバが使われるかどうか。
- 正規サーバからの返答で A の TTL が更新されるのではないか。
- 上位からの委譲時の TTL で制約されるのではないか。
-- ToshinoriMaeno 2014-05-07 06:24:36
時間がかかるということは、その間に正規の返答で毒が無毒化される可能性も増えるということを意味する。
5. JPRS 指摘
また、JPRSが指摘したように、dns.jp ゾーンの NS はキャッシュにないことが多いことを利用して、 DNS/毒盛再考/多世代ゾーン同居 (アクセス制限中)
- co.jp 毒盛と同様の攻撃により、 dns.jp ゾーンに毒(NS) を入れられることを指摘しておく。
この毒がいつ有効になり、いつまで有効かは今は触れないことにする。
-- ToshinoriMaeno 2014-05-07 03:30:33