我可以将我的公共 IP 地址更改为特定的吗?

信息安全 网络 ip ip欺骗
2021-08-14 17:20:00

碰巧我参与了一个错误搜寻计划并分析了应用程序,我意识到有一个特定的参数对访问控制非常重要,并且只会随着 IP 地址的变化而变化。

无论如何,这里的问题是我是否可以设置特定的公共 IP 地址。我不需要收到响应,只需发出请求来解析请求。

4个回答

您可以使用您喜欢的任何 IP 地址发送数据包。

然后,沿途的路由器之一可能会认为数据包没有意义(它是“火星数据包”)并丢弃它。考虑一下:

                                                       | 192.1.1.1
                                 +------------------- GW4
                                 | 192.168.1.1
             +----------------- GW2------+
             | 192.168.16.1              | 192.168.33.1
      +---- GW1 -----+             ---- GW3 ----
      |              |
192.168.16.15   192.168.16.243
     YOU           ALICE

您发送一个源地址为 10.0.0.36 的数据包,并定向到 172.16.16.172。GW1,为您的网络 192.168.16.0/24 服务,只希望接收与 192.168.16.0/24 匹配的数据包,而您的数据包匹配,因此被丢弃。可以欺骗来自“邻居”爱丽丝的连接,但不能再欺骗了。

即使 GW1 没有抱怨,它也会将数据包转发到下一个跃点,该跃点服务于整个 192.168.0.0/16 分支,并且也会忽略您的数据包。

依此类推(我使用的 IP 实际上并不是所有可路由的,但它是一个示例)。

诚然,许多路由器不会进行“入口过滤”,因为它们会过时,或者会认为它没有必要且不划算。但只需一跳即可破坏传输。

即使没有这个障碍,困难还没有结束,因为假设您成功地将来自 10.0.0.36 的数据包传送到目标。目标将回复 - 并将回复 10.0.0.36,因此回复数据包将永远不会回复您。实际上,如果回复数据包到达 10.0.0.36,后者会简单地将连接重置为未经请求的连接。

这是一个问题,因为大多数“只需要发出请求”的协议实际上都是通过 TCP 发送的,这需要通信双方之间进行握手,然后才能发送任何数据。主要的例外是HTTP/2

如果没有第一个回复数据包,您建立完整 TCP 连接的机会很小(与零机会不同,但仍然),没有它您可能无法发送您的请求。

如果目标应用程序使用 UDP(它可能不使用),您可能可以使用 UDP 或其他没有握手的协议来执行此操作。

可能不会,这取决于您的 ISP 是否正在实施Ingress Filtering

一种用于确保传入数据包实际上来自它们声称源自的网络​​的技术。

如果您的 ISP 正在实施入口过滤,那么您的伪造数据包将在穿过您的 ISP 网络时被丢弃,并且永远不会到达您的目标。

很有可能您的 ISP 确实实现了它:

截至 2012 年,一份报告表明,与缺乏 BCP 38 部署的普遍看法相反,大约 80% 的互联网(通过各种措施)已经在其网络中应用反欺骗数据包过滤。

即使没有其他答案中描述的入口过滤,IP 欺骗也会遇到另一个障碍:TCP 3 次握手,可能还有更高级别的握手。

TCP 是许多最常见协议的基础,包括 HTTP、FTP、SMTP、POP3、IMAP 及其受 TLS 保护的对应协议,以及 SSH 等等。

当您尝试 TCP 连接时,您会发送第一个数据包 (SYN)。服务器回复 SYN-ACK。客户端发送 ACK。在 SYN 和 SYN-ACK 交换期间,随机序列号被选择和传输。

如果您使用欺骗性 IP 地址,服务器会将 SYN-ACK 发送到实际拥有该 IP 的设备,而不是您。所以你不会收到服务器的序列号,也无法进行通信。

很久以前,当序列号是可预测的时,曾经存在过问题。这使您可以在 TCP 连接上盲目地发送数据包(您不会收到任何答案,但您仍然可以发送请求)。这现在应该在任何地方都得到修复(参见RFC1948)。

如果您仍然设法这样做,大多数协议现在在 TCP 之上使用 TLS,这增加了另一个握手,如果您没有收到返回流量,这将非常明确地阻止您发送任何内容。

UDP 和原始 IP 协议的情况有所不同,但它们的用途更有限。

如果访问控制是在应用层完成的,并且它是基于 HTTP 的应用程序,您可能能够通过伪造相关的 HTTP 标头(例如 X-Forwarded-For、True-Client-IP 或 X-Real-知识产权)。