CentOS7 下 修复 OpenSSH爆高危漏洞(CVE-2024-6387) 实践

careybobo 2024-07-22 09:07:03 阅读 65

检查系统、openssl和openssh的版本信息背景说明:

OpenSSH远程代码执行漏洞CVE-2024-6387允许未授权攻击者以root身份执行任意代码,建议升级至OpenSSH 9.8p1以上版本。

漏洞说明请阅读

 OpenSSH爆高危漏洞(CVE-2024-6387) (baidu.com)

要修复漏洞需要将OpenSSH 升级到9.8,

 

Ubuntu 的软件源已更新:

https://ubuntu.com/security/notices/USN-6859-1

Debian 11 12已更新:

https://security-tracker.debian.org/tracker/CVE-2024-6387

CentOS 没有相应的可直接更新的补丁,需要自己进行升级openssh到9.8(注意版本到最新)

CentOS7的修复 参考 进行升级安装Openssh9.8P,升级过程是使用源码编译,需要谨慎细心,不怕过程繁琐,参考知乎上的升级教程,并补充了telnet部分的细节内容,写一篇文章给大家一个参考和思路。

重点参考 

CentOS7升级ssh服务(三):安装openssh9.7p1 - 知乎 (zhihu.com)

知乎上这篇文章介绍的很详尽,感谢作者的辛苦付出,为我们提供了很大的帮助

下面是我实践的过程

远程升级OpenSSH的先创建新增账号和安装telnet

安装OpenSSH过程中需要删除OpenSSH和修改配置,因此如果是远程安装补丁的,切记要首选安装telnetServer ,通过telnet 方式连接到远程,升级完成后再卸载调telnet。 另外telnet默认不允许root账号进行远程连接的,需要建一个新的账号(如 sshuser)进行远程(telnet连接后,可以通过su root 方式切换成 root ,进行后续的升级操作)

步骤一、添加一个新临时账号sshuser(升级完后可以删除该账户)

#1 以root用户身份登录系统。运行以下命令创建新用户,例如用户名为sshuser

useradd -m -s /bin/bash sshuser

#2 为新用户设置密码

passwd sshuser

#3 将新用户添加到sudo组中,以便拥有超级用户权限

usermod -aG wheel  sshuser

步骤二、安装telnetServer

注意,如果没有管理员权限请切换至有管理员权限的账户执行或者命令前加上sudo

#1 安装 telnetServer

yum clean all

yum make cache

yum install -y telnet-server

#2 启动服务

systemctl start telnet.socket

#3 开机自启动

systemctl enable telnet.socket

#4 telnet 默认端口是23,如果想改成其他端口请查询资料自行尝试(我按照网上的修改两种配置文件的方式 都没有修改成功)

#5 使用客户端telnet连接centOS服务器(windows10下默认没有安装telnet客户端,可以查找windows10安装telnet客户端资料)

telnet 远程centOS服务器的ip地址,如 telnet 123.124.11.12

连接成功后,会提示您输入登录账户(root默认是不允许telnet远程登录),请使用创建的sshuser登录,然后输入密码即可完成telnet的登录

#6 如果步骤5远程连接失败,可能是防火墙阻止了23端口,请检查防火墙状态,开放防火墙后23端口后再试

#查看防火墙状态

systemctl status firewalld

#开放23端口(升级完成后可以屏蔽23端口)

firewall-cmd --zone=public --add-port=23/tcp --permanent

#重新加载防火墙配置

firewall-cmd --complete-reload

#查询防火墙23端口状态

firewall-cmd --query-port=23/tcp

返回yes表示,远程访问端口23可以访问了。

重复#5的步骤,使用telnet进行远程连接centerOS服务器,如果成功可以放心的进行远程升级OpenSSH版本了。(实践证明升级过程中SSH仍然可以使用,可能会在你端口SSH连接时或者重启服务时SSH才会失效)

当面操作CentOS或者是远程桌面进行操作CentOS进行升级的朋友可以忽略前面的步骤进行直接进行升级。

CentOS7升级ssh服务到9.8p1

准备工作:

注意,漏洞补丁要求升级到openssh9.8p1

下载并上传openssh9.8p1和openssl-1.1.1w

下载地址1:openssh-9.8p1的地址

https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

icon-default.png?t=N7T8

https://link.zhihu.com/?target=https%3A//cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

注意 下载的是openssh-9.8p1.tar.gz 源代码

https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

 

依赖升级的OpenSSL的下载地址2:

Releases · openssl/openssl (github.com)

icon-default.png?t=N7T8

https://github.com/openssl/openssl/releases?page=2

OpenSSL有多个版本,centerOS7里默认的安装的OpenSSL的版本是1.02,要安装openssh-9.8p1需要升级到OpenSSL1.1.1 以上,

安装的是 OpenSSL1.1.1W 

1、查看centos7、ssh以及openssl的版本信息

<code># 查看CentOS系统版本信息

cat /etc/redhat-release

# 查看openssl版本信息

openssl version

# 查看openssh的版本信息

ssh -V

通过 ssh -V 可以查看OpenSSH 和OpenSSL的版本

 

2、安装依赖

<code># 安装相关的依赖项,如有遗漏再次安装

yum -y install gcc pam-devel zlib-devel openssl-devel net-tools

由于centos资源和网络原因,安装依赖过程中可能会因为资源问题报not found 错误,

 

需要修改 /etc/yum.repos.d/Centos-Base.repo的Centos-Base.repo 资源地址,然后再次执行安装依赖命令yum -y install gcc pam-devel zlib-devel openssl-devel net-tools,成功安装依赖的效果如下

 

 

