TCP SYN Flood如何实现

摘要

拒绝服务攻击(DDoS)从1970年出现直到今天都依然在作祟,并给全球范围内的各大组织带来了不可估量的损失。在这篇文章中,我们将跟大家介绍一种特定的DoS攻击,即TCP SYN Flood攻击,并介绍一款名叫Synner的工具。

该工具采用Rust开发,由libpnet驱动,该工具目前仍处于开发状态(WIP),不过现在的功能已经足以发布出来跟社区人员共享了。

介绍

Synner能够向目标快速持续地发送SYN数据包奥,并引起目标拒绝服务。一般来说,编写并将这类攻击工具开源出来,使很多安全社区的研究人员所诟病的,但我个人并不这样认为,因为我们只有清楚地知道攻击的具体实现方式,我们才能更好地保护自己。

TCP SYNFlood攻击原理

TCP SYNFlood攻击利用的是TCP的三次握手(SYN -> SYN/ACK -> ACK),过程如下图所示:

核心思想就是同步发送SYN数据包,这样的操作对于发送方(攻击者)来说是非常容易实现的,而对于接收方(目标)来说会需要消耗更多的资源去接收和处理数据包。除此之外,在发送完SYN数据包之后,我们不需要等待接收端返回的SYN/ACK数据包,我们只需要继续向对方发送SYN数据包并让服务器自己去处理就可以了。这样一来,当合法用户尝试连接服务器时,服务器已经有大量SYN连接需要去处理,因此将无法及时相应合法用户的请求。

对于接收方来说还有一个难题,就是请求源是可以伪造的,尤其是src端口,这就增加了屏蔽非法请求的难度。

下面给出的是一个随机TCP SYN数据包的十六进制形式:

解析出来之后的结果如下:

Synner到底有多快?

Synner一开始的速度还是比较慢的,首先我当时还没有使用任何编译器来对其进行优化,其次我当时选择使用的是pnet_datalink::DataLinkSender::send_to而不是pnet_datalink::DataLinkSender::build_and_send,这也就意味着我选择克隆数据包的方式还不够完美。因此,Synner当时发送1000000个TCPSYN数据包需要花29.48秒,相当于每秒钟发送33921个数据包,简直是受不了。

不过经过优化之后的结果还是比较好的,数据如下:

原始的Powershell输出如下:

工具要求

1. rustc/cargov1.27.0

2. WinPcapfor libpnet(Windows)

工具使用

首先使用下列命令克隆项目源码:

然后运行下列命令:

为了确保能够导出完整的网络接口列表,请确保使用管理员权限

运行命令行工具。

如果你无法确定接口名称,你可以使用\DEVICE\来查看接口列表,例如:

使用样例

运行下列命令对一个DigitalOcean测试用例进行测试:

在下面这个GIF中,底部是运行Synner的界面,右边是一个SSH连接,用来查看TCP连接信息(sudotcpdump “tcp[tcpflags] & (tcp-syn) != 0″ -i eth0 -n),当我成功对第一个目标进行TCP SYN Flood攻击之后,左边显示的是我尝试对第二个目标进行攻击的画面。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724B11RPE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券