
我一直在尋找一種可靠且可移植的方法來檢查 GNU/Linux 和其他系統上的 OpenSSL 版本,以便用戶可以輕鬆發現是否應該因 Heartbleed 錯誤而升級 SSL。
我以為這很容易,但我很快就在最新 OpenSSL 1.0.1g 的 Ubuntu 12.04 LTS 上遇到了問題:
openssl版本-a
我本來期待看到完整版,但我得到的是:
OpenSSL 1.0.1 2012 年 3 月 14 日 建立於: UTC 2013 年 6 月 4 日星期二 07:26:06 平台: [...]
令我不愉快的是,版本號碼沒有顯示。沒有 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
感謝 Twitter 上的 @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
。
答案1
根據您的 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 附帶了普通的 OpenSSL v1.0.1,這個版本看起來像是縮寫版本,因為後面沒有字母。
話雖如此,似乎有一個主要的Ubuntu 中的錯誤(或他們如何打包 OpenSSL),因為openssl version -a
無論 OpenSSL 是否已升級到任何較新的版本,它都會從 2012 年 3 月 14 日起繼續返回原始 1.0.1 版本。而且,就像大多數事情一樣,下雨時,傾盆大雨。
Ubuntu 並不是唯一一個習慣將更新向後移植到 OpenSSL(或其他軟體包)中的主要發行版,而不是依賴每個人都認可的上游更新和版本編號。對於 OpenSSL,字母版本號僅代表錯誤修復和安全性更新,這似乎幾乎難以理解,但我被告知這可能是因為經過 FIPS 驗證主要 Linux 發行版的插件都與 OpenSSL 一起打包。由於任何更改都會觸發重新驗證的要求,甚至是堵塞安全漏洞的更改,因此它是版本鎖定的。
例如,在 Debian 上,固定版本顯示版本號 ,1.0.1e-2+deb7u5
而不是上游版本1.0.1g
。
結果,這個時候,沒有可靠、可移植的方法來檢查 Linux 發行版上的 SSL 版本,因為它們都使用自己的反向移植修補程式和具有不同版本編號方案的更新。您必須尋找您執行的每個不同 Linux 發行版的固定版本號,並根據該發行版的特定版本編號檢查已安裝的 OpenSSL 版本,以確定您的伺服器是否正在執行易受攻擊的版本。
答案2
如果你想要真正跨平台的東西,檢查漏洞本身,而不是依賴版本號。
您可能有報告已知易受攻擊的版本號的程式碼,但實際程式碼並不容易受到攻擊。而相反的情況——默默地存在漏洞的程式碼——可能會更糟!
許多捆綁 OpenSSL 和 OpenSSH 等開源產品的供應商將選擇性地對舊版本程式碼進行緊急修復,以保持 API 的穩定性和可預測性。對於「長期發布」和應用平台尤其如此。
但默默地執行此操作(不添加自己的版本字串後綴)的供應商面臨著在漏洞掃描程式中觸發誤報(並使用戶感到困惑)的風險。因此,為了使這一過程透明且可驗證,一些供應商將自己的字串附加到主要軟體包版本中。 Debian (OpenSSL) 和 FreeBSD(在 OpenSSH 中,透過VersionAddendum
sshd_config 指令)有時都會這樣做。
不這樣做的供應商可能這樣做是為了最大限度地減少由於其他程式檢查版本號的許多直接和間接方式而導致損壞的可能性。
所以它可以看起來像這樣:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"
$ openssl version
OpenSSL 1.0.1 14 Mar 2012
.... 雖然它已被修補:
$ dpkg -l openssl | grep openssl
ii openssl 1.0.1-4ubuntu5.12 [truncated]
$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr 7 12:37 /usr/bin/openssl
$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748 /usr/bin/openssl
遇到這樣的事情,如果你不要相信版本號。
答案3
不幸的是,我不確定那裡是一種跨平台的方式來做到這一點。正如我在部落格文章中討論的那樣,升級到固定版本後,Ubuntu 12.04上顯示的OpenSSL版本仍然是1.0.1。
僅適用於 Ubuntu 12.04,如果滿足以下所有條件,您可以判斷您是否已更新:
dpkg -s openssl | grep Version
顯示版本 1.0.1-4ubuntu5.12 或更高版本。dpkg -s libssl1.0.0 | grep Version
顯示版本 1.0.1-4ubuntu5.12 或更高版本。openssl version -a
顯示「建置」日期為 2014 年 4 月 7 日或之後。
感謝@danny 提供的附加資訊。
答案4
這些腳本是否測試所有服務,或僅測試HTTPS?AFAIK,PostgreSQL很容易受到攻擊,但這只是謠言,直到野外攻擊出現為止。
有一個元漏洞腳本可供使用。
https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a
你可以輸入這個(測試過GnuWin32OpenSSL 二進位版本 1.0.1.6,日期為 2014-01-14),或僅使用該腳本下方註解中的腳本。更準確、更簡單!
s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state
連接類型 B 後,您將在易受攻擊的主機上看到並且不會斷開連接:
B
HEARTBEATING
write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49 ....=.o 5 (0x5))
0000 - 18 03 03 00 3d ....=
read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34 .M...........;H4
0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0 n.....:4.{.|....
0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f .u.......NJ}Q...
0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f .#.w....w.+..
read R BLOCK
您將得到與此類似的心跳響應。
在已修補的主機上,您將看到類似於以下內容的回應,並且您將斷開連接:
輸入B
HEARTBEATING
write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c ....`....;?..:.L
0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56 .3..=CTuD},{.G.V
0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95 .7.C..{.f..U_...
0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51 .Le.!...zpy....Q
0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6 [email protected]...
0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87 !BdXb..Q....!.o.
0060 - b9 c2 04 c8 47 ....G
來源:
還有這些工具: