由于低版本的OpenSSH使用了过时不安全的加密算法协议,通常OpenSSH在版本迭代更新时会弃用这些不安全的加密算法。
如果我们仍要继续使用旧版本的OpenSSH,可以根据实际情况,考虑屏蔽掉不安全的加密算法,以降低安全风险。
查看客户端支持的kexalgorithms
ssh -Q kex
sshd -T | grep -w kexalgorithms
修改sshd_config配置文件,屏蔽掉不安全的KexAlgorithms。其中sshd_config的配置参数说明如下:
man sshd_config |grep -A 40 -w KexAlgorithms
echo "KexAlgorithms curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1" >> /etc/ssh/sshd_config
systemctl restart sshd
sshd -T | grep -w kexalgorithms
客户端指定KexAlgorithms进行连接测试
ssh -v -oKexAlgorithms=diffie-hellman-group1-sha1 [email protected]
ssh -v [email protected]
查看客户端支持的ciphers
ssh -Q cipher
sshd -T | grep -w ciphers
修改sshd_config配置文件,屏蔽掉不安全的ciphers,重启sshd服务。其中sshd_config的配置参数说明如下:
man sshd_config |grep -A 40 -w Ciphers
echo "Ciphers [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]" >> /etc/ssh/sshd_config
systemctl restart sshd
sshd -T | grep -w ciphers
客户端指定 CBC Mode Ciphers 进行连接测试
ssh -v -oCiphers=3des-cbc [email protected]
ssh -v [email protected]
与上述 SSH Weak Key Exchange Algorithms Enabled(启用SSH弱密钥交换算法)中方法类似,屏蔽不安全的KexAlgorithms DH算法
ssh -Q kex #查看客户端支持的KexAlgorithms列表
ssh -Q cipher #查看客户端支持的Ciphers列表
sshd -T | grep -w kexalgorithms #查看服务端支持的KexAlgorithms列表
sshd -T | grep -w ciphers #查看服务端支持的Ciphers列表
man sshd_config |grep -A 40 -w KexAlgorithms #查看当前openssh版本支持的KexAlgorithms列表
man sshd_config |grep -A 40 -w Ciphers #查看当前openssh版本支持的Ciphers列表
ssh -v -oKexAlgorithms={KexAlgorithms} {user}@{ipaddr} #客户端指定KexAlgorithms进行连接测试
ssh -v -oCiphers={ciphers} {user}@{ipaddr} #客户端指定Ciphers进行连接测试,并显示debug信息
服务端支持的KexAlgorithms和Ciphers列表还可以使用nmap测试查看
nmap --script ssh2-enum-algos 192.168.64.100
支持的KexAlgorithms列表:
支持的Ciphers列表:
互联网工程任务组官方文档1:https://datatracker.ietf.org/doc/html/draft-ietf-curdle-ssh-kex-sha2-20#page-16
互联网工程任务组官方文档2:https://datatracker.ietf.org/doc/html/rfc8732
openbsd官方帮助文档:https://man.openbsd.org/sshd_config
nmapdoc:https://nmap.org/nsedoc/scripts/ssh2-enum-algos.html
https://github.com/Balasys/dheater
不同版本openssh支持的kexalgorithms对比,以7.4和8.7为例
可以看到8.7版本相较于7.4,舍弃了三种kex:
这三个dh协议算法,在 ietf 官方文档 中也有详细的说明
因此,修复该CVE漏洞时,需要将不安全的dh协议算法从ssh服务端支持列表中移除
sshd -T | grep -w kexalgorithms
echo "kexalgorithms curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256" >> /etc/ssh/sshd_config
systemctl restart sshd
sshd -T | grep -w kexalgorithms
访问测试
如果还是扫描到该漏洞,则参考 https://github.com/Balasys/dheater 中的方法,直接将全部dh算法移除。不影响ssh连接访问即可。
sshd -T | grep -w kexalgorithms
echo "kexalgorithms curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521" >> /etc/ssh/sshd_config
systemctl restart sshd
sshd -T | grep -w kexalgorithms
sshd -T | grep -w kexalgorithms
echo "kexalgorithms -diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256" >> /etc/ssh/sshd_config
systemctl restart sshd
sshd -T | grep -w kexalgorithms