共用 DNS 権威サーバの脆弱性

黒塗りの DNS -論文編-     

Dec 4, 2019 IPSJ CSEC87  

http://www.e-ontap.com/dns/csec87/
中京大学工学部情報工学科 鈴木常彦

共用 DNS 権威サーバの脆弱性一覧

本発表・論文は共用 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

さくらインターネットの対策

Amazon AWS Route53の対策

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.

CNAME先の同居 (NXDOMAIN)

何かがおかしい

%  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

CNAME先の同居 (NXDOMAIN)

何かがおかしい

%  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

CNAME先の同居 (NXDOMAIN)

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.

CNAME先の同居 (NOERROR)

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 は引き直しとなる。

無駄か危険でしかないので、RFC2308RFC8020 そして権威サーバ実装はこの奇妙な仕様を改めるべきである。

危険な共用サーバへの Lame Delegation

ゾーンが未作成の共用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 に正当なゾーンがなく、第三者が作成できる状態だと危ない。

全ての NS が lame delegation の場合

一部の NS が lame delegation の場合

キャッシュによる一時的な lame delegation

当初の 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 のままでもよい)

キャッシュによる一時的な lame delegation

Public Suffix の問題

放棄されたCNAME

Subdomain takeover attack

共用メールサーバ

某社レンタルサーバに 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 -萎縮編-」参照)

兄弟委譲 (sibling glue)

本来の 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)

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 (フラグメントするサイズ)

共用 DNS 権威サーバの問題のまとめ

本論文および参考文献

本論文ダウンロード

参考文献

  1. 鈴木常彦:キャッシュサーバを権威サーバと兼用すると危ない, http://www.e-ontap.com/dns/weirdra/
  2. ohesotori:DNS移転失敗体験談,https://www.slideshare.net/ohesotori/dns-23491023
  3. IETF:RFC1034 DOMAIN NAMES - CONCEPTSAND FACILITIES,https://tools.ietf.org/html/rfc1034
  4. IETF:RFC1035 DOMAIN NAMES - IMPLEMENTA-TION AND SPECIFICATION,https://tools.ietf.org/html/rfc1035
  5. 民田雅人:サーバーの安全な設定,https://jprs.jp/tech/material/IW2003-DNS-DAY-secure-dns-minda.pdf
  6. JPRS:再帰的な問合せを使ったDDoS攻撃の対策について,https://jprs.jp/tech/notice/2006-03-29-dns-cache-server.html"
  7. JPCERT/CC:DNSの再帰的な問合せを使ったDDoS攻撃に関する注意喚起,https://www.jpcert.or.jp/at/2006/at060004.html
  8. Bernhard Mueller: Improved DNS spoo ng using nodere delegation,https://sec-consult.com/wp-content/uploads/files/whitepapers/SEC-Consult_Whitepaper_whitepaper-dns-node-redelegation.pdf, 2008
  9. Dan Kaminsky:It’s The End Of The Cache As WeKnow It,https://www.blackhat.com/presentations/bh-jp-08/bh-jp-08-Kaminsky/BlackHat-Japan-08-Kaminsky-DNS08-BlackOps.pdf",2008
  10. JPRS:新たなるDNSキャッシュポイズニングの脅威,https://jprs.jp/related-info/guide/009.pdf
  11. 鈴木常彦:DNSの危機的状況,FIT2007(第6回情報科学技術フォーラム)一般講演論文集,第4分冊,pp.29-31,2007
  12. Rikitake, K., Suzuki, T. and Nakao, K.:DNS Security: Now and The Future, IEICE Technical ReportICSS2007-01, pp.3-8, 2007
  13. 鈴木常彦:オープンリゾルバの状況, IEICE TechnicalReport ICM2008-16,pp89-91, 2008
  14. JPRS:権威/キャッシュDNSサーバーの兼用によるDNSポイズニングの危険性について,https://jprs.jp/tech/security/2012-07-04-risk-of-auth-and-recurse.html
  15. 東大亮:キャッシュ・権威 兼用型浸透問題への対処,https://www.slideshare.net/hdais/auth-cachebindconfig
  16. JPRS: Security Issuesへ の 取 り 組 み と 対 応,https://www.janog.gr.jp/meeting/janog34/doc/janog34-dnsvl-morishita-1.pdf
  17. 鈴木常彦:DNS毒入れの真実,http://www.e-ontap.com/dns/poisoning_spa/
  18. 鈴木常彦:DNS毒入れ疑似体験,http://www.e-ontap.com/dns/mimic-hijack/
  19. 前野年紀:qmail.jp,https://moin.qmail.jp/
  20. 徳丸浩:さくらDNSにサブドメインハイジャックを許す脆弱性,https://blog.tokumaru.org/2012/06/sakura-dns-subdomain-hijacking.html
  21. 鈴木常彦:「さくらDNSにサブドメインハイジャックを許す脆弱性」ってのは過小評価,http://www.e-ontap.com/blog/20120614.html
  22. さくらインターネット株式会社:当社DNSに関するお知らせ,https://www.sakura.ad.jp/information/announcements/2012/06/29/653/,2012,2012
  23. JPRS:サービス運用上の問題に起因するドメイン名ハイジャックの危険性について,https://jprs.jp/tech/security/2012-06-22-shared-authoritative-dns-server.html,2012
  24. JPRS:委任にまつわるエトセトラ,https://dnsops.jp/event/20120901/20120901-DNS_Summer_Days_2012-the-delegation-v1.4-after.pdf#page=18, 2012
  25. 東大亮:ends-query-tagete-info,https://github.com/hdais/edns-query-target-info
  26. IETF:RFC2308 Negative Caching of DNS Queries (DNSNCACHE),https://tools.ietf.org/html/rfc2308
  27. IETF:RFC8020 NXDOMAIN: There Really Is Nothing Underneath,https://tools.ietf.org/html/rfc8020
  28. IETF:Errata ID: 4983,https://www.rfc-editor.org/errata/eid4983
  29. IETF:RFC2181 Clari cations to the DNS Speci cation,https://tools.ietf.org/html/rfc2181
  30. IETF: RFC1912 Common DNS Operational and Conguration Errors,https://tools.ietf.org/html/rfc1912
  31. IETF:RFC8499 DNS Terminology,https://tools.ietf.org/html/rfc8499
  32. Sony Subdomain Takeover,https://canyoupwn.me/en-sony-subdomain-takeover
  33. Microsoft verliert Kontrolle ueber Windows-Kacheln,https://www.golem.de/news/subdomain-takeover-microsoft-verliert-kontrolle-ueber-windows-kacheln-1904-140709.html
  34. How Postfix delivers mail,http://www.postfix.org/OVERVIEW.html
  35. 黒塗りのDNS (萎縮編)~共用サービスの闇~,https://www.e-ontap.com/dns/ssmjp/
  36. 太田健也,鈴木常彦: DNS第一フラグメント便乗攻撃の追検証と対策の検討,第81回全国大会講演論文集2019(1),443-444, 2019-02-28