SSH 协议漏洞 – Terrapin 攻击 CVE-2023-48795:你需要知道的一切

admin 2024年8月30日00:39:33评论27 views字数 7199阅读23分59秒阅读模式

SSH Terrapin 攻击(CVE-2023-48795) 最近引起了人们的关注,该攻击通过截断加密信息来攻击 SSH 协议安全。SSH 协议本身的固有缺陷影响了广泛的 SSH 客户端和服务器实现。在我们最初的研究交流之后,这篇文章将详细介绍其基本原理和影响。

  • 受影响的实现
  • Terrapin 攻击利用影响
  • CVE-2023-48795 概述
  • CVE-2023-48795 分析
  • OpenSSH 中如何修复 CVE-2023-48795
  • 使用 JFrog Xray 和 JFrog Advanced Security 解决 CVE-2023-48795

受影响的实现

许多 SSH 客户端和服务器实现都受到影响,例如 OpenSSH、paramiko、PuTTY、KiTTY、WinSCP、libssh、libssh2、AsyncSSH、FileZilla 等等。以下是已知受影响实现的完整列表。

Terrapin 攻击利用影响

  1. 签名降级攻击,它通过多种方式危害 SSH 连接的安全性。
  2. 在 OpenSSH 实现中,特别是 9.5 以上的版本,攻击绕过了按键时间混淆功能,这可能允许 MitM 攻击者通过检查 SSH 网络数据包来暴力破解 SSH 密码。

CVE-2023-48795 概述

Terrapin 攻击是针对 SSH 协议本身的一种新型攻击,通过中间人 (MitM) 攻击,使受感染的客户端错误地认为服务器缺乏对用户身份验证中使用的最新签名算法的支持。

该漏洞影响所有 SSH 连接。本研究将重点关注 OpenSSH 实现。

有两种易受攻击的 OpenSSH 配置:

  1. ChaCha20-Poly1305
  2. 任何aes(128|192|256)-cbc使用默认 MAC 的密码(或任何使用 Encrypt-then-MAC、EtM 的 MAC,例如 - hmac-sha2-256-etm@openssh.com)。

默认的 OpenSSH 客户端和服务器容易受到此攻击,因为它们配置为允许易受攻击的ChaCha20-Poly1305 cipher

注意:仅更新服务器或客户端是不够的!两者都必须打上补丁。易受攻击的客户端连接到已修复的服务器仍会导致易受攻击的连接。

CVE-2023-48795 分析

利用 CVE-2023-48795,中间人攻击者可以截断 SSH 握手的重要部分,而无需关闭 SSH 连接,这会对 SSH 客户端/服务器造成安全影响。为了检查攻击的影响,让我们深入了解 SSH 握手的具体细节。

SSH 握手

客户端发起 TCP 连接,然后执行协议版本交换(RFC 4253) 。

SSH 协议漏洞 – Terrapin 攻击 CVE-2023-48795:你需要知道的一切
SSH 握手

根据 RFC,随后将进行算法协商。请注意 RFC 指出:

Choose the first algorithm that satisfies the following conditions:
  + the server also supports the algorithm

意思是,客户端将选择服务器支持的第一个算法。在 OpenSSH 的默认情形下,这将是chacha20-poly1305@openssh.com

SSH 协议漏洞 – Terrapin 攻击 CVE-2023-48795:你需要知道的一切
SSH 握手

EXT_INFO 消息

根据RFC 8308,在 SSH 密钥交换之后,该消息安全地支持协议扩展。该EXT_INFO消息是攻击中非常重要的一部分。由于 Terrapin 漏洞,数据包可能会被截断,从而导致安全性降级,并禁用OpenSSH 9.5p1键盘计时混淆功能(请参阅以下部分“按键计时混淆”)。

协议扩展的一个例子是扩展签名算法列表。现代算法被添加到此列表中,例如使用 的算法SHA-2。当数据包被截断时,连接的安全性将降低,并将回退到SHA-1散列算法。众所周知,这实际上已被破坏,并可能导致对 SSH 连接的多种攻击(例如由于散列冲突而导致的帐户冒充)。

