最近專案上有服務器漏洞被掃描出來,是關于openssl的
之前沒怎么關注過這個問題,于是著手去了解了以下
發現有些坑,分享下自己的經驗,
中間程序比較長,想省事的直接跳到第四節,解決漏洞觀看
一、 事情起因,漏洞報告ssl漏洞
1、 服務器的情況:
3臺服務器,服務器是Centos7.6,上面部署的kubernetes集群,openssl和openssh自帶版本
2、 漏洞報告的起因:
根據報告的描述,說服務器有[CVE-2016-2183]相關漏洞

3、 CVE查詢漏洞結果:
于是去CVE網站去查查這個到底是個什么東西
(https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2183)
在這個網站可以看到這個漏洞意思是 :
l The DES and Triple DES ciphers, as used in the TLS, SSH, and IPSec protocols and other protocols and products, have a birthday bound of approximately four billion blocks, which makes it easier for remote attackers to obtain cleartext data via a birthday attack against a long-duration encrypted session, as demonstrated by an HTTPS session using Triple DES in CBC mode, aka a "Sweet32" attack.
翻譯翻譯:
l 在 TLS、SSH 和 IPSec 協議以及其他協議和產品中使用的 DES 和三重 DES 密碼具有大約 40 億塊的生日界限,這使得遠程攻擊者更容易通過生日攻擊獲取明文資料一個長時間的加密會話,正如在 CBC 模式下使用 Triple DES 的 HTTPS 會話所證明的那樣,也就是“Sweet32”攻擊
沒怎么看懂,大概意思是使用相關ssl協議的存在sweet32容易被攻擊什么的,繼續去百度解決方法,
二、 排查漏洞
去百度查一查,這不查不要緊,一查
1、 百度發現方法眾多,且跟環境不一致
l 百度結果有讓更新openssl,有發布windows的解決方案,有讓修改nginx配置的

l 百度的解決方法這完全跟我環境情況不一致
這里說明下環境,有3臺服務器,服務器是Centos7.6,上面部署的kubernetes集群
反復確認,我考慮先去查看ssl版本;發現版本是1.0.2K,openssl-1.0.2k-16.el7.x84_64

2、 考慮是否采用升級方案
l 粗略一看是服務器版本比較低,都2017的版本了,是該升級一下,去看看網上大家的升級方法:
發現大部分都是升級到最新版,而且使用的是編譯安裝,不是紅帽發布的rpm或者yum的版本

3、 跟同事溝通
抱著試試的態度,當我準備試試升級openssl的時候發現,同事跟我說openssl關聯著openssh,也就是說如果升級openssl也要把openssh給升級了


這下就要慎重考慮了,這個環境是個政府云的服務器,服務器的sshd_config被修改過,里面的埠和配置被修改了,而且映射到堡壘機上,這要是升級出錯了,估計不好修復,風險太大了,
3、 至此,博主陷入了瘋狂的百度尋找解決辦法,,,,
三、 發現轉機
博主在查詢openssh升級的程序中,發現這樣一段評論,突然豁然開朗

可能看到這里的同學不理解,那我把思路理一理
1、 漏洞的流程:
廠家/團隊發現漏洞---驗證漏洞--提交漏洞-廠家修復漏洞---CVE發布漏洞---各相關的系統、軟體、硬體適配更新漏洞
由于博主用的機器是Centos即紅帽的體系結構,理論上來說發現這個漏洞后
2、 正確流程
openssl廠家發布解決方案---紅帽/Centos打包發布補丁---推送更新
那理論上說,紅帽或者Centos的發布包或者更新里面會涉及到這個漏洞的更新,而不是用二進制來編譯安裝搞到一個最新版作業系統都沒適配的版本
3、 查找openssl和openssh的rpm包更新內容是否包含安全補丁
這里推薦兩個網站,可以之家查看和下載對應rpm包
http://www.rpmfind.net/linux/RPM/
https://pkgs.org/


