SQL Server 2000 解決サービスのバッファのオーバーランにより、コードが実行される (323875) (MS02-039)

公開日: 2002年7月25日 | 最終更新日: 2003年2月3日

概要 :

このセキュリティ情報の対象となるユーザー :
Microsoft® SQL Server 2000 および Microsoft Desktop Engine 2000 を使用しているシステム管理者

脆弱性の影響 :
3 つの脆弱性があります。最も深刻な脆弱性については、攻撃者が影響を受ける SQL Server 2000 がインストールされた環境で制御を取得する可能性があります。

最大深刻度 :

推奨する対応策 :
SQL Server 2000 を使用しているお客様は直ちに更新プログラムをインストールして下さい。

:
このセキュリティ情報で提供された累積的な更新プログラムは "SQL Slammer" ワーム ウイルスに対し、SQL Server 2000 および MSDE 2000 を保護する効果があります。しかし、この累積的な更新プログラムは MS02-061 でリリースされた更新プログラムに含まれています。MS02-061 の更新プログラムにはこれらの製品に存在するそのほかの脆弱性に対する修正も含まれています。マイクロソフトは SQL 2000 および MSDE 2000 を使用しているお客様に MS02-061 でリリースされた更新プログラムを適用することを推奨します。

影響を受けるソフトウェア :

Microsoft SQL Server 2000 のすべてのエディション

SQL Server 2000 Desktop Engine (MSDE 2000)

詳細

問題

技術的な説明 :
この累積的なセキュリティ更新プログラムは、マイクロソフト サポート技術情報 317748 で提供された更新プログラム (これは SQL Server 2000 および MSDE 2000 の安定動作に必要となります) を含みません。317748 の更新プログラムを適用する前に、SQL Server 2000 または MSDE 2000 インストールにこの累積的な更新プログラムを適用した場合、この累積的な更新プログラムのファイルを上書きしないために、ファイルの上書きの確認メッセージが表示された場合、[いいえ] を選択して下さい。

SQL Server 2000 および MSDE 2000 では、SQL Server の複数インスタンスを単一のマシンでホストする機能を導入しています。各インスタンスは実質上、別のサーバーのように動作します。しかし、複数インスタンスには標準の SQL Server セッション ポート (TCP 1433) を使用できないものもあります。既定のインスタンスは TCP ポート 1433 をリッスンしますが、名前付きインスタンスは、それらに割り当てられたポートをリッスンします。SQL Server 解決サービスは UDP ポート 1434 を使用し、特定の SQL Server インスタンスを使用するために、適切なネットワーク エンドポイントにクエリを行う方法をクライアントに提供します。

ここでは 3 つの脆弱性があります。これらのうち 2 つはバッファのオーバーランの脆弱性です。綿密に作成したパケットを解決サービスに送ることにより、攻撃者はシステム メモリの一部 (1 つのケースではヒープ、もう 1 つのケースではスタックです) を上書きする可能性があります。ランダム データで上書きされる場合、SQL Server サービスが異常終了し、綿密に作成されたデータで上書きされる場合、SQL Server サービスのセキュリティ コンテキストで攻撃者のコードが実行される可能性があります。

3 番目の脆弱性はサービス拒否の脆弱性です。SQL Server は動作中のインスタンスと停止中のインスタンスを区別するために keep-alive のメカニズムを使用します。このメカニズムを利用し、解決サービスに特定のパケットを送ることで、SQL Server 2000 が送信パケットと同じ応答を返す keep-alive パケットを作成することができます。攻撃者はこのようなパケットを作成し、ソース アドレスを偽装し、パケットが SQL Server 2000 システムからのものであるように見せかけ、近くにある SQL Server に送信する可能性があります。これにより、2 つのシステムが keep-alive パケット交換を永続的に行う状態となり、両方のシステムでリソースが消費され、パフォーマンスが著しく低下します。

問題を緩和する要素 :
SQL Server 解決サービスのバッファ オーバーラン :

SQL Server 2000 は管理者がインストール時に選択したセキュリティ コンテキストで実行されます。既定で、これはドメイン ユーザーです。従って、攻撃者のコードがデータベースで任意の動作を行うことができたとしても、セキュリティ上の最善策が講じられている場合、攻撃者のコードはオペレーティング システムのレベルで重要な権限を持つとは限りません。

ファイアウォールでポート 1434 をブロックすることができる場合、この脆弱性による危険は緩和されます。

SQL Server 解決サービスによるサービス拒否 :

影響を受けるいずれかのシステムで、SQL Server 2000 サービスを再起動することにより、攻撃を中断できる場合があります。攻撃が中止されれば、両方のシステムでの通常の処理が再開します。

この脆弱性が悪用されても、システムでの権限が取得されることはありません。これはサービス拒否の脆弱性のみです。

深刻度 :
SQL Server 解決サービスのバッファ オーバーラン :

 インターネット サーバーイントラネット サーバークライアント システム

SQL Server 2000

なし

SQL Server 解決サービスによるサービス拒否 :

 インターネット サーバーイントラネット サーバークライアント システム

SQL Server 2000

なし

上記の評価はこの脆弱性の影響を受けるシステムの種類、システムの典型的な展開形式およびこの脆弱性がシステムに及ぼす影響に基づいています。

脆弱性識別番号 :

SQL Server 解決サービスのバッファ オーバーラン : CVE-CAN-2002-0649

SQL Server 解決サービスによるサービス拒否 : CVE-CAN-2002-0650

テストしたバージョン :
マイクロソフトは SQL Server 2000 および 7.0 (およびそれらに関連するバージョンの MSDE) のテストを行い、これらの脆弱性による影響を評価しました。それより前のバージョンに関してはサポートの対象となっていないため、この脆弱性による影響は不明です。

よく寄せられる質問

この累積的な更新プログラムを 317748 で説明された更新プログラムと関連してインストールする場合の正しい順序を教えて下さい。

この累積的なセキュリティ更新プログラムは、サポート技術情報 317748 で提供された更新プログラム (これは SQL Server 2000 および MSDE 2000 の安定動作に必要となります) を含みません。インストールの正しい順序は、まず 317748 の更新プログラムを適用し、次にこの累積的なセキュリティ更新プログラムを適用します。サポート技術情報 317748 の更新プログラムを適用する前に、SQL Server 2000 または MSDE 2000 のインストールにこの累積的な更新プログラムを適用した場合、この累積的な更新プログラムのファイルを上書きしないために、ファイルの上書きの確認メッセージが表示された場合、[いいえ] を選択して下さい。

この累積的な更新プログラムがインストールされているかどうかはどのように確認するのですか?

この累積的な更新プログラムを適用したインスタンスの \MSSQL\BINN フォルダ内の ssnetlib.dll のバージョンが 2000.80.636.0 であることを確認して下さい。

\MSSSQL\BINN フォルダ内の ssnetlib.dll のバージョンが 2000.80.636.0 より前である場合、この累積的な更新プログラムを再適用する必要があります。しかし、マイクロソフトは MS02-061 で説明されているように、最新のセキュリティ更新プログラムを適用することを推奨します。この理由は、最新の更新プログラムにはこれらの製品に存在するそのほかのセキュリティ上の脆弱性に対する修正が含まれているためです。

この更新プログラムはどのような脆弱性を排除しますか?

この更新プログラムは 3 つの脆弱性を排除します。脆弱性はいずれも SQL Server 2000 解決サービスに関連します。

はじめの 2 つの脆弱性では、攻撃者が影響を受ける SQL Server で重要な制御を取得する可能性があります。また、完全な制御を取得する場合もあります。

残る脆弱性では、攻撃者が 2 つの影響を受ける SQL Server 間で情報交換を永続的に行なわせ、SQL Server のパフォーマンスを著しく低下させる可能性があります。

SQL Server 2000 解決サービスとは何ですか?

SQL Server 2000 は、SQL Server の複数のコピーを単一のマシンにインストールする機能をサポートし、それらのコピーが完全に別のデータベース サーバーのように見えるようにします。これらのコピーは、インスタンス (英語情報) として知られ、お互いに独立して動作します。既定のインスタンスは TCP ポート 1433 をリッスンしますが、そのほかのインスタンスはこれと同じポートを共有できず、独自のポートを必要とします。

SQL Server 解決サービスは、SQL Server クライアントが特定のインスタンスが動作しているポートを見つけられるようにする方法を提供します。SQL Server の最初のインスタンスは常にポート 1433 を使用します。追加のインスタンスにはそれぞれ独自のポート番号が動的に割り当てられます。SQL クライアントが SQL Server の追加のインスタンスに接続する必要がある場合、SQL Server 解決サービス (UDP ポート 1434 で動作します) をクエリし、このサービスが接続するインスタンスが使用しているポートを SQL クライアントに伝えます。

