OpenSSL 的 TLS Heartbeat Extension 存在嚴重安全性風險(CVE-2014-0160)

OpenSSL 在 TLS/DTLS heartbeat extension (RFC6520) 實作存在嚴重風險(傳輸層的安全性協議)。這個嚴重安全性風險的 CVE 識別號為 CVE-2014-0160

利用此弱點攻擊,可導致客戶端與伺服器之間記憶體資料洩漏。攻擊者可於遠端取得機敏資料,包含用來加密 SSL 密鑰與認證用的 Token。

關於此攻擊的更多資訊,參見 heartbleed.com

Ruby 受影響程度?

只有使用存在弱點的 OpenSSL 透過標準函式庫的 C 擴展所編譯的 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 的腳本來檢查客戶端軟體或正在執行的服務是否有存在弱點。

解決辦法

升級至 1.0.1g 或更新版的 OpenSSL,檢查您目前的作業系統的套件管理工具,是否有提供最新版的 OpenSSL。可能需要諮詢系統發佈商,來確認系統內建的 OpenSSL 版本。 若無法升級,請使用打上補丁的 OpenSSL 重新編譯,編譯時請加上 -DOPENSSL_NO_HEARTBEATS

OpenSSL 升級之後,推薦您重新編譯 Ruby,確保使用的 OpenSSL 版本是安全的。

這表示需要更新像是用 RVM 或 ruby-build 所建立的 Ruby。若您是自己建 Ruby,編譯時請使用 --with-openssl-dir 選項,來使用已升級的 OpenSSL 目錄。

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

升級 Ruby 與 OpenSSL 之後,記得重新啟動所有使用存在弱點版本的程式。

許多作業系統發行版已提供(或很快會提供)打上補丁的新版本,並重建了存在弱點的套件。 記得關注作業系統發佈商,來確保您的系統是安全的。