文章出处,做了一些修改

在一次例行的安全扫描中有发现安全风险提示: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
                   aes128-gcm@openssh.com
                   aes256-gcm@openssh.com
                   chacha20-poly1305@openssh.com

             The default is:

                   chacha20-poly1305@openssh.com,
                   aes128-ctr,aes192-ctr,aes256-ctr,
                   aes128-gcm@openssh.com,aes256-gcm@openssh.com

             The list of available ciphers may also be obtained using "ssh -Q cipher".

修改SSH配置文件,修改加密算法:
/etc/ssh/sshd_config(去掉arcfour,arcfour128,arcfour256等弱加密算法,连cbc类的也不建议使用,仅使用ctr模式加密算法)。

ssh_configsshd_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>

参考来源:

SSH weak ciphers and mac algorithms

sshd_config - SSH Server Configuration

标签: none

添加新评论