同一个数据包包含以下消息:

  1. Kex(密钥交换)回复消息
  2. 新 Keys 消息
  3. EXT_INFO 消息

SSH2_MSG_EXT_INFO以下是来自客户端调试日志的数据包的内容:

debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],ssh-dss,ssh-rsa,rsa-sha2-256,rsa-sha2-512>
debug1: kex_ext_info_check_ver: [email protected]=<0>
debug1: kex_ext_info_check_ver: [email protected]=<0>

实用细节

识别 Terrapin 攻击的研究人员发现,中间人 (MitM) 攻击者能够绕过所选的加密协议。在这种情况下,攻击者可以忽略EXT_INFO通常用于协商各种协议扩展的消息,而不会引起客户端或服务器的怀疑。

通常,客户端在从服务器接收到后续二进制数据包时会检测到数据包删除,因为这会导致序列号不匹配。

SSH 协议漏洞 – Terrapin 攻击 CVE-2023-48795:你需要知道的一切

中间人 Terrapin 攻击

为了应对这种情况,攻击者会在握手过程中策略性地引入数据包来操纵序列号,从而逃避检测。注入的数据包的具体内容取决于我们想要绕过的加密密码:

  1. ChaCha20-Poly1305:MitMSSH2_MSG_IGNORE在握手结束前注入一条消息。序列号的更改允许 MitMEXTINFO从安全通道中剥离。
  2. CBC-EtM:MitM 在握手结束前注入一条未知消息。与前一种情况一样,这使攻击者能够从安全通道中剥离 EXTINFO。但是,在这种情况下,成功率将是概率性的。让我们深入了解一下原因:使用 MAC(消息认证码)有两种不同的方法:EaM(加密和 MAC)和 EtM(加密然后 MAC)。在 EaM 方法中,MAC 是通过明文计算的。当攻击者使用 Terrapin 以这种模式截断密文时,生成的解密明文将是伪随机的。由于 EaM 是通过明文计算 MAC,这意味着 MAC 验证几乎肯定会失败,并且攻击不会造成任何安全影响。这与 EtM 形成对比,在 EtM 中,MAC 是通过密文(加密文本)计算的。在这里,数据包长度未加密,以便在解密之前检查 MAC。当攻击者使用 Terrapin 以这种模式截断密文时,他们可以更改未加密的长度,MAC 验证很可能会通过,从而使攻击者能够截断数据包。具体来说,这允许 MitM 攻击者从安全通道中剥离 EXTINFO,就像在场景中一样。EtMChaCha20-Poly1305的添加是后来作为 SSH 的增强功能引入的。在 中CBC-EtM,MAC 是根据序列号、未加密的数据包长度和数据包的密文计算的。攻击的成功率是概率性的,因为当攻击者执行截断(切片数据包)时,存在 MAC 失败的风险EXT-INFO。这取决于特定的加密实现细节。

影响 #1 – 签名降级攻击

执行对 OpenSSH 的攻击以展示漏洞的影响可能会导致用户身份验证问题,如本节所述。

我们可以在下面的代码中看到消息的构造(取自OpenSSH 9.5p1):

static int
kex_send_ext_info(struct ssh *ssh)

{
 int r;
 char *algs;

debug("Sending SSH2_MSG_EXT_INFO");
if ((algs = sshkey_alg_list(0, 1, 1, ',')) == NULL)
return SSH_ERR_ALLOC_FAIL;
/* XXX filter algs list by allowed pubkey/hostbased types */
if ((r = sshpkt_start(ssh, SSH2_MSG_EXT_INFO)) != 0 ||
(r = sshpkt_put_u32(ssh, 3)) != 0 ||
(r = sshpkt_put_cstring(ssh, "server-sig-algs")) != 0 ||
(r = sshpkt_put_cstring(ssh, algs)) != 0 ||
(r = sshpkt_put_cstring(ssh,
"[email protected]")) != 0 ||
(r = sshpkt_put_cstring(ssh, "0")) != 0 ||
(r = sshpkt_put_cstring(ssh, "[email protected]")) != 0 ||
(r = sshpkt_put_cstring(ssh, "0")) != 0 ||
(r = sshpkt_send(ssh)) != 0) {
error_fr(r, "compose");
goto out;
}
/* success */
r = 0;
out:
free(algs);
return r;
}

