在被动监控 MITM 的情况下,SSH 的安全性如何受到影响?

信息安全 中间人 SSH 监控
2021-09-04 06:51:28

在一个理想的世界中,从数据完整性的角度来看,所有链接都是完全值得信赖的,通过适当的设置,现代 SSH 可以或多或少地被认为是完全安全的,可以防止窃听通信内容,但可能会泄漏元数据(例如您正在连接到特定主机的事实,以及一些关于使用模式和传输的数据量的信息)。

在一个更加现实的世界中,无论我们多么不希望出现这种情况,都应该期望对链接进行监控我们知道加密流量可能会被强大的对手专门保留但是,一方面被动地监控流量,另一方面在飞行中主动篡改流量之间仍然存在很大差异。

假如说:

  • 初始 SSH 主机密钥是由未知的、可能有缺陷的方法生成的;
  • 管理员无法直接验证服务器在第一次连接时提供的 SSH 主机密钥的正确性,只能判断登录尝试是成功还是失败,但可以建立后通过该会话中的命令验证主机密钥指纹
  • 管理员快速将 SSH 主机密钥替换为以可信方式生成的密钥,并在加载新主机密钥后重新建立连接;
  • 管理员努力确认客户端和服务器之间的 SSH 主机密钥指纹;
  • 管理员无权访问服务器的不同通道以进行密钥维护,因此必须通过与当时恰好在服务器上的主机密钥建立的 SSH 会话来执行密钥替换;
  • 攻击者无法访问服务器上的 SSH 私有主机密钥,但可以监视、存储和稍后处理与服务器之间的所有通信。

在这样的场景下,

  • SSH-2 可以提供哪些安全保证以防止窃听通信内容(违反机密性)?
  • 这些安全保证在初始连接(替换主机密钥之前)和以后的连接中是否有任何不同?
2个回答

我不知道 ssh 协议的内部结构,所以我的回答是基于密码学的一般知识,不能保证是正确的。好吧,什么都不是。

如果初始 ssh 密钥是以某种“坏”方式生成的,那么攻击者可能会或不可能解密您与服务器的初始连接(这取决于会话密钥是如何在 ssh 中生成的——我不这样做不知道)。

如果您以正确的方式在服务器上重新生成 ssh 密钥并重新连接到服务器,那么我相信窃听者将无法解密您的 ssh 连接中的任何内容。由于新密钥是“好的”并且窃听者不知道它是私有部分(它不是通过网络传输的,只有它的指纹是)。

如果攻击者只是在窃听,那应该是正确的。如果他可以主动篡改您的流量,那么您在以下两种情况下都没有安全保证:

  • 初始密钥“糟糕”生成
  • 在第一次连接之前,管理员不知道来自可信来源的密钥指纹

鉴于您的第二个要点,

管理员无法直接验证服务器在第一次连接时提供的 SSH 主机密钥的正确性

管理员可能已经连接到不同的主机(通过欺骗 DNS 或将连接路由到不同的服务器),攻击者可以向他提供他自己的私钥(不管是哪一个,因为管理员无法找出什么是“正确”的那个)。

身份验证可以非常简单地重定向到原始主机以验证公钥身份验证,或者可以简单地读取密码(它在端到端加密的 SSH 会话中以纯文本形式传输)。例如使用这个修改过的 OpenSSH

然后其他命令可以在攻击者服务器上运行(在某些沙箱中)或以某种方式透明地转发到真实服务器。这实际上取决于攻击者如何知道该管理员的工作流程并想要滥用它。

##但是对于问题:

1.

SSH-2 可以提供哪些安全保证以防止窃听通信内容(违反机密性)?

RFC 4251中,有一整节专门讨论传输层的“机密性”。对 CBC 模式及其缓解措施存在潜在的攻击

“插入包含 SSH_MSG_IGNORE 的数据包。”

此额外数据包仅在以下情况下发送

“仅当数据包已发送到网络上并且没有其他数据包等待传输时。”

这使得网络可见的流量与会话中实际发生的流量不同。

RFC 4253解释了 SSH 二进制数据包是如何组成的您会注意到,消息的长度不必总是与传输数据的长度相关。随机数据的随机长度总是有填充。

2.

这些安全保证在初始连接(替换主机密钥之前)和以后的连接中是否有任何不同?

不,初始连接与其他连接相同。但是一旦你写了“是”并且你不知道指纹是正确的,你可能正在连接到不同的主机,你甚至可能在认证后都没有注意到它。