为什么 SSH MITM 工具能够读取和修改数据?

信息安全 中间人 SSH
2021-08-18 19:31:15

在我的大学,我们正在学习如何使用 SSH 进行服务器管理。

我们了解到 SSH 是安全的,但是有一些工具允许对 SSH 进行中间人攻击。

这样的工具如何在 SSH 加密时拦截它?我试过 Wireshark 但无法读取数据。Wireshark 只能读取 SSH 协议的纯文本部分。

对 SSH 的中间人攻击是如何工作的?

mitm 工具 ( https://github.com/ssh-mitm/ssh-mitm ) 允许第二个 shell 连接到同一个 SSH 会话。我已经尝试过了,并且能够在两个 shell 中工作。

两个会话是否相同,或者这还能如何工作?我认为加密应该保护我免受这种攻击。

阅读文档 ( https://docs.ssh-mitm.at ) 并没有提供有关此类攻击如何工作的更多信息。文档仅说明如何使用该工具。

这就是我问这个问题的原因。

  • 谁能深入解释这种攻击是如何工作的?
  • 怎么可能从 2 个不同的客户端使用相同的 SSH 会话?
3个回答

针对 SSH 或 SSL/TLS 的 MITM 攻击的基本点是连接不再是端到端加密的,即从客户端到服务器。相反,客户端和攻击者之间存在加密连接,攻击者和服务器之间存在不同的加密连接。由于攻击者以这种方式终止加密,因此攻击者可以访问完整的解密流量:

Secure: [Client]  <---------- End-to-End Encrypted ----------------> [Server]
MITM:   [Client]  <-- Encrypted#1 --> [Attacker] <-- Encrypted#2 --> [Server]

请注意,这仅在客户端不检查服务器的加密身份(服务器密钥)并且服务器不检查客户端的加密身份(客户端密钥,这是可选的)时才有效。如果检查了其中任何一个,则 MITM 攻击是不可能的,因为攻击者无法在没有访问其密钥的情况下冒充服务器或客户端。

因为你告诉它连接是安全的

当您第一次连接到 SSH 服务器时,您会收到以下消息:

The authenticity of host '<host> (<IP Address>)' can't be established.
<algorithm> key fingerprint is <hash>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

当您键入 时yes,您会被告知:Warning: Permanently added '<host>' (<algorithm>) to the list of known hosts.在这里,您已将此连接标记为安全,并且您相信您正在连接到实际机器。重新连接时,如果服务器提供相同的密钥,则不会显示任何警告。如果您是第一次连接到 MITM 服务器,您会收到同样的消息——您的计算机没有任何神奇的方法可以检测任何给定的 SSH 服务器是否是认为的那个服务器。如果您没有花时间在单独的通道上手动检查机器的指纹,您将盲目相信它并且不会更聪明。

但是,如果您要重新连接到服务器并且有人拦截了您的连接,您会得到:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the <algorithm> key sent by the remote host is
<hash>.
Please contact your system administrator.
Add correct host key in /home/<username>/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/<username>/.ssh/known_hosts:<line number>
Host key for <host> has changed and you have requested strict checking.
Host key verification failed.

在这里,您可以非常明确地看到它正在警告您这种确切的攻击——它在第 3 行明确表示“中间人攻击”,并且不允许您连接。

大局是,如果您从未验证与您交谈的人是您认为的人,那么加密通信就无关紧要。SSH 甚至让你明确告诉它你确定。要验证它,您应该ssh-keyscan <host>在受信任的计算机上运行——例如,直接插入其中的计算机,或者更好的是,ssh-keyscan localhost在目标计算机本身上运行。然后,fingerprint在提示符处键入并粘贴其输出,或手动验证它,然后才键入yes.

据我从 ssh-mitm 的描述中可以看出,答案是它不是中间人:它是一个代理。客户端知道它正在与代理对话,而不是与服务器对话。客户端连接代理,连接时验证代理的身份。当代理收到传入连接时,它会打开与实际服务器的连接,并来回中继数据。由于客户端选择与代理通信,因此没有攻击。