CSEC87 で論文発表した

Date: 2019/12/22
Lastmod: 2019/12/22

本記事は DNS 温泉 Advent Calendar 2019 22 日目の記事です。

12/04 に沖縄県で行われた第 87 回コンピュータセキュリティ研究発表会 (CSEC87) で論文 “A survey on the status of measures against IP fragmentation attacks on DNS” を発表しました。 本論文はトップレベルドメイン (TLD) における第一フラグメント便乗攻撃への対策状況をまとめたものです。

論文はこちらからダウンロードできます (IPSJ からはこちら)。

第一フラグメント便乗攻撃の詳細は DNS 温泉 6 のスライドをご覧ください。

研究内容

今回は権威サーバ側で Path MTU Discovery に反応して ICMP 応答がフラグメントするかという点と、そのサイズに合わせて DNS 応答もフラグメントするかという点の調査を行いました。

ルートゾーンに DS レコードが登録されている TLD を対象とし、2019 年の 8 月と 10 月の 2 回調査を実施しました。

結果

フラグメント状況

調査対象の全 TLD で登録されている NS のうち、半数以上で DNS 応答にフラグメントが生じました。 また TLD ごとにみた場合、多くの TLD で少なくとも 1 ホストはフラグメントした DNS 応答を返す状況であるほか、登録されている NS の半数以上で影響を受ける TLD が過半数であるということがわかりました。

EDNS バッファサイズ

DNS flag day 2020 で推奨する EDNS バッファサイズの議論が行われていたので現状の設定も調査しましたが、ほとんどが 4096 となっていました。 9 月から Github 上で議論が行われていましたが、その前後の 8 月と 10 月で傾向に大きな変化はありませんでした。

ちなみに flag day 2020 の EDNS バッファサイズの推奨値は 1232 バイトのようです。 それよりも小さい応答でも攻撃は可能なので、従来と同じ上限の 512 バイトがいいと考えます。 ただし大きな応答は TCP で受け取ることになるため、パフォーマンスへの影響は考えられます。

対策

TLD が攻撃に利用された場合の影響を考えると、リゾルバ側で次のような対策を進める必要があるといえます。

  • ファイアウォールでフラグメントパケットをドロップする
  • EDNS バッファサイズを小さく、それを超える応答を得る場合は TCP フォールバックを行う
  • DNSSEC 署名の検証を行わない場合は DO ビットをオフにする

ただし、IPv4 の MTU の最小サイズは 68 バイトであることや、経路の途中でフラグメントパケットがリアセンブルされる場合などを考えると完全な対策とはなりません。

全てのゾーンとリゾルバが DNSSEC に対応するというのも対策としては考えられますが、普及率を考えると現状では難しそうです。 むしろ DNSSEC により応答サイズが増大することで攻撃がしやすくなるという側面もあります。

また、権威サーバ側でも対策を進めるべきです。 EDNS バッファサイズは同様ですが、Linux Kernel 3.15 以降には PMTUD を無視するソケットオプション IP_PMTUDISC_OMIT が導入されています。 BIND は以前から対応しているほか、NSD、Knot DNS、PowerDNS では東さんのパッチがマージされているので Linux Kernel と各実装のバージョンを上げることで有効になります (東さんのまとめはこちら)。

質疑

主な内容は以下の通りです。

  1. 影響を受ける TLD の傾向は?
    詳しくは出せないが gTLD も ccTLD も影響を受ける。
  2. 否定応答の Authority セクション中の NS レコードを無視するのは RFC 違反か?
    RFC で禁止されているわけではない。また、権威サーバからの否定応答は NS レコードを含めないものが多い。
  3. ファイアウォールでフラグメントパケットをドロップすることの影響はあるか?
    他のサービスへの影響は考えられる。(会場では話し忘れしたが、DNS だけをサービスするようにすれば回避可能だと思います)
    TCP フォールバックを行う手もある。
  4. 第 2 フラグメント以降が先に到着することが問題であれば、それを無視するようにすれば回避できるのでは?
    今回解説した方法で攻撃する前提なら回避できる可能性がある。順序が入れ替わってパケットが到着するケースがどの程度一般的かによるが、調査して検討したい。

まとめ

TLD における第一フラグメント便乗攻撃の対策状況を調査しました。 TLD でもほとんど対策が進んでいないということがわかったので、リゾルバ側で対策を取る必要があります。 権威サーバ側でも対策が進むことを期待しています。

余談

今回初めて沖縄に行きました。 防寒着いらずでとても過ごしやすかったです。

首里城は残念ながら門のあたりしか見れませんでした。 少し後にまた制限が緩和されたみたいなので残念……

tss 先生に連れられて初めて山羊料理も食べましたが、いい店のようで臭みがなくて美味しかったです。

今回は 2 泊 3 日であまりのんびりできなかったので、次回はゆっくりしたいですね。