简介
OpenSSH是SSH(Secure SHell)协议的免费开源实现。OpenSSH是个SSH的软件,linux/unix都用openssh软件提供SSH服务。scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
漏洞概述
1. CVE-2021-41617
OpenSSH(OpenBSD Secure Shell)是Openbsd计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
OpenSSH 6.2到8.8之前版本存在安全漏洞。该漏洞源于允许权限提升,因为补充组未按预期初始化。
该漏洞编号CVE-2020-15778。OpenSSH的8.3p1及之前版本中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令。目前绝大多数linux系统受影响。
2. CVE-2020-15778
OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
openssh <= openssh-8.3p1版本中的scp的scp.c文件存在命令注入漏洞。该漏洞源于外部输入数据构造可执行命令过程中,网络系统或产品未正确过滤其中的特殊元素。攻击者可利用该漏洞执行非法命令。
本地环境
[root@master ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
[root@master ~]# openssl version
OpenSSL 1.1.1m 14 Dec 2021
漏洞修复
一、安装telnet
安装telnet-server以及xinetd
[root@master ~]# yum install xinetd telnet-server -y
配置telnet
[root@master ~]# vim /etc/xinetd.d/telnet
[root@master ~]# cat /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = yes
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
配置telnet登录的终端类型,在/etc/securetty文件末尾增加一些pts终端,如下
[root@master ~]# vim /etc/securetty
pts/0
pts/1
pts/2
pts/3
[root@master ~]# tail -5 /etc/securetty
xvc0
pts/0
pts/1
pts/2
pts/3
启动telnet服务,并设置开机自动启动
[root@master ~]# systemctl enable xinetd
[root@master ~]# systemctl enable telnet.socket
Created symlink from /etc/systemd/system/sockets.target.wants/telnet.socket to /usr/lib/systemd/system/telnet.socket.
[root@master ~]# systemctl start telnet.socket
[root@master ~]# systemctl start xinetd
[root@master ~]# netstat -lntp|grep 23
tcp6 0 0 :::23 :::* LISTEN 1/systemd
[root@master ~]#
二、安装组件
安装编译相关组件
[root@master ~]# yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel
安装pam
[root@master ~]# yum install -y pam*
安装zlib
# 方式一
[root@master ~]# yum install -y zlib*
# 方式二
[root@master ~]# wget http://www.zlib.net/zlib-1.2.11.tar.gz
[root@master ~]# tar xzvf zlib-1.2.11.tar.gz
[root@master ~]# cd zlib-1.2.11
[root@master zlib-1.2.11]# ./configure --prefix=/usr/local/zlib
[root@master zlib-1.2.11]# make && make install
三、安装openssl
下载openssl
[root@master ~]# wget https://www.openssl.org/source/openssl-1.1.1m.tar.gz
编译安装openssl
[root@master ~]# tar xzvf openssl-1.1.1m.tar.gz
[root@master ~]# cd openssl-1.1.1m
[root@master openssl-1.1.1m]# ./config --prefix=/usr/local/ssl -d shared
[root@master openssl-1.1.1m]# make && make install
[root@master openssl-1.1.1m]# echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
[root@master openssl-1.1.1m]# ldconfig -v
四、安装openssh
下载openssh
[root@master ~]# wget https://mirror.leaseweb.com/pub/OpenBSD/OpenSSH/portable/openssh-8.8p1.tar.gz
编译安装openssh
[root@master ~]# tar xzvf openssh-8.8p1.tar.gz
[root@master ~]# cd openssh-8.8p1
[root@master openssh-8.8p1]# ./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
[root@master openssh-8.8p1]# make && make install
五、修改配置文件
sshd_config文件修改
[root@master ~]# echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
[root@master ~]# echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
[root@master ~]# echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config
备份原有文件,并将新的配置复制到指定目录
[root@master ~]# mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@master ~]# cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
[root@master ~]# mv /usr/sbin/sshd /usr/sbin/sshd.bak
[root@master ~]# cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
[root@master ~]# mv /usr/bin/ssh /usr/bin/ssh.bak
[root@master ~]# cp /usr/local/openssh/bin/ssh /usr/bin/ssh
[root@master ~]# mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
[root@master ~]# cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
[root@master ~]# mv /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak
[root@master ~]# cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
六、启动ssh
[root@master ~]# systemctl daemon-reload
[root@master ~]# service sshd restart
[root@master ~]# ssh -V
OpenSSH_8.8p1, OpenSSL 1.1.1m 24 Aug 2021
七、问题答疑
如果无法重启ssh,ssh启动报错为超时(timedout),且
sshd -t
无报错日志
[root@188 ~]# systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: timeout) since Mon 2022-05-16 17:45:07 CST; 39s ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 4782 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 4782 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/sshd.service
├─ 467 java -jar -Xdebug -Xnoagent -Xmx1024m -Xms512m -XX:NewRatio=1 -XX:SurvivorRatio=8 -Dconfig.path=file:/dw-system/dw-schedule/;file:/dw-system/common.properties -Dlogger.root=/software/logs/dubbo-jars ...
├─ 1058 sshd: root@pts/0
├─ 1060 -bash
├─ 3235 sshd: root@pts/1
├─ 3243 -bash
├─ 4153 sshd: root@pts/3
├─ 4161 -bash
├─ 5077 tail -fn 200 /var/log/messages
├─ 5101 systemctl status sshd.service
├─32566 java -jar -Xdebug -Xnoagent -Xmx1024m -Xms512m -XX:NewRatio=1 -XX:SurvivorRatio=8 -Dconfig.path=file:/dw-system/dw-admin/;file:/dw-system/common.properties -Dlogger.root=/software/logs/dubbo-jars -Dl...
└─32767 java -jar -Xdebug -Xnoagent -Xmx1024m -Xms512m -XX:NewRatio=1 -XX:SurvivorRatio=8 -Dconfig.path=file:/dw-system/dw-open/;file:/dw-system/common.properties -Dlogger.root=/software/logs/dubbo-jars -Dlo...
May 16 17:45:07 188 systemd[1]: Failed to start OpenSSH server daemon.
May 16 17:45:07 188 systemd[1]: Unit sshd.service entered failed state.
May 16 17:45:07 188 systemd[1]: sshd.service failed.
解决方案:
关闭Port注释:/etc/ssh/sshd_config
修改
/etc/systemd/system/multi-user.target.wants/sshd.service
文件,将[Service] 中Type=notify
改为Type=simple
或直接注释
重新启动ssh,第一次启动失败,就再来一次,基本第二次会成功(原因未知)
[root@master ~]# systemctl daemon-reload
[root@master ~]# service sshd restart