升級openssl

升級opensslphp

 

依賴openssl的軟件,若是是靜態編譯openssl,那麼須要從新編譯軟件,若是是利用openssl的so動態庫,那麼只須要替換一下so文件並重啓軟件便可html

openssh也依賴opensslpython

 

參考文章nginx

http://www.111cn.net/sys/CentOS/61326.htmweb

http://bguncle.blog.51cto.com/3184079/1392870/shell

http://www.cnblogs.com/doomsword/p/3654131.htmlapache

http://baike.baidu.com/link?url=-JPAJup4lhmkzO__PjR9IeyHzJ46WjSHYQQSxaQYOxnjc2DVrkzJHRV5M56vhFgiif7Ir_-9spu2mgj8VtMXMq安全

 

今天用rkhunter檢測了一下服務器,檢測結果報:openssl版本過低服務器

# grep  -i OpenSSL /var/log/rkhunter.log
[13:43:50]     Checking for string '/usr/include/openssl'    [ Not found ]
[13:44:11]   Checking version of OpenSSL                     [ Warning ]
[13:44:11] Warning: Application 'openssl', version '1.0.1e', is out of date, and possibly a security risk.ssh

 

ln -s /usr/local/ssl/bin/openssl  /usr/bin/openssl              靜態編譯用  靜態庫
ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so  動態編譯用   動態庫

 

strings /usr/lib64/libssl.so.10 |grep -i openssl
OpenSSLDie
OPENSSL_cleanse
OPENSSL_DIR_read
OPENSSL_DIR_end
OPENSSL_init_library
OPENSSL_1.0.1
OPENSSL_1.0.1_EC
SSLv2 part of OpenSSL 1.0.1e-fips 11 Feb 2013
SSLv3 part of OpenSSL 1.0.1e-fips 11 Feb 2013
TLSv1 part of OpenSSL 1.0.1e-fips 11 Feb 2013 DTLSv1 part of OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL 1.0.1e-fips 11 Feb 2013

 




rpm -ql openssl
/usr/bin/openssl
/usr/lib64/libcrypto.so.1.0.1e
/usr/lib64/libcrypto.so.10
/usr/lib64/libssl.so.1.0.1e
/usr/lib64/libssl.so.10
/usr/lib64/openssl

 

 

 

http://baike.baidu.com/link?url=-JPAJup4lhmkzO__PjR9IeyHzJ46WjSHYQQSxaQYOxnjc2DVrkzJHRV5M56vhFgiif7Ir_-9spu2mgj8VtMXMq
Heartbleed漏洞之因此得名,是由於用於.

安全傳輸層協議(TLS)及

數據包傳輸層安全協議(DTLS)

的 Heartbeat擴展存在漏洞。

Heartbeat擴展爲TLS/DTLS提供了一種新的簡便的鏈接保持方式,但因爲OpenSSL 1.0.2-beta與OpenSSL 1.0.1在處理TLS heartbeat擴展時的邊界錯誤,

攻擊者能夠利用漏洞披露鏈接的客戶端或服務器的存儲器內容,致使攻擊者不只能夠讀取其中機密的加密數據,還能盜走用於加密的密鑰


受影響的OpenSSL版本:
最後更新於2014年4月9日,據Heartbleed和OpenSSL網站上的信息。[8]
受影響:
OpenSSL 1.0.2-beta[8]
OpenSSL 1.0.1 - OpenSSL 1.0.1f[8]
除非針對CVE-2014-0160的操做系統補丁已經安裝,而沒有更改庫版本,如Debian、Red Hat Enterprise Linux(及其派生版,如CentOS、Amazon Linux)或Ubuntu(及其派生版,如Linux Mint)。
不受影響:
OpenSSL 1.0.2-beta2(未來版本)[8]
OpenSSL 1.0.1g[8]
OpenSSL 1.0.0(及1.0.0的分支版本)[8]
OpenSSL 0.9.8(及0.9.8的分支版本)[8]
要解決此漏洞,建議服務器管理員或使用1.0.1g版,或使用-DOPENSSL_NO_HEARTBEATS選項從新編譯OpenSSL,從而禁用易受攻擊的功能,直至能夠更新服務器軟件。[8] .
單獨應用這個補丁並不能修復漏洞。還必須從新啓動相關服務和/或重啓服務器,這樣修補過的OpenSSL才能被應用,而後從新生成全部的私鑰和密碼。[8]

 


鑑於openssl 1.0.1的安全漏洞, 如今都升級1.0.1g版本的openssl了, 這裏記錄下升級流程.

0. 先查看當前安裝的版本

   ssh -V 查看ssh版本

   openssl version -a 查看openssl版本

1. 首先到官網下載新版的源碼包

     openssh: http://www.openssh.com/portable.html 這裏, 官網上找到的下載有兩種, 一種是直接下載OpenBSD的(附帶openssh, 顯然不是我等須要的), 另一種就是這種portable版的

     openssl:  http://www.openssl.org/source/

2. 先安裝openssl, 必定記得加上--shared選項, 不然openssh編譯的時候會找不到新安裝的openssl的library, 會報錯: openssl的 header和library版本不匹配

    ./config --prefix=/usr --shared
    make
    make test
    make install

    完畢後查看openssl版本安裝是否正確

3. 安裝openssh

    ./configure --prefix=/usr --with-pam --with-zlib --with-md5-passwords
     make
     make install

     這種安裝會把sshd的配置文件放在/usr/etc/sshd_config

     須要重啓sshd服務而且從新登陸shell, 才能查看openssh是否已經安裝新版本, 建議先保留安裝openssh的這個shell, 另開一個shell測試, 防止設置錯誤致使服務器沒法鏈接

