德国研究团队发现,处于优势位置的攻击者使用中间人攻击,能在SSH连接的前期降低其安全性,从而可能窃取用户登录密码,目前绝大多数SSH服务器均受影响;
普通用户无需惊慌,但出于安全考虑,还是要及时更新或采取防范措施。
12月21日消息,如果满足条件,处于优势位置的攻击者可以利用SSH协议中的一个漏洞,削弱人们连接的安全性。
SSH协议是一种远程连接计算机的标准。该协议在互联网中扮演了极其重要的角色,它是数百万组织内部应用程序安全的基石,保护了谷歌、亚马逊、Facebook和其他大公司至关重要的云环境。
Terrapin攻击概述
通过中间人攻击,攻击者可能迫使SSH客户端采用较弱的身份验证方式,并停用一些防御机制。目前很难准确评估这个漏洞的真正影响,因为它完全取决于各个客户端-服务器的配置、协议实现及其他因素。SSH软件的主要用途是通过命令行界面连接远程系统,从而使用或管理这些系统。
德国波鸿鲁尔大学的计算机科学家Fabian Bäumer、Marcus Brinkmann和Jörg Schwenk发表合著的技术论文,描述了Terrapin攻击技术。他们于今年10月发现这一漏洞,私下向SSH客户端和服务器的开发人员披露了细节。目前所有的补丁和信息都已经公开。
如果各位读者对底层细节感兴趣的话,三位研究人员在GitHub上发布了相关的概念验证脚本和其他材料。此外,他们还提供了一个开源工具,可用于检测用户SSH客户端或服务器是否容易受到Terrapin攻击。
基于这项研究成果,SSH软件更新应该正在逐步向用户发布,并同时提供一些临时的缓解措施。这并不是一个需要恐慌的问题,因为攻击者是针对您脆弱的连接发动中间人攻击,而不是直接攻击您的服务器。这本质上是一种降级攻击,而非解密或命令注入问题。而且有很多方法,可以立即保护自己免受Terrapin攻击。
Terrapin攻击包括三个漏洞:CVE-2023-48795,这是通用的可利用的协议级SSH漏洞;CVE-2023-46445和CVE-2023-46446,这些是针对Python SSH客户端AsyncSSH的特定漏洞,该客户端每日下载量高达6万次。
AsyncSSH客户端的开源代码存在特定于该客户端的实现错误。这些错误可以被利用发动Terrapin风格的攻击,例如让受害者不知情地登录到攻击者控制的shell帐户,而不是他们自己的帐户。这说明不同客户端和服务器可能以不同方式容易受到Terrapin攻击。AsyncSSH已经发布修补版本,以解决版本2.14.1中的CVE-2023-46445和CVE-2023-46446问题,以及版本2.14.2中的通用CVE-2023-48795问题。
Terrapin攻击原理
Terrapin(CVE-2023-48795)是一种前缀截断攻击,攻击者使用中间人攻击,能在SSHv2连接的扩展协商期间降低其安全性。这与2015年Cédric Fournet在TLS 1.3协议中发现并于草案阶段修复的漏洞类似。
正如三位研究人员所述,一次成功的Terrapin攻击可能会“导致使用不够安全的客户端身份验证算法,并禁用OpenSSH 9.5中针对击键定时攻击的特定防御措施。”在某些非常特定的情况下,这种攻击手段可以用来解密一些机密信息,例如部分或全部破解用户登录密码。但这并不简单,在实际操作中很可能失败。
让我们更加深入地了解Terrapin攻击原理。SSH客户端连接到SSH服务器时,在建立安全加密通道之前,它们会进行一次握手。通过握手,它们以明文形式互相交换信息。每一方都拥有两个序列计数器:一个针对接收消息,另一个针对发送消息。每发送或接收一条消息,相应的序列计数器的计数就会增加。这样,这些计数器记录了每一方已发送和已接收消息的总数。
作为中间人攻击,Terrapin会在安全通道建立之前的握手阶段注入一条明文的“忽略”消息,使客户端误以为消息来自服务器,让接收消息序列计数器增加计数。消息本身将被忽略。此后,一旦建立了安全通道,中间人攻击者会阻止服务器向客户端发送有关额外防御措施的消息。消息是否加密并不重要:攻击者只是阻止其到达,客户端既看不到也不会对其做出反应。
由于之前插入了一条明文的“忽略”消息,客户端最终仍然会收到预期数量的接收消息,而服务器则认为它已发送了正确数量的消息。
即使在初始化过程中,消息被中间人攻击者拦截和阻止,双方的发送和接收的序列计数器都显示正确。这一点至关重要,因为这些计数器随后用于验证握手过程是否完整。只要计数正确,将被允许继续连接。这就是为什么要插入“忽略”消息。目的是在安全通道中阻塞扩展消息时,客户端和服务器都不知情。
这篇关于Terrapin攻击的论文提供了攻击流程图。其中,正被验证的序列号以粗体显示。如需了解所有细节,请参阅论文。
可以在建立连接过程中插入任意数量的“忽略”消息,从而阻止来自服务器发送到客户端的消息。就像这篇技术论文展示的那样,您可以巧妙地调整注入和阻止消息的顺序,以进行更复杂的攻击。通过这种方式,可以干扰连接的设置,降低所使用的安全性,禁用扩展,并可能利用特定客户端或服务器实现中更深层次的漏洞。
以上说明,能否成功攻击SSH连接,安全通道所采用的加密算法起到决定性作用。
据称,由于序列号在密钥派生中的使用方式,ChaCha20-Poly1305容易受到Terrapin攻击并可以完全被利用。这个算法本身并没有加密弱点,只是在SSH中的使用方式存在问题。
我们了解到,CBC-Encrypt-then-MAC(CBC-EtM)也容易受到攻击,并且“有概率”可以被利用。当然,根据具体的实现情况,攻击可能会失败。CTR-Encrypt-then-MAC算法容易受到攻击,但实际上无法被利用。
超过77%的面向公众的SSH服务器支持“至少一种在实践中可以被利用的模式”。三位研究人员表示,其中57%将可被利用的算法设置为首选。
打补丁还是采取缓解措施?
研究人员很快得出结论,这个漏洞并不需要立即停止工作并优先处理。
他们说:“这种攻击需要主动的中间人攻击者有能力拦截并修改连接在TCP/IP层的流量。此外,需要协商使用ChaCha20-Poly1305或任何密码分组链接(CBC)模式与Encrypt-then-MAC结合作为连接的加密模式。”
留意补丁或软件更新是一个不错的选择。这样,在有需要时可以快速安装。如果您使用Linux系统,通过常规的发行版更新应该可以获取补丁或软件更新。
本周一发布的OpenSSH 9.6包含了对Terrapin的严格密钥交换协议的修复。如果服务器和客户端都支持的话,这就足以挫败Terrapin攻击。
研究人员指出,“将一个容易受攻击的客户端连接到已修复的服务器上,或将容易受攻击的服务器连接到已修复的客户端上,仍然会导致连接易受攻击。”
与此同时,Putty 0.8于本周发布,以解决Terrapin问题。libssh 0.10.6和libssh 0.9.8也已发布,以抵御Terrapin攻击。我们预计还会有其他解决方案。
除了安装软件更新之外,管理员还可以通过在SSH服务器配置中禁用受影响的加密模式并使用无漏洞算法(如AES-GCM)来缓解攻击。
研究人员警告说,如果服务器配置不当或客户端不支持配置,可能会导致服务器访问失败。旧版本的OpenSSH(6.2和6.3)在使用AES-GCM时也容易受到缓冲区溢出的攻击,需要特别注意。
三位研究人员总结道:“Terrapin不是一个可以通过更新单个库或组件来修复的简单软件漏洞。相反,客户端和服务器都需要更新,保护连接免受前缀截断攻击。这意味着我们需要加强对所有SSH客户端和服务器实现问题的认识,这需要相当大的工作量。”
参考资料:
theregister.com