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

计算机网络之洪水攻击

SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应 报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。

1、什么是SYN泛洪攻击

TCP SYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。

2、SYN泛洪攻击原理

大家都知道一个TCP连接的启动需要经历三次握手的过程。正常情况下客户端首先向服务端发送SYN报文,随后服务端回以SYN+ACK报文到达客户端,最后客户端向服务端发送ACK报文完成三次握手,后续就是上层业务数据交互,直到某一方断开连接。

img

那么假如在这“握手”的过程中,客户端程序因为莫名崩溃等原因,收到SYN+ACK报文后不再回以ACK,服务端将如何处置呢?这时服务端会“优雅地”再等等,会不会是发送的包丢失了呢?于是重新发送一遍SYN+ACK,再收不到来自客户端的ACK响应的话,就把这次连接丢弃掉。这个过程大约会“优雅地”持续分钟级,这个持续时间被称作SYN timeout时间。如果只有个别这样的异常情况,目标服务端处理起来自是毫不费力;可如果大量这样的情况出现,对服务端来说就不堪重负了。这是为什么呢?
如果大量的握手请求涌向TCP服务端,而它们只发出SYN报文而不以ACK响应结束握手,服务端就要为这每一个请求都维持约一分多钟的连接去等待ACK,也就形成所谓的“半连接”。维护这些半连接是需要消耗很多服务器的网络连接资源的。如果短时间内这些资源几乎都被半连接占满,那么正常的业务请求在这期间就得不到服务,处于等待状态。

img
更进一步的,如果这些半连接的握手请求是恶意程序发出,并且持续不断,那么就会导致服务端较长时间内丧失服务功能——这就形成了DoS(Denial of Service拒绝服务)攻击。这种攻击方式就称为SYN泛洪(SYN flood)攻击。
由于正常的TCP三次握手中发出去多少SYN报文,就会收到多少SYN+ACK报文。攻击方需要将这些消息丢弃,同时为了隐藏自己,于是需要大量伪造泛洪攻击的源地址,随机改成其它地址。为达到SYN泛洪攻击的效果,这些伪造的源地址最好无法响应SYN+ACK,如这些源地址的主机根本不存在,或者被防火墙等网络设施拦截,等等。

3、防范措施

对于SYN泛洪攻击的防范,优化主机系统设置是常用的手段。如降低SYN timeout时间,使得主机尽快释放半连接的占用;又比如采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文。此外合理地采用防火墙等外部网络安全设施也可缓解SYN泛洪攻击。

相关文章:

  • TCP协议的三次握手和四次挥手详解
  • 春招进大厂面试Linux,就这6个问题!
  • 你准备好了吗?开始Python之旅吧!
  • Python期末总结
  • struct 模块
  • 基于socketserver实现并发socket套接字编程
  • python来源介绍
  • 进程与线程的一个解释,小白也能看的懂
  • 进程基础
  • 进程调度的来龙去脉
  • 线程基础
  • 进程的并发并行串行
  • 同步异步阻塞非阻塞
  • 进程的并发并行及同步异步
  • 进程的创建和结束
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • ES6简单总结(搭配简单的讲解和小案例)
  • Hibernate最全面试题
  • JavaScript学习总结——原型
  • MQ框架的比较
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Swift 中的尾递归和蹦床
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vultr 教程目录
  • XML已死 ?
  • 给初学者:JavaScript 中数组操作注意点
  • 聊聊flink的TableFactory
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Git) gitignore基础使用
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (接口自动化)Python3操作MySQL数据库
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)插入排序
  • (转)scrum常见工具列表
  • .gitignore文件_Git:.gitignore
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net 简单实现MD5
  • .net连接oracle数据库
  • .NET下的多线程编程—1-线程机制概述
  • :中兴通讯为何成功
  • @RestController注解的使用
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [Grafana]ES数据源Alert告警发送