2008年8月8日金曜日

WindowsDNSサーバが大量のUDPポートを待ち受けるように実装変更

Windows付属のDNSサーバを使っているサーバに、2008年7月のMicrosoftセキュリティ更新プログラム、MS08-37:DNS の脆弱性により、なりすましが行われる(KB953230)を適用すると、UDPポートの待ち受け状況がすごいことになる。
 
[caption id="attachment_533" align="alignnone" width="450" caption="画像:「netstat -na」の実行結果、笑えるくらい待ち受けている"]画像:\"netstat -na\"の結果、笑えるくらい待ち受けている[/caption]
何気なく"netstat -na"を実行したらUDPの待ち受けがずらずら出てくる、すごく多いのでどうしたことかと思ったら、しっかり公式に解説があったので一安心。
なんとその数2500ポート、DNSの更新情報は重要なのでしっかり読んでおくべきでした。
 
[caption id="attachment_534" align="alignnone" width="450" caption="画像:ついでに「netstat -nba」で待ち受けているプロセスを表示、たしかにDNS"]画像:ついでに「netstat -nba」で待ち受けているプロセスを表示、たしかにDNS[/caption]
WindowsServer2003で確認したが、更新対象に2000と2008も入っているので同様でしょう。
 
※パッチ一覧ではDNS サーバー (KB951746) のほう、クライアントは(KB951748)
 
 
以下関連情報へのリンクとちょっと解説など
 
 
MS08-037に関するFAQなどが公開されています。

[MS08-037] DNS の脆弱性により、なりすましが行われる
http://support.microsoft.com/kb/953230
 
DNS サーバー サービスのセキュリティ更新プログラム 953230 (MS08-037) を
インストールした後、UDP に依存するネットワーク サービスで問題が発生する

http://support.microsoft.com/kb/956188/


 
上記リンク先1つ目のほうで「DNS 送信元ポートのランダム化」というのが、画像で紹介したようなUDPがたくさん待ち受ける実装の元になっています。
 
 
そもそも7月はDNS実装によるDNSキャッシュポイズニングの問題(リンク先:JVN)という脆弱性で各地で上を下への騒ぎで、各ベンダからリスク低減を狙った仕様変更が発表されました。
 
// DNSキャッシュポイズニング自体の解説は下記pdfが有名でとても分かりやすいです
JPRS:これでいいのかTTL -- 短いDNS TTLのリスクを考える --

 
Microsoftでは特に問題視される固定クエリポート仕様の修正として、どうやら
「DNSクエリ送信元ポートをランダム化する」
「クエリの度にポートの空きを確認していたら遅いので、事前に予約しちゃう」
「ポートは十分に多ければいいのでUDPポート【49152 ~ 65535】の範囲から【2500】個予約する」
「一応競合した場合の回避策もレジストリで設定すればOK」
 
という実装にしました、ということなんでしょうね。しかし2500は多かろうに、実際えらい驚きましたもの。その他詳しく調べるならリンク先で、まだまだ更新があるはず。
 
 
しかしこの場合グローバル環境にあるDNSサーバなら効果はあるでしょうが、上位のファイアウォールの仕様でレスポンスをはじかれて障害になったり、ドメインコントローラのようにNAPTの下にいるDNSサーバはNAT時に丸められて効果がない?
ほか、BINDは待ち受けこそしてないもの、クエリをランダムポートでやるようなので似たような事で困るのでしょうね。
 
当分DNSのポイズニング問題は悩ましい問題となりそうです、DNSSECの普及をやっていかないといけない所なのですが、WindowsのDNSは古いほうの「RFC 2535方式」しか無理、WindowsServer2008のDNSもDS方式には未対応。いつ実装するんだろう?
 
 
そのほか参考リンク:

マイクロソフト日本のセキュリティチームのブログ
http://blogs.technet.com/jpsecurity/archive/2008/07/26/3093805.aspx



※このブログ:Sawnoblogのコンセプトは日本のセキュリティチームのブログを大きく参考にしていたりします、半公式社員ブログ。