SYN 洪水是 DoS 攻击的一种形式,攻击者向目标服务器发送连续的SYN
请求,试图消耗足够的服务器资源,使系统对合法流量无响应[1] 。
SYN
请求和SYN
数据包是相同的东西
SYN 洪水攻击通过利用 TCP 连接的握手过程来进行。在正常情况下,TCP 会表现出三个不同的过程来建立连接(图 1a)。
SYN
(同步)数据包来请求连接。SYN-ACK
数据包进行响应,以ACK
通信。ACK
数据包以确认从服务器收到数据包并建立连接。完成这一系列数据包发送和接收后,TCP 连接就打开并能够发送和接收数据。这称为 TCP 三向握手。该技术是使用 TCP 建立的每个连接的基础。
为了创建 DoS,攻击者利用以下事实:在收到初始SYN
数据包后,服务器将使用一个或多个SYN-ACK
数据包进行响应,并等待握手的最后一步。 Cloudflare [2]描述了它的工作原理(图 1b):
SYN
数据包,通常带有欺骗性的 IP 地址。ACK
数据包(该数据包从未到达)时,攻击者继续发送更多SYN
数据包。每个新的SYN
数据包的到来都会导致服务器在一定时间内暂时维持一个新的开放端口连接,一旦所有可用端口都被利用,服务器就无法正常工作。 该存储库中的攻击是在虚拟机中进行的。需要三台机器来进行攻击。一台机器作为攻击者,另一台机器作为受害者(即服务器),第三台机器作为观察者(即客户端)。
为了发起攻击,可以在同一台主机上设置三个虚拟机。或者,可以在一台主机上设置两个虚拟机,并将主机本身充当第三台计算机。
此攻击是在假设攻击者与受害者位于同一物理网络上的情况下实施的,从而简化了确定 TCP 序列号和源端口号的任务。嗅探器工具可用于收集必要的信息。
该存储库中的攻击是使用netwox
工具进行的。然后,使用Wireshark [3]等嗅探工具来捕获攻击数据包。当攻击正在进行时,在受害计算机上运行netstat -na
将结果与攻击前的结果进行比较。
# check the size of the queue for holding half-open connections
sudo sysctl -q net.ipv4.tcp_max_syn_backlog
# check the current usage of the queue;
# i.e., the number of half-open connections associated with some listening port
netstat -na
# one netwox tool that may be useful is tool number 76: synflood
netwox 76 --help
同步 Cookie:
该存储库中的攻击是通过操纵 SYN cookie 进行的。
使用 SYN cookie 允许服务器在 SYN 队列填满时避免丢弃连接。 SYN 队列条目被编码到 SYN-ACK 响应中发送的序列号中,而不是存储额外的连接。如果服务器随后从客户端接收到具有递增序列号的后续 ACK 响应,则服务器能够使用 TCP 序列号中编码的信息重建 SYN 队列条目,并照常继续连接。
虽然这种缓解措施确实会丢失一些有关 TCP 连接的信息,但它比允许 DoS 由于攻击而降临到合法用户身上要好。
SYN cookie 是由 DJ Bernstein [4]创建的,用于直接响应 SYN 泛洪。
使用sysctl
命令打开/关闭SYN cookie机制:
sudo sysctl -a | grep cookie # Display the SYN cookie flag
sudo sysctl -w net.ipv4.tcp_syncookies=0 # turn off SYN cookie
sudo sysctl -w net.ipv4.tcp_syncookies=1 # turn on SYN cookie
SYN cookie 是可用于阻止 SYN 泛洪的众多对策之一。其他缓解措施包括增加队列的最大大小、减少SYN-RECEIVED
计时器以及回收最旧的半打开 TCP 连接。
^ “CERT Advisory CA-1996-21 TCP SYN Flooding 和 IP 欺骗攻击”卡内基梅隆大学
^“SYN 洪水攻击” Cloudflare
^ “关于 Wireshark” Wireshark 基金会
^“SYN cookies” DJ伯恩斯坦
感谢您的兴趣,这个项目既有趣又富有洞察力!