相關軟件下載地址
Apache:http://httpd.apache.org/
Nginx:http://nginx.org/en/download.html
OpenSSL:http://www.openssl.org/
openssl-poc
附件說明
PoC.py : 漏洞利用測試PoC腳本
showssl.pl:OpenSSL動態庫版本檢測腳本
安裝OpenSSL步驟

因爲運營環境不一樣,如下過程僅供參考。openssl屬於系統應用,被較多應用依賴,因爲環境不一樣等因素,請先在測試環境進行充分測試。
從官方下載最新版本的opensssl庫
wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz
解壓下載的openssl壓縮包
tar -zxvf openssl-1.0.1g.tar.gz
進入解壓後的openssl文件夾
cd openssl-1.0.1g
執行文件夾中的config文件,這裏openssl的安裝目錄默認是/usr/local/ssl(因爲系統環境差別路徑可能不一致,下同),注意添加zlib-dynamic參數,使其編譯成動態庫

 代碼以下 複製代碼
./config shared zlib-dynamic
config完成後執行 make 命令
make
make 命令執行完後再執行 make install 命令,安裝openssl
make install
重命名原來的openssl命令
mv /usr/bin/openssl  /usr/bin/openssl.old
重命名原來的openssl目錄
mv /usr/include/openssl  /usr/include/openssl.old
將安裝好的openssl 的openssl命令軟連到/usr/bin/openssl
ln -s /usr/local/ssl/bin/openssl  /usr/bin/openssl
將安裝好的openssl 的openssl目錄軟連到/usr/include/openssl
ln -s /usr/local/ssl/include/openssl  /usr/include/openssl
修改系統自帶的openssl庫文件,如/usr/local/lib64/libssl.so(根據機器環境而定) 軟鏈到升級後的libssl.so
ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so
執行命令查看openssl依賴庫版本是否爲1.0.1g:
strings /usr/local/lib64/libssl.so |grep OpenSSL
在/etc/ld.so.conf文件中寫入openssl庫文件的搜索路徑
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
使修改後的/etc/ld.so.conf生效

ldconfig -v
查看如今openssl的版本是不是升級後的版本
openssl version
更新Webserver的 OpenSSL依賴庫
若是webserver在安裝編譯時加載了openssl,還需對webserver進行重啓或者從新編譯操做。因webserver安裝時分爲動態編譯和靜態編譯openssl兩種方式,因此具體操做方式也不一樣。
判斷webserver是否爲動態編譯ssl的兩種方法


經過ldd命令查看依賴庫


ssl1

ldd查看程序依賴庫,存在libssl.so則爲動態編譯ssl(如上圖),反之爲靜態(以下圖):

ssl2

查看編譯參數
如輸入以命令/usr/sbin/nginx -V,查看nginx的編譯參數,參數中不存在--with-openssl則爲動態編譯ssl的,反之爲靜態:
ssl3

更新OpenSSL庫
a) 若是webserver是動態編譯ssl安裝的,直接重啓apache,nginx等相應webserver服務便可。
b) 若是webserver是靜態編譯ssl安裝的,可參照如下方法更新:
apache靜態編譯ssl的狀況:
源碼從新安裝apache,使用ssl靜態編譯:
執行apache的configure文件時,除了業務須要的參數外,須要指定ssl爲靜態編譯

 代碼以下 複製代碼
./configure --enable-ssl=static --with-ssl=/usr/local/ssl
(openssl的安裝路徑)

安裝apache

 代碼以下 複製代碼
make && make install

恢復原有apache配置,重啓服務便可
nginx靜態編譯ssl的狀況:
源碼從新安裝nginx,使用ssl靜態編譯:
執行nginx的configure文件時,除了業務須要的參數外,須要指定ssl爲靜態編譯,編譯參數帶上--with-openssl便代表爲靜態編譯ssl

 代碼以下 複製代碼
./configure  --with-http_ssl_module --with-openssl=/usr/local/ssl
(openssl的安裝路徑)

安裝nginx

 代碼以下 複製代碼
make && make install

恢復原有nginx配置,重啓服務便可
若有其餘使用openssl的狀況,參照apache和nginx的解決方式。
測試漏洞是否存在
使用附件PoC.py根據腳本提示檢測是否存在漏洞。
如:
測試https://192.168.0.1漏洞是否存在執行命令以下

 代碼以下 複製代碼
python PoC.py -p 443,8443 192.168.0.1

檢測動態庫libssl.so版本
檢測當前進程使用的libssl.so版本
執行附件showssl.pl檢查腳本,無信息輸出或無漏洞版本openssl輸出,表示升級成功;如輸出中有unknown,請業務自查libssl.so.1.0.0的版本是不是受影響的版本。
(詳情見附件)

 代碼以下 複製代碼
#!/usr/bin/perl -w
my @listInfo = `lsof |grep libssl|awk '{print $1" "$2" "$NF}'|sort -u`;
foreach my $info (@listInfo)
{
my ($procName, $procPid, $libPath) = split(/s/, $info);
next if (!defined($procName) || !defined($procPid)|| !defined($libPath));
my $version = `strings $libPath|grep -E "^OpenSSL [0-9]+.[0-9]+"`;
chomp $version;
if ($version =~ /s*OpenSSLs*1.0.1[a-f]{0,2}/)
{
print "$procName($procPid) : $libPath ($version).n";
}
}

檢測系統使用的libssl.so版本
執行命令:

 代碼以下 複製代碼
strings /usr/local/lib64/libssl.so |grep OpenSSL

查看openssl依賴庫版本是否爲1.0.1g注:/usr/local/lib64/libssl.so 路徑僅供參考,由具體機器環境決定,參考升級步驟

相關文章
相關標籤/搜索