描述
2023年7月19日,OpenSSH发布紧急安全补丁,解决OpenSSH ssh-agent转发中存在安全漏洞远程执行CVE-2023-38408。CVE-2023-38408是一个远程代码执行漏洞,位于 ssh-agent 的转发功能内,特别是涉及提供PKCS#11相关服务的情况下。在某些条件下,可以操纵ssh-agent对PKCS#11的支持,以便通过转发的代理套接字来促进远程代码执行。利用的先决条件包括受害者系统上存在特定库以及需要将代理转发到攻击者控制的系统。
解决办法
1 . 升级到OpenSSH 9.3p2或更高版本:升级到最新版本的OpenSSH至关重要,因为它包含缓解漏洞的关键补丁。确保所有相关系统和服务器及时更新至推荐版本或更高版本。
2 . 另外采取预防措施来避免被利用:
建议在仅仅OpenSSH用于远程主机管理的机器,通过Openssh配置(sshd_config)、防火墙,安全组ACL等限制来源访问IP为白名单仅可信IP地址,同时,非必要,关闭SSH代理转发功能,禁止在有关主机启用ssh隧道等。
关闭SSH代理转发功能方法为:
配置/etc/ssh/sshd_config
AllowTcpForwarding NO
本人选择了更新Openssh的版本(头硬)
这边是Centos7的系统,默认的Openssh版本是
准备工作(保证编译安装不正确情况下能正常连接服务器)
1 . 安装对应服务
yum install telnet* xinetd # 安装telnet服务
2 . 配置xinetd
下面文件内容需要自己创建文件或者编辑
- vim /etc/xinetd.d/telnet
service telnet
{flags=REUSE socket_type=stream wait=no user=root server=/usr/sbin/in.telnetd log_on_failure += USERID disable= no
}
3 . 启动相关服务
# 设置服务开机自启及启动
systemctl enable xinetd.service
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start xinetd
# 设置防火墙放通telnet
firewall-cmd --zone=public --add-port=23/tcp --permanent
firewall-cmd --complete-reload
# 添加telnet用户(不能直接用root登录)
useradd telnet
passwd telnet
编译安装
1 . 使用telnet形式登录后su到管理员
2 . 下载源码解压
阿里云(官方推荐镜像站):https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/
openssh-9.3p2源码下载地址
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.3p2.tar.gz
tar -zxvf openssh-9.3p2.tar.gz
# 停止当前ssh服务
systemctl stop sshd
3 . 备份相关信息
# 备份当前ssh服务及配置
cp -a /etc/ssh /etc/ssh.bak
cp -a /usr/sbin/sshd /usr/sbin/sshd.bak
cp -a /usr/bin/ssh /usr/bin/ssh.bak
# 删除老配置
rm -rf /etc/ssh/*
# 卸载已安装的openssh相关软件包
rpm -e `rpm -qa | grep openssh` --nodeps
4 . 配置
#编译预配置
cd openssh-9.3p2 && ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-zlib --with-ssl-dir=/usr/local/openssl --with-md5-passwords --with-pam
5 . 编译及安装
make
make install
这里编译安装会出现一些问题。提示Ubable to load host key "/etc/ssh/ssh_host_*_key": bad permission等文件权限的错误。
问题解决办法:
直接重新给文件附上权限
chomd 0600 /etc/ssh/ssh_host_*_key
6 . 启动
# 检查并删除老版本启动脚本
ls /usr/lib/systemd/system/ssh*
rm -f /usr/lib/systemd/system/ssh*
# 拷贝启动脚本
cp contrib/redhat/sshd.init /etc/init.d/sshd
# 拷贝sshd.pam配置文件
cp contrib/redhat/sshd.pam /etc/pam.d/
# 建立软连接
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/# 若报错可将已存在的文件重命名,再执行软连接
systemctl daemon-reload
# 启动并设置开机自启动
systemctl start sshd && systemctl enable sshd
# 允许root远程登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 启动ssh服务
systemctl start sshd
# 查看ssh服务状态
systemctl status sshd
启动ssh服务报错:
Starting sshd:/etc/rc.d/init.d/sshd: line 49: /usr/sbin/sshd: No such file or directory
Failed to start SYSV: Openssh server daemon.
解决办法:
cp -a /usr/local/openssh/sbin/sshd /usr/sbin/sshd
7 . 准备战斗结束
# 删除telnt
systemctl stop telnet.socket
systemctl disable telnet.socket
#删除防火墙放行端口
firewall-cmd --remove-port=23/tcp --permanent
firewall-cmd --reload
# 启动ssh服务
systemctl start sshd