1. DNS/毒盛/キャッシュ上書き/NS変更毒/デモ
BINDリゾルバーはキャッシュにあるNSレコードを上書きする。 ある種の返答に含めたNSを使うことで、容易に毒盛できる。
このことを示すのに便利なサイトが存在するので、そこを使ってデモを行なう。
flip.e-ontap.com ドメインのNSレコードを書き換えて、ハイジャックするという想定である。 デモは10分もあれば、行うことができる。
-- ToshinoriMaeno 2018-12-25 23:35:28
Contents
実際には自分でNSを書き換えている。これはNS移転だと考えれば、便利な機能だとも言える。
- しかし、ハイジャックの危険性を伴うということは利便性のために許されることだろうか。
/unbound /設定1 /設定2 /設定3 /設定4 /返答1 /返答2 |
2. デモの目的
flip.e-ontap.com をハイジャックする。
- flip.e-ontap.com ドメインはe-ontap.comから独立したゾーンになっていて、 ns.flip.e-ontap.com をNSレコードとしてもつ。
このNSをns.internot.jpを指すようにしむけることができるリゾルバー実装(脆弱)が存在することを見せる。
説明では毒盛対象のリゾルバーは127.0.0.1 で動いているものとする。(BIND 9.12.3を使っている。)
- テストしたいリゾルバーのアドレスに置き換えること。
3. 設定
flip.e-ontap.com ゾーンのための設定を確認する。(途中省略): 委任の確認
$dig +norec -t ns flip.e-ontap.com @ns.e-ontap.com
/設定1 flip.e-ontap.com のNSはns.flip.e-ontap.comであり、150.42.6.1 となっているはず。[TTL 86400]
このことをゾーンサーバーにも問合せて確認する。
$dig +norec -t ns flip.e-ontap.com @150.42.6.1
4. 時刻により返答が変わる
5分後に再度確認してみると、返事が変わっていることに気づくはずだ。/設定3
変わっていたら、そちらのサーバーの返事も調べておくのがよい。/設定4
5. 実験手順
基本は以下のコマンドを実行するだけである。
*.flip.e-ontap.comを問合せる。*はa,b,c, ... と変化させる。 /返答1
$dig a.flip.e-ontap.com @127.0.0.1
このテストでは問合せ(dig)を実行する時刻が重要である。
- 毎時 1,11,21,31,41,51 分あたりにテストを開始し、
1分ごとに問い合わせることを6回繰り返すと、毒の入るところを見られる。/返答2
注意:別の時刻に始めると、説明とは異なる現象が現れることがある。
6. 変化を確認する
リゾルバーによるが、+norec optionでキャッシュを覗くことができると便利である。(BIND)
- flip.e-ontap.com. 1448 IN NS ns.flip.internot.jp.
$ dig +norec -t ns flip.e-ontap.com @127.0.0.1 ; <<>> DiG 9.12.3 <<>> +norec -t ns flip.e-ontap.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54923 ;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1220 ; COOKIE: 3270b0784222ec010cbdf8055c22ce90f97551754dde1c9b (good) ;; QUESTION SECTION: ;flip.e-ontap.com. IN NS ;; ANSWER SECTION: flip.e-ontap.com. 1448 IN NS ns.flip.internot.jp. ;; ADDITIONAL SECTION: ns.flip.internot.jp. 84260 IN A 150.42.6.5 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: 水 12月 26 09:42:56 JST 2018 ;; MSG SIZE rcvd: 122
7. 考察
BINDリゾルバーはAuthoritative Answer(返答)のAuthority Sectionを使って、 キャッシュにあるレコードを上書きすることがある。
- キャッシュにあるものがAA返答のAnswer Sectionから得たレコードであっても、
書き換えられる場合がある。../デモ2
NS名が変更されると、受け入れるのがBINDの脆弱性のようだ。
- NS名が同じで、Additional Section(glue?) を変更しただけでは毒が入らないこともある。
8. あとがき
default configのUnboundでも同様の脆弱性があるかもしれない。/unbound
- harden-referral-path yes; を設定しておくと、緩和できるだろう。
Knot Resolverはmode次第だ。("strict"なら脆弱ではない)
-- ToshinoriMaeno 2018-12-26 01:00:24