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