Microsoft SQL Server:多数の拡張ストアド・プロシージャでのバッファ・オーバーフロー | ScanNetSecurity
2024.04.27(土)

Microsoft SQL Server:多数の拡張ストアド・プロシージャでのバッファ・オーバーフロー

[翻訳:関谷 麻美]
2002年3月16日

国際 海外情報
[翻訳:関谷 麻美]
2002年3月16日

◆概要:
 Microsoft SQL Server は、データベースの範囲外の DLL にある機能を呼び出す能力を提供する。拡張ストアド・プロシージャと呼ばれるそれらの機能は、大いにMicrosoft SQL Server の機能を拡張する。それらの機能はオペレーティング・システム(OS)もしくはネットワークにアクセスする際に使用される。
そして数百本が Microsoft SQL Server に同梱されており、管理者はデータベース用にカスタマイズした拡張ストアド・プロシージャを付け加えることができる。
 Microsoft SQL Server 7 および 2000 にある多数の拡張ストアド・プロシージャは、バッファ・オーバーフローを含む。それらのバッファ・オーバーフローは、いくつかのシナリオを引き起こす。
1- データベース・サーバのクラッシュ
2- スタックに割り当てられたメモリが上書きされる(例外が発生する関数呼び出し戻り番地を含む)。

 それらのバッファ・オーバーフローは、長い文字列のデータをパラメータとして拡張ストアド・プロシージャに渡すと発生する。それらのバッファ・オーバーフローの大部分は、大容量の Unicode バッファを渡したことに起因する。
それらのバッファ・オーバーフローはUnicode 文字列に基づく。しかし、それらを利用することは、"Venetian" 攻略手段のような方法と仮定すると特別に難しいものではない。"Venetian" 攻略手段は、Unicode バッファを使用して任意のシェルコードに書き込むことを可能にする。

◆詳細:
脆弱なシステム:
Microsoft SQL Server 7
Microsoft SQL Server 2000
下記の拡張ストアド・プロシージャは脆弱だ。

xp_controlqueueservice
xp_createprivatequeue
xp_createqueue
xp_decodequeuecmd
xp_deleteprivatequeue
xp_deletequeue
xp_displayqueuemesgs
xp_dsninfo
xp_mergelineages
xp_oledbinfo
xp_proxiedmetadata
xp_readpkfromqueue
xp_readpkfromvarbin
xp_repl_encrypt
xp_resetqueue
xp_sqlinventory
xp_unpackcab

 Cesar Cerrudo (sqlsec@yahoo.com)の発見に基づき、上記に列挙された拡張ストアド・プロシージャは、任意のシェルコードをスタックに挿入することを可能にするバッファ・オーバーフローを含む。

 多数の拡張ストアド・プロシージャはデフォルトで、パブリックグループ権限に認定される。パブリックグループ権限となるそれらのグループは、高い権限を持たないユーザも OS およびデータベースを完全に制御するのを可能にする。デフォルトでパブリックグループ権限にされていない拡張ストアド・プロシージャの場合でも、いくつかの懸念が依然として残る。

1)あるインスタンス用のDBA は そのサーバ上のプログラム、他のインスタンス、そして OS の完全な制御権を所得できる。
2)DBA が高い権限を持たないユーザに対し、それらの拡張ストアド・プロシージャの一つを実行することを許可した場合、そのユーザはシステムの完全な制御権を取得できる。

 渡されるデータタイプやサイズに関して拡張ストアド・プロシージャで仮定しているために、この問題が発生する。拡張ストアド・プロシージャは、他の関数のようにパラメータを直接受け取らない。代わりに、拡張ストアド・プロシージャは、API 関数のセットを用いて渡されるパラメータを受け取る。その中で最も重要なのは、svr_paraminfo だ。下記は、この関数の定義だ。

int srv_paraminfo (
SRV_PROC * srvproc,
int n,
BYTE * pbType,
ULONG * pcbMaxLen,
ULONG * pcbActualLen,
BYTE * pbData,
BOOL * pfNull );

 ストアド・プロシージャはチェックして、渡される各パラメータのデータタイプおよび長さを求める。varchar は 8000 文字に制限され、nvarchar は 4000 文字に制限される。しかし、最大長 2^30 - 1 (1,073,741,823) 文字をもつ ntext データタイプが nvarchar を期待するパラメータに渡され、そして拡張ストアド・プロシージャがそのパラメータをより小さい nvarchar 用に生成されたバッファにコピーする場合、スタックは上書きされる。

 SHATTER チームにより実行された内部バッファ・オーバーフローに関するさらなる調査は、下記の URL で入手可能だ。
http://www.appsecinc.com/resources/alerts/mssql/02-0000.html

◆追加情報:
 Cesar Cerrudo がそれらの脆弱性を発見した。

[情報提供:SecuriTeam]
http://www.securiteam.com/

《ScanNetSecurity》

Scan PREMIUM 会員限定記事

もっと見る

Scan PREMIUM 会員限定記事特集をもっと見る

カテゴリ別新着記事

「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」
「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」

ページ右上「ユーザー登録」から会員登録すれば会員限定記事を閲覧できます。毎週月曜の朝、先週一週間のセキュリティ動向を総括しふりかえるメルマガをお届け。(写真:ScanNetSecurity 名誉編集長 りく)

×