【轉】linux /centos 中OpenSSL升級方法詳解


相關軟件下載地址
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 路徑僅供參考,由具體機器環境決定,參考升級步驟


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM