Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

Red Hat は、TLS 再ネゴシエーションの中間者 (MITM) 攻撃 (CVE-2009-3555) の影響を受けますか?

更新 -

問題

Transport Layer Security (TLS) は、クライアントとサーバーとの間で安全な接続を確立するために使用されるプロトコルです。TLS 再ネゴシエーションの中間者 (MITM) 攻撃が、PhoneFactor 社の Marsh Ray 氏によって発表されました。攻撃者は、この問題を利用して、選択したプレーンテキストを接頭語としてターゲットのセッションに挿入できます (http://extendedsubset.com/?p=8) (注記: リンク先の問題報告者のサイトでは、現在、この不具合に関する情報は提供されていません)。この不具合に関する詳細については、Eric Rescorla 氏の説明 (http://www.educatedguesswork.org/2009/11/understanding_the_tls_renegoti.html)) を参照してください。

環境

  • Red Hat Enterprise Linux
  • Red Hat Certificate System
  • Red Hat Directory Server
  • JBoss Enterprise Web Server
  • すべての web ブラウザー

解決策

Red Hat はこの問題を認識しており、https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2009-3555 で対応しております。

報告されている問題は TLS/SSL プロトコルの不具合で、特定の実装で発生したバグではありません。したがって、この問題はすべてのプロトコル実装に影響します。Red Hat Enterprise Linux には、opensslnss、および gnutls パッケージ、そしてさまざまな Java ランタイム環境 (Sun、IBM、および OpenJDK) の Java Secure Socket Extension (JSSE) コンポーネントが含まれます。

この不具合を利用するには中間者攻撃が必要なため、この問題のセキュリティへの影響度は「中」に設定されています。

この問題に対処するため、IETF TLS ワーキンググループは、安全なセッションの再ネゴシエーションを許可する TLS プロトコルの拡張を定義しました。このプロトコルの拡張は RFC 5746 "Transport Layer Security (TLS) Renegotiation Indication Extension": http://www.rfc-editor.org/rfc/rfc5746.txt で説明されています。

Red Hat は、opensslopenssl097anssgnutlsjava-1.6.0-openjdkjava-1.6.0-sunjava-1.4.2-ibmjava-1.4.2-ibm-sapjava-1.5.0-ibm、および java-1.6.0-ibm パッケージに RFC 5746 のサポートを追加するアップデートをリリースしました。これらのアップデートについては、RFC 5746 サポートを追加するアップデートセクションで説明されています。

Red Hat は httpdjava-1.4.2-ibmjava-1.5.0-ibmjava-1.6.0-ibmjava-1.6.0-openjdkjava-1.6.0-suntomcat5tomcat6、および tomcat-native のアップデートを作成しました。このアップデートを使用すると、再ネゴシエーションの使用が無効になったり制限されるため、この不具合を軽減できます。これらのアップデートについては、問題を軽減するアップデートセクションを参照してください。

これまで、この不具合を使用する攻撃の説明は HTTPS だけを対象としていました。httpd web サーバーの mod_ssl および mod_nss モジュールをともに使用すると、クライアントは常時 TLS セッションの再ネゴシエーションを実行できます。したがって、これらのモジュールを使用して HTTPS サーバーに攻撃できました。影響は、サーバーにデプロイした web アプリケーションによって異なりました。たとえば、Cross-Site Request Forgery (CSRF) 攻撃を保護すると、特定の攻撃ベクターを軽減できます。新しい TLS 拡張を強制せずに、クライアンサイドで攻撃を検出する既知の方法があります。RFC 5746 をサポートしていない web サーバーはこの攻撃のターゲットとなる可能性があります。

Red Hat は、現在、他のアプリケーションプロトコルへの攻撃は認識していませんが、今後の解析で発見される場合もあります。

RFC 5746 サポートを追加するアップデート

このセクションでは、さまざまな TLS/SSL ライブラリに RFC 5746 のサポートを追加するアップデートについて説明しています。このアップデートにより、クライアントおよびサーバーの再ネゴシエーションが保護されます。

これ以降、RFC 5746 を実装している TLS/SSL クライアントまたはサーバーについては「アップグレードした (RFC 5746 で使用) またはパッチを当てた (OpenSSL ドキュメントで使用) クライアントまたはサーバー」と表します。一方、RFC 5746 をサポートしていない TLS/SSL クライアントまたはサーバーについては「アップグレードをしていないまたはパッチを当てていないサーバー」とします。

RFC 5746 とその実装が利用可能になるまでは、複数のコンポーネントで再ネゴシエーションの使用をブロックまたは制限するために、複数のアップデートがリリースされます。これらのアップデートについては、問題を軽減するアップデートセクションを参照してください。

OpenSSL への RFC 5746 実装

OpenSSL への RFC 5746 サポートは、バージョン 0.9.8m でアップストリームに導入されました。

パッチを当てた Red Hat OpenSSL パッケージでは、再ネゴシエーションは以下のように動作します。

  • パッチを当てたクライアントはパッチを当てたサーバーに接続して再ネゴシエーションを行います。
  • パッチを当てたクライアントはパッチを当てていないサーバーに接続して再ネゴシエーションを行います。これは、暫定的な動作です。今後の OpenSSL アップデートでは、パッチを当てていないサーバーへの接続または再ネゴシエーションが行われないようになる可能性があります。
  • パッチを当てたサーバーは、パッチを当てたクライアントに接続と再ネゴシエーションを許可します。
  • パッチを当てたサーバーは、パッチを当てていないクライアントに接続を許可しますが、再ネゴシエーションは許可しません。

OpenSSL を使用するアプリケーションは、SSL または SSL コンテキスト構造に設定できる、新しく導入した 2 つのオプションを使用することでこの動作を変更できます。

  • SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION を設定すると、パッチを当てたサーバーは、パッチを当てていないクライアントにも再ネゴシエーションを許可しますが、これにより、セキュリティの脆弱性が再発生します。
  • SSL_OP_LEGACY_SERVER_CONNECT は、パッチを当てたクライアントを、パッチを当てていないサーバーに接続できます。このオプションは、現在デフォルトで設定されています。

これらのオプションは、OpenSSL 機能 (これらのオプションを設定するための SSL_CTX_set_options()または SSL_set_options() と、これらの削除する SSL_CTX_clear_options() または SSL_clear_options()) によって制御することができます。

詳細については、SSL_CTX_set_options(3) man ページの "Secure Renegotiation" セクションを参照してください。

Red Hat Enterprise Linux 3、4、 5 に対して openssl パッケージエラータがリリースされました (2010 年 3 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0162.html
https://rhn.redhat.com/errata/RHSA-2010-0163.html

Red Hat Enterprise Linux 5 に対して openssl097a パッケージエラータがリリースされました (2010 年 3 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0164.html

Red Hat Enterprise Virtualization に対して openssl パッケージエラータがリリースされました (2010 年 5 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0440.html

JBoss Enterprise Web Server 1.0 バージョン 1.0.1 に openssl のアップデートバージョンがリリースされ、カスタマーポータルからダウンロードできます。

https://support.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=webserver&version=1.0.1

JBoss Enterprise Application Platform 5.0 バージョン 5.0.1 に openssl のアップデートバージョンがリリースされ、カスタマーポータルからダウンロードできます。

https://support.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=appplatform&version=5.0.1

注意: アップデートされた OpenSSL パッケージをインストールすると、HTTPS サービスを提供する mod_ssl モジュールを使用し、サーバー始動の再ネゴシエーションを使用するように設定された httpd インストールは、パッチを当てていないクライアント (ユーザーの web ブラウザー) とは動作しなくなります。サーバー始動の再ネゴシエーションを使用しなくてもよくなるようにするための設定変更については、以下の mod_ssl で無効になるクライアント始動の再ネゴシエーションセクションに記載されています。新しい mod_ssl 設定ディレクティブ SSLInsecureRenegotiation を使用するとパッチを当てていないクライアントとの再ネゴシエーションが許可されるため、保護されていない再ネゴシエーションが有効になります。

Red Hat Enterprise Linux 4 および 5 に SSLInsecureRenegotiation ディレクティブのサポートを追加する httpd パッケージエラータがリリースされました (2010 年 3 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0168.html
https://rhn.redhat.com/errata/RHSA-2010-0175.html

JBoss Enterprise Web Server の SSLInsecureRenegotiation ディレクティブにサポートを追加する httpd および httpd22 パッケージエラータがリリースされました (2010 年 3 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0396.html

Solaris および Windows 版の JBoss Enterprise Web Server 1.0 httpd パッケージがアップデートされ、カスタマーポータルからダウンロードできます。

https://support.redhat.com/jbossnetwork/restricted/listSoftware.html?product=webserver&downloadType=securityPatches&version=1.0.1

NSS (Network Security Services) への RFC 5746 実装

NSS での RFC 5746 サポートが、バージョン 3.12.6 でアップストリームに導入されました。

パッチを当てた Red Hat NSS パッケージでは、再ネゴシエーションは以下のように動作します。

  • パッチを当てたクライアントはパッチを当てたサーバーに接続して再ネゴシエーションを行います。
  • パッチを当てたクライアントはパッチを当てていないサーバーに接続して再ネゴシエーションを行います。これは、 暫定的な動作です。今後の NSS アップデートでは、パッチを当てていないサーバーへの接続または再ネゴシエーションが行われないようになる可能性があります。
  • パッチを当てたサーバーは、パッチを当てたクライアントに接続と再ネゴシエーションを許可します。
  • パッチを当てたサーバーは、パッチを当てていないクライアントに接続を許可しますが、再ネゴシエーションは許可しません。

NSS を使用するアプリケーションは、新しく導入した 2 つのオプションを使用することでこの動作を変更できます。これらのオプションは、NSS SSL_OptionSet() 関数を使用して SSL ソケットで設定できます。

  • SSL_ENABLE_RENEGOTIATION は、再ネゴシエーション動作を制御します。ここでは、以下のいずれかの値が許可されます。
    • SSL_RENEGOTIATE_UNRESTRICTED は、保護されていないネゴシエーションも含む、すべての再ネゴシエーションを許可します。
    • SSL_RENEGOTIATE_NEVER は、保護されたネゴシエーションも含む、すべての再ネゴシエーションを拒否します。
    • SSL_RENEGOTIATE_REQUIRES_XTN は、RFC 5746 を使用する保護された再ネゴシエーションを許可します。これは、アップストリーム NSS 3.12.6 に対するデフォルトです。
    • SSL_RENEGOTIATE_TRANSITIONALSSL_RENEGOTIATE_REQUIRES_XTN と類似していますが、パッチを当てたクライアントがパッチを当てていないサーバーと再ネゴシエーションできます。これは、現在の Red Hat NSS パッケージのデフォルトです。
  • SSL_REQUIRE_SAFE_NEGOTIATION は、保護された再ネゴシエーションが初期の TLS/SSL ハンドシェイクで必要かどうか (つまり、パッチを当てたクライアントがパッチを当てていないサーバーに接続できるか、またはパッチを当てたサーバーが、パッチを当てていないクライアントからの接続を許可するかどうか) を制御します。現在のデフォルト値は false です。

NSS ライブラリを使用してアプリケーションを修正してこれらのオプションを設定する呼び出しを追加するだけでなく、以下の環境変数を使用して、修正されていないアプリケーションに対して、デフォルト値を変更できます。

  • NSS_SSL_ENABLE_RENEGOTIATION は、SSL_ENABLE_RENEGOTIATION オプションのデフォルト値を変更します。有効な値は以下のようになります。

    • "1"、または "u" (大文字と小文字は区別しない) は、SSL_RENEGOTIATE_UNRESTRICTED にデフォルト設定します。
    • "0" または "n" (大文字と小文字は区別しない) は、SSL_RENEGOTIATE_NEVER にデフォルト設定します。
    • "2" または "r" (大文字と小文字は区別しない) は、SSL_RENEGOTIATE_REQUIRES_XTN にデフォルト設定します。
    • "3"、または "t" (大文字と小文字は区別しない) は、SSL_RENEGOTIATE_TRANSITIONAL にデフォルト設定します。
    • 注意: NSS は、NSS_SSL_ENABLE_RENEGOTIATION 環境変数値の最初の文字だけを確認します。したがって、上に示す値の後に任意の文字列を追加できます。これにより、たとえば "1" または "u" を使う代わりに "unrestricted" と設定できます。
  • NSS_SSL_REQUIRE_SAFE_NEGOTIATION は、SSL_REQUIRE_SAFE_NEGOTIATION オプションのデフォルト値を変更します。有効な値は以下のようになります。

    • "1" で始まる値はデフォルトを True に設定します。

Red Hat Enterprise Linux 4 および 5 に nss パッケージエラータがリリースされました (2010 年 3 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0165.html

Red Hat Enterprise Virtualization に nss パッケージエラータがリリースされました (2010 年 5 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0440.html

注意: アップデートされた NSS パッケージをインストールすると、HTTPS サービスを提供する mod_nss モジュールを使用し、サーバー始動の再ネゴシエーションを使用するように設定された httpd インストールは、パッチを当てていないクライアント (ユーザーの web ブラウザー) には有効ではなくなります。サーバー始動の再ネゴシエーションは、以下の mod_ssl で無効になるクライアント始動の再ネゴシエーションセクションの mod_ssl で説明されているように設定を変更すると使用する必要がなくなります。または、以下の行を /etc/sysconfig/httpd に追加し、httpd サービスを再起動すると、保護されていない再ネゴシエーションが mod_nss に対して許可されます。

export NSS_SSL_ENABLE_RENEGOTIATION=u

Red Hat Enterprise Linux 版 Red Hat Certificate System 7.3 の dirsec-nss パッケージは、RHSA-2010:0165 でリリースされたシステムの nss パッケージによって廃止されました。

Solaris 版 Red Hat Certificate System 7.3 で dirsec-nss パッケージがアップデートされ (2010 年 4 月 15 日 リリース)、Red Hat Network の "Red Hat Certificate System 7.3 (for Solaris 9)" チャンネルからダウンロードできます。

https://rhn.redhat.com/rhn/software/channel/downloads/Download.do?cid=7094

Red Hat Enterprise Linux および Solaris 版 Red Hat Certificate System 7.1 の Hotfix パッケージは Red Hat サポートから取得できます。

注意: Red Hat Certificate System 7.1、7.3、および 8.0 は、デフォルトでサーバー始動の再ネゴシエーションを使用します。Certificate System サーバーと同じ時にすべてのクライアントをアップデートできない場合に、Red Hat Certificate System でサーバー始動の再ネゴシエーションを使用しないようにするために必要な設定変更については、Configuration changes to prevent server-initiated TLS session renegotiations in Red Hat Certificate System を参照してください。Red Hat Certificate System 7.3 のユーザーは、NSS パッケージのアップデートに併せて、アップデートした rhpki-ra および rhpki-tps パッケージを RHBA-2010:0170 からインストールする必要があります。

Solaris 版 Red Hat Directory Server 8 で dirsec-nss パッケージがアップデートされ (2010 年 4 月 15 日リリース)、Red Hat Network の "Red Hat Directory Server 8 (for Solaris 9)" チャンネルからダウンロードできます。

https://rhn.redhat.com/rhn/software/channel/downloads/Download.do?cid=7810

Red Hat Enterprise Linux および Solaris 版 Red Hat Directory Server 7.1 の Hotfix パッケージは、Red Hat サポートから取得できます。

注意: Red Hat Directory Server にアップデートされた NSS パッケージをインストールする際の注意については、The Effects of the TLS Session Renegotiation Vulnerability on Red Hat Directory Server 7.1 および The Effects of the TLS Session Renegotiation Vulnerability on Red Hat Directory Server 8.1 を参照してください。

GnuTLS への RFC 5746 実装

GnuTLS への RFC 5746 サポートが、バージョン 2.10.0 でアップストリームに導入されました。

パッチを当てた Red Hat GnuTLS パッケージでは、再ネゴシエーションは以下のように動作します。

  • パッチを当てたクライアントはパッチを当てたサーバーに接続して再ネゴシエーションを行います。
  • パッチを当てたクライアントはパッチを当てていないサーバーに接続できますが、再ネゴシエーションはできません。今後の GnuTLS アップデートでは、パッチを当てていないサーバーへの接続が行われないようになる可能性があります。
  • パッチを当てたサーバーは、パッチを当てたクライアントに接続と再ネゴシエーションを許可します。
  • パッチを当てたサーバーは、パッチを当てていないクライアントに接続を許可しますが、再ネゴシエーションは許可しません。

GnuTLS を使用するアプリケーションを修正して、新しく導入した 2 つの関数を使用する各 GnuTLS に対するこの動作を変更します。

  • gnutls_safe_renegotiation_set() 関数を使用すると、保護されていない再ネゴシエーションを許可します。デフォルトでは、保護された再ネゴシエーションが必要です。
  • gnutls_safe_negotiation_set_initial() を使用すると、保護された初期再ネゴシエーションが必要です。

注意: 上述された関数は、Red Hat Enterprise Linux 4 および 5 の gnutls パッケージでのみ利用できます。Red Hat Enterprise Linux 6 の gnutls パッケージでは、再ネゴシエーション動作は、優先度文字列で特定キーワードを使用して制御できます。詳細は、gnutls_priority_init(3)の man ページに記載されています。優先度文字列における特定キーワードは、Red Hat Enterprise Linux 4 および 5 ではサポートされていません。

Red Hat Enterprise Linux 4 および 5 の gnutls パッケージエラータが 2010 年 3 月 25 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0166.html
https://rhn.redhat.com/errata/RHSA-2010-0167.html

Red Hat Enterprise Virtualization に gnutls パッケージエラータがリリースされました (2010 年 5 月 25 日)。

https://rhn.redhat.com/errata/RHSA-2010-0440.html

Sun および OpenJDK Java ランタイム環境への RFC 5746 実装

RFC 5746 の Sun Java ランタイム環境 (JRE) へのサポートが、バージョン 6 のアップデート 22 と、対応する OpenJDK アップデートでアップストリームに導入されました。

パッチを当てた Sun および OpenJDK JRE パッケージでは、再ネゴシエーションは以下のように動作します。

  • パッチを当てたクライアントはパッチを当てたサーバーに接続して再ネゴシエーションを行います。
  • パッチを当てたクライアントはパッチを当てていないサーバーに接続できますが、再ネゴシエーションはできません。
  • パッチを当てたサーバーは、パッチを当てたクライアントに接続と再ネゴシエーションを許可します。
  • パッチを当てたサーバーは、パッチを当てていないクライアントに接続を許可しますが、再ネゴシエーションは許可しません。

以下のプロパティを使用すると、デフォルトの再ネゴシエーション動作を変更できます。

  • sun.security.ssl.allowUnsafeRenegotiation (デフォルト値は false) を使用すると、パッチを当てていないピアとの保護されていない再ネゴシエーションを許可できます。
  • sun.security.ssl.allowLegacyHelloMessages (デフォルト値 true) を使用すると、パッチを当てていないピアとの接続を完全に拒否します。

詳細については、以下のドキュメントを参照してください。

http://www.oracle.com/technetwork/java/javase/documentation/tlsreadme2-176330.html

Red Hat Enterprise Linux 5 の java-1.6.0-openjdk パッケージエラータが 2010 年 10 月 13 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0768.html

Red Hat Enterprise Linux 4 Extras および Red Hat Enterprise Linux 5 Supplementary に対する java-1.6.0-sun パッケージエラータが 2010 年 10 月 14 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0770.html

Red Hat Enterprise Linux 6 の java-1.6.0-openjdk パッケージエラータが 2010 年 11 月 10 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0865.html

IBM Java ランタイム環境への RFC 5746 実装

IBM Java ランタイム環境 (JRE) への RFC 5746 サポートが、バージョン 5.0 SR12-FP2 と 1.4.2 SR13-FP6 でアップストリームに導入されました。

パッチを当てた IBM JRE パッケージでは、再ネゴシエーションは以下のように動作します。

  • パッチを当てたクライアントはパッチを当てたサーバーに接続して再ネゴシエーションを行います。
  • パッチを当てたクライアントはパッチを当てていないサーバーに接続できますが、再ネゴシエーションはできません。
  • パッチを当てたサーバーは、パッチを当てたクライアントに接続と再ネゴシエーションを許可します。
  • パッチを当てたサーバーは、パッチを当てていないクライアントに接続を許可しますが、再ネゴシエーションは許可しません。

以下のプロパティを使用すると、デフォルトの再ネゴシエーション動作を変更できます。

  • com.ibm.jsse2.renegotiate を使用すると再ネゴシエーションを有効または無効にできます。以下を含む、複数の値が認識されます。
    • NONE (デフォルト値) は、 RFC 5746 を実装するピアとの保護された再ネゴシエーションだけが許可されます。
    • ALL は、安全および安全ではない再ネゴシエーションが許可されます。
  • com.ibm.jsse2.extended.renegotiation.indicator は、RFC 5746 サポートが、初期 TLS/SSL ハンドシェイク時に必要かどうかを制御します。有効な値は以下のようになります。
    • OPTIONAL (デフォルト値) では、初期ハンドシェイク時に RFC 5746 サポートが必要ありません。
    • CLIENTSERVERBOTH では、クライアントソケット、サーバーソケット、またはクライアントとサーバーソケットの両方に、それぞれ RFC 5746 サポートが必要です。

詳細については、以下のドキュメントを参照してください。

http://www.ibm.com/developerworks/java/jdk/security/50/secguides/jsse2Docs/JSSE2_RFC5746.html

Red Hat Enterprise Linux 3 Extras、Red Hat Enterprise Linux 4 Extras、および Red Hat Enterprise Linux 5 Supplementary に対する java-1.4.2-ibm パッケージエラータが 2010 年 10 月 20 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0786.html

Red Hat Enterprise Linux 4 Extras および Red Hat Enterprise Linux 5 Supplementary に対する java-1.5.0-ibm パッケージエラータが 2010 年 10 月 27 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0807.html

SAP 向けの Red Hat Enterprise Linux 4、5、および 6 に対する java-1.4.2-ibm-sap パッケージエラータが 2010 年 12 月 15 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0986.html

Red Hat Enterprise Linux 4 Extras、ならびに Red Hat Enterprise Linux 5 および 6 Supplementary に対する java-1.6.0-ibm パッケージエラータが 2010 年 12 月 15 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0987.html

注意: java-1.4.2-ibm パッケージのアップデートは再ネゴシエーションを無効にし、JSSE コンポーネントに対するデフォルト以外の IBM JSSE2 プロバイダーにのみ RFC 5746 サポートを追加します。デフォルトの JSSE プロバイダーはこれらの修正ではアップデートされません。IBM Java 2 Runtime Environment を設定して JSSE2 プロバイダーをデフォルトで使用する方法については、IBMJSSE2 Provider Reference Guide を参照してください。

問題を軽減するためのアップデート

このセクションは、RFC 5746 が定義される前にこの不具合を軽減するするためのアップデートがリリースされたことと、それを実装するためのアップデートについて説明します。RFC 5746 のサポートを導入するアップデートと、 アップグレードしたクライアントとサーバーと間で安全な再ネゴシエーションを許可するアップデートは、上述の Updates adding RFC 5746 support セクションで説明されています。

mod_ssl で無効になるクライアントが開始した再ネゴシエーション

httpd パッケージがアップデートされました。このリリースでは、クライアント始動の再ネゴシエーションをすべて拒否するように mod_ssl を変更します。これにより、mod_ssl を使用して HTTPS サービスを提供する設定の大部分において、不具合が軽減されます。ただし、サーバー始動の再ネゴシエーションが必要な場合は、依然として攻撃は可能です。

依然としてこの問題に影響される設定は、通常、以下のようになります。

  • クライアントの証明証認証が、サイトの一部に使用されていますが、デフォルトでは必要ありません。これは、"SSLVerifyClient require" が <Location> または <Directory> コンテキストセクションで設定されている場合に発生しますが、SSL サーバーで対応する <VirtualHost> が設定されていない場合は発生しません。
  • 異なる暗号スイートが、web サイトの異なる部分に必要です。暗号スイートの要件は、SSLCipherSuite ディレクトリを使用する各サーバーまたは各ディレクトリコンテキストに対して設定できます。

サーバー始動の再ネゴシエーションは以下によって防ぐことができます。

  • サイトのレイアウトを変更すると、サイトの一部ではなく全体に対してクライアントの証明書認証が必要になります。つまり、"SSLVerifyClient" が<VirtualHost> セクションに直接置かれた場合に限り使用されます。
  • サイト全体で同じ暗号スイートを使用します。すべてのディレクトリおよび場所の暗号化に関する強力要件は <VirtualHost> セクションに設定することです。

注意: クライアントとサーバーがともに RFC 5746 をサポートしている場合は、サーバー始動の再ネゴシエーションが必要な上述の設定でも、安全に再ネゴシエーションできます。mod_ssl は OpenSSL ライブラリを使用するため、RFC 5746 サポートを追加し、HTTPS サービスが安全な再ネゴシエーションを使用できるようにインストールする必要がある openssl パッケージアップデートの一覧とその説明については、上述の OpenSSL への RFC 5746 実装セクションを参照してください。

Red Hat Enterprise Linux 3、4、および 5 に対する httpd パッケージエラータが 2009 年 11 月 11 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2009-1579.html
https://rhn.redhat.com/errata/RHSA-2009-1580.html

JBoss Enterprise Web Server に対する httpd および httpd22 パッケージエラータが 2010 年 1 月 6 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0011.html

Solaris 向け JBoss Enterprise Web Server 1.0 パッケージのアップデートがカスタマーポータルからダウンロードできます。

https://support.redhat.com/jbossnetwork/restricted/listSoftware.html?product=webserver&downloadType=securityPatches&version=1.0.0

IBM Java ランタイム環境で無効になる再ネゴシエーション

IBM JRE バージョン 6 SR7、5.0 SR11-FP1、および 1.4.2 SR13-FP4 は、デフォルトで再ネゴシエーションを無効にします。com.ibm.jsse2.renegotiate プロパティを使用して再ネゴシエーション動作を制御できます。デフォルト値は NONE です (再ネゴシエーションは無効)。このプロパティの値を ALL に設定すると、保護されない再ネゴシエーションを再度有効にできます。詳細については、以下のドキュメントを参照してください。

http://www-01.ibm.com/support/docview.wss?uid=nas258cbfcf0a5645af7862576710041f65e

これらのアップデートは、RFC 5746 サポートを追加するアップデートによって廃止されました。上述の IBM Java ランタイム環境への RFC 5746 実装セクションを参照してください。

Red Hat Enterprise Linux 4 Extras および Red Hat Enterprise Linux 5 Supplementary に対する java-1.6.0-ibm パッケージエラータが 2009年 12 月 23 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2009-1694.html

Red Hat Enterprise Linux 4 Extras および Red Hat Enterprise Linux 5 Supplementary に対する java-1.5.0-ibm パッケージエラータが 2010 年 3 月 3 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0130.html

Red Hat Enterprise Linux 3 Extras、Red Hat Enterprise Linux 4 Extras、および Red Hat Enterprise Linux 5 Supplementary に対する java-1.4.2-ibm パッケージエラータが 2010 年 3 月 17 日にリリースされます。

https://rhn.redhat.com/errata/RHSA-2010-0155.html

SAP 向け Red Hat Enterprise Linux 4 および 5 に対する java-1.4.2-ibm パッケージエラータが 2010 年 3 月 12 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0408.html

Sun および OpenJDK Java ランタイム環境で無効になる再ネゴシエーション

Sun JRE バージョン 6 Update 19 と、対応する OpenJDK JRE アップデートは、デフォルトで再ネゴシエーションを無効にします。sun.security.ssl.allowUnsafeRenegotiation プロパティを使用すると、保護されない再ネゴシエーションを有効にできます。デフォルト値は false です (再ネゴシエーションは無効).。

これらのアップデートは、RFC 5746 サポートを追加するアップデートによって廃止されました。上述の Sun および OpenJDK Java ランタイム環境への RFC 5746 実装 セクションを参照してください。

Red Hat Enterprise Linux 4 Extras および Red Hat Enterprise Linux 5 Supplementary に対する java-1.6.0-sun パッケージエラータが 2010 年 3 月 31 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0337.html

Red Hat Enterprise Linux 5 の java-1.6.0-openjdk パッケージエラータが 2010 年 3 月 31 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0339.html

Apache Tomcat で無効になる再ネゴシエーション

スタンドアロンの HTTPS サーバーとして実行するように Apache Tomcat を設定できます。TLS/SSL の場合、Tomcat HTTPS コネクターは、JRE (Sun、IBM、または OpenJDK) もしくは OpenSSL (Tomcat Native ライブラリの使用時) の JSSE コンポーネントが提供する実装を使用できます。JSSE および OpenSSL の両方は、クライアントが要求する再ネゴシエーションを透過的に処理します。また、Tomcat は、クライアントの証明書認証を使用して、特定の設定下で再ネゴシエーションすることをクライアントに求めます。設定内容はたとえば以下のようになります。

  • 以下のような場合、最初の接続時にクライアント証明書は必要ありません。
    • JSSE を使用する HTTPS コネクターの clientAuthfalse を設定する
    • OpenSSL を使用する HTTPS コネクターの SSLVerifyClient 属性を none に設定する
  • web アプリケーションは、アプリケーションの web.xml ファイルの login-config セクションに CLIENT-CERT 認証方法を指定します。

以下の軽減対策が、Tomcat および Tomcat Native に適用されました。

  • Tomcat 5.5.29 および 6.0.21 は、JSSE allowUnsafeLegacyRenegotiation を使用して HTTPS コネクターに新しい属性を追加します。この属性を false (デフォルト値) に設定すると、Tomcat クライアントは、クライアントおよびサーバーが始動する再ネゴシエーションをともに拒否します。
  • Tomcat Native 1.1.18 は、OpenSSL を使用する HTTPS コネクターに対して、クライアント始動の再ネゴシエーションを制限します。サーバー始動の再ネゴシエーションは許可されたままとなります。この軽減は、上述される mod_ssl 軽減と類似しています。

これらの軽減の詳細については、Tomcat および Tomcat Native ドキュメントと、以下の脆弱性ページを参照してください。

http://tomcat.apache.org/security-5.html
http://tomcat.apache.org/security-6.html
http://tomcat.apache.org/security-native.html

注意: 別の web サーバーの後ろにある Servlet または JavaServer Pages (JSP) コンテナーとして Tomcat を使用するのは一般的です。 これは、暗号化した接続を処理し、暗号化されていないフォーマットで Tomcat にリクエストを渡します。これらの設定では、上述した Tomcat および Tomcat Native の軽減は適用されません。この問題は、web サーバー、または web サーバーが使用する TLS/SSL ライブラリで対応する必要があります。

更新された tomcat5tomcat6、および tomcat-native パッケージは、JBoss Enterprise Web Server 1.0.1 アップデートの一部として 2010 年 2 月 23 日にリリースされました。

https://rhn.redhat.com/errata/RHSA-2010-0119.html

Solaris 向け JBoss Enterprise Web Server 1.0.1 パッケージがアップデートされ、カスタマーポータルからダウンロードできます。

https://support.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=webserver&version=1.0.1

改訂履歴 (英語版)

  • 2009-11-05 - Initial version.
  • 2009-11-09 - Extended impact description.
  • 2009-11-11 - Added descriptions of the httpd / mod_ssl mitigations, references to RHSA-2009:1579 and RHSA-2009:1580.
  • 2010-02-09 - Added reference to RHSA-2010:0011.Added reference to the IETF approved renegotiation extension draft.Added IBM JRE mitigation notes and reference to RHSA-2009:1694.
  • 2010-02-23 - Added reference to RFC 5746.Added Tomcat mitigation notes and reference to RHSA-2010:0119.
  • 2010-03-03 - Added reference to RHSA-2010:0130.
  • 2010-03-17 - Added reference to RHSA-2010:0155.
  • 2010-03-25 - Added descriptions of the openssl, nss, and gnutls updates adding support for RFC 5746.Added references to RHSA-2010:0162, RHSA-2010:0163, RHSA-2010:0164, RHSA-2010:0165, RHSA-2010:0166, RHSA-2010:0167 and RHSA-2010:0168.
  • 2010-04-01 - Added reference to RHSA-2010:0175.Added Sun and OpenJDK JRE mitigation notes and references to RHSA-2010:0337 and RHSA-2010:0339.
  • 2010-06-10 - Added references to updates for Red Hat Certificate System, Red Hat Directory Server, JBoss Enterprise Web Server and JBoss Enterprise Application Platform.Added references to RHSA-2010:0396, RHSA-2010:0408 and RHSA-2010:0440.
  • 2010-10-15 - Documented RFC 5746 support in the Sun and OpenJDK JRE.Added references to RHSA-2010:0768 and RHSA-2010:0770.Listed the upstream GnuTLS version providing RFC 5746 support.
  • 2010-10-29 - Documented RFC 5746 support in the IBM JRE.Added references to RHSA-2010:0786 and RHSA-2010:0807.
  • 2011-01-06 - Added references to RHSA-2010:0865, RHSA-2010:0986, and RHSA-2010:0987.
  • 2012-04-16 - Added link to Eric Rescorla's issue description.Clarified "Client-initiated renegotiations disabled in mod_ssl" section regarding OpenSSL packages updates that add RFC 5746 support.