Heartbleed:如何可靠且可移植地檢查 OpenSSL 版本?
我正在尋找一種可靠且可移植的方法來檢查 GNU/Linux 和其他系統上的 OpenSSL 版本,這樣使用者可以很容易地發現他們是否應該因為 Heartbleed 錯誤而升級他們的 SSL。
我認為這很容易,但我很快在 Ubuntu 12.04 LTS 上遇到了最新的 OpenSSL 1.0.1g 問題:
openssl 版本 -a
我期待看到一個完整的版本,但我得到了這個:
OpenSSL 1.0.1 2012 年 3 月 14 日 建立在:2013 年 6 月 4 日星期二 07:26:06 UTC 平台: [...]
令我不快的是,版本字母沒有顯示。沒有 f,沒有 g,只有“1.0.1”,就是這樣。列出的日期也無助於發現(非)易受攻擊的版本。
1.0.1 (af) 和 1.0.1g 之間的區別至關重要。
問題:
- 檢查版本的可靠方法是什麼,最好是跨發行版?
- 為什麼版本字母沒有首先顯示?除了 Ubuntu 12.04 LTS,我無法在其他任何東西上測試它。
其他人也在報告這種行為。幾個例子:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
一些(特定於發行版的)建議滾滾而來:
- Ubuntu 和 Debian:
apt-cache policy openssl
和apt-cache policy libssl1.0.0
. 將版本號與此處的軟體包進行比較:http ://www.ubuntu.com/usn/usn-2165-1/- Fedora 20:(
yum info openssl
感謝推特上的@znmeb)和yum info openssl-libs
檢查舊版本的 OpenSSL 是否仍然存在:
- 它並不完全可靠,但您可以嘗試
lsof -n | grep ssl | grep DEL
. 請參閱Heartbleed:如何可靠且可移植地檢查 OpenSSL 版本?為什麼這可能不適合你。事實證明,在 Ubuntu 和 Debian 上更新 OpenSSL 包並不總是足夠的。您還應該更新 libssl1.0.0 包,然後檢查是否
openssl version -a
指示built on: Mon Apr 7 20:33:29 UTC 2014
。
根據您的 OpenSSL 版本顯示的日期,您似乎看到了那裡顯示的完整版本。
Open SSL 1.0.1 於 2012 年 3 月 14 日發布。1.0.1a 於 2012 年 4 月 19 日發布。
因此,我將繼續斷言這
openssl version -a
是顯示系統上安裝的完整版 OpenSSL 的正確跨發行版方式。它似乎適用於我可以訪問的所有 Linux 發行版,也是 help.ubuntu.com OpenSSL 文件中建議的方法。Ubuntu LTS 12.04 附帶 vanilla OpenSSL v1.0.1,該版本看起來像一個縮寫版本,因為它後面沒有字母。話雖如此,Ubuntu 中似乎存在一個重大錯誤(或他們如何打包 OpenSSL),即
openssl version -a
從 2012 年 3 月 14 日起繼續返回原始 1.0.1 版本,無論 OpenSSL 是否已升級到任何的較新版本。而且,就像下雨時的大多數事情一樣,它會傾盆大雨。Ubuntu 並不是唯一一個習慣將更新反向移植到 OpenSSL(或其他軟體包)的主要發行版,而不是依賴於每個人都認可的上游更新和版本編號。對於 OpenSSL,字母版本號僅代表錯誤修復和安全更新,這似乎幾乎無法理解,但我被告知這可能是因為FIPS 驗證的外掛主要 Linux 發行版與 OpenSSL 打包在一起。由於任何更改(甚至是堵塞安全漏洞的更改)都會觸發重新驗證的要求,因此它是版本鎖定的。
例如,在 Debian 上,固定版本顯示的是版本號,
1.0.1e-2+deb7u5
而不是1.0.1g
.因此,目前還沒有可靠、可移植的方式來檢查 Linux 發行版的 SSL 版本,因為它們都使用自己的反向移植更新檔和具有不同版本編號方案的更新。您必須查找您執行的每個不同 Linux 發行版的固定版本號,並根據該發行版的特定版本號檢查已安裝的 OpenSSL 版本,以確定您的伺服器是否執行易受攻擊的版本。