SYN Flood , DDos攻击以及防护措施

目录

1 SYN Flood 

2 直接攻击

3 伪造源攻击(IP欺骗)

4 分布式服务拒绝式攻击(DDos)  -- SYN Flood

1 部署 Anti-DDos 服务(源认证+首包丢弃)

2 SYN Cookie 技术

5 分布式服务拒绝是攻击(DDos) -- 应用层


1 SYN Flood 

SYN Flood 就是SYN洪水攻击,他是利用TCP握手机制的漏洞,来达到攻击服务器的目的

TCP三次握手中,客户端发起 SYN 请求,而服务端受到SYN请求之后,会返回一个 SYN+ACK ,与此同时,服务器会在底层为这个客户端维护一个数据结构,放在半连接队列中。那么如果同一时刻存在的半连接数量过多,会消耗服务器的资源,同时,也可能导致服务器无法将新连接放到半连接队列中。 

只有服务器收到了客户端的 ACK 之后,该连接的数据结构才会从半连接队列中放到全连接队列中,等待被上层 accept 。

2 直接攻击

那么最简单的SYN 洪水攻击方式就是: 首先黑客会使用自己真实的IP地址,向服务器发送大量的创建连接请求,同时黑客会在自己的主机的防火墙规则中将服务器返回的SYN+ACK拦截,那么这样一来,自然就不会回复ACK,就会一直占用服务器的半连接队列资源。即使服务器重传ACK+SYN,还是会被拦截。 

当然这些半连接资源最终会由于超时而被释放,但是他在这段时间内会占用系统资源,影响正常的客户端的建立连接的请求。

这种攻击方式由于是直接使用一个真实的IP进行攻击,很容易溯源,以及进行屏蔽。服务器可以设置在一段时间内某一个IP发送过多的SYN请求,就将其列入黑名单,从而拦截这些恶意的IP。

这种方式过于简单直接,很少被使用。

3 伪造源攻击(IP欺骗)

在这种方式下,黑客不直接使用自己真实的网络地址向服务器发送连接请求,而是伪造TCP请求报文,使用虚假的源地址进行连接建立的请求。 

那么服务器在受到连接建立请求之后,在他看来,所谓的连接发起方就是TCP报头中的源IP和源端口这一组地址号,那么他就会发送SYN+ACK给这个虚假的网络地址,并且为其维护半连接。 但是由于这是一个虚假的网络地址,服务器永远也不会受到对端的ACK,那么该连接也就一直在半连接队列中占用服务器资源,直到超时释放。 

那么在这种情况下,黑客可以使用单主机来伪造大量的虚假源地址的连接请求报文,占用服务器资源,导致正常的用户无法建立连接。

而这种做法其实也有解决方案,因为不管它使用的是真实的IP还是虚假的IP,他的报文的源头其实都是黑客的主机,那么其实服务器提供商是可以联合运营商或者网络提供商来进行恶意报文的溯源的,最终也是能够找到攻击方

上面所讲的两种SYN Flood攻击都是以消耗服务器的系统和CPU资源,来导致正常用户无法建立连接,当服务器资源已经超负荷时,新来的正常用户的连接请求会被直接拒绝。 所以我们称类似的这种使服务器无法再建立正常连接,拒绝正常连接的攻击方式称为服务拒绝式攻击(Dos)。 

4 分布式服务拒绝式攻击(DDos)  -- SYN Flood

上面的两种攻击方式都是基于黑客的一台主机而进行的,而在只有一台主机的情况下,理论来说只要服务器的配置足够高,在一定程度上对这两类攻击会有所缓解。 

DDos攻击其实就是利用多台主机进行TCP连接请求,最终也是导致占用服务器资源过多而无法接收正常的连接。 而DDos相对于前面所讲的Dos攻击最显著的特点就是难以溯源,无法找到攻击的真正源头。

 DDos 攻击: 黑客在网络中散布病毒,控制大量的网络设备,然后在某一个时刻同时向服务器发出大量的SYN请求,最终也不进行回复,占用服务器的半连接队列资源,最终导致无法建立正常的连接。

