OpenSSL の TLS ハートビート拡張による重大な脆弱性について(CVE-2014-0160)

OpenSSL の TLS/DTLS(トランスポート層セキュアプロトコル)ハートビート拡張(RFC6520)の実装で重大な脆弱性が発見されました。 この脆弱性は CVE-2014-0160 として登録されています。

悪用されると、サーバーからクライアントへ、およびクライアントからサーバーへのメモリの内容が漏洩する可能性があります。 攻撃者は、SSL 暗号化に使用される秘密鍵や認証トークンなどを含む機密データをメモリから遠隔操作によって取得できます。

詳細は heartbleed.com を参照してください.

Ruby の影響範囲

Ruby は、標準添付ライブラリ OpenSSL の C 拡張機能を介した脆弱な OpenSSL のバージョンに対して静的コンパイルをされると影響を受けます。

バージョン 1.0.1 以上 1.0.1f 以下の OpenSSL がこの攻撃に対して脆弱です。 Ruby にリンクしている OpenSSL ライブラリのバージョンを検証するには、以下を実行してください。

ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'

Ruby を使って現在インストールされている OpenSSL のバージョンを確認するには、以下を実行してください。

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

emboss のスクリプトを使ってクライアントソフトウェア、または実行中のサービスが脆弱かどうかを確認できます。

解決策

最新版である OpenSSL バージョン 1.0.1g もしくはそれ以降にアップグレードする必要があります。そのためには最新の OpenSSL が提供されているかを現在使っている OS パッケージ管理システムで確認する必要があります。 利用可能なバージョン番号に関係なく、その OpenSSL のバージョンにパッチが適用されているかを確認するために、OS ディストリビューターに相談する必要があるかもしれません。

アップグレードがオプションではない場合、ビルド時に -DOPENSSL_NO_HEARTBEATS オプションを付け、パッチが適用されている OpenSSL を再コンパイルします。

アプグレードされている OpenSSL を使っているなら、脆弱なバージョンの OpenSSL へのリンクがないことを確認している Ruby を再コンパイルすることを推奨します。

これは、RVM や ruby-build のような Ruby をビルドするために使うツールを更新することを意味します。 Ruby を自分でビルドする場合は、コンパイル時にアップグレードされた OpenSSL をインストールしているディレクトリにリンクするよう --with-openssl-dir オプションを使用してください。。

$ ./configure --with-openssl-dir=/path/to/openssl
$ make
$ make install

OpenSSL と Ruby をアップグレードした後、脆弱なバージョンを使っている全てのプログラムを再起動することが重要です。

多くの OS ディストリビューションは、この攻撃に脆弱であるライブラリに対し、パッチを適用したバージョンと再構築されたパッケージをすでに提供しています(もしくは間もなく提供する予定です)。 安全性を確保するために、OS ディストリビューターを監視することが重要です。