OpenSSH是SSH(Secure SHell)协议的免费开源实现。OpenSSH是个SSH的软件,linux/unix都用openssh软件提供SSH服务。scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
漏洞概述 1. CVE-2021-41617OpenSSH(OpenBSD Secure Shell)是Openbsd计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
OpenSSH 6.2到8.8之前版本存在安全漏洞。该漏洞源于允许权限提升,因为补充组未按预期初始化。
该漏洞编号CVE-2020-15778。OpenSSH的8.3p1及之前版本中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令。目前绝大多数linux系统受影响。
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



