攻击者可以“模拟”私有 IP 地址吗?

信息安全 验证 网络 开发 SSH ip
2021-09-01 21:28:05

我有一个 SSH 服务器,其规则不允许本地网络之外的密码连接。

因此,已经在本地网络上的人,无论是物理上还是通过 VPN,都可以使用密码进行连接,但来自外部 IP 的连接必须使用密钥(内部 IP 的安全性较弱是可以的,因为如果网络被破坏,该服务器无关紧要更多)。

无权访问本地网络的攻击者是否有可能“伪造”他的 IP 地址并假装它位于私有 IP 范围之一中(或者攻击者是否有可能拥有属于其中之一的实际公共 IP那些范围)?

3个回答

在攻击者可以向 SSH 服务器发送任何数据之前,他必须完成一次 TCP 握手。这意味着攻击者必须猜测一个 32 位的序列号。(如果使用 SYN cookie,攻击者的机会可能会增加

假设您的服务器正在生成良好的序列号,这将大大降低攻击者使用欺骗性客户端 IP 地址攻击您的 SSH 服务器的能力。

但也许你不相信你的服务器会生成好的序列号,或者你认为 32 位的安全性还不够好。所以你可能仍然想知道,一旦攻击者猜到了正确的序列号会发生什么。

首先,我们注意到攻击者将能够弄清楚猜测的序列号是否正确。正确的猜测将导致打开连接,因此它将计入使用指定的限制MaxStartups攻击者可以尝试使用非欺骗地址打开另一个连接,以查明是否已达到该限制。他可以始终将您的服务器保持在该限制以下,这样与欺骗地址的成功连接将始终占用最后一个可用连接。

如果没有注意到成功猜测的序列号的技巧,攻击者将不得不在不知道发送密码的连接是否存在的情况下盲目地发送密码猜测。这可能会使攻击者的速度降低 2³²。

但是,即使攻击者可以获得反馈以指示序列号是否被正确猜到,还有其他障碍可以防止在欺骗性 TCP 连接上猜测密码。

在密钥交换期间,客户端和服务器都会选择一个随机值通过连接发送。这些随机值会影响会话密钥。这意味着盲目工作的攻击者(因为他没有看到从服务器发送到欺骗 IP 的回复)将不知道会话密钥。

缺乏关于会话密钥的知识意味着攻击者将不得不猜测消息验证码。这本质上等同于对合法连接执行 MITM 攻击。此外,攻击者必须发送加密的密码以供服务器解密。由于攻击者不知道正在使用的加密密钥,他将不知道他尝试了哪些密码。

攻击者完成攻击的时间窗口只持续到被欺骗的 IP 地址回复了 TCP RST 数据包。由于攻击者和服务器之间的往返时间可能会大于服务器和本地地址之间的往返时间,这可能会阻止攻击者使用任何类型的反馈,包括验证正确猜测的序列号。

您可以通过安装防火墙来阻止 SYN ACK 到达欺骗的 IP 地址或阻止 RST 到达服务器,从而为攻击者提供更长的时间来完成攻击。然而,这并没有使攻击更加可行。

简而言之,没有。因为 SSH 在 TCP 上运行(尽管有 UDP 版本,但这是不寻常的),所以需要 TCP 握手来开始 SSH 协议自身的身份验证及其后续通信。私有地址不会穿过您的外围路由器进出公共互联网,因此任何内部地址在入站时的欺骗(假设路由器或防火墙上没有反欺骗,这是一种常见的安全措施)将导致 SSH 终止服务器试图回复内部地址,它永远不会回到公共互联网和攻击者自己的计算机。无法建立连接。

答案是肯定的,这是可能的。但是,存在一些重大限制。通过使用 IP 欺骗,可以建立一个连接,该连接可用于向目标传递有效负载,但无法建立真正的双向 TCP 连接。简单来说,攻击者可以让目标机器做出响应,但他们不会收到响应,因为它们不会被路由到它们(这就是为什么 IP 欺骗更常用于 UDP 而不是 TCP 类型的连接)。但是,攻击者可以模拟接收数据包并发送回虚假的确认数据包,然后从那里到达他们可以潜在地传递有效负载的点。这个有效载荷理论上可以用来在目标上设置一个木马,然后调用攻击者的 C&C 系统,

虽然这是可能的,但这是一个困难的黑客攻击,并且可能并非在所有系统上都是可能的,因为各种平台处理 TCP 连接的方式发生了变化,这使得攻击者更难模拟 ack 数据包。鉴于最近有关路由器安全性差的所有披露,更有可能的攻击是破坏您的路由器并设置端口转发或使用 UPnP 来欺骗您的系统启动外部连接等。