在这种攻击模式下,我们可以称这些被控制的设备为 肉鸡 或者 傀儡机,黑客并不直接发起恶意的连接请求,而是通过控制傀儡机来进行攻击,这样会使得服务器对恶意攻击的溯源的难度直线飙升。

那么这种攻击如何进行防范呢?

首先是笨方法,我们只需要让我们的服务器的配置足够高,那么就可以为服务器设置更高的半连接队列和连接的数量,那么就可以抵御一定的DDos攻击。 但是这个方法最大的缺点就是: 成本巨高,同时,在正常的运行中,大量资源其实是浪费的。

第二个方法也很简答,我们目前的问题无非就是半连接队列被占满之后,无法受理新的正常连接。那么在半连接队列满了的时候,我们可以认为半连接队列前部的连接是恶意连接,因为他是最早到来的连接请求,但是直到半连接队列满了都还没受到ACK提升为全连接。

那么此时如果有新连接到来,我们就可以释放掉半连接队列前部的连接的资源,为新到连接空出资源。 

而这种方法也会导致正常的在半连接队列中的连接被误释放。

下面有两种很好理解的解决方案:

1 部署 Anti-DDos 服务(源认证+首包丢弃)

SYN Flood 方式的DDos无非就是通过占用服务器的半连接资源来达到攻击的目的,并不会进行第三次握手的回复,而如果我们在服务器和客户端之间再增加一层软件层,也就是我们的             Anti-DDos。

当有客户端向服务器发起SYN的时候,他们的SYN报文并不会直接到达服务器,而是被Anti-DDos拦截,代替服务器向客户端回复SYN+ACK,如果客户端进行了第三次握手的回复,那么我们的Anti-DDos就会将这个正常的连接请求交付给服务器,由服务器建立好正常的连接,同时Anti-DDos会将该IP地址加入白名单,后续的一段时间内不会再拦截该IP的报文

这就是一种简单的源认证,设置一个软件层对SYN的源头进行虚假性的检测。

但是,如果只是源认证的话,那么仅仅是将服务器的压力转移到了Anti-DDos服务器,如果大量SYN同时到来,会导致Anti-DDos服务器资源耗尽,那么这时候为了不影响正常连接,会将无法进行源认证的SYN直接穿透式的交给服务器,这时候如果攻击力度足够大,还是会影响到服务器。

那么为了更深层次的防备DDos,还需要一种策略就是首包丢弃。 

顾名思义,就是Anti-DDos服务器在收到一个SYN请求时,并不为其保存部分数据,而是不进行回复。 这是依赖于TCP的超时重传机制的。 如果是一个正常的客户端发起的连接请求,在超时时间内未收到ACK的话,会触发超时重传机制,再次发起SYN请求,这时候Anti-DDos服务器才会去执行源认证的策略。从而保证Anti-DDos服务器和服务器的安全。

通过源认证+首包丢弃的方案,就能够大限度的防备DDos攻击。

因为黑客在进行DDos攻击的时候,最终还是通过虚假源发起SYN请求,而不会进行回复行为,也不会有超时重传的行为。

2 SYN Cookie 技术

服务器受到DDos攻击的根本原因还是因为服务器会在第一次握手就建立好半连接,消耗自己的资源。那么如果服务器在收到SYN请求之后,并不在服务器内部直接保存对端的数据结构,就可以防备这种攻击。 那么具体怎么做呢?

其实这种方法还是利用黑客制造的虚假源SYN 不会进行回复的特点。 

服务器在收到SYN请求之后,利用特殊的算法生成一个Cookie,这个Cookie包含了对端的IP+port以及己方的IP+port信息,以及对端无法知道的服务器的一些固定的信息,比如服务器的时间等,这个Cookie会作为服务器返回的ACK+SYN中的序列号来发送。  

