OpenSSH和AsyncSSH传输协议存缺陷,可致中间人“水龟”攻击
来源:     阅读:3
易浩激活码
发布于 2025-11-17 23:07
查看主页


OpenSSH和AsyncSSH传输协议存缺陷,可致中间人“水龟”攻击

最近一个德国安全研究学者发表论文披露了一种针对SSH传输层层交互协议攻击,并将其命名为水龟(水龟)攻击。

水龟攻击会在握手过程中操纵序列号,从而在使用某些广泛使用的加密模式时破坏SSH通道的完整性。该操作使攻击者可以删除或修改通过通信通道交换的消息,从而导致OpenSSH 9.5中用于用户身份验证的公钥算法降级或禁用针对击键计时攻击的防御。

水龟攻击利用了SSH传输层协议的弱点,该协议为OpenSSH在十多年前引入加密算法和模式。水龟攻击会在客户端或服务器不注意的情况下截断重大的协商消息,从而降低已建立连接的安全性。

德国波鸿鲁尔大学的研究人员开发了水龟攻击,还发现了AsyncSSH中可利用的实现缺陷。与水龟攻击相关的漏洞被比标记为:CVE-2023-48795、CVE-2023-46445 和CVE-2023-46446。其中CVE-2023-48795为通用的SSH协议漏洞和特定Python SSH客户端AsyncSSH的CVE-2023-46445和CVE-2023-46446(AsyncSSH在2.14.2中已修补该漏洞)。

攻击原理

水龟攻击必须的条件是,攻击者需要处于网络层的中间对手(MiTM)位置才能拦截和修改握手交换(中间人攻击),且SSH握手双方使用ChaCha20-Poly1305或ChaCha20-Poly1305或ChaCha20-Poly1305来保护连接的安全CBC与Encrypt-then-MAC。

OpenSSH和AsyncSSH传输协议存缺陷,可致中间人“水龟”攻击

握手完成后交换的消息中的数据决定了攻击影响的严重程度。

水龟攻击(CVE-2023-48795) 是一种前缀截断攻击,允许MITM攻击者在扩展协商期间降低SSHv2连接的安全性。该问题与2015 年在TLS 1.3中发现并在草案阶段修复的问题类似。

研究论文指出:“成功的水龟攻击可能导致使用不太安全的客户端身份验证算法,并停用OpenSSH 9.5中针对击键定时攻击的特定对策。”在某些超级特殊的情况下,可以用来解密一些秘密,例如用户登录时的密码或部分密码,但这只是理论上而已,在实际场景几乎无法成功。

一个简单的过程是:

当SSH客户端连接到SSH服务器时,在建立安全的加密通道之前,两者先要进行握手,以明文形式交换彼此的信息。双方各有两个序列计数器:一个用于接收的消息,一个用于发送的消息。每当发送或接收消息时,相关序列计数器就会递增; 因此,计数器不断记录每一方发送和接收的消息数量。

OpenSSH和AsyncSSH传输协议存缺陷,可致中间人“水龟”攻击

上面的握手中使用有限域Diffie-Hellman密钥交换的SSH握手。包含的序列号是隐式的并由BPP维护。Snd表明发送数据包的计数器,Rcv表明接收数据包的计数器。使用经过验证的加密验证的序列号以粗体显示。

作为一种中间人攻击,水龟涉及在握手期间将明文“忽略”消息注入到预安全连接中,让客户端认为它来自服务器,并为收到的消息增加其序列计数器。否则该消息将被忽略。然后,一旦建立了安全通道,MITM攻击者就会阻止服务器向客户端发送有关附加防御的消息。消息是否加密并不重大:攻击者只是阻止消息到达,而客户端永远不会看到它,也不会对其进行操作。

由于之前插入了明文忽略消息,因此客户端最终依旧收到预期数量的消息,并且服务器认为它发送了正确数量的消息。

即使消息在初始化期间被中间人攻击者拦截并阻止,发送和接收序列计数器在双方上都显示正确,这一点至关重大,由于这些计数随后用于验证握手过程的完整性。如果计数正确,则允许继续连接。这就是插入“忽略”消息的缘由,这样当扩展消息在安全通道中被阻止时,客户端和服务器都一无所知。

OpenSSH和AsyncSSH传输协议存缺陷,可致中间人“水龟”攻击

研究人员对BPP进行新颖的前缀截断攻击的图示。服务器发送SC1和SC2,但客户端只接收SC2。

可以插入任意数量的“忽略”消息,以在连接建立期间消除从服务器到客户端的消息。通过这种方式,可能会扰乱连接的设置,降低所使用的安全性,禁用扩展,并可能利用特定客户端或服务器实现中更深层次的弱点。

总而言之,安全通道所使用的加密算法对于SSH连接能否成功受到攻击至关重大。

水龟攻击研究中分析了三种可能受影响的算法:

OpenSSH和AsyncSSH传输协议存缺陷,可致中间人“水龟”攻击

ChaCha20-Poly1305被确定为“易受攻击且完全可利用”。

