我正在评估什么是更好的技术,可以安全地通过 SSH 连接到我的机器,而无需信任第三方。

我可以通过 SSH 隧道连接到我的机器,但我需要一个中间的服务器。

据我了解,目标本地计算机通过 SSH 隧道连接到服务器,也就是说,它将所有内容从 server:port 转发到 local:22。这是在 TCP 级别,因此相当于在野外有一个开放的 SSH 端口,这不是问题。

但是,服务器是否可以通过此反向连接进行恶意操作?除了任何拥有 TCP 连接的人都可以执行的操作之外,服务器还能执行哪些棘手的操作?

我的意思是,一些众所周知的事情可以做。当然,openssh 服务器/客户端上可能存在漏洞

2

  • 我知道这不是你的问题,但你为什么不想信任第三方?他们被称为第三方是有原因的……


    – 


  • 我替换了术语“反向 shell”,因为它通常与有关。更中性的术语是“SSH 隧道”。


    – 


最佳答案
2

这是在一个 SSH 连接内隧道化另一个 SSH 连接,因此类似于 SSH 跳转主机功能 – 另请参阅

虽然由于额外的加密,数据的机密性和完整性似乎受到保护,但不受信任的跳转主机可能会更改隧道的目的地 – 您无法相信在跳转主机处连接的端点确实是您期望的隧道端点。

当然,如果通过仅连接到提供目标系统预期主机密钥的隧道来正确检查隧道端点,那么这不是问题。

4

  • 因此,如果我的目标在 remove_server_ip 上运行 ˋssh -R 2222:127.0.0.1:22 user@<remote_server_ip>ˋ,那么如果我通过 ssh 连接并检查公钥指纹,那么就没问题了?


    – 

  • @aaa:正确,只要您排除 SSH 实现中的错误(您确实这样做了)并假设主机密钥没有被泄露。请注意,有权访问服务器的人仍然可以对加密流量进行流量分析(但连接路径上的任何主机都可以这样做)


    – 


  • 你说的主机密钥是指我要通过 SSH 连接的主机的密钥,对吗?我的计算机密钥,而不是中间服务器密钥


    – 

  • @aaa:正确,您信任的最终目标系统的主机密钥,而不是中间系统的主机密钥。


    – 

您所描述的称为,是一种完全合法的方法。

使用 SSH 隧道时,您不必信任中间服务器。虽然它可以查看和操纵所有转发的 TCP 流量,但 SSH 协议专门设计用于在可能不安全的通道上工作,因此不存在机密性或完整性方面的风险(当然,不包括 SSH 漏洞)。服务器最多可以阻止流量。

然而,服务器可以访问内部网络资源这一事实确实使其处于一个关键位置。这本身并没有什么问题(实际上它可以是一个安全功能),而且这与 SSH 无关。但这意味着服务器应该受到特别好的保护,以防止攻击者直接访问内部资源。如果你不信任服务器,那么你可能不应该让它访问你的机器的网络。

2

  • 如果有人获得服务器访问权限,可以进行哪种类型的攻击?唯一暴露的端口是目标上的 SSH 端口,如果我在家里有固定 IP,该端口就已经暴露了


    – 

  • @aaa:如果将 SSH 隧道与使 SSH 端口公开可访问进行比较,那么隧道当然是更安全的选择,即使中间服务器不受信任。我的观点是,更好的选择是您信任且受您控制的服务器因为这样您就可以使攻击者更难以利用 SSH 本身的漏洞。因此,这并不是反对 SSH 隧道的理由,只是为了强化隧道。


    –