CVE-2024-6387漏洞修复教程(环境openeuler22.03 sp3 LTS)

一、漏洞概述
CVE-2024-6387是OpenSSH服务器(sshd)中的一个远程代码执行漏洞。它是自1995年OpenSSH问世近20年来首次出现的未经验证的远程执行(RCE)漏洞,攻击者可利用此漏洞提权至root最高权限,在不需要用户交互的情况下执行任意代码。该漏洞于2024年5月被发现,存在于使用glibc的Linux系统上的OpenSSH Server(sshd)中。由于信号处理器竞赛条件存在缺陷,如果客户端没有在默认的LoginGraceTime秒(默认为120秒,旧版OpenSSH中为600秒)内通过身份验证,那么sshd的SIGALRM处理程序就会被异步调用,并调用各种不安全的异步信号函数,最终造成Double-Free内存管理问题,从而允许未经认证的远程攻击者以root用户身份执行任意代码。
漏洞名称:OpenSSH Server远程代码执行漏洞
漏洞编号:CVE-2024-6387
公开时间:2024-7-1
受影响版本:8.5p1 <= OpenSSH < 9.8p1
:OpenBSD系统不受该漏洞影响。用户可执行sshd -V确认OpenSSH版本,目前该漏洞技术细节已在互联网上公开,鉴于影响范围较大,建议用户尽快做好自查及防护。

二、安全措施
升级OpenSSH服务器到最新可用更新(版本9.8p1)以修复漏洞。

三、升级准备
3.1 现有环境
(第一台是openeulser2203LTS)
(第二台是麒麟ky10)

3.2 备份配置

cp -rf /etc/ssh/ /etc/ssh.bak
cp -rf /usr/bin/openssl /usr/bin/openssl.bak
cp -rf /etc/pam.d/ /etc/pam.d.bak
cp -rf /usr/lib/systemd/system /usr/bin/system.bak

3.3 查看是否已经安装telnet,如果已经安装可以跳过3.3直接开始3.4的安装步骤:

#1查看telnet-server的 rpm 包是否安装:
rpm -qa | grep telnet
#2查看telnet客户端的 rpm 包是否安装:
rpm -qa | grep telnet-server

3.4 安装telnet(该步骤是为了防止openssh升级失败导致无法连接服务器,如果不用也可以跳过)

yum install telnet -y
yum install xinetd
#启动telnet服务
systemctl start xinetd
systemctl start telnet.socket 

四、下载升级

4.1 下载源码包

yum install -y vim gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers libedit-devel perl-IPC-Cmd wget tar lrzsz nano
cd /usr/local/src/
wget https://www.zlib.net/zlib-1.3.1.tar.gz
wget https://www.openssl.org/source/old/3.2/openssl-3.2.1.tar.gz
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
ls  #查看源码包是否都已经下载
tar -zxvf openssh-9.8p1
tar -zxvf openssl-3.2.1
tar -zxvf zlib-1.3.1

4.2 安装

#1.进入zlib-1.3.1目录
cd /usr/local/src/zlib-1.3.1
#2.配置
./configure --prefix=/usr/local/src/zlib
#3.编译及安装(编译时间预计几分钟,视机器而定)
make -j 4 && make test && make install

4.3 安装openssl

#1.进入openssl-3.2.1目录
cd /usr/local/src/openssl-3.2.1
#2.配置
./config --prefix=/usr/local/src/openssl`
#3.编译及安装(编译时间预计几分钟,视机器而定,我加了make test,花了几十分钟)
make -j 4 &&  make install
#4.配置
mv /usr/bin/openssl /usr/bin/oldopenssl
ln -s /usr/local/src/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/src/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/src/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
#5.更新动态库
echo "/usr/local/src/openssl/lib64" >> /etc/ld.so.conf
ldconfig
#6.查看更新后的版本
openssl version -v

4.4 卸载老版本OpenSSH

#1.卸载openssh
yum remove -y openssh
#2.清理残余文件
rm -rf /etc/ssh/*

4.5 安装新版本openssh9.8p1

#1.进入openssh-9.8p1目录
cd /usr/local/src/openssh-9.8p1
#2.配置
./configure --prefix=/usr/local/src/ssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/src/openssl --with-zlib=/usr/local/src/zlib
#3.编译及安装
make -j 4 && make install
#4.查看目录版本
/usr/local/src/ssh/bin/ssh -V
#5.复制新ssh文件
cp -rf /usr/local/src/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/sshd
cp -rf /usr/local/src/openssh-9.8p1/contrib/redhat/sshd.pam /etc/pam.d/sshd
cp -rf /usr/local/src/ssh/sbin/sshd /usr/sbin/sshd
cp -rf /usr/local/src/ssh/bin/ssh /usr/bin/ssh
cp -rf /usr/local/src/ssh/bin/ssh-keygen /usr/bin/ssh-keygen
#6.允许root登录
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config

重启sshd服务

/etc/init.d/sshd restart

查看服务运行状态

/etc/init.d/sshd status

添加开机启动

chkconfig --add sshd

查看升级后ssh版本

ssh -V

测试:
ssh root@ip 连接查看是否异常

shell脚本安装过程会出现报错,各自按照实际情况进行调整。点击下载shell脚本

posted @ 2024-07-03 16:40  cido  阅读(2429)  评论(3)    收藏  举报