Linux Redhat 服务器 OpenSSH 漏洞修复 or 升级 OpenSSH 8.8

  • Post author:
  • Post category:linux

##@TOC

1. 情况说明:

近期甲方系统漏洞扫描,发现服务器存在一些漏洞如下:OpenSSH安全漏洞(CVE-2021-41617),OpenSSH命令注入漏洞(CVE-2020-15778),OpenSSH安全漏洞(CVE-2017-15906),OpenSSH安全漏洞(CVE-2019-6111),OpenSSH欺骗安全漏洞(CVE-2019-6110),OpenSSH欺骗安全漏洞(CVE-2019-6109),OpenSSH访问限制绕过漏洞(CVE-2018-20685),OpenSSH用户枚举漏洞(CVE-2018-15919),OpenSSH信息泄露漏洞(CVE-2020-14145),OpenSSH安全漏洞(CVE-2016-20012)。

相关漏洞还提供了参考解决方案:

漏洞 参考措施
OpenSSH安全漏洞(CVE-2021-41617) 厂商补丁:建议使用此软件的用户随时关注厂商主页或参考网址以获取解决办法; http://www.openssh.com/security.html
OpenSSH命令注入漏洞(CVE-2020-15778) 厂商补丁:目前暂未发布修复措施解决此安全问题,建议使用此软件的用户随时关注厂商主页或参考网址以获取解决办法;http://www.openssh.com/ 临时缓解措施:可以禁用scp,改用rsync等缓解风险(可能会导致小文件机器内拷贝变慢)
OpenSSH安全漏洞(CVE-2017-15906) 厂商补丁:目前厂商已发布升级补丁以修复漏洞,补丁获取链接:https://www.openssh.com/txt/release-7.6
OpenSSH安全漏洞(CVE-2019-6111) 厂商补丁:目前厂商已发布升级补丁以修复漏洞,详情请关注厂商主页:https://www.openssh.com/
OpenSSH欺骗安全漏洞(CVE-2019-6110) 厂商补丁:OpenSSH 目前厂商已发布了升级补丁以修复这个安全问题,请到厂商的主页下载:https://www.openssh.com/ 参考:https://vigilance.fr/vulnerability/OpenSSH-scp-PuTTY-PSCP-spoofing-via-Scp-Client-ANSI-Codes-stderr-File-Hidding-28262
OpenSSH欺骗安全漏洞(CVE-2019-6109) 厂商补丁:OpenSSH 目前厂商已发布了升级补丁以修复这个安全问题,请到厂商的主页下载:https://www.openssh.com/ 参考:https://vigilance.fr/vulnerability/OpenSSH-scp-PuTTY-PSCP-spoofing-via-Scp-Client-ANSI-Codes-stderr-File-Hidding-28261
OpenSSH访问限制绕过漏洞(CVE-2018-20685) 厂商补丁:OpenSSH 目前厂商已发布了升级补丁以修复这个安全问题,请到厂商的主页下载: https://www.openssh.com/ https://github.com/openssh/openssh-portable/commit/6010c0303a422a9c5fa8860c061bf7105eb7f8b2 https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/scp.c.diff?r1=1.197&r2=1.198&f=h
OpenSSH用户枚举漏洞(CVE-2018-15919) 修复版本:openssh > 7.8版本 厂商升级:OpenSSH 请用户关注OpenBSD官方发布的补丁修复漏洞: https://www.openssh.com/ https://www.openssh.com/portable.html
OpenSSH信息泄露漏洞(CVE-2020-14145) 厂商补丁:OpenBSD 目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本。 http://www.openbsd.org/security.html
OpenSSH安全漏洞(CVE-2016-20012) 厂商补丁:目前厂商暂未发布修复补丁,请及时关注厂商最新公告。

2. 查看相关软件版本、漏洞说明

查看服务器系统版本。

$ cat /proc/version
>> Linux version 4.4.0-19041-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #488-Microsoft Mon Sep 01 13:43:00 PST 2020

备注:本机测试采用的是Win10商店的Ubuntu。甲方服务器系统版本是 Linux 3.10.0 RedHat 4.8.5 。亲测,两种系统均可以按照如下流程,成功升级OpenSSH_8.8p1

查看OpenSSH版本。

$ ssh -V
>> OpenSSH_7.4p1, OpenSSL 1.0.2k-fips   21 Jun 2017

查看漏洞详情

在这个链接结尾加上漏洞编号,可以查看官方漏洞说明和解决方案。https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-*
查了不少链接和博客,发现好多漏洞只影响低版本的OpenSSH,在高版本的OpenSSH上已经修复了,所以后续内容暂且关注如何离线升级 OpenSSH 至 OpenSSH 8.8p1

—- CVE-2021-41617
安全版本:OpenSSH >= 8.8
修复建议:升级到OpenSSH最新安全版本
—- CVE-2020-15778
影响:无 – 不再被视为漏洞。 解决方法:目前没有。
禁用scp,使用 rsync 缓解风险
或者 升级到OpenSSH 8.3p1之后的版本
—- CVE-2019-6111
对于稳定发行版(stretch),这些问题已在版本 1: 7.4p1-10+deb9u5 中修复。
我们建议您升级您的 openssh 软件包。
—- CVE-2019-6110
—- CVE-2019-6109
对于稳定发行版(stretch),这些问题已在版本 1: 7.4p1-10+deb9u5 中修复。
我们建议您升级您的 openssh 软件包。
…………

3. 下载相关软件包

