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

SYN Flood攻击原理,SYN Cookie算法

SYN Flood是一种非常危险而常见的Dos攻击方式。到目前为止,能够有效防范SYN Flood攻击的手段并不多,SYN Cookie就是其中最著名的一种。

1. SYN Flood攻击原理

SYN Flood攻击是一种典型的拒绝服务(Denial of Service)攻击。所谓的拒绝服务攻击就是通过进行攻击,使受害主机或网络不能提供良好的服务,从而间接达到攻击的目的。SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Handshake)过程进行的攻击。

TCP服务器收到TCP SYN request包时,在发送TCP SYN + ACK包回客户机前,TCP服务器要先分配好一个数据区专门服务于这个即将形成的TCP连接。一般把收到SYN包而还未收到ACK包时的连接状态称为半打开连接(Half-open Connection)。在最常见的SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者。受害者(服务器)为每个TCP SYN包分配一个特定的数据区,只要这些SYN包具有不同的源地址(攻击者很容易伪造)。这将给TCP服务器造成很大的系统负担,最终导致系统不能正常工作。

2. SYN Cookie

SYN Cookie是对TCP服务器端的三次握手做一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器接收到TCP SYN包并返回TCP SYN + ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。这个cookie作为将要返回的SYN ACK包的初始序列号。当客户端返回一个ACK包时,根据包头信息计算cookie,与返回的确认序列号(初始序列号 + 1)进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。实现的关键在于cookie的计算,cookie的计算应该包含本次连接的状态信息,使攻击者不能伪造。

3. SYN Cookie算法

服务器收到一个SYN包,计算一个消息摘要mac。

mac = MAC(A, k);

MAC是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供cookie计算中需要的安全性。

在Linux实现中,MAC函数为SHA1。

A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t || MSSIND

k为服务器独有的密钥,实际上是一组随机数。

t为系统启动时间,每60秒加1。

MSSIND为MSS对应的索引。

以上关于SYN FLOOD

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 货车都配一键启动无钥匙进入了用起来真的很方便
  • thinkphp8 从入门到放弃(后面会完善用到哪里写到哪)
  • python标识符和关键字
  • 【病毒分析】新兴TOP2勒索软件!存在中国受害者的BianLian勒索软件解密原理剖析
  • Python精选200Tips:166-170
  • 如何确定SAP 某些凭证或者单号的号码编码范围的 OBJECT 是什么?
  • Selenium与数据库结合:数据爬取与存储的技术实践
  • UE学习篇ContentExample解读------Blueprint_Communication-上
  • Leecode刷题之路从今天开始
  • 吸尘器制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • 经验——CLion通过SSH远程开发__imx6ull的linux开发
  • 【MySQL】数据库基础认识
  • 分区与分桶
  • PlayerPerfs-不同平台的存储位置
  • 最大似然估计,存在即合理
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript-Array类型
  • Java反射-动态类加载和重新加载
  • Magento 1.x 中文订单打印乱码
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql中InnoDB引擎中页的概念
  • React-redux的原理以及使用
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spring学习第二天
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 数组大概知多少
  • 正则表达式小结
  • 走向全栈之MongoDB的使用
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​secrets --- 生成管理密码的安全随机数​
  • ​补​充​经​纬​恒​润​一​面​
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言)逆序输出字符串
  • (Qt) 默认QtWidget应用包含什么?
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (七)Knockout 创建自定义绑定
  • (十三)Flask之特殊装饰器详解
  • (一)Docker基本介绍
  • (一)WLAN定义和基本架构转
  • ***检测工具之RKHunter AIDE
  • .apk 成为历史!
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET 反射 Reflect
  • .NET 使用配置文件
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .net中的Queue和Stack
  • [ C++ ] STL---string类的模拟实现
  • [20180224]expdp query 写法问题.txt
  • [2669]2-2 Time类的定义
  • [CF543A]/[CF544C]Writing Code
  • [docker]docker网络-直接路由模式