> 技术文档 > 已修复openssh 安全漏洞(cve-2023-38408)

已修复openssh 安全漏洞(cve-2023-38408)


前言:

在出现openssh 安全漏洞(cve-2023-38408) 漏洞的时候最简单就是升级openSSH服务到9.+。 

本文将会详细介绍如何升级到openSSH9.+,以及升级前,升级过程中,升级后要注意的事项。

本实验的操作系统为: OpenEuler22.04. 

升级前准备工作

通过命令查看目前系统的ssh和sshd版本:

[root@localhost ~]# ssh -VOpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Nov 2023

注意:由于ssh是远程连接服务器的功能,在j进行下面操作升级openssh前,请打开多个连接会话使用 top 保持链接,如升级失败,可通过已连接的会话进行回滚操作。

开始升级

1. 安装操作系统依赖包:

yum install -y telnet gcc zlib-devel

2. 下载软件包

openssl下载地址:/source/old/index.html

openssh下载地址:Index of /pub/OpenBSD/OpenSSH/portable/

3. 编译升级

3.1 编译升级openssl-3.5.0-beta1

进入到openssl-3.5.0-beta1tar.gz文件所在的目录,执行编译安装命令:

tar -xzvf openssl-3.5.0-beta1.tar.gzcd openssl-3.5.0-beta1mkdir -p /usr/openssh/openssl-3.5.0-beta1./config --prefix=/usr/openssh/openssl-3.5.0-beta1makemake installll /usr/openssh/openssl-3.5.0-beta1cd ..rm -rf openssl-3.5.0-beta1

编辑/etc/profile配置文件(vi /etc/profile),设置环境变量,在profile文件最后添加如下两行:

export LD_LIBRARY_PATH=/usr/openssh/openssl-3.5.0-beta1/lib:$LD_LIBRARY_PATHexport PATH=/usr/openssh/openssh-9.9p2/bin:/usr/openssh/openssh-9.9p2/sbin:/usr/openssh/openssl-3.5.0-beta1/bin:$PATH

保存配置退出后,然后执行如下命令,确认openssl版本为openssl-3.5.0-beta1:

source /etc/profileopenssl version
3.2 编译升级openssh-9.9p2

进入到openssh-9.9p2.tar.gz文件所在的目录,执行编译安装命令:

tar -xzvf openssh-9.9p2.tar.gzcd openssh-9.9p2mkdir -p /usr/openssh/openssh-9.9p2./configure --prefix=/usr/openssh/openssh-9.9p2 --with-ssl-dir=/usr/openssh/openssl-3.5.0-beta1makemake install

修改配置文件:

vi /usr/openssh/openssh-9.9p2/etc/sshd_config

允许root登录,默认值prohibit-password表示root用户只能通过公私钥的方式登录,不能以密码的方式登录

PermitRootLogin yes

创建sshd服务自启动文件:

vi /usr/lib/systemd/system/sshd9.service

文件内容添加如下内容:

[Unit]Description=OpenSSH server daemonAfter=network.target[Service]Type=simpleEnvironment=LD_LIBRARY_PATH=/usr/openssh/openssl-3.5.0-beta1/libExecStart=/usr/openssh/openssh-9.9p2/sbin/sshd -D -f /usr/openssh/openssh-9.9p2/etc/sshd_configExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=on-failureRestartSec=42s[Install]WantedBy=multi-user.target

停用原sshd服务,并备份相关文件

systemctl stop sshd.servicesystemctl disable sshd.service

备份文件:

mkdir /home/ssh-old-bakmv /etc/ssh /home/ssh-old-bak/mv /usr/sbin/sshd /home/ssh-old-bak/mv /usr/lib/systemd/system/sshd-keygen.service /home/ssh-old-bak/mv /usr/lib/systemd/system/sshd.service /home/ssh-old-bak/mv /usr/lib/systemd/system/sshd@.service /home/ssh-old-bak/mv /usr/lib/systemd/system/sshd.socket /home/ssh-old-bak/

启动新的sshd服务

systemctl daemon-reloadsystemctl start sshd9.servicesystemctl status sshd9.servicesystemctl enable sshd9.service

测试验证

重新连接一个新的窗口来测试新sshd是否可以正常连接,并测试版本号,最后重启服务器测试是否可以重启成功。

[root@10 ~]# ssh -VOpenSSH_9.9p2, OpenSSL 3.5.0 8 Apr 2025

到此你就升级完成了。

如果您之前做过ssh免密钥,那升级完成之后您可能会报如下错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:9mtnXA20j09FBL5aPvCwXSPY09a/SeQkMoxU9dNIuAE. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /root/.ssh/known_hosts:9 Host key for 10.8.2.113 has changed and you have requested strict checking. Host key verification failed.

这个问题是主机密钥变化 更新了 OpenSSH 到 9. + 版本后,新的 OpenSSH 可能重新生成了主机密钥,旧的就过期了,我们只需要清理一下旧的密钥,更新一份即可;执行如下命令:

ssh-keygen -R [your_ip]

跳过已有密钥检查:如果你确定需要重新复制公钥,可以使用 -f 选项强制复制,覆盖远程主机上已存在的密钥

ssh-copy-id -f [your_ip]

确认远程授权密钥: 登录到远程主机并检查 ~/.ssh/authorized_keys 文件,以确认你的公钥是否已经存在。如果有误可以手动编辑或删除不正确的条目即可解决。