トップ 最新 追記

インターノット崩壊論者の独り言


EPIC2014
Google Public DNS (8.8.8.8, 8.8.4.4) 経由では本サイトにアクセスできないよう措置させて頂いております。

2018-10-31 DNSSEC は危ない

これを NSEC/NSEC3 Replacement Attack と呼ぶのはどうだろう?

二週間ほど前に恐ろしい毒入れ手法が成立しうることに気づいて、どうやって公表したらよいか悩やんだのだけれど、何と Herzberg と Shulman の論文を読み返したところアバウトながらしっかり書いてあったので躊躇することなく解説することにした。なぜ私はこれを読み流してしまっていたのか。どうしてこれを誰も騒ぎにしていないのだろうか。

DO bit を常に on にしろという RFC 4035 の傲慢な要請は修正されるべきだと思う。そして RFC 2308 という酷い RFC (私なら査読通さない) も SOA に付随する NS を許さないよう書き直されるべきだと思う。(私に IETF に行けというのは無し)

以下、第一フラグメント便乗攻撃の原論文 Fragmentation Considered Poisonous の II 章の C. Circumventing the Cache が示唆していると思われる攻撃手法の解説 (11/4 追記: こっちの論文のほうが詳しい。同じ内容かと思ってちゃんと読んでいなかった。迂闊。https://arxiv.org/pdf/1205.4011.pdf 4.1.1 Injecting NS RR to NSEC3 Response)

  1. 第一フラグメント便乗攻撃は成立しうる
  2. だが Answer 応答の差し替えはバッファとキャッシュに阻まれて連続的な攻撃が困難 (うちの学生が卒研で検証中)
  3. 否定応答であれば連続的な攻撃が可能となる
  4. RFC 2308 は否定応答の SOA レコードに NS や A が付随することを許している
  5. 否定応答の SOA レコードに付随する NS や A をキャッシュする実装が存在する
    検証用のゾーンを作成したのでご利用ください。
    dig hoge.sub.mufj.jp txt ; dig fuga.sub.mufj.jp txt
    などと二度 (負荷分散されている環境では多数回) 繰り返して
    "Your_cache_server_is_vulnerable."
    と出たら使用中のキャッシュサーバは第一フラグメント便乗攻撃への耐性が低いと考えられます。ただし EDNS0 への対応等は別途検査が必要です。
    (Unbound で検証済/harden-referral-path:yes にしないと危険 (追記: 1.8.2 で対策されました))
  6. NSEC/NSEC3 とその署名 (RRSIG) のついた否定応答の応答は大きい
  7. 第二フラグメントに追い出された NSEC/NSEC3 や RRSIG の一部を NS や A に差し替えることが可能である
    (NSCOUNT,ARCOUNTの数合わせとパディング等によってチェックサムを合わせることは難しくない)
  8. つまり否定応答を用いた第一フラグメント便乗攻撃により、移転インジェクションが可能となる (たぶん委任インジェクションも)
  9. RFC 4035 の要請により現代的なキャッシュサーバは DO bit が常に on になっており、署名検証をしない場合この攻撃が成立する
    (検証しても DoS になる / 鈴木が示したように条件によっては検証していても成立しうる )
  10. 応答内容が分かっていて変化しない場合、IP ID が完全にランダムであってもエントロピーは高々 16 bit だ (ポートランダマイズは役に立たない)

要するに DNSSSEC 署名しているドメインは、どうぞ未検証のキャッシュに毒入れしてくださいと言っているようなものである。そして検証もしないのに DO bit を常に立てているキャッシュサーバはマヌケである。(パッチが提供されるべきであろう)
(「DNSSEC はなぜダメなのか」もどうぞ)

11/5 追記: シャルマンらの論文 5 Conclusions and Defenses の以下の指摘はとても重大な指摘だと思う。大きな議論になっていないのが不思議だ。

We want to caution against drawing the conclusion that DNSSEC should not be used. In fact, the best defense is to apply DNSSEC correctly in all resolvers and domains (without using NSEC3 opt-out); this will certainly prevent many of our poisoning attacks, and even defend against more powerful Man-in-the-Middle adversaries. However, incremental DNSSEC deployment is vulnerable to our cache poisoning attacks, and complete adoption of DNSSEC may take considerable time, since it depends on adoption by both name server and resolver.

追記: Let's Encrypt は EDNS バッファサイズを 512 にしたとアナウンスしています。正解ですね。

p.s.
この件でも思うのだが脆弱性はぼやかさずはっきりと解説されるべきだろう。悪いやつらだけが高いモティベーションで攻撃方法にたどり着き、守備側は何が危ないかも理解できないまま放置されることになる。

本日のツッコミ(全15件) [ツッコミを入れる]

Before...

tm [additional sectionのすり替えが可能だと書きましたが、 それがキャッシュを上書きして、毒となるかど..]

sk [今までの狼少年的な騒ぎ方が問題だったのではないでしょうか?]

tm [フラグメント化されるくらい大きなAnswerあり返答で、Authority Sectionを置き換える攻撃を検討して..]


最近の日記

2008|04|05|06|07|08|10|11|
2009|02|03|04|06|07|09|10|11|
2010|01|03|06|09|10|11|12|
2011|01|02|03|05|06|07|10|11|
2012|03|06|07|10|11|12|
2013|02|03|04|05|06|08|09|10|11|
2014|01|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|07|08|09|10|11|12|
2016|01|06|08|12|
2017|03|07|08|09|12|
2018|04|08|10|11|
2019|01|02|07|11|12|
2020|01|02|03|05|06|07|08|
2021|02|03|09|12|
2022|02|03|05|06|
2024|02|

リンク

Copyright by T.Suzuki