升级OpenSSH7.9

背景

企业信息安全管理日趋完善,部分软件项目须经过系统定级、备案,通过第三方等级保护测评,出具《信息安全等级保护测评报告》,才能符合验收条件。

就是一般所说的“入网安评”。

测评一定会发现漏洞和隐患,需要软件厂商或者企业运维团队针对已发现的问题清单逐一整改和加固。

一般来说,第三方安全厂商通过漏洞扫描和入侵探测,出具详细的问题清单,每条清单也会有相应的整改措施或者加固建议,然后,我们就照着清单,逐条解决。

都是些套路,本没啥惊喜——昨天却因为OpenSSH搞得一头汗。

清单上有一项:

危险等级:中危

漏洞名称:OpenSSH 用户枚举漏洞(CVE-2018-15919)

详细描述:OpenSSH 7.8及之前版本,auth-gss2.c文件存在安全漏洞。远程攻击者可利用该漏洞检测其指定的用户是否存在。

解决办法:

厂商升级:新版本OpenSSH-7.9已经修复这个安全问题,请到厂商的主页下载。
链接:http://www.openssh.com/ http://www.openssh.com/portable.html

目标服务器是CentOS7.4,起初我以为万能的RPM包再加上 yum install --downloadonly --downloaddir=<directory> <package>yum localinstall <package> 就能轻松搞定……但是……

最新的RPM是7.4p1,不符合要求

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core) 
[root@localhost ~]# yum info openssh
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.cqu.edu.cn
 * updates: mirrors.aliyun.com
Available Packages
Name        : openssh
Arch        : x86_64
Version     : 7.4p1

目标机器与互联网隔离,如果RPM包不可用,只能用源码编译,如果编译遇到文件缺失等问题,会比较繁琐。

多方寻找7.9p1+CentOS7的RPM资源,未果,只能编译了。

尝试源码编译

# 卸载7.4
yum uninstall openssh
# 安装编译所需的headers和libraries
yum install zlib-devel
yum install openssl-devel
yum install pam-devel
# 下载源码包
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz
# 解压
tar zxvf openssh-7.9p1.tar.gz
# 切目录
cd openssh-7.9p1
# 配置
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam
# 编译
make
# 安装
make install
# 拷贝ssh-copy-id
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-7.9p1
# 拷贝文档
install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.9p1
# 允许root登录(7.9改变了PermitRootLogin的默认值)
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 使用PAM
echo "UserPAM yes" >> /etc/ssh/sshd_config
# 注册服务
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
# 加入sshd到chkconfig管理
chkconfig --add sshd
# 设置开机启动
chkconfig sshd on
# 检查启动项
chkconfig --list sshd
# 验证版本信息 
ssh -V
# 重启ssh服务
service sshd restart

如果一切顺利,客户机能够通过ssh登录服务器。

可能遇到的错误和解决方法

在安装过程中我遇到过多个不同的错误,在总结这篇短文时,才发现那些都是弯路。

ssh连接时出错:error Could not get shadow information for <user>

服务启动成功,用户密码也都对,就是无法建立连接,可能是UsePAMSELinux的问题。

客户端登录时,即便输入了正确的密码,仍然提示:

[user@localhost~]# ssh [email protected]     
[email protected]'s password: 
Permission denied, please try again.

查看服务端日志(/var/log/messages),发现:

error: Could not get shadow information for <user>
Failed password for <user> from <ip> port <port> ssh2

这可能是因为UsePAM没有启用,检查/etc/ssh/sshd_config

# 检查UsePAM,确认是否启用了PAM
# UseAPM no
UsePAM yes

修改配置后,重启sshd服务后,服务恢复。如果编译时缺了--with-pam参数,UsePAM yes会让服务报错。

如果不想修改PAM选项,也可以关闭SELinux

# 临时关闭
setenforce 0

# 永久关闭
vi /etc/selinux/config
# 然后将 SELINUX=enforcing 修改为 SELINUX=disabled

UsePAM yes时,无论启用或禁用SELinux,都不会引发Could not get shadow information错误。

sshd启动报错:Bad SSH2 cipher spec '...'

可能是升级了opensslsshd_config配置未更新,或者配置有错,造成不一致。

可以查询当前被支持的加密方法:

[user@localhost ~]# ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
[email protected]
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]

也可以用paste -s -d,直接将查询结果串接并写入配置文件:

echo 'Ciphers' `ssh -Q cipher | paste -d, -s` >> /etc/ssh/sshd_config

sshd启动报错:Bad SSH2 mac spec '...'

查询被支持的消息摘要算法:

[user@localhost ~]# ssh -Q mac
hmac-sha1
hmac-sha1-96
hmac-sha2-256
hmac-sha2-512
hmac-md5
hmac-md5-96
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

也可以用paste -s -d,直接将查询结果串接并写入配置文件:

echo 'MACs' `ssh -Q mac | paste -d, -s` >> /etc/ssh/sshd_config

sshd启动报错:Bad SSH2 KexAlgorithms '...'

查询支持的算法:

[user@localhost ~]# ssh -Q kex
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
curve25519-sha256
[email protected]

也可以用paste -s -d,直接将查询结果串接并写入配置文件:

echo 'KexAlgorithms' `ssh -Q kex | paste -d, -s` >> /etc/ssh/sshd_config

技巧

  1. 遇到错误,服务端日志必须是首选检查点。
  2. 可借助sshd -d启用debug模式来排查问题。
  3. 可以用ssh -vvv以便更快找到问题。

参考

https://help.aliyun.com/knowl...

相关推荐