CVE-2014-0160 OpenSSL Heartbleed 脆弱性まとめ

必要な情報は http://heartbleed.com/ にまとまっているのですが、英語だし長いしって人のために手短にまとめておきます。

どうすればいいのか

  1. OpenSSL 1.0.1〜1.0.1fを使っていなければセーフ
  2. あてはまる場合には、一刻も早くバージョンアップして、サーバごと再起動(わかるひとはサービス単位でもOK、ただしreloadではだめなことも)
  3. SSL証明書でサーバを公開しているなら、秘密鍵から作り直して証明書を再発行し、過去の証明書を失効させる(末尾に関連リンクあり)。
  4. サーバを公開していない場合も、外部へのSSL通信があれば影響を受けるので、詳しく精査する。
  5. PFS(perfect forward secrecy)を利用していない場合、過去の通信内容も復号される可能性があるため、詳しく精査する。

漏洩する情報の具体例は、OpenSSLの脆弱性で想定されるリスクとして別の記事に書きましたのでそちらをご覧くださいまし。

影響を受けるディストリビューション

基本的には、パッケージ更新などでOpenSSLをバージョンアップして、そのあとOpenSSLを読んでいるサービスを再起動します。外部サーバへの接続なども含めるとOpenSSLを利用するサービスが多いので、よく分からない人はサーバごと再起動がおすすめ。

1.0.1からの新機能による脆弱性なので、1.0.0とそれ未満であれば問題ありません。逆に、1.0.1eやそれ以前のバージョン番号のまま脆弱性のみ修正される場合もあるので、OpenSSLのバージョンだけでなく、パッケージのバージョンを確認してください。

ディストリ どうすればいいか
Debian Wheezy (stable)以降 DSA-2896-1
stable: libssl1.0.0 1.0.1e-2+deb7u5 で修正
testing/unstable: libssl1.0.0 1.0.1g-1 で修正
Ubuntu 12.04.4 LTS以降 [USN-2165-1]
12.04: libssl1.0.0 1.0.1-4ubuntu5.12 で修正
12.10 libssl1.0.0 1.0.1c-3ubuntu2.7 で修正
13.10 libssl1.0.0 1.0.1e-3ubuntu1.2 で修正
RHEL 6.5 [RHSA-2014:0376-1]
openssl-1.0.1e-16.el6_5.7で修正
CentOS 6.5 [CESA-2014:0376]
openssl-1.0.1e-16.el6_5.7 で修正
Scientific Linux 6.5 openssl-1.0.1e-16.el6_5.7 で修正
Fedora 18以降 [Bug 1085065]
Fedora 19: openssl-1.0.1e-37.fc19.1 で修正
Fedora 20: openssl-1.0.1e-37.fc20.1 で修正
(Fedora 18はサポート切れのため公式パッケージ無し)
OpenBSD 5.3以降 [Patches for OpenSSL bounds checking bug]
パッチあり: 5.3 / 5.4 / 5.5
FreeBSD ports [[ports] Revision 350548]
security/openssl 1.0.1_10 で修正
FreeBSD 10.0 [FreeBSD-SA-14:06.openssl]
freebsd-updateでバイナリ更新するかpatchあててbuildworld/installworld/reboot
NetBSD pkgsrc [NetBSD Security Advisory 2014-004]
openssl-1.0.1gで修正
NetBSD 6.0以降 [NetBSD Security Advisory 2014-004]
各arch向けにビルド済みバイナリが配布されている。
OpenSUSE 12.2 [openSUSE:Maintenance:2718]
Amazon Linux 2013.03以降 [Thread: openssl heartbleed]
ALAS-2014-320: openssl Security Update - Information Disclosure Vulnerability]
2013.09: openssl-1.0.1e-4.58.amzn1 で対応
2014.03: openssl-1.0.1e-37.66.amzn1.x86_64 で対応
Amazon ELB [HeartBleed Bug Concern]
[AWS Services Updated to Address OpenSSL Vulnerability / 参考和訳]
全てのRegionで対応済み、ただし証明書の更新を推奨
(リスクの度合いは不明)
Amazon CloudFront [AWS Services Updated to Address OpenSSL Vulnerability / 参考和訳]
対応済み、ただし証明書の更新を推奨
(リスクの度合いは不明)
Homebrew [openssl 1.0.1g]
brew update
brew upgrade openssl
brew link openssl --force
(コメ欄にて詳しい手順有り)
Gentoo Linux [GLSA 201404-07 / openssl]
dev-libs/openssl-1.0.1g で修正
BIG-IP [SOL15159: OpenSSL vulnerability CVE-2014-0160]
11.5.0以降が影響を受ける模様
「Use only Native SSL stack ciphers」に設定していれば回避可能
Google Compute Engine [Security Bulletins]
各ディストリの v20140408 以降のイメージで作り直すか、yum/aptでパッケージ更新
Android 4.1.1 [Google Services Updated to Address OpenSSL CVE-2014-0160 (the Heartbleed bug)]
Android 4.1.1のみ影響
ChromeはOpenSSLを使わない(NSS)のため影響外

自前で入れたり、バージョンアップがすぐにできない場合は、「-DOPENSSL_NO_HEARTBEATS」を設定し、OpenSSLをコンパイルしてもよい。

  • 影響を受けない主要ディストリ:
  • 個別のベンダー製品については、各社のURLが以下の記事に集約されているのでこちらを探してください。

その他影響を受けるソフトウェア群

