一、漏洞概述
漏洞名称 | OpenSSH Server远程代码执行漏洞 | ||
CVE ID | CVE-2024-6387 | ||
漏洞类型 | 竞争条件 | 发现时间 | 2024-07-01 |
漏洞评分 | 暂无 | 漏洞等级 | 高危 |
攻击向量 | 网络 | 所需权限 | 无 |
利用难度 | 高 | 用户交互 | 无 |
PoC/EXP | 未公开 | 在野利用 | 未发现 |
OpenSSH是SSH(Secure SHell)协议的开源实现,它通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。OpenSSH 广泛用于基于Unix 的系统,通常用于安全远程登录和远程文件传输,以及其它网络服务。
2024年7月1日,启明星辰集团VSRC监测到OpenSSH Server中存在一个远程代码执行漏洞(CVE-2024-6387,被称为regreSSHion),该漏洞影响基于 glibc 的Linux系统上的OpenSSH Server (sshd),目前漏洞细节已公开。
默认配置下的OpenSSH Server (sshd)中存在信号处理程序竞争条件漏洞,如果客户端未在LoginGraceTime 秒内(默认情况下为 120 秒,旧版 OpenSSH 中为 600 秒)进行身份验证,则 sshd 的 SIGALRM 处理程序将被异步调用,但该信号处理程序会调用各种非async-signal-safe的函数(例如syslog()),威胁者可利用该漏洞在基于 glibc 的 Linux 系统上以root 身份实现未经身份验证的远程代码执行。
二、影响范围
OpenSSH < 4.4p1(除非已针对 CVE-2006-5051和CVE-2008-4109 进行修复)
8.5p1 <= OpenSSH < 9.8p1
注:4.4p1 <= OpenSSH < 8.5p1不易受到该漏洞攻击,OpenBSD系统不受该漏洞影响。
三、安全措施
3.1 升级版本
目前该漏洞已修复,受影响用户可升级到当前最新版本OpenSSH 9.8p1或应用相关补丁或缓解。
下载链接:
https://www.openssh.com/
补丁下载链接:
https://github.com/openssh/openssh-portable/commit/81c1099d22b81ebfd20a334ce986c4f753b0db29
3.2 临时措施
可以通过验证所安装的 OpenSSH Server版本来确定其系统是否易受攻击,如确认受影响可及时更新,尤其是面向互联网的资产。
如果 sshd 无法更新或重新编译,可在配置文件中将 LoginGraceTime 设置为 0,这会耗尽所有 MaxStartups 连接,从而使sshd 容易受到拒绝服务攻击,但可以缓解该RCE风险。
3.3 通用建议
定期更新系统补丁,减少系统漏洞,提升服务器的安全性。
加强系统和网络的访问控制,修改防火墙策略,关闭非必要的应用端口或服务,减少将危险服务(如SSH、RDP等)暴露到公网,减少攻击面。
使用企业级安全产品,提升企业的网络安全性能。
加强系统用户和权限管理,启用多因素认证机制和最小权限原则,用户和软件权限应保持在最低限度。
启用强密码策略并设置为定期修改。
3.4 参考链接
https://www.openssh.com/releasenotes.html
https://www.qualys.com/2024/07/01/cve-2024-6387/regresshion.txt
https://blog.qualys.com/vulnerabilities-threat-research/2024/07/01/regresshion-remote-unauthenticated-code-execution-vulnerability-in-openssh-server
四、修复过程记录
4.1下载 openssh-9.8p1.tar.gz
a、下载链接:openssh-9.8p1.tar.gz,然后通过ftp上传
b、直接在服务器 wget 下载
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
4.2停止ssh服务
systemctl stop sshd
4.3解压源码包
# -z:表示使用 gzip 解压缩文件。
# -x:表示从归档文件中提取文件。
# -v:表示在终端上显示详细的输出信息。
# -f:表示指定要解包的文件名。
tar -zxvf openssh-9.8p1.tar.gz
4.4编译安装openssh
cd /root/openssh-9.8p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl --without-zlib-version-check
###--with-zlib=/usr/local/zlib:指定 zlib 库的路径为 /usr/local/zlib。这是为了告诉 OpenSSH 在编译过程中使用指定路径下的 zlib 库。
###--with-ssl-dir=/usr/local/ssl:指定 OpenSSL 库的路径为 /usr/local/ssl。这是为了告诉 OpenSSH 在编译过程中使用指定路径下的 OpenSSL 库。
####--without-zlib-version-check:禁用对 zlib 版本的检查。这个选项可以用于跳过对 zlib 版本的检查,即使 zlib 版本不符合 OpenSSH 的要求,也会继续编译。
make && make install
#sshd_config文件修改
echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config
#备份原有文件,并将新的配置复制到指定目录
mv /etc/ssh /etc/ssh.old
mv /usr/sbin/sshd /usr/sbin/sshd.bak
mv /usr/bin/ssh /usr/bin/ssh.bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
mkdir /etc/ssh
cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
#检查openssh版本
ssh -V
升级成功版本如下所示
4.5配置sshd服务开机启动
########这一步特别重要########
mkdir /root/ssh_bak/
mv /usr/lib/systemd/system/sshd.service /root/ssh_bak/
mv /usr/lib/systemd/system/sshd.socket /root/ssh_bak/
########这一步特别重要########
cd /root/openssh-9.8p1
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
#重启模块
systemctl daemon-reload
systemctl restart sshd
#查看sshd服务状态
systemctl status sshd
#查看openssh版本
ssh -V
如果正常,就重启服务器再查看一下,确认sshd服务能否正常开机启动