OpenSSL TLS 心跳扩展中的严重漏洞 (CVE-2014-0160)

OpenSSL 在 TLS/DTLS(传输层安全协议)心跳扩展(RFC6520)的实现中存在严重漏洞。这是一个严重的漏洞,已被分配 CVE 标识符 CVE-2014-0160

利用此漏洞可能导致服务器向客户端以及客户端向服务器泄露内存内容。攻击者可以远程从内存中检索敏感数据,包括但不限于用于 SSL 加密的密钥和身份验证令牌。

有关攻击的更多信息,请参阅 heartbleed.com

Ruby 如何受到影响?

当 Ruby 通过标准库 OpenSSL C 扩展静态编译链接到易受攻击的 OpenSSL 版本时,Ruby 会受到影响。

OpenSSL 版本 1.0.1 到 1.0.1f(包括)都容易受到此攻击的影响。要验证您链接到 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。您可能需要咨询您的操作系统发行商,以验证他们的 OpenSSL 版本是否已打补丁,无论可用的版本号是多少。

如果升级不是一个选项,请使用选项 -DOPENSSL_NO_HEARTBEATS 在构建时重新编译已打补丁的 OpenSSL。

在升级 OpenSSL 后,建议重新编译 Ruby,以确保没有链接到易受攻击的 OpenSSL 版本。

这意味着更新用于构建 Ruby 的任何工具,例如 RVM 或 ruby-build。如果您自己构建 Ruby,请在编译时使用 --with-openssl-dir 选项来链接到升级后的 OpenSSL 安装目录。

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

升级 OpenSSL 和 Ruby 后,重要的是重新启动所有使用易受攻击版本的程序。

许多操作系统发行版已经提供(或即将提供)针对此攻击的已打补丁的版本和重建的库包。务必监控您的操作系统发行商,以确保您保持安全。