我的数据库服务器上的 iptables 规则是:
-A INPUT -p tcp --dport 6432 -s 10.115.0.150 -j ACCEPT
我还有其他规则(环回等),但我想知道是否可以“破解”该特定规则。有人可以“欺骗” IP 地址吗(即使它是一个私有网络地址——同样,如果它是一个公共地址,它会有所不同吗)?有些不同?
我的数据库服务器上的 iptables 规则是:
-A INPUT -p tcp --dport 6432 -s 10.115.0.150 -j ACCEPT
我还有其他规则(环回等),但我想知道是否可以“破解”该特定规则。有人可以“欺骗” IP 地址吗(即使它是一个私有网络地址——同样,如果它是一个公共地址,它会有所不同吗)?有些不同?
伊恩的回答大体上是正确的,但需要稍微扩展一下以解释为什么攻击难以执行。
TCP 使用基于位的标志和 32 位计数器(称为序列号和确认号)的组合来驱动状态机,该状态机在其整个生命周期内跟踪 TCP 连接的进度。了解这两个 32 位计数器如何参与在每个 TCP 连接中传输有效负载数据之前的三向握手,将使使用欺骗性源 IP 地址的攻击的不切实际变得清晰。
当客户端启动到远程服务器的 TCP 连接时,它会发送一个带有 SYN 位设置和随机选择的初始序列号的 TCP 段。远程服务器响应一个 TCP 段,同时设置了 SYN 和 ACK 位,一个随机选择的初始序列号,以及一个等于客户端初始序列号加 1 的确认号。最后,客户端响应一个 TCP 段,其中包含ACK 位设置,一个等于它发送的初始序列号加 1 的序列号,以及一个等于远程服务器的初始序列号加 1 的确认号。
当攻击者从另一台主机的源 IP 地址伪造 IP 数据报时,攻击者通常不会收到对他们可能发送的任何数据包的响应。在这种情况下,攻击者实际上拥有与远程服务器的单向通信通道。查看 TCP 握手中的数据包流,攻击者有必要预测远程服务器将在其 SYN/ACK 响应中生成的初始序列号,以便在 ACK 响应中使用适当的确认号进行响应完成三次握手。攻击者需要正确猜测一个 32 位数字才能使攻击生效。
今天,这种类型的攻击是完全不切实际的。不过,在过去,一些备受瞩目的攻击使用的正是这种方法。这是可能的,因为在过去,一些操作系统具有非常可预测的初始序列号。(您可能会发现 Michal Zalewski 的论文Strange Attractors and TCP/IP Sequence Number Analysis - Year Later是一篇有趣的读物,它描述了各种操作系统初始序列号的可预测性。)
正常情况下不会。
TCP 协议有 3 次握手来建立连接
并建立连接
现在如果我们引入一个主机 C 来欺骗主机 A 的地址
主机 A 不期待 SYN ACK,所以它只是忽略它。