SSH服务支持的加密算法介绍
文章出处,做了一些修改
在一次例行的安全扫描中有发现安全风险提示:SSH服务配置不建议使用arcfour流密码或无任何密码,RFC 4253 不建议使用arcfour弱加密算法,仅使用CTR模式加密算法,如AES-CTR。所以花了一些时间来简单地查找资源并分析了相关的原因,在此写下笔记。
为了确保信息的传输,SSH 在事务中的各个点采用了许多不同类型的数据操作技术。这些包括对称加密,非对称加密和散列的形式。如果配置为CBC模式的话,OpenSSH没有正确地处理分组密码算法加密的SSH会话中所出现的错误,导致可能泄露密文中任意块最多32位纯文本。在以标准配置使用OpenSSH时,攻击者恢复32位纯文本的成功概率为2^{-18},此外另一种攻击变种恢复14位纯文本的成功概率为2^{-14}。查询本机上的ssh服务所支持并启用了的算法:
sshd -T | grep ciphers | perl -pe 's/,/\n/g' | sort -u
sshd -T | grep "\(ciphers\|macs\|kexalgorithms\)"
SSH的配置文件中加密算法没有指定的话,较低版本的ssh-server
默认支持所有加密算法,包括arcfour
,arcfour128
,arcfour256
等这些弱加密算法,这就可能会导致安全风险。sshd -T
会将显示全量的配置,ssh -Q
会查询这些配置中分类的一些参数方法等:
[-Q cipher | cipher-auth | mac | kex | key]
查询支持的加密算法:
ssh -Q cipher-auth #启用的
ssh -Q cipher #所有的
也可以通过查看man 5 sshd_config
来查询支持的算法和默认算法,以下是openssh-server-8.4p1所查询到的结果:
Ciphers
Specifies the ciphers allowed. Multiple ciphers must be comma-separated. If the specified value begins with a ‘+’ character, then the specified ciphers
will be appended to the default set instead of replacing them. If the specified value begins with a ‘-’ character, then the specified ciphers (including
wildcards) will be removed from the default set instead of replacing them.
The supported ciphers are:
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]
The default is:
[email protected],
aes128-ctr,aes192-ctr,aes256-ctr,
[email protected],[email protected]
The list of available ciphers may also be obtained using "ssh -Q cipher".
修改SSH配置文件,修改加密算法:/etc/ssh/sshd_config
(去掉arcfour
,arcfour128
,arcfour256
等弱加密算法,连cbc
类的也不建议使用,仅使用ctr
模式加密算法)。
ssh_config
和sshd_config
都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。下面为建议的配置:
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
#HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss
KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-256,hmac-sha2-512,hmac-sha1
保存配置文件后重启SSH服务。
远程验证
ssh -vv -oCiphers=aes128-cbc,3des-cbc,blowfish-cbc <server>
ssh -vv -oMACs=hmac-md5 <server>
ssh -vv -c aes256-cbc <server>
使用nmap验证:
nmap --script "ssh2*" <ipaddr>
可以看到服务端已不支持arcfour
,arcfour128
,arcfour256
等弱加密算法。高版本的ssh服务还支持对加密算法前加'+|-'来启用或关闭相应的算法。
Ciphers -arcfour*
# 或
Ciphers -arcfour,arcfour128,arcfour256
SSH Weak MAC Algorithms Enabled 漏洞修复使用同样的方式,在服务端添加如下行:
MACs hmac-sha1,umac-64,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160
查看远端ssh-server支持的加密算法:
nmap --script ssh2-enum-algos -sV -p <port> <host>
当然客户端也可以主动指定加密算法/etc/ssh/ssh_config
set:
Host *
ciphers aes256-ctr,aes192-ctr,aes128-ctr
另外提及关于SSL配置文件中的SSL Cipher
参数
不同Web服务软件的配置文件位置及参数名称不同,需根据实际情况查找,具体安全算法配置可参考该网站。
修改前后支持的加密算法对比:
nmap -p 443 --script "ssl-enum-ciphers" <ipaddr>
参考来源: