以下の課題をtweetしたところ、takhammさんからunboudでやってみたというレポートがありましたので、 内容をコピーしておきます。議論をお願いします。-- ToshinoriMaeno 2012-02-25 00:26:19
Contents
1. 課題
ちょっと(?)設定に問題のあるドメインを作ってみました。 www.ghost2.qmail.jp のAレコードが検索できるか。どういう値が返るか、試してみていただけますか。 wiki: DNS/ghost2 参照
DNS/ghost2 以下に設定などの説明があります。
1.1. 議論
1.2. レポート
https://twitter.com/#!/takhamm/status/173101654982410240
#takhamm の報告 (ありがとうございます。-- ToshinoriMaeno 2012-02-24 23:21:04)
あんな方法で毒入れできるのがにわかに信じがたいので、できれば別環境での追試をしていただければありがたいです。
とtweetされています。
2. unboundでのGhost Domain Names再現試験
2.1. 前提
- 本試験で使用しているunboundのバージョンは1.4.16です。
- 試験環境はFreeBSD 9.0-STABLE (amd64)を使用しています。
- 毒入れ作業にsudoを使用します。(インストールしていない場合はrootでログインしておいてください)
- unbound-controlでキャッシュのフラッシュをします。
- unbound.confのremote-control:セクションにcontrol-enable: yesの設定をしておいてください。
- 端末を2台(対象Aレコード監視用および毒入れ用)使用します。
2.2. 端末1: 毒入れ作業
毒入れ用コマンド
- キャッシュサーバの全キャッシュをクリアし、
- キャッシュサーバにwww.ghost2.qmail.jpのAレコードを再帰問い合わせし、
- キャッシュサーバにghost2.qmail.jpのNSレコードを再帰問い合わせする。
攻撃シナリオとしては手順3のNSレコード問い合わせが直接飛ぶところに無理がありそうである。
<TABLE SUMMARY="毒入れ" border="1">
$ sudo unbound-control reload; dig -t a www.ghost2.qmail.jp; dig -t ns ghost2.qmail.jp
毒入れに成功した場合はdig -t ns ghost2.qmail.jpの結果として以下の様に
- a.ns.ghost2.qmail.jp
- b.ns.ghost2.qmail.jp
の二つのレコードがANSWER SECTIONに返ってくる。
返ってこなければ失敗なので毒入れ手順を繰り返す。
"毒入れ成功"
;; ANSWER SECTION: ghost2.qmail.jp. 2147483647 IN NS a.ns.ghost2.qmail.jp. ghost2.qmail.jp. 2147483647 IN NS b.ns.ghost2.qmail.jp. ;; ADDITIONAL SECTION: a.ns.ghost2.qmail.jp. 600 IN A 131.112.32.2 b.ns.ghost2.qmail.jp. 600 IN A 202.41.218.242
2.3. 端末2: www.ghost2.qmail.jpのAレコード監視
監視用コマンド <TABLE SUMMARY="Aレコード監視" border="1">
$ sh $ while true; do; dig -t a www.ghost2.qmail.jp; sleep 1; done
毒入れが成功している場合、監視用端末では
- Ghost Domain Namesの効果が発現した状態(Aレコード=59.106.175.222)
と
- 発現していない状態(Aレコード=202.41.218.242)
がwww.ghost2.qmail.jpのAレコードのTTLのexpire後、 再度Aレコードを問い合わせるタイミングで切り替わる。(どちらの状態に遷移するかはランダムであると思える)
2.4. GDN達成
毒入れが成功して131.112.32.2からAレコードを検索した状態。(GDN達成)
- Aレコードは59.106.175.222を示す。
- AUTHORITY SECTIONにはa.ns.ghost2.qmail.jpおよびb.ns.ghost2.qmail.jpの情報が返されている。
- ADDITIONAL SECTIONにもa.ns.ghost2.qmail.jpおよびb.ns.ghost2.qmail.jpの情報が返されている。
- (AUTHORITY SECTIONと内容が同じ)
; <<>> DiG 9.8.1-P1 <<>> -t a www.ghost2.qmail.jp ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64584 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.ghost2.qmail.jp. IN A ;; ANSWER SECTION: www.ghost2.qmail.jp. 299 IN A 59.106.175.222 ;; AUTHORITY SECTION: ghost2.qmail.jp. 2147480941 IN NS a.ns.ghost2.qmail.jp. ghost2.qmail.jp. 2147480941 IN NS b.ns.ghost2.qmail.jp. ;; ADDITIONAL SECTION: a.ns.ghost2.qmail.jp. 298 IN A 131.112.32.2 b.ns.ghost2.qmail.jp. 599 IN A 202.41.218.242 ;; Query time: 0 msec ;; SERVER: 192.168.1.253#53(192.168.1.253) ;; WHEN: Sat Feb 25 09:29:01 2012 ;; MSG SIZE rcvd: 120
2.5. GDN未達成
毒入れが成功しているが202.41.218.242からAレコードを検索しているため、Aレコードの変化が無い状態。(GDN未達成)
- Aレコードは202.41.218.242を示す。
- AUTHORITY SECTIONにはa.ns.ghost2.qmail.jpおよびb.ns.ghost2.qmail.jpの情報が返されている。
- しかしADDITIONAL SECTIONはns.ghost2.qmail.jpおよびa.ns.ghost2.qmail.jpの情報が返されている。
- (AUTHORITY SECTIONと内容が異なる)
<<>> DiG 9.8.1-P1 <<>> -t a www.ghost2.qmail.jp ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40876 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.ghost2.qmail.jp. IN A ;; ANSWER SECTION: www.ghost2.qmail.jp. 204 IN A 202.41.218.242 ;; AUTHORITY SECTION: ghost2.qmail.jp. 2147479945 IN NS a.ns.ghost2.qmail.jp. ghost2.qmail.jp. 2147479945 IN NS b.ns.ghost2.qmail.jp. ;; ADDITIONAL SECTION: ns.ghost2.qmail.jp. 204 IN A 202.41.218.242 a.ns.ghost2.qmail.jp. 504 IN A 131.112.32.2 ;; Query time: 0 msec ;; SERVER: 192.168.1.253#53(192.168.1.253) ;; WHEN: Sat Feb 25 01:38:31 2012 ;; MSG SIZE rcvd: 120
3. 間違いの修正
GDN達成時のdigコマンドのキャプチャを間違えてました。思いっきり権威サーバに直接問い合わせしてますね。 オリジナルのhtmlに修正をかけたものを gdn-20120225-2.html に置いておきました。 追試をされたい場合必要なら当方のunbound.confも提供いたしますので、twitterで@takhammまでお気軽にどうぞ。