InterBaseのセキュリティホールについて
Contents
InterBase のセキュリティホールの存在が、InterBase のオープンソース
プロジェクトである Firebird により発見されました。(2001年1月9日公開)
その内容は、InterBase のエンジン内部に、あるユーザ名/パスワードが
埋め込まれていて、それを知っているユーザであれば誰でも指定した任意の
データベースに接続できてしまうというものです。
さらに、テスト用に組み込まれていたデータベースファイルを削除する
等の機能を持ったユーザ定義関数(UDF)が、組み込まれたままに
なっています。
これらにより、外部から前記ユーザ/パスワードでデータベースに接続し、その
データベースを削除してしまうことも可能な場合があります。
このセキュリティホールは、全てのプラットフォームの InterBase 4.x、5.x、
6.x に存在します。これをフィックスするパッチは、ボーランド社のWebページで
公開されています。
このパッチを当てることにより、埋め込まれたユーザ名/パスワード、および
組み込みUDFは使用できなくなります。
InterBaseの使用するポート(gds_db 3050/tcp)への外部からのアクセスを
許可していなければ、外部からの侵入者に簡単にデータベースを削除される
ということは無いとは思いますが、使用環境にかかわらず、公開されている
パッチを当てておいた方が良いと思われます。
以下は、このセキュリティホールの詳細、およびパッチのインストール方法
などを記したものです。
(InterBaseの製品構成などは、バージョン 4.0 を想定しています。)
埋め込みユーザについて
InterBase エンジンに、セキュリティデータベース(isc4.gdb)には登録されて
いないユーザ/パスワードが埋め込まれています。これは、エンジンを構成する
プログラムにハードコードされているので、セキュリティデータベースの操作で
削除したりパスワード変更したりすることはできません。
このユーザを使用してデータベースに接続できるのは、InterBase のサーバ
プログラム「gds_inet_server」を経由する場合です。具体的には、以下の
ようなプログラムを実行させる場合です。
- リモートマシン上のデータベースに接続、またはリモートマシン上に
データベースを作成するプログラムを実行させる場合。
- ローカルマシン上のデータベースに接続、またはローカルマシン上に
データベースを作成するプログラムを、データベース名としてホスト名を
含んだものを指定して実行させる場合。
「実行させるプログラム」には、ユーザが作成したプログラム、InterBase の
isql などのツールなど、InterBase のライブラリを使用するもの全てが
含まれます。また、gds_inet_server は inetd デーモンから起動されるように
設定している場合(デフォルトの設定)も、gds_inet_server 自身をデーモン
として起動しておく場合も、前記ユーザによる接続は行えます。
埋め込みユーザが実行可能(不可能)な主な操作
- ユーザが作成したテーブルに対して、全てのユーザに許可されている操作
(SQLのGRANT文によりPUBLICに許可された操作、例えば GRANT SELECT ON
table TO PUBLIC 等)は実行可能です。PUBLICに許可されていない操作は、
実行できません。
- 全てのシステムテーブルを参照できます、ただし更新することはできません。
- セキュリティデータベース(isc4.gdb)の全てのテーブルを参照できます。
ただし、更新することはできません。
- 新しいデータベースファイルを作成することができます。
「gds_inet_server」は、スーパーユーザ権限で実行されるので、
ファイルシステム中の任意のディレクトリにデータベースファイルを作成
することができます。
(データベース作成要求はエラーになりますが、ファイルは作成されます。)
- 任意のデータベースに接続後、新しいテーブルを作成することができます。
ただし、そのテーブルにデータを挿入することはできません。
この埋め込みユーザは、ユーザチェックを行うためのセキュリティデータベース
(isc4.gdb)への接続ユーザとして、またデータベースのスイープを行う際の
ユーザとして、エンジン内部でのみの使用を想定していたようです。
テスト用の組み込みUDFについて
UDF(ユーザ定義関数)は、通常はユーザが作成した、ホスト言語の関数を含む
シェアードオブジェクト(ダイナミックリンクライブラリ)と、その関数に対応
するデータベースへのファンクションの定義により利用可能になります。
しかし、このテスト用のUDFは、シェアードオブジェクトに格納されるべき関数が
エンジンライブラリに組み込まれていて、データベースに対して特殊なファンク
ションの定義(マニュアル等には記述されていませんが、ソースを見ればすぐに
分かります)のみを行えば、全てのデータベースで実行させることができます。
しかも、gds_inet_server を経由している場合、データベースへの接続さえして
しまえば、全てのユーザが全てのデータベースで、この組み込みUDFを実行させる
ことができてしまいます。
さらにこのUDFを使うことにより、接続中のデータベースファイル、シャドウ
ファイルを削除すること、サーバを異常終了させてしまうこと等、危険な操作が
可能になります。
従って、前記の「埋め込みユーザ名/パスワード」を使ってリモートから
データベースに接続したユーザが、この組み込みUDFを定義/実行させる
ことにより、データベースファイルを削除することができることになります。
早急な対処が必要なケース
Firewall 上、またはその外に置かれたマシンに、InterBaseをインストール
していて、InterBase の使用するポート(gds_db : デフォルト値は 3050/tcp)
への、外部からのアクセスを許可している場合は、すぐに禁止またはアクセス
制限を行うべきです。
CGIプログラムのみが、そのマシン上のデータベースを使用するような場合で
あれば、InterBaseのポートへの外部からのアクセスは禁止しておいたままで
良いと思います。このポートへのアクセスをどうしても許可する必要がある
場合は、必ずパッチを当てた後に許可してください。
以上の 埋め込みユーザによる接続、テスト用の組み込みUDFの使用を
禁止するパッチが、ボーランド社により公開されています。
以下は、いくつかのプラットフォーム/InterBaseのバージョン別の
パッチのインストール例です。
フロントページへ
Copyright(c) 2001 RIOS Corporation
|