最近项目上有服务器漏洞被扫描出来,是关于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/
可以看到最新版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
标签:sshd,浅谈,漏洞,openssh,openssl,etc,usr From: https://www.cnblogs.com/subsea/p/16598499.html