DNSキャッシュポイズニング

脆弱性が見つかってから少したちますが、結構話題になっているみたいですね。

DNSサーバの堅牢性をチェックするサイトとか

実際にISPに被害が

なんてニュースが出てたりしてます。丁度この前落として入れたのがパッチ当て済みのbindだったのであんまり気にしてなかったんですが、どんな問題なのかちょっと調べてみました。ポイントを要約すると、

  • キャッシュサーバはコンテンツサーバからの応答をクエリ名、ID(16bit)、ソースアドレスで判別する
  • 16bitだとランダムで値を生成しても結構同じ値が出る確率が高い

という問題があり、適当にID生成してソースアドレス偽装してキャッシュサーバに応答クエリを投げつけるとキャッシュサーバが勘違いして受け取ってしまうらしいです。図にするとこんな感じかな。

赤の矢印で表示してる嘘の応答が返ってしまうわけですね。そもそもIDを32bitにすれば解決するみたいですが、その辺を変更するのは難しいのでしょうか、今回のパッチでは応答クエリのソースポートをランダムにすることで偽のパケットが偶然一致するのを防いでるようです。なのでbindの設定に


query-source port 53;

みたいにソースポートを固定する設定を入れているとパッチ当てる意味がないみたいですね。まあでもそもそもallow-recursionとかで不必要な箇所からの再起問い合わせを不可能にしてしまえばそこまでダメージがない気もしますが。

まあとりあえず万が一ポイズニングされちゃったときはLet's


rndc flush

rndc便利。flushする前にdumpして汚染されてるの確認してみても面白いかも w