升级OpenSSH的过程需要依赖ZLIBPerlOpenSSL,升级OpenSSL可能会报错,可能还需要依赖PAM。所以先要离线下载这些依赖对应的包:zlib-1.2.12.tar.gzperl-5.16.1.tar.gzLinux-PAM-1.3.1.tar.xzopenssl-1.1.1p.tar.gzopenssh-8.8p1.tar.gz。(安装顺序)
源码包下载地址:

zlib-1.2.12.tar.gz:

zlib:http://www.zlib.net/
zlib下载地址

perl-5.16.1.tar.gz:

perl: http://www.cpan.org/src/5.0/
在这里插入图片描述

Linux-PAM-1.3.1.tar.xz:

PAM: https://www.linuxfromscratch.org/blfs/view/9.0/postlfs/linux-pam.html
在这里插入图片描述

openssl-1.1.1p.tar.gz:

OpenSSL: https://www.openssl.org/source/
在这里插入图片描述

openssh-8.8p1.tar.gz:

OpenSSH: http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
在这里插入图片描述

**注意:**

建议按照如下顺序安装,否则 可能因缺少依赖报错
建议将上述安装包放到 /home/apps 路径下,并且以 root 用户进行升级操作。

4. 安装/升级 zlib

$ tar -xzvf zlib-1.2.12.tar.gz
$ cd zlib-1.2.12
$ ./configure --prefix=/usr/local/zlib
$ make && make install

5. 安装/升级 Perl

$ tar -xzf perl-5.16.1.tar.gz
$ cd perl-5.16.1
$ ./Configure -de
$ make && make install
# 如下命令查看是否安装成功,查看perl版本
$ perl -v

6. 安装pam-devel

$ sudo tar -xf Linux-PAM-1.3.1.tar.xz
$ cd Linux-PAM-1.3.1
$ ./configure 
$ make && make install

7. 安装/升级 openssl

$ openssl version -a
$ tar -zxvf openssl-1.1.1p.tar.gz
$ cd openssl-1.1.1p
$ ./config --prefix=/usr/local/ssl -d shared
## make
## make test
## make install
$ make && make install
$ echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
$ ldconfig -v

8. 安装/升级 openssh

$ tar -zxvf openssh-8.8p1.tar.gz
$ cd openssh-8.8p1
$ sudo ./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
## ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd
$ sudo make clean && sudo make && sudo make install

# sshd_config 文件 修改
$ echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
$ echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
$ echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config

# 备份原有文件,并将新的配置复制到指定目录
$ mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
$ cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
$ mv /usr/sbin/sshd /usr/sbin/sshd.bak
$ cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
$ mv /usr/bin/ssh /usr/bin/ssh.bak
$ cp /usr/local/openssh/bin/ssh /usr/bin/ssh
$ mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
$ cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
$ mv /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak
$ cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub

# 【这几句我在自己测试的时候并不需要执行】
# OpenSSH安装后环境配置:在openssh编译目录, 执行如下命令: 
# install -v -m755 contrib/ssh-copy-id /usr/bin
# install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1
# install -v -m755 -d /usr/share/doc/openssh-****
# install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-****

# 验证是否升级成功
$ ssh -V  
>> OpenSSH_8.8p1, OpenSSL 1.1.1p  21 Jun 2022

# 重启sshd服务  
$ systemctl restart sshd.service
# 或者
$ systemctl restart sshd

验证是否升级成功
在这里插入图片描述
注意重启sshd服务的命令运行之后,需要重新远程连接服务器。

9. 可能的报错 及 解决办法

1. configure: error: *** zlib.h missing – please install first or check config.log ***

原因是缺少 zlib ,或者 zlib安装未成功
解决方案: 重新按照 步骤 4. 安装/升级 zlib

$ tar zxf zlib***.tar.gz
$ cd zlib-***/
$ ./configure
$ make test
$ make install
$ make clean
$ ./configure --shared
$ make test
$ make install
$ cp zutil.h /usr/local/include/
$ cp zutil.c /usr/local/include/

2. 若报错bin/openssl: relocation error: bin/openssl: symbol EVP_mdc2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference

解决方案:

  1. 在/etc/ld.so.conf.d/libc.conf 文件中添加一行 /usr/lib
  2. 运行 ldconfig 命令
$ echo '/usr/lib ' >> /etc/ld.so.conf.d/libc.conf
$ ldconfig

3. 若报错 configure: error: PAM headers not found

原因是缺少PAM,或者 pam安装失败
解决方案:

  1. 联网安装 yum -y install pam-devel
  2. 离线安装 pam-devel , 参考 步骤6. 安装pam-devel
$ echo '/usr/lib ' >> /etc/ld.so.conf.d/libc.conf
$ ldconfig

4. make && make install出现recipe for target ‘install-binPROGRAMS’ failed

原因:权限不足
解决方法:

  1. cd … 到上层目录,或更上层,例如/usr/目录
  2. 给存放代码/包的目录加权限,以/usr/apps/目录为例:
$ cd /usr/
$ sudo chmod -R 777 /usr/apps/

5. 运行make命令的时候报错:Makefile:638: recipe for target ‘xxxxxxx’ failed make: *** [xxxxxx] Error 1

原因:./configure之后,由于运行make时候的权限或者其他原因,导致了make或make install 失败,需要重新操作。
解决方案:

  1. 执行 make clean 清除上一次生成的可执行文件,再次执行 make 等命令,大概率可以解决
$ make clean
$ sudo make && sudo make install 

参考链接




版权声明:本文为s619782146原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。