文書番号 28679 最終更新日 2004-08-18 公開区分 一般公開 文書タイプ PROBLEM
製品名(バージョン)[コンポーネント] SQL*Net (7.3.4 - 8.1) [SQL*Net]
プラットフォーム(バージョン) すべてのプラットフォーム ( - )
関連文書  
概要 不正なパケットを受信するとTNSリスナーが異常終了する
内容:
[対象リリース]

 Net :  2.x(SQL*Net V2), 8.0.x(Net8), 8.1.x(Net8)
(Oracle e-Business Suite Release 11iのNetを含む)

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

 全プラットフォーム

[問題]

 TNSリスナーにおいて、以下の問題が報告されています。

 (1) TNSリスナーが1024byteより大きいTNS接続データを受信すると
     メモリ破壊によりTNSリスナーがハングしたり異常終了することがあります。
 (2) TNSリスナーが不正なTNS接続データを受信した場合、
     TNSリスナーが異常終了することがあります。


[原因]

 (1) クライアントがTNSリスナーに TNS接続データを送信すると
     そのデータはTNSリスナーによってローカルバッファにコピーされます。
     そのローカルバッファは1024byteの文字列として設定されています。
     受信したTNS接続データは、最初にデータ長を確認しないままバッファに
     コピーされるため、TNSリスナーがバッファ最大値である 1024byte
     より大きいデータを受信した時にメモリ破壊が発生し、それが原因となり障害が発生します。

 (2) 受信したTNS接続データ内にあるOracleが内部で使用するフィールドについて
     有効な範囲かどうかがチェックされていないことが原因となり障害が発生します。


[回避策]

 パッチをご適用頂くことで回避できます。

[パッチ情報]
 パッチは以下のURLからダウンロードできます。

   http://support.oracle.co.jp/inform/security/patch/download.html

 8.1.7.1

    Sun SPARC Solaris
    Sun Solaris V2 Intel
    HP-UX 11.0/32 bit
    HP 9000 Series HP-UX 64bit
    IBM RS/6000 AIX
    IBM RS/6000 AIX 64-bit
    HP Tru64 UNIX
    Sequent Dynix/PTX
    LINUX Intel
    MS Windows NT

  8.1.7.0

    Sun SPARC Solaris (64-BIT)
    Digital Alpha OpenVMS
    UnixWare

  8.1.6.3

    Sun SPARC Solaris
    Sun Solaris V2 Intel
    HP-UX 11.0/32 bit
    HP 9000 Series HP-UX 64bit
    IBM RS/6000 AIX
    IBM RS/6000 AIX 64-bit
    HP Tru64 UNIX
    Sequent Dynix/PTX
    UnixWare
    MS Windows NT

 8.1.6.2

    LINUX Intel

 8.1.6.1

    Sun SPARC Solaris (64-BIT)
    NEC EWS4800/UP4800 Series Unix

 8.0.6.3

    Sun SPARC Solaris
    Sun Solaris V2 Intel
    HP-UX 11.0/32 bit
    HP 9000 Series HP-UX 10.20
    HP 9000 Series HP-UX 64bit
    IBM RS/6000 AIX
    IBM RS/6000 AIX 64-bit
    HP Tru64 UNIX
    UnixWare
    Fujitsu UXP/DS
    Hitachi 3050/R Risc UNIX
    MS Windows NT
    NCR Unix SVR4

 8.0.6.2

    NEC EWS4800/UP4800 Series Unix

 8.0.6.0

    Sequent Dynix/PTX

[修正リリース]

 8.1.7.2

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

Q. 普通に使用している状態で、この障害が発生する可能性はあるでしょうか。
A. 通常の使用方法で 1024byteより大きい TNS接続データを送信させることは困難なため、
   偶然障害が起きる可能性は非常に低いと考えられます。

Q. 今回の問題はどのような環境で発生するのでしょうか?
A. 通常のインターネットシステムにおいては、TNSリスナーはファイアーウォールの内側に
   存在することが多いため、この問題には遭遇することはないと考えます。
   また、ファイアーウォールの外側に TNSリスナーがある場合でも、1024 Byte のパケット
   は通常の状態では生成されることはありません。
   なお、TNSリスナーとデータベースが共にファイアーウォールの外側にある環境の場合
   でも1024 Byte のパケットは通常の状態では生成されることはないことは同様です。しかし
   この構成の場合、データベースがファイアーウォールに守られている構成とは
   言い難いため、ファイアーウォールの内側に再構成することをお勧め致します。

Q. この障害が起きた時の影響範囲を教えて下さい。
A. この障害の為にTNSリスナーが停止した場合、新規接続が出来なくなります。

   なお、以下のものには一切影響はありません。

   ・データベース本体や格納されているデータ
   ・既に接続されているセッション
   ・インストールされているオラクルソフトウェア

Q. この障害の為にTNSリスナーが停止してしまいました。応急処置を教えて下さい。
A. TNSリスナーを再起動して下さい。


Q. どのような場合に不正なTNS接続データや 1024byteより大きいTNS接続データが
   送られるのでしょうか。
A. 故意にパケットのデータを改ざんし、TNSリスナーに対して送信する場合などが考えられます。
   ネットワーク上で偶然起きるパケット欠損の場合などは、プロトコルスタックが
   IPやTCPのヘッダに含まれるチェックサムを基に障害を検出し再送を要求しますので
   今回の障害は起きません。
   

Q. 今回の障害に対して特に注意する必要があるシステム環境を教えて下さい。
A. 社外から直接TNSリスナーに接続する可能性がある場合には注意が必要です。
   例えば、以下の何れかに該当する場合にはパッチの適用をご検討下さい。
   ・社外からTNSリスナーが起動している IP ADDRESS とポート番号に対して接続できる
   ・TNSリスナーが起動している IP ADDRESS とポート番号の情報が公開されている
   ・TNSリスナーがデフォルトのポート番号である1521, 1526を使用している


Q. パッチが作成されないリリースを使用している場合にはどのように回避すれば
   良いのでしょうか。
A. [パッチ情報]で記載していますように 8.1.7、8.1.6、8.0.6 の最新パッチレベル以外の
   リリースではパッチ作成の予定はございません。このようなリリースをお使いの場合は
   以下の何れかの回避策をご検討下さい。
   
   1. サーバーのデータベース(SQL*NetおよびNet8含む)をパッチが作成されている
      リリースにリリースアップしてパッチの適用を行う。

      - 通常はこちらの回避策を推奨致します。

   2. サーバーのSQL*NetあるいはNet8のみをパッチが存在するリリースにリリースアップして
      パッチの適用を行う。

      - 1.の回避策を講じることが出来ない環境では、こちらの回避策をご検討下さい。
        この場合、現在インストールされているデータベースやアプリケーションプログラムには 
        一切影響を及ぼしません。 
        具体的には以下の手順でインストール、パッチ適用を行います。

        (1)サーバー上に、パッチが存在する上位のリリース(8.0.5 であれば 8.0.6 など)
           のNet8を別ORACLE HOMEにインストールしてください。
        (2)そのNet8に対してパッチを適用して下さい。
        (3)(1)でインストールしたTNSリスナーを起動し、データベースに対して
           接続を行って下さい。

   ※なお、何れの回避策の場合もクライアントマシンにパッチを適用する必要はありません。

[更新履歴]
2004/08/18 文書管理情報を更新