如果对端是正常客户端连接,那么就会恢复一个ACK报文,在这个ACK报文中会进行服务端的SYN的确认应答,也就是序列号是服务端生成的Cookie + 1 。那么服务器这时候会再次使用相同的Cookie生成算法生成一个原来的Cookie,然后对比其是否和ACK中的确认序号相差1,如果是,那么就会放入半连接队列中,然后再正常建立全连接。

 当然,由于Cookie也就是序号只有32位,那么势必会损失一些连接相关的数据。 

即便如此,也比被DDos消耗完服务器的资源好。

5 分布式服务拒绝是攻击(DDos) -- 应用层

上面讲的DDos攻击的方式是通过SYN Flood 来占用服务器的半连接资源,并不会建立真正的连接。 而其实还有一种分布式攻击就是控制足够多的肉鸡,同时对服务器发起正常的 Web 请求,那么在这个时候占用的是服务器的全连接资源。 当服务器的连接数量达到上限之后,也无法再为新来的客户端连接提供服务。

这种攻击方式最好的解决方案就是提升服务器的配置以及分散流量

我们可以使用分布式的服务器,也就是边缘服务器,当客户端请求的资源在边缘服务器中能找到,那么就直接由边缘服务器进行服务。 如果边缘服务器无法满足需求,再访问源服务器或者说根服务器。

理论上来说这种攻击方式无解,只要由足够多的看似正常的客户端进行看似正常的Web请求,那么没有任何方案能够防范。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议推荐】抢先掌握学术前沿!快来参加EI学术会议投稿,展示你的研究成果,开启科研新高度!

【EI会议推荐】抢先掌握学术前沿!快来参加EI学术会议投稿,展示你的研究成果,开启科研新高度! 【EI会议推荐】抢先掌握学术前沿!快来参加EI学术会议投稿,展示你的研究成果,开启科研新高度&#…

2.若依vue表格数据根据不同状态显示不同颜色style

例如国标显示蓝色&#xff0c;超标是红色 使用是蓝色&#xff0c;未使用是绿色 <el-table-column label"外卖配送是否完成评价" align"center" prop"isOverFlag"> <template slot-scope"scope"> …

Java基础-内部类与异常处理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 内部类 什么是内部类&#xff1f; 使用内部类的优点 访问局部变量的限制 内部类和继承 内部…

[代码随想录打卡Day7] 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

454.四数相加 思路&#xff1a;没有去重问题&#xff0c;使用化解法。先对a,b两个数组进行双层for循环遍历得到所有的ab的值保存到map中&#xff0c;key是ab的值&#xff0c;value存储出现的次数&#xff0c;然后双层for循环遍历c,d&#xff0c;查找0-(cd)是否在map中&#xf…

【系统架构设计师】2022年真题论文: 论区块链技术及应用(包括解题思路和素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2022年 试题3)解题思路区块链技术原理区块链技术的关键特性区块链技术的应用领域论文素材参考真题题目(2022年 试题3) 区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理…

Kubernetes(K8s)相关漏洞介绍

Kubernetes&#xff08;K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。然而&#xff0c;像任何复杂的软件系统一样&#xff0c;Kubernetes也存在一些安全漏洞。以下是一些已知的Kubernetes安全漏洞&#xff1a; Kubernetes镜…

C# 常用的测试框架合集

在 C# 开发中&#xff0c;拥有强大的测试框架是确保代码质量和稳定性的关键。本文将介绍一些 C# 中常用的测试框架&#xff0c;帮助你更好地进行单元测试、集成测试等各类测试工作。 一、NUnit 简介 NUnit 是一个广泛使用的开源测试框架&#xff0c;专为.NET 平台设计。它提供…

Obsidian vs Typora

引言 近来几日&#xff0c;自己也算是用了一段时间的Obsidian了&#xff0c;也是有资格来说一下使用感受了。当前感觉是自己未来很长一段时间将会一直使用Obsidian了。 Typora vs Obsidian Typora 优点 整体好看&#xff0c;简洁&#xff0c;所见即所得 缺点&#xff1a;…

Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Spring Boot开发入门教程

