不久前,我和我的朋友争论 TCP 握手是否可以通过欺骗 IP 地址传递。
假设我有一个只允许某些 IP 地址的 Web 服务器。任何人都可以通过 IP 欺骗连接该 Web 服务器吗?
不久前,我和我的朋友争论 TCP 握手是否可以通过欺骗 IP 地址传递。
假设我有一个只允许某些 IP 地址的 Web 服务器。任何人都可以通过 IP 欺骗连接该 Web 服务器吗?
简短的回答:没有。
更长的答案:是的,如果您控制靠近目标设备的路由器设备(它必须在真实源 IP 地址和目标之间的路径上,并且在伪造的 IP 地址和目标之间的路径上)或者如果目标网络/主机接受源路由数据包。
简短的回答:是的,但不像以前那样可能,并且取决于人们对您的问题的理解程度。
长答案:
我注意到您没有问“是否可以使用欺骗的 IP 地址进行 TCP 对话”-@symcbean 巧妙地回答了这个问题。您特别问“是否可以通过欺骗 IP 地址传递 TCP 握手”。所以你问的问题 - “你能以服务器认为连接已成功建立的方式欺骗 SYN->SYN/ACK->ACK” - 和你可能的意思 - “你能与欺骗的客户端地址进行 TCP 对话”。
所以让我们看看你问的字面问题。在这种情况下,答案是“是的,如果服务器包含在 SYN/ACK 中的初始 TCP 序列号是可预测的”。这就是为什么 ISN(初始序列号)可预测性是由漏洞扫描程序测试的,并且今天比 10 或 15 年前更广泛地正确实施。引用 2001 年与此漏洞相关的思科公告,“ TCP 中此漏洞的一般情况为信息系统安全社区所熟知。 ”最著名的是,Mitnick 在攻击 Shimomura 时滥用了此功能。
除非源路由或对网络路径中路由器的访问可用,否则这不是可持续的设置。客户端可能能够猜出 ISN,但随后的序列号会随着正在发送的数据包的大小而增加,攻击者不会看到也无法可靠地预测。所以他们应该能够在三次握手后至少获得一个数据包,但不能进行对话。有时一包就足够了。
ISN 预测是TCP 序列预测攻击的一个特定子集。虽然我不能引用好的数字,但我的经验表明,这是一个比它应该存在的时间更长的漏洞。由于它,您仍然会遇到无法扫描的设备。很难让每个人都只修复他们的 TCP 堆栈,尤其是当修复涉及强大的随机数生成时,这对于有限的廉价硬件(一直被扔到网络设备中的那种硬件)来说有些困难。
如果无法访问允许的 IP 地址之一后面的网络或无法访问允许的 IP 地址之一后面的机器,则无法通过带有欺骗性 IP 地址的TCP 3 次握手。
使用任何 IP 地址发送 TCP 数据包都很容易。在 Linux 上,您可以打开一个原始套接字并发送您想要的任何内容。问题是接收到将被路由到原始 IP 的 SYN/ACK(或任何其他响应)。
您的客户端之间的路由器可能具有拒绝请求的防火墙规则,但它们通常会假设您的客户端只是路由来自另一台主机的数据包。