1. kresd/negative-caching
co.jp などにNSレコードが存在しないという情報は
- qname minimisationを採用しているKnot resolverではpktcacheにあるらしい。
minimisation時にresolver.cからは
- zone_cut_check経由で利用されている。
- ns_fetch_cutはなにを見ているのだろうか。
- kr_zonecut_find_cachedだけではもったいない。
- ns_fetch_cutはなにを見ているのだろうか。
resolve.c の中、ここらしい。
static void check_empty_nonterms(struct kr_query *qry, knot_pkt_t *pkt, struct kr_cache_txn *txn, uint32_t timestamp) int ret = kr_cache_peek(txn, KR_CACHE_PKT, target, KNOT_RRTYPE_NS, &entry, ×tamp); if (ret == 0) { /* Either NXDOMAIN or NODATA, start here. */
確認する必要のない中間ノードを飛ばすのに使っている。
委譲返答を受け取ったときにも、これをそのまま使って、
- ノードがNSを持たないことを確認できるならば、毒だと分かる。 (0)
cacheになかったら, -2が返ってくるらしい。(未確認ノードとなる) -- ToshinoriMaeno 2016-04-19 10:17:02
2. NXDomain/NoError返答
finalize_answerで Authority section(SOA)を保存しているが、
- どこで使われているのだろう。 (qname, cut, SOA owner) の組から、zone cut 不在情報を抽出したい。
毒盛攻撃に対してはqnameそのものを保存するのは効率が悪そう。(判別は難しい)
-- ToshinoriMaeno 2016-05-11 08:10:38
3. zone cut 不在キャッシュ
不在を示すSOAレコード: 異なるownerに対して、少数のqnameを保持しておくのでよい。
- delegation返答の毒見検査用。間違い名については、最後のqueryだけでも十分だろう。
4. anti-poisoning
委譲NS返答をもらったらzonecut_updateをする。そのときの検査にも使ってくれるといいが、
- それにはどこを見るべきなのか。 zonecut init に注目 (negative caching されていないことを確認せよ)
-- ToshinoriMaeno 2016-04-18 00:37:22
$ dig -t ns ad.jp @127.0.0.3
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> -t ns ad.jp @127.0.0.3 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5470 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ad.jp. IN NS ;; AUTHORITY SECTION: jp. 754 IN SOA z.dns.jp. root.dns.jp. 1460940301 3600 900 1814400 900 ;; Query time: 0 msec ;; SERVER: 127.0.0.3#53(127.0.0.3) ;; WHEN: Mon Apr 18 09:59:26 JST 2016 ;; MSG SIZE rcvd: 81
この返事が毒見にも利用できる。
[plan] plan 'ad.jp.' type 'SOA' [resl] zone_cut_check: cut found [resl] => querying: '203.119.40.1' score: 11 zone cut: 'jp.' m12n: 'AD.Jp.' type: 'SOA' [iter] <= rcode: NOERROR [ pc ] => answer cached for TTL=900 [resl] <= server: '203.119.40.1' rtt: 8 ms [resl] finished: 4, queries: 1, mempool: 32800 B [plan] plan 'ad.jp.' type 'NS' [ pc ] => satisfied from cache [iter] <= rcode: NOERROR [resl] finished: 4, queries: 1, mempool: 32800 B