用于数据嗅探的Kerberos SSH Man-in-the-Middle

Kerberos明显阻止攻击者在SSH中间情况下(攻击者已经获得用户信任其服务器的公钥并通过该服务器redirect通信的情况)获取用户凭据。 但是,如果攻击者没有获得用户凭证,那么他们将能够在authentication之后监听会话,并可能获取有价值的信息(包括随后input的凭证),从而会发生什么情况呢?

要清楚,这里是这种情况:

  1. SSH服务器(Server1)和客户端(User1)是为Kerberos设置的。 Server1具有用于authentication的标准公钥/私钥对
  2. User1最初尝试连接到Server1,但其连接被攻击者redirect到Server2。
  3. 用户1并不仔细查看来自Server2的公开密钥,并将其作为Server1的已知主机密钥(因此设置MITM)接受它。
  4. 用户1通过服务器1到服务器2进行Kerberosauthentication(服务器2设置两个独立的SSH会话并在它们之间传递信息)。 由于Kerberos的工作方式,攻击者在authentication过程中不会获得任何有价值的信息。
  5. 然而,一旦通过身份validation,User1就开始在Server1上执行操作,包括sudo。 攻击者能够在通过Server2时看到会话的所有内容。

这会工作吗? 在authentication步骤中,这种情况显然会受到公钥authentication的阻碍。 但是在Kerberos或SSH协议中有什么可以防止这种情况呢?

从评论中的讨论中稍微扩展了一下:

您的问题是:如果您将SSHstream量从客户端转移到stream氓SSH服务器,那么通过将stream氓SSH服务器的客户端Kerberos票据捕获并转发到真正的Server1,可以用于重放攻击吗?

这依赖于防止MiTM攻击失败的SSH安全机制,即客户端还没有caching来自Server1的真实服务器密钥,或者如果存在, StrictHostKeyChecking已被禁用或被忽略。

由于SSH + Kerberos GSS-API依靠SSH进行数据encryption,因此假设中间人恶意SSH服务器可以(如果对Server1的身份validation成功)访问所有传输的信息,因为SSH不使用Kerberos基于数据encryption的SSHencryption。

是的,这在理论上是可行的,但前提是你的stream氓SSH服务器Server2成功地将客户端模拟到Server1。

我认为真正的Server1会拒绝(或至less应该)拒绝转发的凭据。 作为Kerberos身份validation的一部分,客户端发送两个消息,即服务票证和身份validation器 。 虽然转发的服务票证是有效的,但随附的authentication者不会。

RFC 4121由SSH使用的Kerberos GSS-API规范将通道绑定信息作为validation器消息的一部分:

“通道绑定标签旨在用于标识GSS-API安全上下文build立令牌所针对的特定通信信道,因此限制了拦截的上下文build立令牌可被攻击者重新使用的范围。

即authentication者消息包括发送者的IP地址和源端口,以及目的IP地址和端口号。 如果这些与实际连接不匹配,那么Kerberos交换应该被Server1拒绝。