CBC-Encrypt-then-MAC (CBC-EtM)也很容易受到攻击,并且“概率上”可被利用,但根据实施情况,攻击可能会失败。

CTR-Encrypt-then-MAC算法也存在漏洞,但实际上无法利用。

根据论文研究调查,在面向公众的SSH服务器支持“至少一种可以在实践中利用的模式”的比例超过四分之三,为77%的,还有57%将可利用的算法设置为首选。

尽管水龟攻击有特定要求,但上述加密模式在现实中被广泛使用(调查显示为77%)从而使得该攻击在现实场景中变得可行。

多家相关软件供应商正在逐步缓解安全问题。一种解决方案是实施严格的密钥交换,使握手过程中的包注入无法实现。

不过,要普遍解决这个问题还需要一段时间,同时严格的密钥交换对策只有在客户端和服务器上都实施时才有效。

研究人员在Github发布了关于水龟漏洞的安全扫描工具(github:/RUB-NDS/Terrapin-Scanner),管理员可以使用它来确定SSH客户端或服务器是否容易受到攻击。

由于水龟攻击最大的缓解因素是MiTM要求(中间人攻击),这使其威胁显得并不那么严重。因此,在大多数人来说,暂时可以无需思考紧急升级相关补丁,而是做好对应的设置缓解措施。

风险评估

在早期阶段,评估使水龟攻击成为可能的协议缺陷的全部严重性很困难,由于它取决于一系列随网络变化而变化的变量,而研究人员并不了解这些变量。

目前,研究人员设计了两种利用前缀截断攻击的方法。 一种方法是降级OpenSSH 和其他SSH应用程序可用于保护连接的某些扩展方。开始提供的对策:

例如,扩展降级可以禁用从10月份发布的OpenSSH版本9.5。该扩展可防止击键计时,这是一类可以通过测量击键间计时来准确预测键入单词的攻击。

水龟攻击还可以覆盖指定使用SHA2加密哈希函数的旧扩展参数。因此,SSH将改用较弱的SHA1。

水龟攻击利用中最经典的就是,研究中涉及到两个特定于AsyncSSH的漏洞(CVE-2023-46445和CVE-2023-4644)。

AsyncSSH是Python语言的SSH实现,每天估计有60000次下载。其中一个漏CVE-2023-46445可被利用替换服务器发送的扩展信息消息,让攻击者控制其内容,这比一般攻击仅仅丢弃消息要严重一些。当使用AsyncSSH的客户端连接到使用任何类型 SSH 软件的服务器,同时两者传输“EXTINFO”消息(如 SSH 协议中所述)时,漏洞就会起作用。

水龟攻击利用CVE-2023-46446当使用任何SSH应用程序的客户端连接到运行AsyncSSH的服务器时,漏洞允许攻击者通过注入或删除数据包或模拟建立的shell来控制SSH客户端会话的远程端。

CVE-2023-46446 在最坏的情况下,AsyncSSH服务器在连接时为经过身份验证的用户启动shell,将用户切换到经过身份验证的用户。在这种情况下,攻击者可以事先准备一个修改后的外壳来进行完美的钓鱼攻击,成为应用层的中间人。 当经过身份验证的用户的用户名未在身份验证之外使用时,此漏洞不会影响连接”

缓解措施

研究人员很快表明,这并不是一个需要人们放下工具并优先解决的缺陷。他们表明:“该攻击需要一个活跃的中间人攻击者,该攻击者可以拦截并修改TCP/IP层的连接流量。”,“此外,需要协商ChaCha20-Poly1305或任何CBC密码,并结合Encrypt-then-MAC作为连接的加密模式。”

密切关注补丁或更新是一个不错的选择,并在可以的情况下安装它们:例如,如果使用的是Linux,则这些应该通过常用的发行版更新方法进入。

OpenSSH 9.6已经发布,它通过严格的密钥交换协议解决了水龟攻击的问题,如果服务器和客户端都支持,应该可以阻止这些攻击。

但是将易受攻击的客户端连接到已修补的服务器,反之亦然,依旧会导致易受攻击的连接。所以客户端也需要同时升级。

目前Putty 0.8发布可以水龟攻击问题。Libssh也发布了Libssh 0.10.6和libssh 0.9.8来解决该问题。

除了安装更新之外,管理员还可以通过在SSH服务器配置中禁用受影响的加密模式来缓解攻击,并改用AES-GCM等不易受攻击的算法。

但是该设置也有风险如果服务器配置不当或客户端不支持该配置,则可能会导致客户端连接不到该服务器上,所以要谨慎验证,在在线上应用。

另外使用AES-GCM算法时,旧版本的 OpenSSH(6.2 和 6.3)也容易受到缓冲区溢出的影响,需要注意。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境
相关推荐
一位95后程序员的分享:如何拿下年薪45万的offer?
HDFS_DELEGATION_TOKEN 复原及处理方案
破解/优化C++代码:C++代码的编译过程
手把手教你玩转豆包AI编程,纯干货不啰嗦!
Linux基础入门(四)
首页
搜索
订单
购物车
我的