背景概要
OpenSSH(OpenBSD Secure Shell)是 Openbsd 计划组的一套用于安全访问远程计算机 的连接工具。该工具是 SSH 协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。 OpenSSH 8.3p1 及之前版本中的 scp 的 scp.c 文件存在操作系统命令注入漏洞。该漏洞 源于外部输入数据构造操作系统可执行命令过程中,网络系统或产品未正确过滤其中的特殊 字符、命令等。攻击者可利用该漏洞执行非法操作系统命令。 绿盟对我司的服务器进行漏洞扫描,扫描漏洞说明centos7系统本身自带的openssh服务版本过低,openssh也会暴露出openssl相关漏洞,所以要升级centos系统openssl及openssh服务修复漏洞。
注意事项
由于升级openssh9.0.p1会影响到当前堡垒机的兼容性,目前需要升级到openssh8.7.p1
修复建议
1、官方下载链接:https://www.openssh.com/openbsd.html 阿里云镜像下载链接:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/ 2、升级前,建议通过白名单方式,先打开 TELET 端口,避免升级 OPENSSH 失败 无法连接服务器 3、升级需要做好 openssh 备份
系统版本信息
当前版本:OpenSSH_6.6.1p1 更新版本:OpenSSH_8.7p1
修复准备(telnet使用说明)
# 防止ssh中断无法登录的情况
#查看是否安装telnet服务
yum list telnet*
yum list xinetd
#安装Telnet服务并配置
yum -y install telnet telnet-server xinetd
#启动telnet服务
systemctl restart xinetd
systemctl restart telnet.socket
#查看telnet端口是否开启
rpm -ivh nmap-6.40-19.el7.x86_64
nmap 127.0.0.1
#23/tcp open telnet
#尝试telnet
telnet ip 23
# telnet: connect to address ip: No route to host是防火墙的问题
# 查看防火墙某个端口是否打开
firewall-cmd --query-port=23/tcp
#查看已开启的防火墙端口
firewall-cmd --zone=public --list-ports
# 解决方法:开放服务器的23端口
firewall-cmd --permanent --add-port=23/tcp
firewall-cmd --reload
# 关闭防火墙某个端口
firewall-cmd --permanent --remove-port=23/tcp
#关闭telnet服务
systemctl stop xinetd
systemctl stop telnet.socket
#卸载telnet服务
yum remove telnet telnet-server xinetd
修复进行时
1.下载openssh-8.7.1压缩包
cd /home/runtrend/ # 进入到用户目录下
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz #下载openssh-8.7版本
# 没有wget的话就yum install -y wget
2.安装基础依赖包
yum install distro-sync rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel xmkmf libXt-devel gtk2-devel make -y
3.备份旧版本的openssh,这里推荐两个备份都进行(备份系统原ssh相关命令)
备份一:
cp /usr/bin/ssh /usr/bin/ssh_bak
cp /usr/sbin/sshd /usr/sbin/sshd_bak
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
备份二:
mkdir /usr/bin/sshbak7.4/
mkdir /usr/sbin/sshbak7.4/
mkdir /usr/libexec/opensshbak7.4/
mv /usr/libexec/openssh/sftp-server /usr/libexec/opensshbak7.4/
mv /usr/bin/ssh-copy-id /usr/bin/sshbak7.4/
mv /usr/bin/ssh-add /usr/bin/sshbak7.4/
mv /usr/bin/ssh-agent /usr/bin/sshbak7.4/
mv /usr/bin/ssh-keygen /usr/bin/sshbak7.4/
mv /usr/bin/ssh-keyscan /usr/bin/sshbak7.4/
mv /usr/bin/scp /usr/bin/sshbak7.4/
mv /usr/bin/sftp /usr/bin/sshbak7.4/
mv /usr/bin/ssh /usr/bin/sshbak7.4/
mv /usr/sbin/sshd /usr/sbin/sshbak7.4/
4.开始编译安装新版本的openssh
编译安装说明
# --prefix=PREFIX #安装到哪个路径,默认[/usr/local]
# --sysconfdir=DIR #配置路径,默认[PREFIX/etc]
# --mandir=DIR #帮助文档路径
# -with-md5-passwords #开启使用MD5的密码
# --with-zlib=PATH #指定zlib的安装路径
# --with-ssl-dir=PATH #指定openssl的安装路径
tar -zxvf openssh-8.7p1.tar.gz
cd openssh-8.7p1
./configure --prefix=/usr/local/openssh8.7 --sysconfdir=/etc/ssh8.7/ --with-md5-passwords --mandir=/usr/share/man --with-zlib --with-pam --with-ssl-dir=/usr/local/openssl
make && make install
5.查看编译安装是否成功
/usr/local/openssh8.7/bin/ssh -V 或者 ssh -V
# 如果使用的是第一种备份,ssh -V不会报错
# ssh -V:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013
# /usr/local/openssh8.7/bin/ssh -V:OpenSSH_8.7p1, OpenSSL 1.0.2k-fips 26 Jan 2017
# 如果使用的是第二种备份,ssh -V是错误的
# /usr/local/openssh8.7/bin/ssh -V:OpenSSH_8.7p1, OpenSSL 1.0.2k-fips 26 Jan 2017
6.替换ssh命令与常用工具
cd /home/runtrend/openssh-8.7p1/ ##编译包解压的目录
# 如果是备份一的话,需要复制这些文件需要被覆盖掉,备份二的话不需要
cp -p sftp-server /usr/libexec/openssh/
cp contrib/ssh-copy-id /usr/bin/ssh-copy-id
cp -p /usr/local/openssh8.7/bin/* /usr/bin/
cp -p /usr/local/openssh8.7/sbin/* /usr/sbin/
7.在这里在输入ssh -V就可以了
8.SSH重启之前可以先测试配置文件是否有问题,防止重启SSH失败,远程连接断了,如果是本地终端连接可以直接重启
/usr/local/openssh8.7/sbin/sshd -t -f /etc/ssh/sshd_config
9.配置文件错误解决
当遇到文件权限错误的时候,说明秘钥文件权限太开放,修改秘钥的权限
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key
# 然后还有一个说要修改配置文件的问题,将这个提示注销掉就可以了(不修改也是可以的,不会有报错)
vi /etc/ssh/sshd_config
# 注释掉这三行
# GSSAPIAuthentication yes
# GSSAPICleanupCredentials no
# UsePrivilegeSeparation sandbox # Default for new installations.
当遇到错误的SSH2密码规范时,需要使用ssh -Q cipher 或者ssh -Q mac来修改
# /etc/ssh/sshd_config line 155: Bad SSH2 cipher spec 'aes128-ctr,aes192-ctr'
#/etc/ssh/sshd_config line 156: Bad SSH2 mac spec 'hmac-sha1,hmac-ripemd160'.
#这里的内容表示是最后面添加的MACs的内容有错误,可能是ssh版本不一致或者是什么导致的,我们要修改的就是这段内容
#如果sshd -T提示的错误是 Bad SSH2 mac spec,就使用ssh -Q mac查看然后修改Macs的内容
#如果错误是Bad SSH2 cipher spe,就使用ssh -Q cipher,然后修改配置文件中的cipher的内容
#将查出来的内容新增到后面就好了,下面的是我的服务器的密码规范
Ciphers 3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs hmac-sha1,hmac-sha1-96,hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-md5-96,umac-64@openssh.com,umac-128@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-md5-etm@openssh.com,hmac-md5-96-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com
10.重启sshd服务
cp /home/runtrend/openssh-8.7p1/contrib/redhat/sshd.init /etc/init.d/sshd #复制ssh的启动程序
systemctl daemon-reload #重启守护进程服务
systemctl enable sshd.service #将sshd设置为开机自启动状态
systemctl restart sshd.service #重启sshd服务
systemctl status sshd.service #查看sshd服务状态
在这里输入ssh -V就可以看到openssh已经更新到最新版本了,到这里就结束啦。
到这里要关闭掉telnet服务,关闭方法请看上面“修复准备”
完结撒花^_^
|