TCP的三向握手和拒绝服务攻击

网络工程 通讯协议 传输协议
2021-07-19 07:39:57

嗨,我是网络新手,仍然对三向握手和拒绝服务攻击之间的关系感到困惑。

我们知道,如果客户端不发送 ACK 来完成此 3 次握手的第三步,最终(通常在一分钟或更长时间后)服务器将终止半开连接并回收分配的资源。

所以我的问题是:

  1. 为什么攻击者只做3次握手的第一步?他们为什么不像普通用户一样完成3次握手的所有三个步骤才能完全连接到服务器,这样它就会占用服务器的资源

  2. 经典教科书:计算机网络:自顶向下的方法描述了TCP避免Dos攻击的方法:

服务器创建一个初始 TCP 序列号,它是 SYN 段的源和目标 IP 地址和端口号的复杂函数(散列函数),以及一个只有服务器知道的秘密编号。如果客户端没有返回 ACK 段,那么原始 SYN 对服务器没有任何伤害,因为服务器尚未分配任何资源来响应原始虚假 SYN。

但是如果原来的SYN对服务器没有伤害,那为什么要在3次握手的第一步中用hash函数为服务器创建一个'cookie'来识别用户的SYN段是否有效呢?

2个回答

为什么攻击者只做3次握手的第一步?他们为什么不像普通用户一样完成3次握手的所有三个步骤才能完全连接到服务器,这样它就会占用服务器的资源

当仅发送 SYN 以在服务器上分配资源时,攻击者就可以欺骗 IP 地址,从而隐藏其真实 IP 地址。要创建完整的握手,攻击者不能使用 IP 欺骗,因为最终的 ACK 必须响应服务器 SYN,如果原始 SYN 被 IP 欺骗,客户端将无法获得该 SYN。

但是如果原来的SYN对服务器没有伤害,那为什么要在3次握手的第一步中用hash函数为服务器创建一个'cookie'来识别用户的SYN段是否有效呢?

如果只使用一个简单的可预测函数从客户端 SYN 计算服务器 ISN,那么攻击者可能会创建最终的 ACK,而不会看到服务器的实际 SYN。在这种情况下,攻击者不仅可以对 SYN 进行 IP 欺骗,还可以对 ACK 进行 IP 欺骗,从而导致在服务器上分配更多资源。

TCP SYN 泛滥的发生有两个重要原因。首先是可能使服务器的可用带宽因流量而饱和,尤其是在分布式 (DDoS) 情况下。这不必占用所有带宽即可对客户造成重大干扰。

第二个重要原因是用不同 SRC 端口的 SYN 数据包淹没服务器会导致服务器打开所有这些新连接。这些会占用 CPU、内存,并且还会阻止来自那些被占用端口上的客户的诚实连接。

南加州大学有一篇关于(本质上)港口占用的主题的不错的论文。

港口蹲