可以看到最新版Centos-X86的openssl是openssl-1.0.2k-25.el7_9 RPM for x86_64
最新版也是1.0.2k,繼續看里面的更新內容
可以看到最近更新時間是2022年3月,并且在不斷的更新CVE漏洞,連新的CVE-2022-2078都更新了,

4、 確認rpm包包含漏洞修復
這說明人家官方的rpm包包含了漏洞修復的,只不過大版本沒變,全是做的補丁修復
人家紅帽rpm包在2016年9月22日都修復了2183這個漏洞
那就跟升級就沒關,就不用升級
網上的檔案根本就沒分析,廠家漏洞掃描的設備就那個漏洞庫來混漏洞

四、 解決漏洞
通過上面的一遍梳理,大概已經摸清方向了,但是漏洞不能置之不理,還是得想辦法處理
1、 漏洞修復常見方法
l 升級軟體、更新補丁
l 修改組態檔
l 網路隔離,關閉埠
因為此次根本不是版本的問題了,漏掃報給的升級和修改windows方法就不適用了,于是重新查看漏洞,看具體作用于那個埠

2、 再次分析漏洞報告,查找對應的埠
通過報告,里面使用了原理掃描,分別發現etcd和kubernetes的通信埠有配置漏洞相關
這也搞不了了,還要花時間去研究人家的頁面配置于是打算使用網路隔離,關閉埠的方法進行屏蔽,禁止所有通信,僅允許我集群的ip訪問
不讓漏洞的設備訪問我的ip網址,看你怎么掃描漏洞

3、 使用iptables進行修復
規則說明:
允許192.168.1.100訪問2379,2380,6443,8443,10250埠;拒絕所有
#查看iptables現有規則 iptables -nL --line-numbers | more #添加允許規則,允許指定ip iptables -I INPUT -s 192.168.1.100 -p tcp -m multiport --dports 2379,2380,6443,8443,10250 -j ACCEPT #允許本機環回地址 iptables -I INPUT -s 127.0.0.1 -p tcp -m multiport --dports 2379,2380,6443,8443,10250 -j ACCEPT #拒絕所有 iptables -A INPUT -p tcp -m multiport --dports 2379,2380,6443,8443,10250 -j DROP #洗掉規則 iptables -D INPUT -s 192.168.1.100 xxxx
五、 正確rpm升級更新openssl和openssh
1、 有外網和阿里源:Centos7
yum update openssl
yum update openssh
2、 離線更新:Centos7
下載openssl和openssh最新版,缺少依賴慢慢百度安裝
http://mirror.centos.org/centos/7/updates/x86_64/Packages/openssl-1.0.2k-25.el7_9.x86_64.rpm
http://mirror.centos.org/centos/7/updates/x86_64/Packages/openssh-7.4p1-22.el7_9.x86_64.rpm
http://mirror.centos.org/centos/7/updates/x86_64/Packages/openssh-server-7.4p1-22.el7_9.x86_64.rpm
http://mirror.centos.org/centos/7/updates/x86_64/Packages/openssh-clients-7.4p1-22.el7_9.x86_64.rpm
rpm -Uvh *.rpm
六、 補充:編譯安裝更新最新版openssl和openssh
不建議用這個編譯安裝去故意升級到最新版
1、 升級openssl最新版
操作前需要外網源,關閉防火墻和selinux,離線環境需要自行百度下載依賴
#查看當前版本
openssl version
#在/home下創建opensslbak作為備份檔案夾
mkdir -p /home/opensslbak
cd /home
#安裝依賴
yum -y install gcc zlib zlib-devel gcc perl
#下載官網安裝包
wget -P /home/ https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate
#解壓并編譯安裝
tar -xzvf openssl-1.1.1n.tar.gz && cd openssl-1.1.1n/ && ./config --shared zlib
make && make install
#備份以前的檔案
mv /usr/bin/openssl /home/opensslbak/
mv /usr/include/openssl /home/opensslbak/
#掛載新的檔案
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl/ /usr/include/openssl
echo "/usr/local/lib/" >> /etc/ld.so.conf
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ldconfig -v
#測驗是否正常更新
bash
openssl version