UDP 1434 ポートは通常ファイアウォールでブロックされていますか?

特定の展開シナリオにより異なります。

ネットワークがインターネット接続している SQL Server をホストしていない場合、SQL Server 解決サービスに関連するポート (および SQL Server に関連するそのほかのすべてのポート) はブロックすべきです。

ネットワークが SQL Server サービスをインターネットに提供し、サーバーに単一のインスタンスのみが存在する場合、SQL 解決サービスは必要がないためブロックすべきです。

ネットワークが SQL Server サービスをインターネットに提供し、1 つ以上のインスタンスが存在する場合、SQL 解決サービスにファイアウォールを介してアクセスできなければなりません。

SQL Server 解決サービスは SQL Server のより前のバージョンに存在しますか?

いいえ、存在しません。以前のバージョンの SQL Server では、複数インスタンスをサポートせず、SQL Server 解決サービスは存在しませんでした。このため、SQL Server のそのほかのバージョンはこれらの脆弱性の影響を受けません。

SQL Server 解決サービスのバッファ オーバーラン (CVE-CAN-2002-0649) : この脆弱性でどのようなことが起こる可能性がありますか?

ここで説明する 2 つの脆弱性は、どちらもバッファ オーバーランの脆弱性です。攻撃者はこの脆弱性を悪用し、サーバーを異常終了させる、または SQL Server の権限を使用し、コードを実行する可能性があります。

この脆弱性が悪用されることにより、攻撃者がデータベースを完全に制御できる可能性がありますが、必ずしもシステム自体を完全に制御できるとは限りません。SQL Server 2000 は様々なレベルの権限で実行されるように構成できます。既定では、管理者ではなく、ドメイン ユーザーの権限で実行されます。

何が原因で起こりますか?

SQL Server 解決サービスにより提供される機能に未チェックのバッファが含まれるため、これらの脆弱性が起こります。特別にフォーマットしたリクエストを UDP 1434 ポートに送ることにより、これらの機能に関連するバッファがオーバーランする可能性があります。

この脆弱性により、攻撃者は何ができる可能性がありますか?

この脆弱性により、攻撃者は次のいずれかの操作を実行可能です。

SQL Server の異常終了。これは最も容易な攻撃で、攻撃者によるランダム データでバッファ オーバーランが引き起こされる可能性があります。

攻撃者が望む機能を実行するため、SQL Server の機能が変更される可能性があります。攻撃者によって綿密に作成されたデータでバッファ オーバーランが引き起こされる可能性があります。

この脆弱性は誰によって悪用される可能性がありますか?

影響を受けるサーバー上の SQL Server にリクエスト (UDP ポート 1434) を送ることができるユーザーが、この脆弱性を悪用する可能性があります。

攻撃者がこの脆弱性を悪用し、SQL Server を異常終了させた場合、通常の操作を再開するために、管理者は何をする必要がありますか?

管理者は SQL Server サービスを再起動することにより、通常の操作を再開することができます。

攻撃者がこの脆弱性を悪用し、SQL Server に攻撃者が望む機能を実行した場合、攻撃者のコードはどのような権限で実行されますか?

攻撃者のコードは SQL Server 自体のセキュリティ コンテキストで実行されるため、データベース機能を完全に制御できます。しかし、SQL Server 以外ではほとんど権限をもたない場合があります。SQL Server 2000 のセットアップ中、管理者は SQL Server を実行する Windows アカウントを選択する必要があります。既定で、SQL Server サービスはドメイン ユーザーとして実行されます。セキュリティ上の最善策が講じられ、そして通常のユーザー コンテキストが選択されている場合、攻撃者はオペレーティング システムの管理機能や、ドメインでの管理者特権を取得することはありません。

この更新プログラムはどのようにしてこれらの脆弱性を排除しますか?

この更新プログラムは SQL Server 解決サービスが入力データのサイズを正しく制限し、バッファ オーバーランさせないようにしています。

SQL Server 解決サービスによるサービス拒否 (CVE-CAN-2002-0650) : この脆弱性でどのようなことが起こる可能性がありますか?

これはサービス拒否の脆弱性です。攻撃者はこの脆弱性を悪用し、影響を受ける SQL Server のパフォーマンスを低下させる可能性があります。具体的にどのくらいのシステムのパフォーマンスが低下させられるかは、SQL Server が動作するマシンのプロセッサ速度とメモリ、サーバーを攻撃しているシステムの数など、様々な要素により異なります。

