More Web Proxy on the site http://driver.im/co.jp への TXT 追加の謎
- 3. 一通のメール
• あるとき、dnsops MLに一通のメールが流れました
Subject: [DNSOPS dnsops 1339] Re: キャッシュポイズニング攻撃の危険性増加に関
する緊急の注意喚起の掲載について
From: "T.Suzuki" <tss@e-ontap.com>
To: dnsops@dnsops.jp
Date: Tue, 15 Apr 2014 15:03:41 +0900
<snip>
それから、co.jp などにいつの間にか入っている不思議な TXT レコードについて、
本件との関連性の説明をしてもらえたりできませんか?
- 5. co.jpってどんなドメイン名?
• 実は、TXT RRが入る前は、リソースレコードが何も存在しないドメイン
名でした
• jpゾーンから直接、example.co.jpが委任されています
• DNSSECでも、example.co.jpのDSは、jpゾーンに登録されています
• 「example.co.jp」は、例です
• co.jpにTXT RRが入ると、DNSSECとしては、状況が変わります
• TXT RRに対する署名が行われ、RRSIG RRが生成されます
• “drill -D -o rd co.jp. any @a.dns.jp” と入力してみましょう
• これで、既に署名されていた jpゾーンと、example.co.jpとの間にあるco.jpも、
署名されることになります
• つながった!何がつながった?
- 7. RFC 5155
• ここで出てくるのがRFC 5155です
• JPRSさんによる日本語訳はこちらです
• 日本語タイトルは「DNSSECにおけるハッシュを使用した不在証明」です
• これがまた、難解で…
• 特に、「用語」を理解するのが大変
• ハッシュ化所有者名?ハッシュ整列順?空の非終端?証明可能な最近接名?カバー
する?
• co.jpは「空の非終端」(Empty non-terminal)になります
- 8. 混乱
• 「ハッシュ整列順」と「カバーする」が、私を混乱させました
• RFC 5155では、「ゾーン列挙」によりゾーンの全内容を読み取ることができて
しまう問題を解消しています
• ドメイン名にハッシュ関数を適用し、それを権威DNSサーバーが返すことで、
ドメイン名自体は返らなくなるのです
• ある範囲にはドメイン名は存在しないことも、複数のハッシュ化所有者名を
返すことで示すことができます
• 「カバーする」ということは、例えばco.jpについて「なにもないよ」を示すには、
その両側のハッシュ化所有者名で挟めばよいのかな?
• aa.jpとzz.jpを作ったりしました…失敗…
- 9. NSEC3リソースレコード
• RFC 5155ではNSEC3 RRが導入されます
• NSEC3 RRは、NSEC3 RRのオリジナル所有者名について、これに存在
するRRタイプを列挙します
• 「タイプビットマップ」フィールドにエンコードされます
• 例えば、jpドメインの場合、NSやSOA, RRRIG, DNSKEY, NSEC3PARAMが存在す
ることを、NSEC3 RRを用いてバリデーターに知らせることができます
• 「フラグ」フィールド内の「Opt-Outフラグ」により、NSEC3 RRが未署名
委任をカバーしているかがわかります
• ん?カバー?
- 11. カバーする(続き)
• 続けて、NSEC3 RDATAのワイヤフォーマットを見てみます(3章)
• 「次ハッシュ化所有者名」フィールドがあります
• 次ハッシュ化所有者名(Next hashed owner name): 全ハッシュ化所有者名を整列した
集合がある場合に、あるNSEC3 RRの「次ハッシュ化所有者名」フィールドは、そのNSEC3
RRの所有者名の直後にくる所有者名のハッシュを含む
• 各NSEC3 RRにおいて、ハッシュ整列順にしたがった次のNSEC3 RRの値を、次ハッシュ化
所有者名として挿入する(7.1章)
• ハッシュ整列順(Hash order): ハッシュ化所有者名がその数値に応じて配列される順
序
• ハッシュ化所有者名(Hashed owner name): 所有者名にハッシュ関数を適用した後に
生成される所有者名
• 何か、見えてきました
- 12. カバーする(続き)
• もう一度考えてみる
• 例えばexample.co.jpの「最近接名」はco.jpです
• しかし署名されているのはjpですので、jpが「証明可能な最近接名」です
• すると「次近接名」はco.jpになります
• ここで、co.jpの「次ハッシュ化所有者名」のドメイン名はexample.jpとします
• NSEC3 RRの所有者名をco.jpとすると、ある名前co.jpのハッシュが自分自身
(所有者自身)となり、さらに「次ハッシュ化所有者名」フィールドにexample.jp
のハッシュを入れておけば、co.jpのNSEC3 RRはco.jpを「カバー」する、という
ことになります
- 14. Opt-Out
• NSEC3 RRの「フラグ」フィールドにはOpt-Out bitがあります
• このNSEC3 RRが未署名委任を「カバー」しているかを示しています
• つまり、ここが1の場合、未署名の委任が存在してもよい、ということです
• jpのNSEC3 RRは、ここが1になっています
• example.co.jpが未署名(DNSSECを導入していない)でも構わないことを示しています
• 署名は、ゾーンファイルに対して行います
• dnssec-signzone(BIND9に同梱)やldns-signzone(NLnet Labsの独自作成ツー
ルでありldnsライブラリのサンプルプログラム)といったツールがあります
• オプションで、Opt-Outを有効にして署名することができます
- 15. 実装の違い
• dnssec-signzoneでは、すべてが“Insecure”な委任の場合にはNSEC3
RRを生成しません
• RFC 5155の当初の目的の1つでもある、委任が主たる仕事となる大規模ゾー
ンの場合の、署名のコストを減らすために、このような実装になっています
• “Secure”な委任がco.jpの配下に1個もないと、co.jpのNSEC3 RRも生成されず、
co.jpの乗っ取りが可能となります
• co.jpの配下にex1.co.jpとex2.co.jpがあったとして、どちらもjpから委任されており、しか
しDNSSECは導入していなかった場合、DSがjpには登録されていないために、署名の際
に、co.jpのNSEC3 RRは生成されません
• jpのNSEC3 RRにはOpt-Outがあるため、バリデーターはco.jp以下についてバリデーショ
ンを行いません
- 17. そしてDSを問い合わせる理由は?
• どちらのツールでも、 “Secure”な委任がある場合は「空の非終端」に
ついてもNSEC3 RRが生成されます
• 例えばexample.co.jpはjpから委任されているとすると、co.jpから委任されて
いるわけではないために、co.jpのNSEC3 RRにおける「タイプビットマップ」に
はNSは記録されません(というか空になります)
• co.jp NS RRを毒入れされるとバリデーターは、しかしco.jpにはNSが存在しな
いことを知っているために、「おかしいぞ」と気が付きます
• ここでUnboundもBIND9も、jpの権威DNSサーバーが言っていることよりかは
co.jpの(偽)権威DNSサーバーが言っていることを信じてみようということで、
偽権威DNSサーバーにDSがあるか問い合わせ、「信頼の連鎖」が守られて
いるかを確認しようとします(これについてのRFCが見つからない…)
• そもそも、本来なら委任元に問い合わせるべきだし
- 18. というわけで
• RFC 5155に、「少しだけ」詳しくなることができました
• いや、ほんの少しだけ、ですね…
• なぜco.jpにTXT RRをつけたのかという理由は、わかりませんでした
• TXT RRの有無で、キャッシュDNSサーバー(バリデーター)の動作に変わりは
ありませんでした
• どうやら、co.jpにつけたかったのではなくて、aichi.jpなどの都道府県型JPドメ
イン名を守るためでは?というお話を、ある方(某h氏)から聞きました
• なるほど納得です
• aichi.jpなどは、もしかするとDNSSECさえも知らない人・組織が使っている可能性
• なので、「一律」に入れたと、ある方(某O氏)がおっしゃっていました
• 結果、co.jpにもTXT RRがつきました