頂 上 は 如 何 に 攻 略 されたか ~ ルートゾーン キャッシュポイズニング ~ 2014.06.05 IEICE 中 京 大 学 工 学 部 鈴 木 常 彦 * QMAIL.JP 前 野 年 紀
経 緯
2/15 co.jp への 毒 入 れ 前 野 氏 : *.co.jp をJPサーバに 問 い 合 わせたときに co.jp が 委 譲 されているかのような 返 事 をすると キャッシュにないことは 確 実 なので TTLによる 防 御 は 効 かない co.jp を 委 譲 しているという 形 での 毒 を 入 れ て 乗 っ 取 りが 成 功 すると 影 響 は 甚 大 です 鈴 木 : 試 してみます 仮 想 の co.jp を 乗 っ 取 れることを 確 認
2/28 JPへの 毒 入 れ 検 証 前 野 さん JPドメインも 簡 単 に 乗 っ 取 れるのではないか JP NS として [a-g].dns.jp はキャッシュにある 仮 定 JP NS [xyz].dns.jp という 毒 返 答 で 何 がおきる ダメなら [a-g xyz].dns.jp ではどうか 鈴 木 : できそうですね やってみます 成 功 (a.dns.jp キャッシュに 対 し [ah].dns.jpで 上 書 き) 後 日 もっと 簡 単 な 方 法 で 成 功
経 緯 の 概 略 2/15 ゾーンがないサブドメイン 名 の 毒 入 れに 成 功 し JPRS へ 報 告 2/28 JPゾーン への 毒 入 れに 成 功 し JPRS へ 報 告 3/1 JPRS から JPゾーン への 毒 入 れに 別 解 ( 親 子 同 居 )で 成 功 し 国 内 外 の 関 係 団 体 に 連 絡 を 取 り 始 めているとの 連 絡 3/16 JP 下 のゾーンがないサブドメイン 名 に DNSSEC 署 名 された TXT レコードが 追 加 される ( 説 明 なし) 4/1 ルートゾーンへの 毒 入 れ 成 功 し JPRS に 報 告 4/15 JPRS から 緊 急 の 注 意 喚 起 文 書 ( 問 題 の 解 説 なし) 4/15 解 説 キャッシュポイズニングの 開 いたパンドラの 箱 を 公 開
DNSキャッシュポイズニング 解 説 何 が 問 題 なのか?
手 法 は 概 ね 既 知 だったが 2008 年 の Blackhat での Kaminsky の 説 明 は 誤 り Additional Section の 毒 はそのままでは 有 効 にならない 同 年 の B.Müller の 論 文 が 正 解 "IMPROVED DNS SPOOFING USING NODE RE- DELEGATION", 2008.7.14 ノードを 偽 権 威 サーバへ 誘 導 する 2009 年 の Blackhat で Kaminsky が 再 発 表 Non-existent subdomains can't already be cached, so they're easy to inject.
再 委 任 攻 撃 の 深 刻 さの 指 摘 ( 今 回 ) キャッシュがない または 入 る 機 会 が 少 ないゾーンが 危 険 ゾーンのないサブドメイン 名 が 危 険 (co.jpなど) 世 代 間 同 居 のドメイン 名 が 危 険 (dns.jpなど) 子 孫 の 名 を NS に 用 いる 親 ドメイン 名 が 危 険 (dns.jp -> jp) 条 件 が 揃 わなくともノード 単 位 で 毒 は 入 るが 手 間 をかけずに 広 範 囲 なゾーンを 乗 っ 取 ることができる ルートゾーンまでも
弱 点 その1 ~ キャッシュが 存 在 しないケース ~ NS のない (ゾーンが 分 離 されていない) サブドメイン 名 例 : go.jp, aichi.jp, gouv.fr 上 位 ドメイン 名 のゾーンは 委 任 応 答 (NS+A) を 返 さない (キャッシュは 常 に 存 在 しない) 存 在 しない 名 前 には 上 位 ドメイン 名 のゾーンが 否 定 応 答 偽 応 答 で 委 任 を 行 うと 偽 権 威 サーバへ 誘 導 できる
弱 点 その2 ~ キャッシュに 入 る 機 会 が 少 ないケース ~ 世 代 間 同 居 の 子 孫 側 ( 人 気 のない 兄 弟 ) 例 1: dns.jp ( 親 jp と 子 dns.jp が 同 居 ) 子 ゾーンの 存 在 しない 名 前 に 親 ゾーンが 否 定 応 答 (するように 見 えるが 実 際 は 子 ゾーンが 応 答 ) 子 ゾーンが 引 かれる 機 会 が 少 ない 場 合 子 の 応 答 に 含 まれ る NS+A がキャッシュに 入 る 機 会 も 少 ない 偽 応 答 で 委 任 を 行 うと 偽 権 威 サーバへ 誘 導 できる
弱 点 その2 ~ キャッシュに 入 る 機 会 が 少 ないケース ~ 世 代 間 同 居 の 子 孫 側 ( 子 より 孫 が 人 気 ) 例 2: www.foo.bar.internot.jp ( 親 internot.jp と 子 bar.internot.jp が 同 居 ) 子 ゾーンが 引 かれる 機 会 が 少 ない 場 合 子 への 委 任 応 答 (NS+A) がキャッシュに 入 る 機 会 も 少 ない 孫 ゾーンの 名 前 が 引 かれる 場 合 は 子 ではなく 孫 への 委 任 応 答 が 返 る 偽 応 答 で 委 任 を 行 うと 偽 権 威 サーバへ 誘 導 できる
www.foo.bar.internot.jp だけを 引 く 限 り bar.internot.jp の NS がキャッシュに 入 ることはない % dnsq ns bar.internot.jp ns.internot.jp answer: bar.internot.jp 3600 NS ns.bar.internot.jp additional: ns.bar.internot.jp 3600 A 14.192.44.1 % dnsq a www.foo.bar.internot.jp ns.internot.jp query: 1 www.foo.bar.internot.jp authority: foo.bar.internot.jp 3600 NS ns.foo.bar.internot.jp additional: ns.foo.bar.internot.jp 3600 A 14.192.44.4 % dnsq a www.foo.bar.internot.jp ns.foo.bar.internot.jp answer: www.foo.bar.internot.jp 7200 A 127.0.0.1 authority: foo.bar.internot.jp 7200 NS ns.foo.bar.internot.jp additional: ns.foo.bar.internot.jp 7200 A 14.192.44.4
弱 点 その3 ~ 親 の NS が 子 ゾーンの 名 ~ 子 への 毒 入 れで 親 ゾーンが 乗 っ 取 られる dns.jp への 毒 入 れで JP ゾーン gtld-servers.net への 毒 入 れで NET, COM ゾーン root-servers.net への 毒 入 れでルートゾーン
委 任 インジェクション
委 任 インジェクション 存 在 しないサブドメイン 名 を 問 い 合 わせても NS が 返 らない 場 合 に 成 立 ( 親 子 同 居 やゾーン 非 分 離 ) 委 任 元 になりすまして 偽 委 任 応 答 を 返 し キャッシュサー バを 偽 権 威 サーバへ 誘 導 する 下 位 ノードのキャッシュの 存 在 には 影 響 されない (www.example.co.jp のキャッシュがあっても co.jp の 委 任 は 可 能 )
CO.JP ゾーンの 乗 っ 取 り 問 い 合 わせ: $random.co.jp. IN A jp からの 本 物 の 応 答 : NXDOMAIN jp からの 偽 応 答 : AA フラグ : 0 Answer Section : なし Authority Section : co.jp. IN NS ns.poison.nom.
JP ゾーンの 乗 っ 取 り 問 い 合 わせ: $random.dns.jp. IN A jp からの 本 物 の 応 答 : NXDOMAIN jp からの 偽 応 答 : AA フラグ : 0 Answer Section : なし Authority Section : dns.jp. IN NS ns.poison.nom. (この 後 [a-g].dns.jp に 毒 を 入 れると jp が 乗 っ 取 れる)
移 転 インジェクション
RFC2181 Data from a primary zone file, other than glue data, Data from a zone transfer, other than glue, The authoritative data included in the answer section of an authoritative reply. Data from the authority section of an authoritative answer, Glue from a primary zone, or glue from a zone transfer, Data from the answer section of a non-authoritative answer, and non-authoritative data from the answer section of authoritative answers, Additional information from an authoritative answer, Data from the authority section of a non-authoritative answer, Additional information from non-authoritative answers. 権 威 サーバからの NS は 委 任 元 からの NS に 優 先 する 実 装 によって 同 ランクのデータを 上 書 きできる
移 転 インジェクション 権 威 サーバになりすましてネームサーバ 情 報 を 上 書 きし 偽 権 威 サーバへ 誘 導 する 権 威 サーバからのネームサーバ 情 報 が 委 任 元 からの 情 報 を 上 書 きする (RFC2181 / 一 部 無 視 する 実 装 あり) 本 物 の 権 威 サーバから 得 たネームサーバ 情 報 も 上 書 き できる (RFC2181は 禁 止 していない / 実 装 依 存 ) 禁 止 するとネームサーバの 移 転 時 の 利 便 性 が 下 がる (NS 移 転 を 真 似 るのがこの 移 転 インジェクション)
JP ゾーンの 乗 っ 取 り 問 い 合 わせ: $random.jp. IN A jp からの 本 物 の 応 答 : NXDOMAIN jp からの 偽 応 答 : AA フラグ : 1 Answer Section : $random.jp IN A 192.0.2.1 Authority Section : jp. IN NS ns.poison.nom. 実 に 簡 単!
ルートゾーンの 乗 っ 取 り 問 い 合 わせ: $random. IN A. からの 本 物 の 応 答 : NXDOMAIN. からの 偽 応 答 : AA フラグ : 1 Answer Section : $random. IN A 192.0.2.1 Authority Section :. IN NS ns.poison.nom. これは 失 敗 する
priming BIND, Unbound は 最 初 の 問 い 合 わせ 時 に. の NS を 問 い 合 わせてキャッシュに 入 れる さらに 最 近 の BIND はルートゾーンへ 問 い 合 わせが 発 生 するたびに. の NS を 問 い 合 わせる ( 検 証 用?). の 権 威 ある NS が 常 にキャッシュにあるため これを 上 書 きするのは 困 難
root-servers.net の 乗 っ 取 り root-servers.net と. は 親 孫 同 居 net の NS がキャッシュになければ 委 任 インジェクションが 可 能 しかし それは 非 現 実 的 以 下 の 移 転 インジェクションが 可 能 問 い 合 わせ: $random.root-servers.net. IN A 本 物 の 応 答 : NXDOMAIN 偽 応 答 : AA フラグ : 1 Answer Section: $random.root-servers.net IN A 192.0.2.1 Authority Section: root-servers.net. IN NS ns.poison.nom.
ルートゾーンの 乗 っ 取 り ; Auth Authority. 1111 NS [a-m].root-servers.net. ; Auth Authority root-servers.net. 3333 NS ns.poison.nom. ( 偽 権 威 ) root-servers.net. 2222 NS [a-m].root-servers.net. ; glue [a-m].root-servers.net. 2222 A 192.0.2.1 この 状 態 で 偽 権 威 へ 問 い 合 わせた [a-m].root-servers.net の 応 答 はキャッシュを authanswer で 上 書 きする ルート 乗 っ 取 り 完 了 ; authanswer [a-m].root-servers.net. 4444 A 192.0.2.2
対 策
DNSSEC は 対 策 になるか fr は OPT-OUT 運 用 gouv.fr は fr からの 委 任 がなく 何 の RRset も 無 い gouv.fr に NS の 毒 を 入 れ 偽 権 威 に 誘 導 できるか? 偽 権 威 を 使 って www.example.gouv.fr. に 毒 は 入 れ られるか?
DNSSEC は 対 策 になるか 検 証 されるのは Answer Section の RRset Authority Section は 検 証 されず 偽 権 威 に 誘 導 され 偽 NS キャッシュの TTL が 切 れるまで DoS 状 態 となる OPT-OUT 運 用 だとどうなる? RFC5155 を 良 く 読 んでみましょう (Errataもあり 難 解 ) gouv.fr は? co.jp は? (TXTの 役 割 は?) www.example.gouv.fr は? www.example.co.jp は? www.example.aichi.jp は? D.J.Bernsterin が 言 ってることは 正 しい...
Breaking DNSSEC D.J.Bernstein, 2009 Easiest, most powerful attack: Can ignore signatures. Suppose an attacker forges a DNS packet from.org, including exactly the same DNSSEC signatures but changing the NS+A records to point to the attacker s servers.
Breaking DNSSEC D.J.Bernstein, 2009 Fact: DNSSEC verification won t notice the change. The signatures say nothing about the NS+A records. The forgery will be accepted.
キャッシュサーバでの 対 策 アクセス 制 限 を 行 う (オープンリゾルバは 危 険 ) ポートランダマイゼーション (ポート 固 定 は 非 常 に 危 険 ) 0x20 などによるエントロピー 増 加 再 検 査 など 実 装 でのアドホックな 対 応 攻 撃 の 検 知 とキャッシュクリア EDNS0 をやめて TCP を 使 用 ( 第 一 フラグメント 便 乗 攻 撃 対 策 にも) ルートサーバを 自 前 で 用 意
コンテンツサーバでの 対 策 NSなしノードの 解 消 親 子 同 居 構 成 の 解 消 大 学 等 では 委 任 元 がセカンダリを 引 き 受 けているケースが 多 い NS 名 の 見 直 し ( 親 が 子 ゾーンの 名 を 使 わない) TCPを 提 供 する (もともと 要 件 ) Lame delegation をなくす 保 守 でも 長 期 停 止 は 危 険
根 本 対 策 RFC2181 の 見 直 し ( 可 能?) 権 威 サーバによる NS キャッシュ 書 き 換 えの 制 限 NS 移 転 に 影 響 権 威 より 委 任 元 を 優 先? 議 論 は DNS の 委 任 の 設 計 自 体 にいきつく ZONE Apex( 頂 上 ) への Aレコードを 禁 止 ( 無 理 でしょう) DNS を 捨 てる
検 証 環 境 FreeBSD RELEASE 9.1 -STABLE VIMAGE カーネル ( jail vnet ) DUMMYNET ( 遅 延 用 ) 仮 想 ネットワーク 構 築 ライブラリ VITOCHA ( 自 家 製 ) BIND 9.9.2-P2, Unbound 1.4.20, NSD3 他 仮 想 サーバ 群 ルートサーバ TLD サーバ SLDサーバ (NSD) 偽 権 威 サーバ (NSD) 攻 撃 サーバ (Metasploit + 自 作 モジュール) キャッシュサーバ (BIND, Unbound)
ご 感 想 をおきかせください 知 ってた 何 をいまさら 騒 いでいるの? DNSSEC? 仕 様 どおりの 動 きでしょ? あまり 詳 しい 解 説 は 広 めないほうがいい え DNSSEC 信 じていたのに ルートゾーンまで 乗 っ 取 れるとは なぜこれが 今 まで 説 明 されてこなかった? リスクを 詳 しく 広 く 周 知 したほうがいい