この脆弱性が悪用されても、必ずしも攻撃者にサーバーを異常終了させられることはありません。また、システム上の権限を取得されることもありません。攻撃が中止されると、すぐにサーバーは通常の操作を再開します。

何が原因で起こりますか?

この脆弱性は SQL Server 2000 の keep-alive メカニズム (解決サービスを介し動作します) に存在する問題が原因で起こります。特定のデータ パケットが SQL Server 2000 の keep-alive 機能に送られると、送信元に同じパケットを返信します。このようなパケットのソース アドレスを偽装することにより、2 台の SQL Server 2000 システム間で永続的なパケット交換を開始させることができる可能性があります。

SQL Server 2000 keep-alive 機能とは何ですか?

SQL Server 2000 にはサーバーが動作中であるかどうかを確認するメカニズムがあります。これはkeep-alive パケットを UDP ポートの SQL Server 解決サービスに送り、応答をリッスンすることにより行われます。

SQL Server 2000 keep-alive 機能の実装の何が問題になっていますか?

リクエストと応答が全く同じである keep-alive パケットを作成することができます。ある SQL Server が、このようなパケットを別の SQL Server に送る場合、これらがお互いに同じパケットを永続的に送る状態になります。この動作により 2 台のマシンの利用可能な帯域のほとんどを消費する可能性があります。

この状態は自然に発生する可能性がありますか?

いいえ、ありません。この脆弱性に関連するこのような状態は通常発生しません。SQL Server は通常、 keep-alive パケットを生成しません。しかし、攻撃者は、そのようなパケットを送信し、パケット交換を開始させ、その後、パケット交換を続けさせる状態とする可能性があります。

攻撃者はこれをどのように行うのですか?

脆弱性の影響を受ける 2 つの SQL Server があると仮定します。(それぞれ、サーバー 1、サーバー 2 とします。) そして、攻撃者が keep-alive パケットを作成し、パケットのソース アドレスを変更し、それがサーバー 1 のアドレスを含むようにします。次にそのパケットをサーバー 2 に送ります。サーバー 2 がサーバー 1 に応答し、サーバー 1 もサーバー 2 に応答するため、永続的な交換が開始されることになります。

この脆弱性により、攻撃者は何ができる可能性がありますか?

攻撃者はこの脆弱性を悪用し、2 つの SQL Server 2000 システムのリソースを同時に消費できる可能性があります。

この脆弱性は誰によって悪用される可能性がありますか?

影響を受ける SQL Server 解決サービスのポートにデータを送ることができるユーザーが、この脆弱性を悪用する可能性があります。

攻撃はどのくらい続きますか?

攻撃が開始されると、攻撃者はいずれかのマシンがパケットの送信を中止するまで攻撃を続行します。システムの再起動、SQL Server サービスの再起動、または 2 つのサーバー間の接続が切断されると、マシンはパケットの送信を中止します。

攻撃が終了すると、サーバー自体が通常の操作を再開しますか?

はい。

このような攻撃により、システム リソースはどの程度専有されますか?

攻撃の特性により異なります。たとえば、1 つのサーバーに対する攻撃に、複数のサーバーが使用される場合があります。同様に、システム間のネットワーク帯域、それぞれのマシンのプロセッサ速度などによっても異なります。

この更新プログラムはどのようにしてこの脆弱性を排除しますか?

この更新プログラムは、現在の keep-alive メカニズムを排除し、別のメカニズムにより、動作中のサーバーと停止中のサーバーを確認するようにします。この更新プログラムの適用後、SQL Server 2000 システムは keep-alive パケットに応答しなくなります。

既定のインスタンスのみが動作している場合も更新プログラムの適用が必要ですか?

必要です。既定のインスタンスで SQL Server をインストールしている場合も解決サービスが動作しているため、SQL Server (MSDE 2000) をインストールしているすべての環境で更新プログラムを適用する必要があります。

解決サービスが動作していることをどのように確認できますか?

SQL Server (MSDE 2000) が動作しているサーバーで、コマンド プロンプト、または DOS プロンプトから、 "netstat -a -n -p UDP" コマンドを実行することで確認することができます。解決サービスが動作している場合、UDP 1434 ポートが使用されているため、実行結果に UDP 0.0.0.0:1434 が表示されます。

ssnetlib.pdb が指定の場所に無い場合はどうするべきですか?

