最近有人决定向我展示一个使用SYN / TCP的新的拒绝服务方法的POC,他计算出来了。 我认为这是完全废话,但在向他解释SYN-SYN / ACK-RST之后,他让我无语了。 他告诉我:“如果你用来欺骗发送SYN / ACK数据包的服务器不能收到RST数据包呢?
我不知道。 他声称,服务器将继续尝试发送SYN / ACK数据包,并且数据包速率将继续增加。
有没有道理呢? 任何人都可以详述吗?
显然,它的工作方式是这样的:
他欺骗SYN数据包的IP到目标的IP。 然后,他将SYN数据包发送给一些随机服务器
当然,他们都用自己的SYN / ACK数据包回复目标IP
正如我们所知,目标响应RST
但不知何故,他保持目标发送RST或保持随机服务器处理它
有了这个,显然服务器将继续尝试发送SYN / ACK数据包,从而产生某种“雪球”效应。
如你所知,“试图打开一个端口”数据包stream应该是这样工作的:
“封闭端口”版本很简单:
如果远端没有返回RST数据包,这是一个非常常见的防火墙configuration:
我非常普遍的意思是非常普遍的 。 所有的TCP栈必须处理这种情况,因为它很常见。
你的某个人提出的变种:
他聪明地发现的“攻击”是SYN Flood攻击,并且从二十世纪九十年代初就已经知道了。 由于防火墙阻止RST数据包,这些服务器将不知道closures连接,所以它们确实会根据正常的TCP重试时间重新发送SYN / ACK数据包。 但是,所有现代TCP堆栈都包含一些可configuration的SYN防洪保护措施。
这仍然是一种有效的攻击手段,虽然它造成的主要伤害是通过压倒周围的安全设备,使用太多的数据包来跟踪。 没有SYN的SYN / ACK应该非常便宜地丢在地板上,但是如果它们有足够的数量,它就可以淹没防火墙。
Syn Cookies有效地阻止了这种攻击。 服务器响应一个SYN / ACK,并忘记它。 如果收到ACK,则根据TCP序列号重新初始化stream。 在Linux上,通过添加:
net.ipv4.tcp_syncookies = 1
到/etc/sysctl.conf
但是当被10k +机器敲打的时候,服务器仍然会被拿下来。