2、 安裝telnet,防止ssh升級錯誤無法連接遠程
操作前需要外網源,關閉防火墻和selinux,離線環境需要自行百度下載依賴
#安裝telnet-server
yum -y install telnet telnet-server xinetd
#啟動服務
systemctl start telnet.socket
systemctl start xinetd
systemctl status telnet.socket
systemctl status xinetd
systemctl enable telnet.socket
systemctl enable xinetd
#重啟服務
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
systemctl restart telnet.socket
systemctl restart xinetd
systemctl status telnet.socket
systemctl status xinetd
3、 升級openssh
操作前需要外網源,關閉防火墻和selinux,離線環境需要自行百度下載依賴
命令比較多,可以參考百度其他博主的檔案,這里就不多寫了,需要根據自己環境去調整
1-下載新版和備份老的ssh檔案
https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz
ssh -V
yum install zlib-devel pam-devel -y

cd /home/ && wget -P /home/ https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz --no-check-certificate
tar xfz openssh-9.0p1.tar.gz
chown -R root:root openssh-9.0p1 && cd ./openssh-9.0p1
mkdir -p /home/sshbak
cp -arp /etc/ssh /home/sshbak/
mv /etc/ssh /etc/ssholdbak

2-設定編譯引數和編譯安裝,注意要更新openssl后才能生效
./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl/lib/ --with-zlib --with-md5-passwords --with-pam
make && make install
3-修改組態檔/etc/ssh/sshd_config,取消注釋以下檔案
vim /etc/ssh/sshd_config
PermitRootLogin yes #允許root登錄,root用戶必須添加
AuthorizedKeysFile .ssh/authorized_keys #指定公鑰檔案的保存位置以及名稱
PasswordAuthentication yes #允許密碼驗證
UsePAM yes #PAM模塊
UseDNS no #關閉dns檢測
Subsystem sftp /usr/libexec/sftp-server #開啟SFTP并指定路徑
#也可以拷貝之前的
注意修改這兩段
cd /etc/ssh
mv sshd_config sshd_config.bak
cp /home/sshbak/ssh/sshd_config /etc/ssh/
/etc/ssh/sshd_config line 80: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 81: Unsupported option GSSAPICleanupCredentials
4-檢測檔案配置測驗
sshd -t
5-修改pam認證檔案
echo "修改/etc/pam.d/sshd"
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
cat > /etc/pam.d/sshd << 'EOF'
#%PAM-1.0
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session include password-auth
EOF
6-添加互信命令檔案ssh-copy-id
mv /usr/bin/ssh-copy-id /home/sshbak/
cd /home/openssh-9.0p1
install -v -m755 contrib/ssh-copy-id /usr/bin
7-開機啟動,由于升級到非紅帽體系最新版,故開機自啟使用SysV托管,
使用systemd托管會有問題
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
cd /etc/init.d/
/sbin/chkconfig --add sshd
systemctl enable sshd
mv /usr/lib/systemd/system/sshd.service /home/sshbak/
mv /usr/lib/systemd/system/sshd.socket /home/sshbak/
/sbin/chkconfig sshd on
systemctl daemon-reload
systemctl restart sshd
systemctl status sshd
/sbin/chkconfig --list
8-檢查版本
ssh -V
OpenSSH_9.0p1, OpenSSL 1.1.1n 15 Mar 2022

作者: 博客園-李宗盛 出處: https://home.cnblogs.com/u/subsea/ 博客園主頁:https://www.cnblogs.com/subsea/ CSDN主頁:https://blog.csdn.net/SUBSEA123/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502234.html
標籤:其他
上一篇:ACM模式細節