简介 Spring Boot是一个开源的Java基础框架&#xff0c;用于创建独立、生产级的基于Spring框架的应用程序。通过Spring Boot&#xff0c;你可以轻松地创建独立的、生产级的Spring应用程序。 环境准备 Java开发环境&#xff1a;确保你的机器上安装了Java 8或更高版本。Maven…

科技资讯|谷歌Play应用商店有望支持 XR 头显,AR / VR设备有望得到发展

据 Android Authority 报道&#xff0c;谷歌似乎正在为其 Play 商店增加对 XR 头显的支持。该媒体在 Play 商店的代码中发现了相关的线索&#xff0c;包括一个代表头显的小图标以及对“XR 头显”的提及。 谷歌也可能改变了此前拒绝将 Play 商店引入 Meta Quest 头显的决定。今…

使用Python Flask实战构建Web应用

你是否曾想过&#xff0c;使用Python来快速搭建一个Web应用&#xff1f;Flask作为一个轻量级的Web框架&#xff0c;因其简单、灵活且高效&#xff0c;成为了很多开发者首选的工具。今天&#xff0c;就让我们一同走进Flask的世界&#xff0c;探索如何使用它轻松构建一个实战Web应…

map和set和pair

目录 一.序列式容器和关联式容器 一.set set类的介绍&#xff1a; Construct &#xff1a;set的初始化 insert&#xff1a;插入 ​编辑find&#xff1a;查找 erase&#xff1a;删除 set查找范围的函数&#xff1a;​编辑 二.map 2.1map介绍 2.2pair类型介绍 在map的i…

GA/T1400视图库平台EasyCVR视频分析设备平台微信H5小程序:智能视频监控的新篇章

GA/T1400视图库平台EasyCVR是一款综合性的视频管理工具&#xff0c;它兼容Windows、Linux&#xff08;包括CentOS和Ubuntu&#xff09;以及国产操作系统。这个平台不仅能够接入多种协议&#xff0c;还能将不同格式的视频数据统一转换为标准化的视频流&#xff0c;通过无需插件的…

HCIP(7)-边界网关协议BGP基本配置(对等体peer,宣告network,引入import)

边界网关协议&#xff08;Border Gateway Protocol&#xff0c;BGP&#xff09;是一种用来在路由选择域之间交换网络层可达性信息&#xff08;Network Layer Reachability Information&#xff0c;NLRI&#xff09;的路由选择协议。由于不同的管理机构分别控制着他们各自的路由…

GODOT 4 不用scons编译cpp扩展的方法

以terrain3d插件&#xff0c;Godot_v4.3 为例&#xff1a; 下载下来&#xff0c;先用scons编译一遍通过后&#xff0c;整个占用1GB&#xff0c;obj文件都生成在源码旁边&#xff0c;够乱。 scons 是跨平台的构建工具&#xff0c;但是需要需要写python脚本。流程比较莫名其妙…

KVM虚拟机的冷热迁移

首先了解在KVM&#xff08;Kernel-based Virtual Machine&#xff09;环境中&#xff0c;冷热迁移是指将虚拟机从一台主机迁移到另一台主机的过程&#xff0c;根据虚拟机是否需要停机&#xff0c;迁移分为热迁移和冷迁移&#xff1a; 冷迁移&#xff08;Cold Migration&#x…

掌握ElasticSearch(八):聚集、文档间的关系

文章目录 一、聚集聚集类型示例 二、文档间的关系1. 对象类型&#xff08;Object Type&#xff09;2. 嵌套文档&#xff08;Nested Documents&#xff09;定义嵌套字段索引嵌套文档查询嵌套文档 3. 父子关系&#xff08;Parent-Child Relationship&#xff09;定义父子关系索引…

sqlalchemy进阶使用

from sqlalchemy import create_engine# 替换为你的MySQL数据库信息 username root password 123456 host localhost # 例如&#xff1a;localhost 或 127.0.0.1 port 3306 # 通常是 3306 database ee# 创建连接引擎 engine create_engine(fmysqlpymysql://{username}:…