一、漏洞简述:
1、近期360CERT发布了CVE-2023-38408:OpenSSH ssh-agent远程代码执行漏洞通告。该漏洞存在于OpenSSH SSH代理的转发功能中,是一个远程代码执行漏洞,在特定条件下利用SSH代理对PKCS#11的支持,可以通过转发的代理套接字执行代码。OpenSSH 5.5至9.3p1之间的版本都受此漏洞影响,需要升级至9.3p2版本(目前最新版本)。
2、OpenSSH:Secure Shell(SSH)协议的开源实现,提供一套全面的服务,以促进客户端-服务器环境中不安全网络上的加密通信。
3、Telnet:用于通过TCP/IP网络远程登录计算机的协议。一旦与远程计算机建立了连接,它就会成为一个虚拟终端且允许与远程计算机通信。数据采用明文传输,不安全。安装Telnet,避免OpenSSH升级过程中发生中断服务器无法远程登录。
二、演示环境:
1、操作系统:
# cat /etc/redhat-release
2、OpenSSH默认版本:
# ssh -V
3、服务器IP:
# ip a
4、配置Telnet服务:
(1)关闭firewalld和SELinux
(2)安装Telnet服务端:
# yum -y install xinetd telnet-server
(3)允许root用户登录:
# echo -e "pts/0\npts/1\npts/2\npts/3\npts/4\npts/5" >> /etc/securetty
# tail -6 /etc/securetty
(4)修改Telnet默认TCP/23端口:
# grep -w "^telnet" /etc/services
# sed -i "s#23/tcp#23023/tcp#" /etc/services
# sed -i "s#23/udp#23023/udp#" /etc/services
# grep -w "^telnet" /etc/services
# grep -w "^ListenStream" /usr/lib/systemd/system/telnet.socket
# sed -i "s/ListenStream=23/ListenStream=23023/" /usr/lib/systemd/system/telnet.socket
# grep -w "^ListenStream" /usr/lib/systemd/system/telnet.socket
(5)启动服务:
# systemctl start xinetd
# systemctl enable xinetd
# systemctl start telnet.socket
# systemctl enable telnet.socket
# ss -tunlp | grep 23023
(6)功能测试:
a、Windows客户端:
控制面板中启用“Telnet客户端”功能:
cmd下输入“telnet 192.168.0.202 23023”:
输入登录服务器的用户名和密码:
b、Linux客户端:
# yum -y install telnet
# telnet 192.168.0.202 23023
说明:也可以开多个SSH终端,防止OpenSSH升级失败后导致当前SSH终端断开连接无法远程操作。
三、升级OpenSSH:
1、升级计划:7.4p1升级至9.3p2
2、下载OpenSSH:
地址:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/
软件包:openssh-9.3p2.tar.gz
3、备份配置文件:
# cd /etc/ssh
# cp sshd_config{,.bak}
# cd /etc/pam.d
# cp sshd{,.bak}
4、安装依赖软件包:
# yum -y install gcc gcc-c++ zlib-devel openssl-devel pam-devel
说明:如果生产环境中无法使用yum,可在测试环境中开启yum缓存,提前将所需的依赖软件包下载保存。
5、卸载旧版本,编译安装新版本OpenSSH:
# tar -xf openssh-9.3p2.tar.gz -C /usr/src
# cd /usr/src/openssh-9.3p2
# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-pam
# rpm -qa | grep openssh
# rpm -e --nodeps `rpm -qa | grep openssh`
# make && make install
# echo $?
说明:此次升级OpenSSH,并没有同时升级OpenSSL。
6、修改文件权限:
# chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
7、复制配置文件并授权:
# cp -a contrib/redhat/sshd.init /etc/init.d/sshd
# chmod u+x /etc/init.d/sshd
8、还原之前备份的配置文件:
# cd /etc/ssh
# mv -f sshd_config.bak sshd_config
# cd /etc/pam.d
# mv -f sshd.bak sshd
9、允许root用户远程登录:
# sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config
10、设置开机自启:
# chkconfig --add sshd
# chkconfig sshd on
# chkconfig --list
11、重启SSH:
# systemctl restart sshd
12、版本验证:
# ssh -V
四、升级后的功能验证及后续操作:
1、能正常ssh远程登录至其它主机
2、能正常scp拷贝文件至其它主机
3、能正常通过sftp协议使用类似Xftp工具传输文件
# vim /etc/ssh/sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server
修改为:
Subsystem sftp internal-sftp
# systemctl restart sshd
4、关闭Telnet服务:
# systemctl stop xinetd
# systemctl disable xinetd
# systemctl stop telnet.socket
# systemctl disable telnet.socket
# ss -tunlp | grep 23023