如何禁用 ChaCha20-Poly1305 加密以阻止 terrapin ssh 攻击

xpt*_*xpt 3 ssh configuration openssh

如何在 Debian 下从 ssh 禁用ChaCha20-Poly1305加密?

我尝试过(作为root):

echo 'Ciphers -chacha20-poly1305@openssh.com' > /etc/ssh/sshd_config.d/anti-terrapin-attack
echo 'Ciphers -chacha20-poly1305@openssh.com' > /etc/ssh/ssh_config.d/anti-terrapin-attack

systemctl restart sshd
Run Code Online (Sandbox Code Playgroud)

但我的ssh -Q cipher仍然显示chacha20-poly1305@openssh.com

更新:

由于完全解决我的问题的答案分散在不同的答案中,让我将它们总结在一处。

  • 为什么?有什么大惊小怪的?-- 查看针对 SSH 发现的攻击,Debian 的openssh稳定版本比官方修复落后几代。因此我现在需要自己修复它。

  • 为什么 OP 不起作用?——两点:

    • ssh -Qcipher 始终显示编译到二进制文件中的所有密码
    • “ ”目录下的所有配置文件/etc/ssh/sshd_config.d都应以“ ”结尾.conf
  • 如何禁用攻击?-- 请参阅 Floresta 的实用解决方案https://unix.stackexchange.com/a/767135/374303

  • 如何验证攻击是否已被禁用?-- 基于gogoud的实际解决方案:

nmap --script ssh2-enum-algos -sV -p 22 localhost | grep chacha20 | wc
      0       0       0
Run Code Online (Sandbox Code Playgroud)

最好在应用 Floresta 修复之前和之后运行它。

bk2*_*204 6

ssh -Q cipher始终显示编译到二进制文件中的所有密码,无论它们是否启用。对于不安全或默认禁用的算法也是如此。

假设您使用的是支持此语法的最新版本的 OpenSSH,您设置的配置应该足以禁用该算法。您可以通过尝试通过 连接来验证这一点ssh -vvv,这将打印服务器到客户端的密码列表。

如果您没有最新版本的 OpenSSH,则不支持此语法,并且您需要显式列出所需的密码。默认值列在 中man sshd_config,对于我的 OpenSSH 版本(Debian 9.6),它看起来像这样(没有 ChaCha):

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
Run Code Online (Sandbox Code Playgroud)

假设您拥有现代客户端,将 AES-GCM 放在列表中的第一位将提高性能(如果您不使用先加密后 MAC 的情况下还可以提高安全性),但是 OpenSSH 的旧版本在使用 AES-GCM 重新生成密钥时会出现段错误(所有主要发行版都已修补),这就是它们位于列表末尾的原因。

请注意,如果您在客户端和服务器上都使用修补过的操作系统,则无需禁用chacha20-poly1305@openssh.com. 原因是授权的客户端和服务器将与OpenSSH 修补版本中的kex-strict-c-v00@openssh.com和扩展协商安全连接。kex-strict-s-v00@openssh.com随机刮刀做什么并不重要,因为它们很快就会掉落,并且无需保护它们。

但是,如果您没有使用修补过的操作系统,那么您当然容易受到攻击,但话又说回来,您也容易受到各种其他漏洞的影响。


小智 5

我认为您最初的解决方案是部分正确的。在我的 Debian 12 机器上,/etc/ssh/sshd_config顶部包含以下行:

Include /etc/ssh/sshd_config.d/*.conf
Run Code Online (Sandbox Code Playgroud)

所以该/etc/ssh/sshd_config.d目录下的所有配置文件都应该以.conf. 同样对于/etc/ssh/ssh_config.d.

以下命令适用于我的系统:

Include /etc/ssh/sshd_config.d/*.conf
Run Code Online (Sandbox Code Playgroud)