| 本文書は、Windows NT World誌に寄稿した記事の原稿を、IDGジャパン編集部殿の許可を得た上で掲載したものです。 |
IISのMDAC/RDSセキュリティ問題を利用したIIS Webサイトに対する攻撃が、インターネット上で発生しているとの報告がCERT/CCからアナウンスされた。![]() 図1 IISのMDAC/RDSアタックを警告するCERT/CCのWebページ IIS4.0を使用しているWebサイトは、自サイトに問題があるかどうかを確認の上、もし問題がある場合は早急に対策を施す必要がある。 またRDS問題と並び非常に重要視すべきものとして、Webサーバ上におけるJetデータベースエンジンの脆弱性(Office ODBC問題)があげられる。Jetの問題は前回の記事でデスクトップPC上での脅威として取り上げたが、MS Accessデータベース(mdbファイル)にアクセスするようなWebアプリケーションを使用している場合、Webサーバも同様にこの問題の脅威にさらされることになる。RDS問題を利用した攻撃も、このJetの問題を併用することでさらに危険なものになっている。 これらの問題は、リモートからHTTPでアクセスすることにより、Webサーバ上で任意のプログラムをシステム権限で実行させることが可能なものであるため、非常に危険性が高い。ただしこれらは決して新しい問題ではなく、以前からセキュリティ・コミュニティで指摘され、マイクロソフトも既にフィックスまたはワークアラウンドを提示している。すなわち、適切に対処すれば防ぐことが可能な問題である。 |
|
MDAC/RDS問題はそもそも1998年7月にMicrosoft Security Bulletin MS98-004として報告されたものだが、その後1999年7月にマイクロソフトはさらに詳細なセキュリティ情報(MS99-025)を公開した。(日本語のマイクロソフトセキュリティ情報は この問題は、MDAC(Microsoft Data Access Components)に含まれるRDS(Remote Data Services)の中のDataFactory objectに起因する。問題自身がやや複雑なため、ここでは最も危険な「リモートによるIISサーバ上でのプログラム起動」に焦点をあて、少し単純化して解説する。詳細は上記マイクロソフトからのセキュリティ情報を参照されたい。 RDS問題は基本的にはIISと無関係である。しかしIIS4.0(Windows NT 4.0 Option Pack)をインストールする際に、脆弱性を持ったRDSを含むMDACがデフォルトでインストールされるため、IIS4.0のWebサイトはRDS問題に影響を受ける危険性が高い。もしあなたの管理するIIS Webサーバに "msadc" という仮想ディレクトリが存在するならば、そのサーバはRDS問題を抱えている可能性がある。 RDSはWebブラウザがIISを介して各種のデータリソース(Accessデータベース、SQLサーバ等)にアクセスする機能を提供する。そのため、RDSのDataFactoryオブジェクトを不正に利用することにより、内部的なデータリソースに対するアクセスがインターネット経由で可能となる。ただし、もちろんリソースに関する内部情報(DSN名称、ログイン名、パスワード等)が必要であるため、攻撃者がそれらを予め知っていることが前提となる。すなわちRDS問題の本質は、「既知の内部リソースへのインターネット経由でのアクセス」であると言える。 これだけならさほど大きな脅威ではないと感じられるかも知れない。しかしRDS問題とJetデータベースエンジンの脆弱性を併用することにより、Webサーバ上で任意のプログラムを起動することが可能となる。すなわちRDS問題は、IISサーバ上でJet問題を引き起こすための引き金になりうるということだ。 |
IISサーバにおけるJetデータベースエンジンの問題は、RDSに関連したものに限らない。mdbファイルにアクセスするようなWebアプリケーションをインターネットで公開している場合、ユーザが入力する検索文字列をそのままSQL文に埋め込んでしまうと、任意のプログラムが起動してしまう危険性がある。
リスト1は、検索文字列をフォーム入力し、mdbファイル(\WINNT\Help\iis\htm\tutorial\btcustmr.mdbをシステムDSN「btcustmr」として登録)を検索する簡単なASPサンプルコードである。このASPファイルにWebブラウザからアクセスして、検索文字列を入力するフィールドに対し、 ![]() 図3 ASPサンプルコードに対するアクセス例 Cドライブ上にファイルを作成する するとIISサーバ上に c:\aaa.txt というファイルが生成される。すなわちIISはJetデータベースエンジンに、 ![]() 図4 ASPサンプルコードを利用した攻撃の概念図 このサンプルコードでは単純に "City='....'" という検索条件だが、例えば "City like '%.....%'" といった検索であったとしても入力文字列を工夫することでshell関数を呼び出させることは可能である。 これはJetデータベースエンジンの問題であると同時に、Webアプリケーションの問題でもある。ユーザがフォーム入力する文字列をそのまま受け入れて処理することは、この例に限らず危険な場合が多い。基本的にすべてのフォーム入力文字列は、不正なコードが含まれていないかどうかをアプリケーションでチェックすべきである。 |
|
RDS問題の対策は、RDSの機能を使用しないのであれば単純である。IISサーバからRDSを削除すればよい。MS99-025のFAQにはこの場合の対策として、 /msadc 仮想ディレクトリを削除する または 次のレジストリキーを、IISサーバーから削除する
IISサーバ上でRDSの機能を使用する場合はMDACを2.0以上にアップグレードし、レジストリを設定して「セーフモード」を有効にする必要がある。詳細はMS99-025のFAQを参照していただきたい。 さて問題はJetデータベースエンジンの脆弱性である。RDS問題の対策を適切に施したとしても、Jetデータベースエンジンを使用する(すなわちAccessデータベースを利用する)ようなWebアプリケーションが存在し、かつユーザが入力する文字列を基にしてSQL文を構築しているような場合、JetのVBA Shell問題の影響を受ける危険性がある。 基本は前述した通り、サーバ側のWebアプリケーション(ASP等)でユーザ入力文字列をチェックすることであろう。受け入れるべき文字コードのみを受け入れる、あるいは危険な文字コードを排除するといったロジックを組み入れる必要がある。マイクロソフトが提供しているIIS4.0のセキュリティチェックリストにも「ASP コードの <FORM> 入力をチェックする」の項で触れられている。 一般に出回っている市販あるいはフリーのWebアプリケーション(Web掲示板等)の中にも、この問題の影響を受けるものがあるかも知れないので、使用に先立って確認する必要があるだろう。Webアプリケーションを修正して入力文字列をチェックすることが困難な場合(バイナリ提供のアプリケーション等)は、前回の記事で紹介したOffice ODBC問題の修正モジュールをIISサーバに適用することで基本的にはJet問題を回避することができる。 繰り返しになるが、今回解説したRDS問題およびJet問題はリモートから任意のプログラムを起動させることが可能であり、また実際に動作するコードや手法が広く知られているため、非常に危険である。特にJet問題についてはWebアプリケーションに依存するため、自サイトが影響を受けるかどうか、未確認である場合が多いのではないだろうか。AccessデータベースにアクセスするようなWebアプリケーションをお使いのサイト管理者は、今一度ソースコードを確認されたい。 なおIIS4.0のセキュアなインストール方法については、Port139の伊原氏がWebサイトで公開しておられるIIS 4.0 インストール。マイクロソフトのIIS4.0セキュリティチェックリストと併せて参照されることをお勧めする。 |
2000年12月執筆
セントラル・コンピュータ・サービス株式会社
塩月 誠人