当前位置: 首页 > article >正文

TCP协议与TCP SYN Flood攻击

✍作者:柒烨带你飞
💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。
📜系列专栏:网络安全从菜鸟到飞鸟的逆袭


目录

  • 一, TCP握手
  • 二,常用的TCP端口号及其功能
  • TCP SYN Flood攻击原理
  • 一,实施TCP SYN Flood攻击
    • 实验步骤
      • 1. 基本环境配置
        • GNS3
        • Kali linux
        • win-sever2016
      • 2 实施TCP SYN Flood 攻击
  • 二,防御 SYN Flood

  1. TCP报文段
    • 在这里插入图片描述

    • 字段含义 TCP(传输控制协议)_百度百科

    • TCP源端口(Source port):计算机上的应用程序的端口号,占16位

    • TCP目的端口(Destination port):目标计算机的应用程序端口号,占16位

    • Sequence Number是发送数据包中的第一个字节的序列号,32位。

    • ④ Acknowledgment Number是确认序列号,32位。

    • ⑤ Data Offset是数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。

    • ⑥ Reserved 是保留位,4位,为将来使用而保留的一组控制位。在生成段中必须为零。

    • ⑦ 控制位(标志位): 6位, CWR 表示减少拥塞窗口 ECE 表示从对方到本方的网络有拥塞

    • URG表UrgentPointer字段有实际意义 ACK表示Acknowledgment Number字段有实际意义 PSH表示Push功能 RST表示复位TCP连接 SYN表示SYN报文(在建立TCP连接的时候使用) FIN表示数据发送完毕(在关闭TCP连接的时候使用)

    • ⑧ Window表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度。

    • ⑨ Checksum是校验和,16位。

    • ⑩ Urgent Pointers是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序列号(SequenceNumber字段的值)的偏移。

一, TCP握手

在这里插入图片描述

  1. 第1次握手建立连接时,客户端向服务器发送 SYN 报文(SEQ=x,SYN=1),并进入 SYN SENT 状态,等待服务器确认

    • 在这里插入图片描述
  2. 第二次握手SYN+ACK(请求和确认)报文

    • 服务器收到客户端请求,向客户端回复一个确认信息ACK=x+1
    • 服务器再向客户端发送一个SYN包建立连接的请求,此时服务器进入SYN_PECV
    • 在这里插入图片描述
  3. 第三次握手,客户端收到服务器的回复(SYN+ACK)。此时客户端向服务器发送确认包(ACK)。此包发送完毕,客户端和服务器进入ESTABLISHED

    • 在这里插入图片描述
  4. 四次握手断开连接,这里就不抓包了

    • 在这里插入图片描述
  5. TCP半关闭状态

    • TCP连接只有一方发送了FIN,另一方没有发出FIN包,仍然可以在一个方向上正常发送数据
  6. TCP半连接状态

    • 发生在TCP3次握手中。如果客户端向服务端发起TCP请求,服务端也按照正常情况进行响应了,但是客户端不进行第3次握手,这就是半连接。半连接,会造成服务端分配的内存资源就一直这么耗着,直到资源耗尽(也就是常听说的SYN洪水攻击的原理)

二,常用的TCP端口号及其功能

在这里插入图片描述

TCP SYN Flood攻击原理

在正常的 TCP 连接建立中,客户端先发送 SYN 报文,服务器回应 SYN + ACK 报文,客户端再发送 ACK 报文完成连接建立。若一定时间内得不到客户端回应,服务器会放弃未完成连接,这是 TCP 的重传机制。而在 SYN Flood 攻击中,攻击者向服务器发送大量 SYN 报文,服务器回应后攻击者不再回应 ACK 报文,导致服务器上产生大量半连接,耗尽服务器资源,使正常请求无法得到回应(其他用户无法访问网页等)。

  • 攻击者通常会伪造源IP地址,发送大量来源地址经过伪装而且无法通过路由达到的SYN连接请求至目标主机提供TCP服务的端口。现行的IP路由机制仅检查目的IP地址并进行转发,当服务器按照IP报头中的来源地址返回SYN/ACK置位的数据包时,由于源IP是伪造的,这些数据包无法到达真正的源地址(实际上不存在这样的源),也就不会收到对应的ACK回复,从而使目的主机的TCP缓存队列被填满,达到攻击目的
  • 攻击成本低:很小的开销就可以发动庞大的攻击,时至今日仍然很猖獗1。
  • 简单易行:借助一些工具(如在Kali Linux下可以使用hping3等工具),黑客可以相对轻松地实施攻击,通过发送大量伪造的SYN包来达到攻击效果

一,实施TCP SYN Flood攻击

  1. 实验环境
    • GNS3:一台路由器,两个Cloud(添加VMnet1接口)

      • 在这里插入图片描述
    • 一台Kali Linux(包含工具hping3)网络适配器设置为VMnet1 仅主机模式。

      • ip配置:192.168.1.50/24
      • 网关:192.168.1.254
    • 一台Windows server 2016 (开启基于TCP)网络适配器设置为VMnet1 仅主机模式。

      • ip配置192.168.20.33/24
      • 网关:192.168.20.254

实验步骤

1. 基本环境配置

GNS3

两个云添加VMnet1接口,连接路由器,启动R1,给路由器两个接口配上IP地址即可
在这里插入图片描述

