最近有人决定向我展示他想出的一种使用 SYN/TCP 的新拒绝服务方法的 POC。我以为这完全是胡说八道,但在向他解释了 SYN-SYN/ACK-RST 之后,他让我无语了。他告诉我“如果你用来欺骗发送 SYN/ACK 数据包的服务器无法接收 RST 数据包怎么办?”
我不知道。他声称服务器将继续尝试发送 SYN/ACK 数据包,并且数据包速率将继续增加。
有没有道理呢?任何人都可以详细说明吗?
显然,它的工作方式是这样的:
他把SYN包的IP欺骗到目标的IP。然后他将 SYN 数据包发送到一些随机服务器
他们都用他们的 SYN/ACK 数据包回复到目标 IP,当然
目标用 RST 响应,正如我们所知
但是他以某种方式阻止目标发送 RST 或保持随机服务器处理它
显然,服务器将继续尝试发送 SYN/ACK 数据包,从而产生某种“滚雪球”效应。
如您所知,“尝试打开端口”数据包流应该像这样工作:
“关闭端口”版本很简单:
如果远端不返回 RST 数据包,这是一种非常常见的防火墙配置:
我所说的“非常普遍”是指“非常普遍” 。所有 TCP 堆栈都必须处理这种情况,因为它很常见。
你的人提出的变体:
他巧妙发现的“攻击”是SYN Flood攻击,自 1990 年代初就为人所知。由于防火墙阻止了 RST 数据包,这些服务器不知道要关闭连接,因此它们确实会根据正常的 TCP 重试时间重新传输 SYN/ACK 数据包。但是,所有现代 TCP 堆栈都包含一些内置于其中的可配置的 SYN 泛洪攻击保护措施。
这仍然是一种有点有效的攻击方法,尽管它造成的主要危害是通过用太多数据包压倒外围安全设备而无法跟踪。没有 SYN 的 SYN/ACK 应该非常便宜地丢弃在地板上,但如果它们的数量足够多,它可以压倒防火墙。
Syn Cookies有效地阻止了这种攻击。服务器以 SYN/ACK 响应,然后忘记它。如果收到 ACK,它会根据 TCP 序列号重新初始化流。在 linux 上,它通过添加启用:
到/etc/sysctl.conf
但是当被10k+的机器锤的时候,我估计服务器还是会宕机的。