unboundが保存するキャッシュ情報について
dump_cache
DNSキャッシュポイズニングの勉強中、キャッシュサーバの動作を知るためにキャッシュのダンプをしたくなる時があります。
unboundでは、以下のコマンドでキャッシュ情報を見ることができます。
$ unbound-control dump_cache START_RRSET_CACHE ;rrset 86394 1 0 1 0 a.gtld-servers.net. 172794 IN A 192.5.6.30 ;rrset 86394 13 1 8 0 . 518394 IN NS k.root-servers.net. . 518394 IN NS b.root-servers.net. . 518394 IN NS l.root-servers.net. . 518394 IN NS d.root-servers.net. . 518394 IN NS e.root-servers.net. . 518394 IN NS m.root-servers.net. . 518394 IN NS h.root-servers.net. . 518394 IN NS a.root-servers.net. . 518394 IN NS g.root-servers.net. . 518394 IN NS j.root-servers.net. . 518394 IN NS f.root-servers.net. . 518394 IN NS i.root-servers.net. . 518394 IN NS c.root-servers.net. . 518394 IN RRSIG NS 8 0 518400 20160416050000 20160406040000 60615 . pH3jzvLP/4XK8zYrHf9+MUnQra95+J0eSbAo1Z0o46+iSojyaphy/6DJ6zUcPgiZXVF6bsZT/rKdCVy7OMf3aeCvmuGHXkGOHbp2ZQfj5vuLJ5rW/ICoJpWwzXghitvlfk0WpItaLMOwroDLNdqXL4BM5CO0Ndp0Ah+5MUwQ8PY= ;{id = 60615} ;rrset 3598 1 0 3 0 ns.shutingrz.com. 3598 IN A 133.242.130.136 ;rrset 3598 1 0 8 0 www.shutingrz.com. 3598 IN A 133.242.130.136 ;rrset 86398 1 0 1 0 ns2.shutingrz.com. 172798 IN A 133.242.130.136 ;rrset 3592 1 0 7 0 shutingrz.com. 3598 IN NS ns.shutingrz.com. (この内容は抜粋したものです。)
この記事では、ここのキャッシュ情報の信頼度を紹介します。
rrset行
全てのrrsetのキャッシュには、キャッシュをした際のメタデータが付与されています。
各rrsetの上についている「;rrset」から始まる行です。
この;rrsetの読み方を知ることで、キャッシュ情報を知ることができるのです。
;rrsetについてはmanにも記載されていないので、unboundのソースを読む必要があります。
読んだ結果、以下の意味だとわかります。
;rrset [残りのTTL], [RRSetにあるRRの数] [RRSetにあるRRSIGの数] [このRRSetの信頼度(優先順位)※1] [RRSetのセキュリティ状態]
DNSキャッシュポイズニングで最も重要は情報は、※1の「このRRSetの信頼度(優先順位)」です。
この部分の数値に対応するものを以下に記載します。
数値 | 意味 |
---|---|
0 | initial value for trust |
1 | Additional information from non-authoritative answers |
2 | Data from the authority section of a non-authoritative answer |
3 | Additional information from an authoritative answer |
4 | non-authoritative data from the answer section of authoritative answers |
5 | Data from the answer section of a non-authoritative answer |
6 | Glue from a primary zone, or glue from a zone transfer |
7 | Data from the authority section of an authoritative answer |
8 | The authoritative data included in the answer section of an authoritative reply |
9 | Data from a zone transfer, other than glue |
10 | Data from a primary zone file, other than glue data |
11 | DNSSEC(rfc4034) validated with trusted keys |
12 | ultimately trusted, no more trust is possible |
この数値は大きいほど信頼度が高くなっています。また、この優先順位はRFC2181 5.4.1 Ranking Dataにほぼ対応しています。
Ranking Dataと異なる点については、unboundのソースのutil/data/packed_rrset.hに記載してあります。以下に引用します。
/**
* RRset trustworthiness. Bigger value is more trust. RFC 2181.
* The rrset_trust_add_noAA, rrset_trust_auth_noAA, rrset_trust_add_AA,
* are mentioned as the same trustworthiness in 2181, but split up here
* for ease of processing.
*
* rrset_trust_nonauth_ans_AA, rrset_trust_ans_noAA
* are also mentioned as the same trustworthiness in 2181, but split up here
* for ease of processing.
*
* Added trust_none for a sane initial value, smaller than anything else.
* Added validated and ultimate trust for keys and rrsig validated content.
*/
例
スタブリゾルバがwww.shutingrz.comのA RRをフルリゾルバ兼キャッシュサーバに問い合わせをし、キャッシュに該当のRRが存在しなかった場合、フルリゾルバはルートから順にwww.shutingrz.comのA RRを問い合わせをします。
問い合わせし、その内容をキャッシュしたときのダンプが記事冒頭にある出力となっています。
各RRSetについて見ていきます。
;rrset 3598 1 0 8 0
www.shutingrz.com. 3598 IN A 133.242.130.136
スタブリゾルバがwww.shutingrz.comのA RRを問い合わせしたので、信頼度が8と、大きくなっています。キャッシュサーバがこれより大きい信頼度を持つRRSetをキャッシュする機会はほぼありません。
;rrset 3598 1 0 3 0
ns.shutingrz.com. 3598 IN A 133.242.130.136
ns.shutingrz.comは、www.shutingrz.comのA RRの権威ある応答に付随するAdditional Sectionに存在したので信頼度は3となっています。
;rrset 86398 1 0 1 0
ns2.shutingrz.com. 172798 IN A 133.242.130.136
ns2.shutingrz.comは、shutingrz.comの委譲元であるgtld-servers.netのNSの、shutingrz.comの委譲応答には含まれていましたが、www.shutingrz.comのA RRの権威ある応答に付随するAdditional Sectionに存在しなかった(Lame Delegation)ので信頼度は1となっており、とても低い信頼度となっています。
参考
この信頼度を利用した委任インジェクション、移転インジェクションについては以下のURLを参考にしてください。
キャッシュポイズニングの開いたパンドラの箱 -1-
キャッシュポイズニングの開いたパンドラの箱 -2-