Kali linux
进入Root模式命令窗口,配置静态IP
	vim /etc/network/interfaces //进入文件里面配置静态ip
	//输入 a 插入模式
  • 在这里插入图片描述
	auto eth0
	iface eth0 inet static
	address 192.168.1.50
	netmask 255.255.255.0
	gateway 192.168.1.254 //R1 f0/0的那个接口地址
	//按键盘上的(ESC按键) 
	//然后输入冒号::wq 
	//:wq表示退出保存 
	----------------------------
	//开关一下接口,刷新ip
	ifup eht0 //开启
	ifdown eth0 //关闭
	ifup eth0 //开启

配置完成,能ping通192.168.1.254
在这里插入图片描述

win-sever2016
win+R cmd命令配置静态IP
netsh interface ip set address ethernet0 static 192.168.20.33 255.255.255.0 192.168.20.254
//192.168.20.33 255.255.255.0 192.168.20.254 IP地址-子网掩码-网关(R1 f0/1的IP地址)
  • 配置完成,ping一下.254能ping通在这里插入图片描述

  • 打开服务器管理器,添加功能Web服务器(IIS),其他界面都点击下一步,安装就好

    • 在这里插入图片描述

    • 在这里插入图片描述

    • 安装完成,在windows管理工具下有个IIS管理器,打开,浏览你内部网络中的网站,因为没配置前端后端代码,网页是最原始的
      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

    • kali也能能成功访问网站在这里插入图片描述

2 实施TCP SYN Flood 攻击

先提前去GNS3,打开抓包

hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.20.33 
/*
-c 10000 发送数据包的流量
-d 120 发送到目标机器的每个数据包的大小
-S 只发送SYN数据包(注意是大写S)
-w 64 TCP窗口大小
-p 80 目的地端口(80是http端口)
--flood 快速发送数据包,不需要考虑显示入站回复,洪水攻击模式
--rand-source 使用随机性的源头IP地址
192.168.20.33 目标IP地址(外网IP地址也可)或域名
*/

在这里插入图片描述

  • 在服务器上抓取的流量,可以看出Kali Linux 伪造了很多IP地址向SYN发送请求,这个黑色报文,就是因为网络堵塞造成的
    抓包的报文
    在这里插入图片描述

二,防御 SYN Flood

1、使用TCP代理
TCP代理是指我们的防火墙部署在客户端和服务器中间,当客户端向服务器发送的SN报文经过防火墙时,防火墙代替服务器与客户端建立三次握手。一般用于报文来回路径一致的场景。工作过程防火墙收到SYN报文,对SYN报文进行拦截,代替服务器回应SYN+ACK报文,.如果客户端不能正常回应ACK报文,则判定此SVN报文为非正常报文,防火墙代替服务器保持半连接一定时间后,放弃此连接。如果客户端正常回应ACK报文,防火墙与客户端建立正常的三次握手,则判定此SYN报文为正常业务报文,非攻击报文。防火墙立即与服务器再建立三次握手,此连接的后续报文直接送到服务器,整个TCP代理的过程对于客户端和服务器都是透明的。.
2、TCP源探测
·TCP源探测是防火墙防御SYN Food攻击的另一种方式,没有报文来回路径必须一致的限制,所以应用普遍。工作过程当防火墙收到客户端发送的SYN报文时,对SYN报文进行拦载,并伪造一个带有错误序列号的的SYN+ACK报文回应给客户端.如果客户端是虚假源,则不会对错误的SYN+ACK报文进行回应。.如果客户端是真实源发送的正常请求SYN报文,当收到错误的SYN+ACK报文时,会再发出一个RST报文,让防火墙重新发一个正。确的SYN+ACK报文;防火墙收到这个RST报文后,判定客户端为真实源,则将这个源加入白名单,在白名单老化前,这个源发出的报文都认为是合法的报文,防火墙直接放行,不在做验证。

博主的其他系列专栏📜📜📜

  • 1 环境配置集合
  • 2 C语言小实例项目
  • 3 HTML入门 + 实战小案例

创作不易,😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!留下你的看法和建议💕
我们下期见✍️


http://www.kler.cn/a/510855.html

相关文章:

  • 最新版Edge浏览器加载ActiveX控件技术——allWebPlugin中间件之awp_CreateActiveXObject接口用法
  • openharmony应用开发快速入门
  • 【PyCharm】连接 Git
  • 【记录52】el-table-column 添加fixed属性 滚动条无法滑动
  • LLM - 大模型 ScallingLaws 的 C=6ND 公式推导 教程(1)
  • LeetCode 707 题:设计链表
  • 【专题二 二叉树中的深搜】814. 二叉树剪枝
  • 解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
  • 21.1、网络设备安全概述
  • Ubuntu22.04安装paddle GPU版本
  • Linux| ubuntu系统入门篇
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • 分布式 ID 生成策略:应用场景与 ShardingSphere 实现
  • EPLAN 2024-电机保护开关符号,辅助触点
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(13)网格单元分类、物理场与自由度概念
  • http://noi.openjudge.cn/——4.7算法之搜索——【169:The Buses】
  • 《王者荣耀》皮肤爬虫源码
  • 【漫话机器学习系列】050.epoch(迭代轮数)
  • 数字艺术类专业人才供需数据获取和分析研究
  • 解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(6)(并行相关Hint)
  • 接口测试Day10-测试数据封装(参数化-数据驱动)
  • 【氮化镓】香港科技大学陈Kevin-单片集成GaN比较器
  • TensorFlow深度学习实战(5)——神经网络性能优化技术详解
  • Linux磁盘空间不足,12个详细的排查方法
  • 【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】
  • NavVis手持激光扫描帮助舍弗勒快速打造“数字孪生”工厂-沪敖3D