首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenSSH (CVE-2024-6387) 修复了!!!

OpenSSH (CVE-2024-6387) 修复了!!!

作者头像
运维小路
发布2024-11-01 18:56:39
发布2024-11-01 18:56:39
46100
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

OpenSSH严重的CVE-2024-6387漏洞,并没有影响到CentOS7。本文档只是基于CentOS7升级OpenSSH及OpenSSL,可作为修复其他漏洞OpenSSH漏洞使用以及作为其他系统的参考。

OpenSSH的漏洞挺多的,更新的版本也挺多的,我记得我都修过好几次,但是并不是每个漏洞都需要升级,这个具体可以根据自己的实际情况来判断。本次的重大漏洞介绍可参考https://nvd.nist.gov/vuln/detail/CVE-2024-6387。

临时方案:可以在配置文件 /etc/ssh/sshd_config 中将 LoginGraceTime 设置为 0(永不超时)。这样虽然会使 sshd 暴露于拒绝服务攻击(占满所有 Startups 连接),但可以避免远程代码执行风险。配置完成需要重启sshd服务:systemctl restart sshd.service

虽然CentOS7已经从2024年6月30日开始没有任何官方支持,但是毕竟作为中国市面上使用最广泛的的Linux服务器,所以他将在未来一定时间范围内存在,所以借助于这次的OpenSSH的漏洞出一版修复OpenSSH及OpenSSL的文档。

由于OpenSSH依赖OpenSSL,所以在比较大的版本升级情况下,升级OpenSSH就必须升级OpenSSL。

本文就是先升级OpenSSL,再升级OpenSSH,本文以最小化安装CentOS7.9系统为测试环境。

OpenSSL版本是1.1.1w

OpenSSH版本是9.8p1

1.先检查当前版本

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

2.检查OpenSSL的依赖

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# rpm  -ql openssl
/etc/pki/CA
/etc/pki/CA/certs
/etc/pki/CA/private
/etc/pki/tls/certs/Makefile
/etc/pki/tls/misc/c_name
/usr/bin/openssl
/usr/share/doc/openssl-1.0.2k
/usr/share/licenses/openssl-1.0.2k
/usr/share/licenses/openssl-1.0.2k/LICENSE
/usr/share/man/man1/asn1parse.1ssl.gz

#实际只有一个二进制包需要备份,中途显示省略部分
mv /usr/bin/openssl /usr/bin/openssl-bak

3.下载符合要求的OpenSSL

代码语言:javascript
代码运行次数:0
运行
复制
https://www.openssl.org/source/old/1.1.1/index.html

4.安装基础包

代码语言:javascript
代码运行次数:0
运行
复制
yum -y install gcc zlib-devel pam-devel

5.编译安装OpenSSL

代码语言:javascript
代码运行次数:0
运行
复制
tar xvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl
make
make install
#阿里云的centos7.9不连接库文件也可以读取到旧版本
echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf 
ldconfig

6.检查OpenSSL版本

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost]# /usr/local/openssl/bin/openssl version
OpenSSL 1.1.1w  11 Sep 2023


#阿里云不需要使用新的库文件,系统会自带库文件,会出现下面的提示。
[root@localhost]# /usr/local/openssl/bin/openssl version
OpenSSL 1.1.1w  11 Sep 2023 (Library: OpenSSL 1.1.1k  FIPS 25 Mar 2021)

7.让系统识别到新的OpenSSL

代码语言:javascript
代码运行次数:0
运行
复制
#如果要降低影响,openssl只给openssh使用,则下面这个步骤不用操作。
mv /usr/bin/openssl-bak /usr/bin/openssl
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

到这里OpenSSL已经更新完成,但是OpenSSH对应的包是编译好的二进制文件,所以这个时候查询OpenSSH对应的包还是旧版本的OpenSSL。

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

8.下载OpenSSH

代码语言:javascript
代码运行次数:0
运行
复制
#从这个页面进入任意一个地址下载即可。
https://www.openssh.com/portable.html

9.检查依赖

代码语言:javascript
代码运行次数:0
运行
复制
#openssh在服务器里面一共是3个包,可以参考刚才的openssl检查依赖的方式
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64

10.备份配置

代码语言:javascript
代码运行次数:0
运行
复制
mv /usr/sbin/sshd /usr/sbin/sshd-bak
mv /usr/bin/scp /usr/bin/scp-bak
mv /usr/bin/sftp /usr/bin/sftp-bak
mv /usr/bin/ssh /usr/bin/ssh-bak
mv /usr/bin/ssh-add /usr/bin/ssh-add-bak
mv /usr/bin/ssh-agent /usr/bin/ssh-agent-bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen-bak
mv /usr/bin/ssh-keyscan /usr/bin/ssh-keyscan-bak
cp -rf /etc/ssh /etc/ssh-bak

11.编译安装OpenSSH

代码语言:javascript
代码运行次数:0
运行
复制
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl
make
make install

12.编译完成

需要根据提示修复里面存在的问题

代码语言:javascript
代码运行次数:0
运行
复制
1.注释/etc/ssh/sshd_config文件  79、80、96行
2.取消/etc/ssh/sshd_config文件  取消注释 PermitRootLogin yes  //如果不取消注释,则不能ssh连接
3.修改/etc/ssh/ssh_host*权限为600
4.配置二进制文件
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln -s /usr/local/openssh/bin/scp /usr/bin/scp
ln -s /usr/local/openssh/bin/sftp /usr/bin/sftp
ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh
ln -s /usr/local/openssh/bin/ssh-add /usr/bin/ssh-add
ln -s /usr/local/openssh/bin/ssh-agent /usr/bin/ssh-agent
ln -s /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
ln -s /usr/local/openssh/bin/ssh-keyscan /usr/bin/ssh-keyscan

5.注释/etc/ssh/ssh_config文件 GSSAPIAuthentication yes   //不注释也可以连接,有提示

12.重启sshd服务

代码语言:javascript
代码运行次数:0
运行
复制
systemctl restart sshd

13.验证ssh服务端及客户端

14.检查软件版本

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# ssh -V
OpenSSH_9.8p1, OpenSSL 1.1.1w  11 Sep 2023

总结

1.PermitRootLogin yes 的注释,这个如果不修改则无法SSH连,这个是最容易出问题的地方,因为新的版本必须取消注释。

2.生产环境需要慎重,如果担心引发SSH连接丢失可以启用Xinetd,留下一个后门可通过telnet到服务器里面(可自己研究下什么Xinetd)。

3.可以先在测试环境验证,再到生产环境修改。

4.做重大操作备份是要好习惯。

5.在编译安装的时候,最好通过命令:echo $? 确认上一条命令是执行成功的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档