在 下server-sig-algs,参数列表附加到数据包中。此列表与可用方法之一(使用公钥进行身份验证)相关。

此列表明确指定了受支持的签名算法,这意味着它决定了我们是否可以使用某个签名进行通信。如果没有此列表,服务器和客户端将无法使用最新的签名算法(例如,rsa-sha2-512使用 SHA2 哈希算法 – SHA512),如RFC 8308所述。

为了演示降级攻击,我们将使用 Terrapin PoC,并强制客户端使用基于密码的身份验证(而不是通常的基于密钥的身份验证)连接到服务器。此连接方法比基于密钥的身份验证更弱,可用于强制导致此攻击的第二次影响的连接条件(请参阅下一节“绕过击键时间混淆”)。

IGNORE让我们通过注入数据包并剥离消息来执行攻击EXT_INFO- 连接到 MitM 服务器而不是普通的 SSH 服务器。我们之前被识别和接受的公钥现在不再使用 - 而是使用另一种身份验证方法(在我们的示例中为密码):

签名降级攻击

查看 OpenSSH 服务器调试日志,我们可以看到它与正常连接有何不同。使用正常连接(接受公钥),可以在日志中看到这一点:

debug1: expecting SSH2_MSG_KEX_ECDH_INIT [preauth]
debug1: SSH2_MSG_KEX_ECDH_INIT received [preauth]
debug1: rekey out after 134217728 blocks [preauth]
debug1: SSH2_MSG_NEWKEYS sent [preauth]
debug1: Sending SSH2_MSG_EXT_INFO [preauth]
debug1: expecting SSH2_MSG_NEWKEYS [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: rekey in after 134217728 blocks [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user user service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: userauth-request for user user service ssh-connection method publickey [preauth]
debug1: attempt 1 failures 0 [preauth]
debug1: userauth_pubkey: publickey test pkalg rsa-sha2-512 pkblob RSA SHA256:PkY4eNr7FRIZn31XNF+4J71s2Fs+5r7CVGFH5o5ck1E [preauth]

当连接到MitM服务器并降级签名时,日志如下:

debug1: SSH2_MSG_KEX_ECDH_INIT received [preauth]
debug1: rekey out after 134217728 blocks [preauth]
debug1: SSH2_MSG_NEWKEYS sent [preauth]
debug1: Sending SSH2_MSG_EXT_INFO [preauth]
debug1: expecting SSH2_MSG_NEWKEYS [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: rekey in after 134217728 blocks [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user user service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: userauth-request for user user service ssh-connection method keyboard-interactive [preauth]
debug1: attempt 1 failures 0 [preauth]
debug1: keyboard-interactive devs  [preauth]
debug1: auth2_challenge: user=user devs= [preauth]

在调试模式下运行的 OpenSSH 客户端也会输出以下错误消息:

debug1: send_pubkey_test: no mutual signature algorithm

这是由于消息server-sig-algs中缺少EXT_INFO。这实际上意味着客户端无法使用基于密钥的身份验证。

影响 #2 – 绕过按键时间混淆

12 年前发表的《按键时间分析和 SSH 定时攻击》研究(也以演示文稿的形式展示)展示了如何通过分析按键时间推断出用户密码的确切长度,然后使用精确的按键间时间来破解密码

OpenSSH 9.5p1 版引入了一项名为“按键时间混淆”的新安全功能。此功能通过每隔固定间隔(默认值:每 20 毫秒)发送流量(而不是在每次按键后立即发送)来隐藏按键时间。

要启用混淆功能,客户端和服务器都必须实现此功能(因此两者的OpenSSH版本必须至少为9.5p1)。此兼容性数据通过消息发送EXT_INFO,可以使用 Terrapin 攻击将其剥离。

下面是 Wireshark 捕获的屏幕截图,展示了该功能在正常连接下的实际运行情况OpenSSH 9.5p1

使用 OpenSSH 9.5p1 的 Wireshark 捕获正常 SSH 连接

数据包编号旁边显示的时间是从上一个显示的数据包经过的秒数。请注意,由于混淆功能正在发挥作用,因此差异为 20-21 毫秒。

IGNORE让我们通过注入数据包和剥离消息来运行攻击EXT_INFO- 连接到 MitM 服务器而不是普通 SSH 服务器。

以下是 Wireshark 捕获的 MitM SSH 连接:

使用 OpenSSH 9.5p1 的 Wireshark 捕获 MitM 的 SSH 连接

此连接是使用相同OpenSSH 9.5p1版本的客户端和服务器建立的。我们可以看到时间混淆被绕过了,因为连接中发送的每个数据包的时间都不同。

值得注意的是,当不使用按键时间混淆(或在的情况下绕过OpenSSH 9.5p1)时,可以采用签名降级来有效破解密码,如SSH 按键时间分析研究中概述的那样。

OpenSSH 中如何修复 CVE-2023-48795

在原始的Terrapin Attack技术研究论文中,研究人员提出了两种对策(第8节):1.序列号重置和2.验证整个握手过程。

第一个是序列号重置;如果在激活加密密钥时将客户端或服务器序列号重置为零,则我们之前描述的操作就不会影响加密。

为了增强安全性,第二项对策涉及验证客户端和服务器之间的整个握手过程,检测中间人攻击者的任何操纵企图。此身份验证包括Message Authentication Code (MAC)在安全通道开始时交换完整记录的副本,类似于TLS FINISHED消息。

OpenSSH 通过实施新的“ ”协议来处理此问题strict KEX,该协议实现了以下内容 -

  1. 如果收到任何非预期或正确类型的数据包,或者第一个数据包不是SSH2_MSG_KEXINIT,则应终止连接。意外数据包包括SSH2_MSG_DEBUG和之类的消息SSH2_MSG_IGNORE,即使它们在连接期间通常是有效的。这些类型的消息使攻击成为可能。
  2. 发送或接收SSH2_MSG_NEWKEYS消息后,数据包的序列号应重置为零。此规则适用于整个连接期间,而不仅仅是在消息发送后立即适用SSH2_MSG_NEWKEYS

这些修复作为版本的一部分发布,并且直接对应于研究人员提出的建议。OpenSSH``9.6p1

正如 SSH 发行说明中提到的那样,这两种变化中的任何一种都足以阻止 Terrapin 攻击。

如何在不升级的情况下缓解 CVE-2023-48795

Terrapin 的研究人员提供了一个简单的工具,可用于检查您的 SSH 客户端和服务器是否存在漏洞。

OpenSSH

为了缓解 CVE-2023-48795,请ChaCha20-Poly1305在 OpenSSH 客户端和服务器配置中禁用易受攻击的密码。

具体来说,将以下内容添加到/etc/ssh/ssh(d)_config

Ciphers [email protected]

注意密码字符串-开头的“ chacha20`。

然后,重新启动 SSH 服务器以使其生效。

aes(128|192|256)-cbc此外,确保在使用默认 MAC 时没有在 OpenSSH 配置中明确启用任何密码(这些密码默认情况下是禁用的)。

原文始发于微信公众号(红云谈安全):SSH 协议漏洞 – Terrapin 攻击 CVE-2023-48795:你需要知道的一切

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月30日00:39:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SSH 协议漏洞 – Terrapin 攻击 CVE-2023-48795:你需要知道的一切http://cn-sec.com/archives/3110904.html

发表评论

匿名网友 填写信息