マイクロソフトは8月1日,Windows OSや同社製品に含まれる,データベースにアクセスするためのコンポーネント「MDAC(Microsoft Data Access Components)」のセキュリティ・ホールを公表した。ただし,Microsoft SQL Server 7.0/2000 がインストールされているマシンだけが影響を受ける。

 悪用されると,SQL Serverの権限(デフォルトはDomain User)で任意のコードを実行されたり,SQL Serverのサービスを停止させられたりする。対策はパッチの適用。なお,MDACのバージョンにより適用すべきパッチが異なるので注意が必要。セキュリティ・ホールの最大深刻度は「中」。

 セキュリティ・ホールの原因は,MDACの「OpenRowSet」コマンドを処理する部分に未チェックのバッファが存在すること。OpenRowSetとは,SQL Serverが使用するSQL言語「Transact-SQL(T-SQL)」のコマンドの一つである。

 あるパラメータとして非常に長い文字列を指定したクエリーを,攻撃対象とするマシンに送信して OpenRowSet を呼び出すと,MDACはバッファ・オーバーフローを発生させる。その結果,SQL Serverのサービスを停止させることが可能になる。さらに,送信する文字列を注意深く選択すれば,SQL Serverを乗っ取ることが可能となり,データベース内のデータを操作したり,サーバー上で任意のコードを実行したりすることが可能となる。

 対策はパッチの適用。適用するパッチはMDACのバージョン(MDAC 2.5/2.6/2.7)によって異なるので注意する。MDACのバージョンは,マイクロソフトが提供する「Component Checker ツール」を使用したり,レジストリ内の情報を見たりしてチェックする。具体的な方法は,マイクロソフトの「サポート技術情報」ページに詳しく記載されている。影響を受けるのは,SQL Server 7.0/2000がインストールされているマシンだけなので,その他のWindowsマシンではパッチを適用する必要はない。

 なお,攻撃者は,対象とするSQL Serverマシンで任意のクエリー実行する権限を持っている必要がある。そのため,クエリーを実行できるユーザーを制限ならびに管理することでも,影響を緩和できる。これは今回のセキュリティ・ホール対策としてだけではなく,SQL Serverをセキュアに運用するための“ベスト・プラクティス”の一つである(関連記事)。

◎参考資料
MS02-040 に関する情報(マイクロソフト,要約情報とパッチ)
Microsoft Security Bulletin MS02-040「Unchecked Buffer in MDAC Function Could Enable SQL Server Compromise (Q326573)」(米Microsoft,英語情報)
[HOW TO] MDAC のバージョンを確認する方法(マイクロソフト)

(勝村 幸博=IT Pro)