SQL Server 2000 を通常インストールした場合、 ssnetlib.pdb ファイルがインストールされることはありません。 そのため、更新プログラムに含まれる ssnetlib.pdb ファイルをご使用いただく必要はありません。また、readme.rtf ファイルで説明されている ssnetlib.pdb ファイルに関する作業は省略してください。

ssnetlib.pdb のバックアップのパスとコピー先のパスが異なってますが、正しいのでしょうか?

readme.rtf に記載されている手順には一部間違いがありました。お客さまにご迷惑をお掛けいたしましたこと、心よりお詫び申し上げます。

「修正モジュール標準インストール」 の手順 4 に 「Binn\Exe フォルダにそれぞれコピーします。」 と記載がありますが、
正しくは 「Binn\Dll フォルダにそれぞれコピーします。」 になります。

更新プログラム

この問題に対する日本語版更新プログラムは、次のサイトからダウンロードできます。

SQL Server 2000 をお使いのお客様におかれましては、この問題に対する修正は SQL Server 2000 Service Pack 3 以降に含まれています。SQL Server 2000 日本語版の最新の Service Pack は、以下の Web サイトから入手できます。
http://www.microsoft.com/japan/sql/prodinfo/previousversions/downloads/2000/sp3.mspx

なお、個別の更新プログラムは以下の Web サイトから入手できます。
Microsoft SQL Server 2000 および MSDE 2000:
http://download.microsoft.com/download/SQLSVR2000/Patch/
Q323875/W98NT42KMeXP/JA/Q323875_SQL2000_SP2_jpn.EXE

注意 :
本更新プログラムに含まれる readme.rtf 「修正モジュール標準インストール」 の手順 4. の記述に誤りがありました。
正しくは、下記のとおりです。お客さまにご迷惑をお掛けいたしましたこと、心よりお詫び申し上げます。

4. 修正モジュール自己解凍アーカイブがら、ssnetlib.dll ファイルを <この SQL Server インスタンスのインストール パス>\Binn フォルダに、ssnetlib.pdb ファイルを <この SQL Server インスタンスのインストール パス>\Binn\Dll フォルダにそれぞれコピーします。

更新プログラムに関する追加情報

対象プラットフォーム :
この更新プログラムは SQL Server 2000 Service Pack 2 を実行しているシステムにインストールすることができます。

この修正を含む予定のサービス パック :
この問題に対する更新プログラムは SQL Server 2000 Service Pack 3 に含まれています。

再起動の必要性 :
なし。この更新プログラムの適用後、SQL Server サービスのみを再起動する必要があります。

更新プログラムのアンインストール :

更新プログラムに含まれる過去の修正 :
なし

更新プログラムが正しくインストールされたか確認する方法 :

この更新プログラムが正しくインストールされたことを確認するためには、マイクロソフト サポート技術情報 323875 のファイル欄に記載されているファイルの日付、タイム スタンプを参照して下さい。

警告 :
なし

他のセキュリティ更新プログラムの入手先 :
他のセキュリティ問題を解決する更新プログラムは以下のサイトから入手できます。

セキュリティ更新プログラムはマイクロソフト ダウンロード センターからダウンロードすることができます。「security_patch」 のキーワード検索によって容易に見つけることができます。

コンシューマ プラットフォーム用の更新プログラムは、Microsoft Update Web サイトからダウンロードできます。

更新プログラムについてのご質問は、マイクロソフト プロダクト サポート までご連絡ください。マイクロソフトでは、ご質問の内容が弊社製品の不具合が原因の場合、サポート料金はいただきません。それ以外の場合には、サポート料金を請求させていただきますのでご注意ください。
マイクロソフト プロダクト サポートへの連絡方法はこちらをご覧ください。

詳細情報 :

US マイクロソフトセキュリティ情報(MS02-039)
http://www.microsoft.com/technet/security/bulletin/ms02-039.mspx

サポート技術情報 (KB) 文書番号 : 323875
[MS02-039] SQL Server 2000 解決サービスのバッファ オーバーランの脆弱性 

更新履歴 :

2002/7/25: このセキュリティ情報ページを公開しました。

2002/8/1: この問題に対する日本語版 KB を公開しました。

2003/2/3: このセキュリティ情報ページを更新し、この累積的な更新プログラムが MS02-061 で提供された更新プログラムに含まれることをお知らせしました。また、317748 の更新プログラムがこの累積的な更新プログラムと関連して適用される場合のインストール順序を明確にしました。

本セキュリティ情報に含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation 及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation 及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。


ページのトップへページのトップへ