Dec 4, 2019 IPSJ CSEC87
http://www.e-ontap.com/dns/csec87/
中京大学工学部情報工学科 鈴木常彦
本発表・論文は共用 DNS 権威サーバの脆弱性を解説し注意喚起をすることが目的
(一部の脆弱性は本発表が初出)
第三者に子孫のゾーンを作られると危ない
jp ゾーンからの委譲 example.jp. IN NS ns.example.ad.jp. example.jp ゾーン example.jp. IN NS ns.example.ad.jp. www.example.jp. IN A 192.0.2.1 www.example.jp ゾーン www.example.jp. IN NS ns.example.ad.jp. www.example.jp. IN A 192.0.2.2
メジャーな実装(BIND,NSD等)では子孫 (192.0.2.2) が優先
(tinydnsは 192.0.2.1, 192.0.2.2 両方を返す)
待ち伏せもありえる (委任を向けられるだけで危険 / 対策によっては登録 DoS にもなりえる)
対策は権利確認
jp ゾーンからの委譲 example.jp. IN NS ns.example.ad.jp. www.example.jp ゾーン www.example.jp. IN NS ns.example.ad.jp. www.example.jp. IN A 192.0.2.1
ここへ以下のように親のゾーンを作られると www.example.jp 以外が乗っ取られる。
偽 example.jp ゾーン example.jp. IN NS ns.example.ad.jp. example.jp. IN MX mail.example.jp. mail.example.jp. IN A 192.0.2.1
jp ゾーンからの委譲 example.jp. IN NS ns.example.ad.jp. www.example.jp ゾーン www.example.jp. IN NS ns.example.ad.jp. www.example.jp. IN A 192.0.2.1
親が不在の状態で mail.example.jp など兄弟も乗っ取られる。
偽 mail.example.jp ゾーン mail.example.jp. IN NS ns.example.ad.jp. mail.example.jp. IN A 192.0.2.1
512 x 4 (org, com, uk, net) のサーバ群から親子の重複を避けて割当される。
e-ontap.com. 172800 NS ns-1195.awsdns-21.org. e-ontap.com. 172800 NS ns-144.awsdns-18.com. e-ontap.com. 172800 NS ns-2026.awsdns-61.co.uk. e-ontap.com. 172800 NS ns-732.awsdns-27.net.
sub.e-ontap.com. 172800 NS ns-125.awsdns-15.com. sub.e-ontap.com. 172800 NS ns-1516.awsdns-61.org. sub.e-ontap.com. 172800 NS ns-1538.awsdns-00.co.uk. sub.e-ontap.com. 172800 NS ns-960.awsdns-56.net.
何かがおかしい
% drill a c.uecac.jp @ns.uecac.jp ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 37331 ;; flags: qr aa rd ; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; c.uecac.jp. IN A ;; ANSWER SECTION: c.uecac.jp. 3600 IN CNAME www.ipsj.or.jp. ;; AUTHORITY SECTION: ipsj.or.jp. 600 IN SOA ns.ipsj.or.jp. tss.e-ontap.com. 1 3600 600 7200 600
何かがおかしい
% drill a c.uecac.jp @ns.uecac.jp ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 37331 ;; flags: qr aa rd ; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; c.uecac.jp. IN A ;; ANSWER SECTION: c.uecac.jp. 3600 IN CNAME www.ipsj.or.jp. ;; AUTHORITY SECTION: ipsj.or.jp. 600 IN SOA ns.ipsj.or.jp. tss.e-ontap.com. 1 3600 600 7200 600
uecac.jp ゾーンのサーバに (偽) ipsj.or.jp ゾーンが同居し、そこに RR がないとこうなる。
% drill a c.uecac.jp @ns.uecac.jp ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 37331 ;; flags: qr aa rd ; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; c.uecac.jp. IN A ;; ANSWER SECTION: c.uecac.jp. 3600 IN CNAME www.ipsj.or.jp. ;; AUTHORITY SECTION: ipsj.or.jp. 600 IN SOA ns.ipsj.or.jp. tss.e-ontap.com. 1 3600 600 7200 600
RFC8020 Section
1.1 Terminology
"Denied name": the domain name whose existence has been denied by a response RCODE of NXDOMAIN.
2. Rules
Warning: if there is a chain of CNAME (or DNAME), the name that does not exist is the last of the chain ([RFC6604]) and not the QNAME.
The NXDOMAIN stored in the cache is for the denied name, not always for the QNAME.
uecac.jp ゾーンのサーバに ipsj.or.jp ゾーンが同居し、ipsj.or.jp ゾーンに RR があると、、、
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 28607 ;; flags: qr aa rd ; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;; f.uecac.jp. IN A ;; ANSWER SECTION: f.uecac.jp. 3600 IN CNAME ftp.ipsj.or.jp. ftp.ipsj.or.jp. 1800 IN A 127.0.2.1 ;; AUTHORITY SECTION: ipsj.or.jp. 1800 IN NS ns.ipsj.or.jp. ;; ADDITIONAL SECTION: ns.ipsj.or.jp. 1800 IN A 150.42.6.4
まっとうなリゾルバであれば RFC2181 に従ってこの A は引き直しとなる。
ゾーンが未作成の共用DNS権威サーバに委譲が行われている状態で、第三者がゾーンを作成できると乗っ取りが成立する。
jp ゾーンからの委譲 example.jp. IN NS ns.example.jp. example.jp. IN NS ns.example.com. example.jp ゾーン example.jp. IN NS ns.example.jp. example.jp. IN NS ns.example.net.
ns.example.net あるいは ns.example.com に正当なゾーンがなく、第三者が作成できる状態だと危ない。
本物のexample.jp ゾーン example.jp. IN NS ns.example.jp. example.jp. IN NS ns.example.net. 偽のexample.jp ゾーン example.jp. IN NS ns.example.net.RFC2821に従うキャッシュサーバは偽の NS RRset でキャッシュが上書きされる。
当初の jp から example.jp への委譲 example.jp. 86400 IN NS ns.example.net. 当初の example.jp ゾーン example.jp. 600 IN NS ns.example.net. 移転後の example.jp への委譲 example.jp. 86400 IN NS ns.example.com. 移転後の example.jp ゾーン example.jp. 86400 IN NS ns.example.com.
ここで移転後の ns.example.net. に以下を記述したゾーンを残しておけば問題ないが、
example.jp. 600 IN NS ns.example.com.
以下のような悪意あるゾーンを第三者に作られるとアクセスしてきたキャッシュサーバに対して乗っ取りが成立する。利用者の多いパブリック DNS キャッシュサーバが狙われると被害が大きい。
example.jp. 172800 IN NS ns.evil.example.info. ;(ns.example.net のままでもよい)
jp ゾーンからの委譲 example.co.jp. IN NS ns.example.net. co.jp ゾーン co.jp. IN NS ns.example.net. *.co.jp. IN A 192.0.2.2 example.co.jp ゾーン example.co.jp. IN NS ns.example.net. example.co.jp. IN A 192.0.2.2
old-service.example.jp. IN CNAME orphan.cdn.example.com.
某社レンタルサーバに chukyo-u.ac.jp を登録してみた。
% dnsq ns chukyo-u.ac.jp ns-rs1.■■■■■■■■■.jp answer: chukyo-u.ac.jp 600 NS ns-rs1.■■■■■■■■■.jp answer: chukyo-u.ac.jp 600 NS ns-rs2.■■■■■■■■■.jp
MX 関係なく内部配送してしまっている。(詳しくは「黒塗りのDNS -萎縮編-」参照)
本来の glue だけの jp からの委譲応答
Authority Section example.jp. IN NS ns.example.jp. example.jp. IN NS ns.example.ad.jp. Additional Section ns.example.jp. IN A 192.0.2.1
兄弟ドメインの glue を含む jp からの委譲応答
Authority Section example.jp. IN NS ns.example.jp. example.jp. IN NS ns.example.ad.jp. Additional Section ns.example.jp. IN A 192.0.2.1 ns.example.ad.jp. IN A 192.0.2.2
兄弟ドメインへの委譲が混入する ↑
example.ad.jp. IN NS ns.example.ad.jp. ns.example.ad.jp. IN A 192.0.2.2
RFC8499の "Bailiwick" の説明で "Glue records for sibling domains are allowed, but not necessary" と容認
Sibling glue は DNS 第一フラグメント便乗攻撃に脆弱 (本論文が初出)
Authority Section example.jp. IN NS longname1.example.jp. example.jp. IN NS longname2.example.jp. example.jp. IN NS longname3.example.jp. (たくさん省略) example.jp. IN NS longnameN.example.jp. example.jp. IN NS nsa.dns.jp. Additional Section longname1.example.jp. IN A 192.0.2.1 longname2.example.jp. IN A 192.0.2.2 longname3.example.jp. IN A 192.0.2.3 (たくさん省略) longnameN.example.jp. IN A 192.0.2.N nsa.dns.jp. IN A 203.119.1.4 ;; MSG SIZE rcvd: 1600 (フラグメントするサイズ)
参考文献