当数据包从 LAN 发送到路由器时,可能会出现三种行为:
- 路由器应用反向路由过滤并丢弃数据包。
- 路由器不过滤。相反,路由器将其视为来自 LAN 的任何其他数据包,这意味着源 IP 将替换为路由器的 IP,并且路由器会创建一个连接跟踪条目。
- 路由器不应用过滤或 NAT。相反,路由器转发带有欺骗源地址的数据包。
在第一种情况下,没有更多的事情发生。在第三种情况下,数据包可能被 ISP 丢弃或转发。在其中一种情况下,欺骗数据包会一直到达目标。但是没有回复会返回到这个路由器,因为它会发送到被欺骗的 IP。
最有趣的情况是对数据包应用 NAT 的情况。ISP 将不再能够基于源 IP 丢弃数据包,因为在这种情况下,就 ISP 而言,源 IP 实际上是有效的。但这并不是很有害,因为一旦数据包到达目的地,就可以根据源 IP 轻松过滤数据包(假设洪水大到足以在目的地引起注意)。它也不容易在反射攻击中被滥用,因为回复会返回到 NAT 路由器。
回到 NAT 路由器的任何回复会发生什么更有趣。它们将匹配连接跟踪条目。但是在应用了 NAT 之后,目的地址就不会在 LAN 内部,而是在外部。此时有几个可能的结果:
- 路由器可能会拒绝转发数据包,因为它会在它来自的接口上被发回。
- 一旦路由器根据连接跟踪条目应用了 NAT,它就可以将数据包转发回外部网络。
- 路由器可能会再次尝试对数据包执行 NAT,因为它将离开外部接口。
丢弃数据包的第一种情况并不是特别有趣或有害。
将数据包转发回外部网络的第二种情况更有趣。在这种情况下,NAT 首先阻止了任何欺骗的发生,但这样做的副作用是在处理回复时,它实际上会生成一个带有欺骗源 IP 的数据包(实际上是原始 IP 的源 IP 和目标 IP数据包已反转)。
如果 ISP 由于源 IP 无效而没有过滤数据包,则返回的流量将被转发到首先被欺骗的 IP。如果根本没有发生 NAT,到达时看起来与它几乎相同。
但由于这涉及到攻击网络的外部连接的三次行程,因此攻击流量的速率与其可能的速率相比是有限的。
如果路由器再次尝试 NAT,事情会变得有点有趣。这里的问题是它不是流的第一个数据包,因此 NAT 层可能不知道如何处理它。因此,由于在未看到流的第一个数据包的情况下应用了 NAT,数据包可能会被丢弃。
也可能创建连接跟踪条目。由于新创建的连接跟踪条目显然没有应用于流的第一个数据包,因此这根本无法用于 TCP 连接。但即使在这种情况下,其他协议也可能工作。然而,由于这个特定的数据包是由于欺骗造成的,因此对它进行 NAT 不会带来任何好处。
如果我们假设这是一个 TCP SYN-ACK 数据包,并且路由器再次对其进行 NAT,尽管根本没有任何意义,那么 SYN-ACK 将由 ISP 转发。SYN-ACK 将触发 RST 响应(假设目的地正常),然后 RST 将通过两个连接跟踪条目返回并转发到 SYN-ACK 来自的主机并清理连接。
如您所见,此流程中有很多如果。并且可能有一些我没有考虑过的可能结果。