3、安装openssl-1.1.1w版本

由于openssh9.7p1要求openssl版本大于等于1.1.1,因此需要升级安装openssl。

3.1、解压openssl-1.1.1w压缩包

<code># 将openssl-1.1.1w解压到/usr/local目录下

Tar zxvf /home/test/openssl-1.1.12.tar.gz –C /usr/local/

# 查看解压后目标目录情况

ll /usr/local/ | grep openssl

# 进入openssl-1.1.1w目录下

cd /usr/local/openssl-1.1.1w/

3.2、安装openssl前准备

# 创建安装目录

mkdir /opt/openssl

# 安装前查看openssl详细版本信息

openssl version

3.3、编译安装openssl-1.1.1w

# 配置编译和安装过程,"--prefix=" 选项配置安装目录

./config --prefix=/opt/openssl

# 构建程序以及所需的指令和依赖关系

make

# 安装编译好的openssl-1.1.1w

make install

# 备注:以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功

 以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功;

遇到错误重新检查错误,直到没有报错再进行后续步骤。

3.4、更新lib文件

# 检查openssl-1.1.1w所需要的函数库

ldd /opt/openssl/bin/openssl

# 添加openssl-1.1.1w的库文件路径到ld.so.conf

echo "/opt/openssl/lib" >> /etc/ld.so.confcode>

# 更新系统函数库库

ldconfig –v

# 绝对路径查看openssl版本

ldd /opt/openssl/bin/openssl

3.5、更新bin文件

# 查看旧版本的openssl命令路径

which openssl

# 重命名为openssl.old

mv /bin/openssl /bin/openssl.old #重命名openssl文件

# 使用软连接的方式更新openssl命令

ln -s /opt/openssl/bin/openssl /bin/openssl

# openssl命令查看版本呢

openssl version

 

4、编译安装openssh9.8p1

4.1、解压缩包查看INSTALL文件

# 使用telnet登录centos7(执行卸载后,仍然可以通过ssh连接进行远程操作)

# 卸载openssh的rpm包

for i in $(rpm -qa | grep openssh);do rpm -e $i --nodeps;done

# 解压缩openssh9.8p1包到目标目录

tar zxvf /home/test/openssh9.8p1.tar.gz –C /usr/local

# 进入openssh9.8p1的源码目录

cd /usr/local/openssh-9.8p1/

# 安装前查看一下安装文件INSTALL(建议看一下)

more INSTALL

4.2、编译安装openssh9.7p1

编译前请先创建需要的目录

mkdir -p /usr/local/openssh

<code># 配置编译和安装过程,"--prefix=" 配置安装目录,"--sysconfdir=" 配置文件路径,"--with-ssl-dir=" openssl的安装路径

./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/opt/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening

# 构建程序以及所需的指令和依赖关系

make

# 安装编译好的openssh9.8p1

make install

# 备注:以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功

以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功 ;

如有异常错误,请认真核对步骤,重新执行,直到全部成功

4.3、复制并修改启动sshd.init脚本

参考知乎的修改sshd.init 方式修改

命令 “cat -n  文件名 |grep 查询关键字” 定位筛选配置文件中 关键字,-n返回定位的行

<code># 从源码目录下复制sshd.init到/etc/init.d/

cp /usr/local/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/

## 查看并修改SSHD的新路径,将新的openssh安装路径更新

cat /etc/init.d/sshd.init | grep SSHD

sed -i "s/SSHD=\/usr\/sbin\/sshd/SSHD=\/usr\/local\/openssh\/sbin\/sshd/g" /etc/init.d/sshd.init

cat /etc/init.d/sshd.init | grep SSHD

## 查看并修改ssh-keygen的新路径,将新的ssh-keygen安装路径更新

cat -n /etc/init.d/sshd.init | grep ssh-keygen

sed -i "s#/usr/bin/ssh-keygen -A#/usr/local/openssh/bin/ssh-keygen -A#g" /etc/init.d/sshd.init

cat -n /etc/init.d/sshd.init | grep ssh-keygen

方式二、开启两个远程窗口,一个用 cat   -n /etc/init.d/sshd.init | grep xxxx关键字 定位到行数及查询的内容,配合 vi /etc/init.d/sshd.init 直接修改需要修改的配置

4.4、修改配置文件(sshd_config)

# 开启允许X11转发

echo 'X11Forwarding yes' >> /etc/ssh/sshd_config

# 开启允许密码验证

echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

#修改允许root远程,并修改默认端口(特别重要!!!,修改xxxx为实际端口)

sudo echo "Port xxxx" >> /etc/ssh/sshd_config

sudo echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

#用cat -n检查一下配置,如果需要修改安装上面的两条修改命令修改:访问端口和是否运行root登录

4.5、启动openssh,并设置开机启动

<code># 复制ssh的相关命令

cp -arp /usr/local/openssh/bin/* /usr/bin/

# 启动sshd服务

/etc/init.d/sshd.init

# 查看版本

ssh –V

# 添加开机启动

Chmod +x /etc/rc.d/rc.local

echo “/etc/init.d/sshd.init start” >> /etc/rc.d/rc.local

4.6、测试openssh连接

使用ssh协议连接centos7,检查openssh9.7p1服务

重启系统后ssh协议登录centos7,检查openssh9.7p1自动启动,是否成功登录

5、卸载telnet服务

# 确认openssh升级成功,连接无异常后卸载telnet服务

yum -y remove telnet telnet-server

6、删除为telnet新建的账户

userdel -r sshuser 



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。