手动更新SSH-规避OpenSSH 远程代码执行漏洞(CVE-2024-6387)安全风险

OpenSSH 远程代码执行漏洞(CVE-2024-6387)安全风险
该漏洞是由于OpenSSH服务 (sshd) 中的信号处理程序竞争问题,未经身份验证的攻击者可以利用此漏洞在Linux系统上以root身份执行任意代码。目前该漏洞技术细节已在互联网上公开,该漏洞影响范围较大,建议尽快做好自查及防护。

影响版本:8.5p1 – 9.7p1

查看最新版本文件
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

查看版本

 ssh -V

更新安装必须的包

 sudo apt-get  -y update
 sudo apt-get install build-essential zlib1g-dev libssl-dev

下载最新的包:

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

解压:

 tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1

编译:

 ./configure
make

安装:

 sudo make install

重启服务:

 sudo systemctl restart ssh

查看版本是否有openssh-9.8p1

 ssh -V

如果版本没显示openssh-9.8p1,就是需要添加环境变量:

 echo 'export PATH=/usr/local/bin:/usr/local/sbin:$PATH' >> ~/.bashrc

验证生效

 source ~/.bashrc

查看版本

 ssh -V

修改 ssh.service 文件中的 ExecStartPre、ExecStart 和 ExecReload 行,将 /usr/sbin/sshd 改为 /usr/local/sbin/sshd

sudo sed -i 's|ExecStartPre=/usr/sbin/sshd|ExecStartPre=/usr/local/sbin/sshd|; s|ExecStart=/usr/sbin/sshd|ExecStart=/usr/local/sbin/sshd|; s|ExecReload=/usr/sbin/sshd|ExecReload=/usr/local/sbin/sshd|' /lib/systemd/system/ssh.service

确认修改内容:

grep -E 'ExecStartPre|ExecStart|ExecReload' /lib/systemd/system/ssh.service

重新加载服务:

sudo systemctl daemon-reload
sudo systemctl restart sshd

列出正在运行的SSH进程(确认是否是 /usr/local/sbin/sshd)

ps -ef | grep sshd

注意:以上操作ssh的配置文件就变成了/usr/local/etc/sshd_config,需要给新配置文件更新内容

把新配置文件删掉,创建链接到/etc/ssh/sshd_config,并加载服务

sudo rm /usr/local/etc/sshd_config
sudo ln -s /etc/ssh/sshd_config /usr/local/etc/sshd_config
sudo systemctl daemon-reload
sudo systemctl restart sshd

清理旧版本(可选)

sudo rm /usr/sbin/sshd

统一执行代码:


sudo apt-get -y update && \
sudo apt-get install -y build-essential zlib1g-dev libssl-dev && \
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz && \
tar -xzf openssh-9.8p1.tar.gz && \
cd openssh-9.8p1 && \
./configure && \
make && \
sudo make install && \
sudo systemctl restart ssh && \
echo 'export PATH=/usr/local/bin:/usr/local/sbin:$PATH' >> ~/.bashrc && \
source ~/.bashrc && \
sudo sed -i 's|ExecStartPre=/usr/sbin/sshd|ExecStartPre=/usr/local/sbin/sshd|; s|ExecStart=/usr/sbin/sshd|ExecStart=/usr/local/sbin/sshd|; s|ExecReload=/usr/sbin/sshd|ExecReload=/usr/local/sbin/sshd|' /lib/systemd/system/ssh.service && \
grep -E 'ExecStartPre|ExecStart|ExecReload' /lib/systemd/system/ssh.service && \
sudo rm /usr/local/etc/sshd_config && \
sudo ln -s /etc/ssh/sshd_config /usr/local/etc/sshd_config && \
sudo systemctl daemon-reload && \
sudo systemctl restart sshd && \
sudo rm /usr/sbin/sshd && \
ps -ef | grep sshd
ssh -V

发表评论