ソフトウェア 対応
Cygwin [Updated: openssl-1.0.1g-1]
openssl-1.0.1g-1 で対応
TeraTerm(TTProxy) 影響無し
当初「SSH部分に影響無し、TTProxyでSSL利用時のみ影響を受ける可能性」と書いていましたが、今のところSSL通信をしないとのこと[出典]
Apache mod_spdy 独自OpenSSLを内部で持つのでv0.9.4.2に上げる(出典)
Phusion Passenger [Phusion Passenger 4.0.41 released, OpenSSL Heartbleed security update]
OpenSSLを静的リンクしており4.0.41未満で影響あり
Ruby RVM [rvm/config/db]
rvm管理下で別にopensslを入れた場合は対応が必要
Ruby rbenv/ruby-build [OpenSSL library updated to 1.0.1g #547]
ruby-buildプラグインで別にopensslを入れた場合は対応が必要
plugins/ruby-build下でgit pullしてrbenv installしなおす
OpenVPN [OpenVPN 2.3.2 Windows build I004 リリース]
[OpenSSLの脆弱性 – Heartbleed について]
Windows版バイナリにOpenSSLが含まれるため、OpenVPN側のバージョンアップも必要。
Android版クライアントもAndroid 4.1(.0)と4.1.1は影響を受けるのでAndroid対応待ち
TLS-Authを使っていなければ影響は無い。TLS-Authを使っていれば影響は無い。
修正(2014/04/10 18:24)
TLS-Authの記述が逆になっていました。TLSハンドシェークの前にHMACによるチェックを挟む機能で、有効にしていれば影響を受けません。こちらの記事に詳しく書かれています。
FFFTP [臨時版 1.98g1 - FFFTP]
FTPS(FTP over TLS/SSL)のみ影響、1.98g1 で対応
WinSCP [OpenSSL vulnerability CVE-2014-0160]
5.5.3で対応予定
通常のSCP/SFTPには無関係、FTP over TLS/SSLを使っている場合のみ影響

関係しそうなサービス

  • HTTPSサーバ (上記mod_spdyにも注意)
  • メールサーバ SMTP(STARTTLS, SMTP over SSL), POP3/IMAP (STARTSSL, POP3/IMAP over SSL)
  • そのほかのSSL/TLSを提供するサーバ
  • 外部HTTPSサイト(外部APIサーバ等)への接続するクライアント、バッチ処理等のプログラム全般
  • FTPSサーバ、クライアント
  • LDAPSで認証もらってる
  • MySQLPostgreSQLへの接続を暗号化

何が起きているの

OpenSSLに脆弱性があり、SSLで通信している相手のメモリを閲覧できます*1
具体的には、以下のようなシナリオが考えられます。

  • 攻撃者がクライアント側の場合、 HTTPSサーバのSSL証明書秘密鍵が漏洩する。
  • 攻撃者がクライアント側の場合、 HTTPSサーバのプロセス内にあるユーザー情報が漏洩する。特にApache+mod_php5のコンボでは、ウェブアプリ内の全ての情報が見られる可能性がある。
  • 攻撃者がサーバ側の場合、HTTPSで外部のAPIサーバ等に接続したアプリケーションが、メモリ内にあるユーザー情報等が漏洩する。
    • これが危険になるケース: HTTPSのCommonNameの検証をきちんと行っていない場合や、審査が緩いCAが同じ名前でSSL証明書を発行した場合、外部APIサーバのSSL証明書秘密鍵が奪取された場合など
    • 04/08 22:34追記: そもそもハンドシェークフェーズなので証明書の検証は無関係でした。DNS毒入れ等の併用で攻撃者のSSLサーバに接続させられてしまえば無条件でやられます。
  • 攻撃された記録は一切残らない。安全側に倒すならば、脆弱性のあるバージョンをインターネットに公開していたら攻略されたとみなす方が良い。

SSL証明書等の扱い

脆弱性のあるバージョンを使っていた場合、最悪でSSL証明書秘密鍵が奪取されている可能性があります。この場合、現在使っているSSL証明書を失効(revoke)させ、再発行する必要があります。

証明書の失効方法については、SSL証明書を発行したCAに問い合わせてください。CA側で管理する証明書失効リストに掲載され、漏洩した秘密鍵によるSSL証明書が使えないようになります。例えばSymantec(旧Verisign)であればストアフロントから失効申請ができるようです。

直接の関係が無いもの

  • あくまでSSL通信(TLSプロトコル)上の脆弱性のため、OpenSSLライブラリを使っていても、OpenSSHやGnuPG(PGP)などには直接は関係しません。ただし、OpenSSHがLDAP等で外部へのSSL通信を行う場合、そこから攻撃される可能性が残ってはいます。
  • 読み取られるのは、SSL通信を行っているプロセスのメモリ内容のため、ロードバランサや前段のApache等でSSL処理を行っている場合は、別プロセスのアプリケーションサーバ内のメモリ内容は漏洩しません。ただし、前述の通り外部へのSSL通信を行っている場合は別です。
    • curlコマンドを別プロセスで起動している場合*2や、OpenSSL以外のライブラリを使っている場合も無関係です。
  • そのプロセスが読んでいない無関係なファイル等は、たとえそのプロセスの実行ユーザにパーミッションが開かれていても漏洩しません。あくまでプロセスのメモリ内容のみです。

関連URL

*1:64KB単位で何度でも繰り返せる。要するにSR双葉杏が引けるまで何度でも引けるガチャ。

*2:RHEL6/CentOS6系のcurlはOpenSSLのかわりにNSSを使っているため影響を受けないようです。