文書番号 48961 最終更新日 2004-05-25 公開区分 一般公開 文書タイプ PROBLEM
製品名(バージョン)[コンポーネント] SQL*Net (9.2.0 - 9.2.0.1) [SQL*Net]
SQL*Net (9.0.1 - 9.0.1.3) [SQL*Net]
プラットフォーム(バージョン) すべてのプラットフォーム ( - )
関連文書  
概要 Oracle9i TNS Listener の潜在的なDoS脆弱性について (TNS Listenerクラッシュ) 
内容:
[問題]
潜在的なセキュリティの脆弱性が Oracle9i Database Release に付属されている Oracle Net Listener で
発見されました。 この潜在的なセキュリティの脆弱性により Oracle Net Listener は DoS攻撃を受ける
可能性があります。悪意あるユーザーが意図的に Oracle Net Listener に対し不正なデータを送信すると、
Oracle Net Listener がクラッシュしたり、正常に動作しなくなる可能性があります。 この状態から回復
する為には、Oracle Net Listener を再起動する必要があります。

[対象リリース]
  - Oracle9i Database Release 9.0.1.0 - 9.0.1.3
  - Oracle9i Database Release2 9.2.0.1
   (注: Oracle8i 以前のリリースは影響を受けません)

[対象プラットフォーム]
  全てのプラットフォーム

[修正リリース]
  9.2.0.2
  9.0.1.4

[回避策]
パッチをご適用頂くことで回避できます。
パッチがご適用頂けない場合は以下の方法等で Oracle Net TNS Listener に対するアクセス
を制限することでご対応下さい。

   以下のパラメータを sqlnet.ora に指定することで、特定のクライアントからの接続のみ
   受け付けるあるいは拒否することが可能です。
   このパラメータにより特定のマシン以外からのアクセスを制限することが可能です。

               tcp.validnode_checking = YES
               tcp.invited_nodes = (192.168.1.1, 192.168.1.2,.....)
               tcp.excluded_nodes = (192.168.1.1, 192.168.1.2,.....)

   tcp.validenode_checking は、特定のクライアントからの接続を許可、拒否する機能を使用
   するかどうかを決定します。 上記ではこの機能を使用する為 YES と記述されています。
   残りの 2つのパラメータは、どのノードからの接続を許可(tcp.invited_nodes)、
   拒否(tcp.excluded_nodes)するかを指定します。例えば 192.168.1.1 192.168.1.2 
   192.168.1.3 からの接続のみを許可する場合以下のように記述します。

               tcp.validnode_checking = YES
               tcp.invited_nodes = (192.168.1.1, 192.168.1.2, 192.168.1.3)

[パッチ情報]
日本でリリースされている全てのプラットフォームに対して、現在フルサポート期間中で、
かつ本件の影響を受ける 9.2.0、9.0.1 の最新パッチレベルに対応するパッチを作成する予定です。
現在提供させて頂いてますパッチの情報については、以下の URL の "対応パッチの入手方法"
をご参照き、そちらよりパッチのダウンロードを行って下さい。

     http://otn.oracle.co.jp/security/020819_1/top.html


[よくある質問とその回答]

  Q. 普通に使用している状態で、この障害が発生する可能性はあるでしょうか。
  A. 悪意あるユーザーにより意図的に不正なデータが送信されない限り、通常の使用方法では
     この問題は発生しません。


  Q. 今回の問題はどのような環境で発生するのでしょうか?
  A. 通常のインターネットシステムにおいては、Oracle Net TNS Listener はファイアーウォールの
     内側に存在することが多いため、この問題には遭遇することはないと考えられます。
     Oracle Net TNS Listener とデータベースが共にファイアーウォールの外側にある環境の場合、
     悪意あるユーザーにより不正なパケットが意図的に送信された場合に発生する可能性が
     あります。しかしこの構成の場合、データベースがファイアーウォールに守られている
     構成とは言い難いため、ファイアーウォールの内側に再構成することをお勧めします。


  Q. この障害の為にOracle Net TNS Listener が正常に動作しなくなりました。応急処置を教えて下さい。
  A. 以下の方法で Oracle Net TNS Listener を再起動して下さい。

       - Unix プラットフォーム
         ps -ef |grep tns 等で リスナープロセスの PID を確認しプロセスを Kill します。
         以下のコマンドでリスナーを起動します。

            lsnrctl start [リスナー名]

       - WindowsNT4.0
         コントロールパネルのサービスから以下のサービスを停止・起動します。
       - Windows2000
         コントロールパネルの管理ツールのサービスから以下のサービスを停止・起動します。

            Oracle[%ORACLE_HOME_NAME%]TNSListener[リスナー名]


  Q. どのような場合に障害を引き起こす不正なデータが送られるのでしょうか。
  A. ユーザーが意図的に不正なデータを Oracle Net TNS Listener に対して送信する場合
     が考えられます。 ネットワーク上で偶然起きるパケット欠損の場合などは、
     プロトコルスタックが IPやTCPのヘッダに含まれるチェックサムを基に障害を
     検出し再送を要求しますので今回の障害は発生しません。


  Q. 今回の障害に対して特に注意する必要があるシステム環境を教えて下さい。
  A. 社外から直接Oracle Net TNS Listener に接続する可能性がある場合には注意が必要です。
     例えば、以下の何れかに該当する場合にはパッチの適用をご検討下さい。

     - 社外からOracle Net TNS Listener が起動している IP ADDRESS とポート番号に対して接続できる
     - Oracle Net TNS Listener が起動している IP ADDRESS とポート番号の情報が公開されている
     - Oracle Net TNS Listener がデフォルトのポート番号である1521, 1526を使用している


  Q. この障害から回避する為に、パッチはクライアント側に適用する必要がありますか。
  A. Oracle Net TNS Listener がインストールされているサーバーマシンに適用頂くことで
     回避可能です。 クライアント側に適用頂く必要はありません。


  Q. 本現象を発生させる「不正なデータ」とは、具体的にどのようなデータですか?
  A. セキュリティに関する情報のため、公開は控えさせて頂いております。

[謝辞]
  オラクル社はこの脆弱性に関する情報を提供していただきました Internet Security Systems の
  X-Force 研究開発チームに深く感謝をいたします。


[更新履歴]
  2004/05/25 文書管理情報を更新
  2002/12/13 パッチ情報の URL の変更@SNL_DATE=0209