Syn Flood 攻击(2019.10.27)

2024-01-13 03:08
文章标签 攻击 27 syn flood 2019.10

本文主要是介绍Syn Flood 攻击(2019.10.27),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是SYN Flood攻击?

SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击。效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求。

说到原理,还得从TCP如何建立连接(Connection)讲起。通信的双方最少得经过3次成功的信息交换才能进入连接全开状态(Full-Open),行话叫建立TCP连接的3次握手(TCP three-way handshake)。

本文假设连接发起方是A,连接接受方是B,即B在某个端口(Port)上监听A发出的连接请求。如下图所示,左边是A,右边是B。

正常的TCP三次握手,From Wikipedia

A首先发送SYN(Synchronization)消息给B,要求B做好接收数据的准备;B收到后反馈SYN-ACK(Synchronization-Acknowledgement) 消息给A,这个消息的目的有两个:(1) 向A确认已做好接收数据的准备,(2) 同时要求A也做好接收数据的准备,此时B已向A确认好接收状态,并等待A的确认,连接处于半开状态(Half-Open),顾名思义只开了一半;A收到后再次发送ACK(Acknowledgement)消息给B,向B确认也做好了接收数据的准备,至此三次握手完成,“连接”就建立了,实际上只是双方都按对方的要求进入了可以接收消息的状态。以上彼此要求对方确认的“状态”主要是双方将要使用的消息序号(SequenceNum),TCP为保证消息按发送顺序抵达接收方的上层应用,需要用消息序号来标记消息的发送先后顺序的。TCP是“双工”(Duplex)连接,同时支持双向通信,也就是双方同时可向对方发送消息,其中SYN和SYN-ACK消息开启了A→B的单向通信通道(B获知了A的消息序号);SYN-ACK和ACK消息开启了B→A单向通信通道(A获知了B的消息序号)。

以上讨论的是在双方诚实可信,网络正常的理想状况下建立连接。但实际情况是,网络可能不稳定会丢包,使握手消息不能抵达对方,也可能是对方故意不按规矩来,故意延迟或不发送握手确认消息。假设B通过某TCP端口提供服务,B在收到A的SYN消息时,积极的反馈了SYN-ACK消息,使连接进入半开状态,因为B不确定自己发给A的SYN-ACK消息或A反馈的ACK消息是否会丢在半路,所以会给每个待完成的半开连接都设一个Timer,如果超过时间还没有收到A的ACK消息,则重新发送一次SYN-ACK消息给A,直到重试超过一定次数时才会放弃。

SYN Flooding, From Wikipedia

做好人是要付出代价的,B为帮助A能顺利连接,需要分配内核资源维护半开连接,那么当B面临海量的大忽悠A时[1],如上图所示,SYN Flood攻击就形成了。攻击方A可以控制肉鸡向B发送大量SYN消息但不响应ACK消息,或者干脆伪造SYN消息中的Source IP,使B反馈的SYN-ACK消息石沉大海[2],导致B被大量注定不能完成的半开连接占据,直到资源耗尽,停止响应正常的连接请求[3]。

接下来说说应对思路。最简单粗暴的办法就是提高TCP端口连接容量的同时减少半开连接的资源占用时间。在Linux上可以修改以下配置提高TCP半开连接队列大小的上限:

/proc/sys/net/ipv4/tcp_max_syn_backlog

可以减少半开状态下等待ACK消息的时间或者重试发送SYN-ACK消息的次数:

/proc/sys/net/ipv4/tcp_synack_retries

抑或启用某种半开连接回收机制,使得当半开连接队列满了以后做“除旧迎新”操作,当然并不是所有系统都支持这种机制。

以上方法更像是权宜之计,只是缓解了被攻击时的系统压力,以及稍稍提高了些防御门槛,但也同时影响了部分正常的请求的建立,比如减少SYN-ACK重试次数,同样也会降低某些网络环境不好的正常用户的连接成功率;而且攻击者只要稍稍改变策略就可以提高攻击效果,比如当使用半开连接回收机制时,攻击者只需提高攻击频率就可使大部分正常的等待的半开连接,在ACK消息到来前就被踢出队列。

另一个思路是将攻击扼杀在摇篮,比如部署支持“IP防伪”的路由器,将伪造过IP地址的SYN消息过滤掉,或是提高网民防护意识减小肉鸡网络的规模等,但这都太过理想,有些时候攻击者都有高大上的背景,根本不需要攻击前先抓肉鸡,呵呵,你懂的☺。

以上两个思路都没有直击症结所在--任何一个SYN消息无论来源是谁,都会消耗B的一些资源保存半开状态,并逐渐达到“鸠占鹊巢”的效果。SYN Cache和SYN Cookies就是基于这个观察提出的两个方案。

SYN Cache的出发点主要是针对“鸠占鹊巢”问题,基本原理如下:构造一个全局的Hash Table,用来缓存系统当前所有的半开连接信息,连接成功则从Cache中清除相关信息;Hash Table中每个桶(bucket)的容量大小也有限制,当桶“满”时做除旧迎新操作。当B收到一个SYN消息后,会将半开连接信息加入到Hash Table中,其中key的生成很关键,既要用到SYN消息中包含的信息(如:Source IP,Port等)又要做到很难被攻击者猜到,一般会通过一个秘密的函数生成,这样所有的半开连接无论好坏,都看似随机地被平均分配到了不同的“桶”中,使攻击难度大增,因为为达到DoS效果,攻击者需要使每个桶都达到填满状态,并且还要有足够快的“填桶”速度,使得正常的半开连接在还未完成建立前就被踢出桶,这样的攻击行为估计在达到目的前早就暴露了。

SYN Cookies着眼点主要是设法消除半开连接的资源消耗,原理与HTTP Cookies技术类似,B通过特定的算法把半开连接信息编码成“Cookie”,用作B给A的消息编号(SequenceNum),随SYN-ACK消息一同返回给连接发起方A,这样在连接完全建立前B不保存任何信息。如果A是正常用户,则会向B发送最后一次握手消息(ACK),B收到后验证“Cookie”的内容并建立连接;如果A是攻击者,则不会向B反馈ACK消息,B也没任何损失,也就说是单纯的SYN攻击不会造成B的连接资源消耗。当然这种方案也有一定缺点,最明显的就是B不保存连接的半开状态,就丧失了重发SYN-ACK消息的能力,这一方面会降低正常用户的连接成功率,另一方面会导致某些情况下正常通信的双方会对连接是否成功打开产生误解,如A发给B的第三次握手消息(ACK)半路遗失,A认为连接成功了,B认为没收到ACK,连接没成功,这种情况就需要上层应用采取策略特别处理了。

当然,所有这些方案都不完美各有利弊,最终的策略可能是几种方案的结合使用,形成防御体系,将攻击提前化解在局部,不至于影响整个系统。

[1] 实际攻击时攻击方不太会暴力的发送大量SYN消息,这样反倒会提前暴露自己,而是先嗅探出被攻击对象的TCP配置参数,如半连接状态过期时间,队列上限等,掌握好节奏更量体裁衣的发送攻击消息,做到用最经济最不易被发现的方式鸠占鹊巢,占满半连接队列。
[2] 伪造Source IP(IP Spoofing)有一定讲究,不能选一个真实的有TCP连接能力的主机,因为TCP协议要求在收到莫名其妙的SYN-ACK消息时,直接返回RST消息,这反倒提示被攻击的B可以提前中止假冒的半开连接,将其清理出队列。
[3] 这里指特定端口(Port)的连接资源被耗尽不能接受新连接请求,端口上已经建立的连接和其他未被攻击的端口不受影响。

本文原创,欢迎转载,但请注明出处

参考资料:
https://en.wikipedia.org/wiki/SYN_flood
https://en.wikipedia.org/wiki/Transmission_Control_Protocol
https://tools.ietf.org/html/rfc4987
http://cr.yp.to/syncookies.html

这篇关于Syn Flood 攻击(2019.10.27)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600044

相关文章

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

Web安全之XSS跨站脚本攻击:如何预防及解决

1. 什么是XSS注入 XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的Web安全漏洞,通过注入恶意代码(通常是JavaScript)到目标网站的网页中,以此在用户浏览网页时执行。攻击者可以通过XSS获取用户的敏感信息(如Cookie、会话令牌)或控制用户浏览器的行为,进而造成信息泄露、身份冒用等严重后果。 2. XSS攻击类型 2.1 存储型XSS 存储型XS

【前端安全】浅谈XSS攻击和防范

定义 XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 分类 大分类小分类原理非存储DOM型① 不需要经过服务器

新型 RAMBO 侧信道攻击通过 RAM 无线电波泄露数据

内盖夫本·古里安大学的研究人员发现了一种从隔离系统中泄露敏感数据的方法。 引入了一种称为 RAMBO(基于 RAM 的电磁隐蔽通道)的新型攻击技术。 该攻击利用计算机 RAM 产生的电磁辐射,使攻击者能够窃取加密密钥、密码、生物特征数据和文件等信息。 即使在系统与外部网络物理隔离的环境中,这种攻击也能实现。 信息泄露速度达 7.5 kB/分钟 该研究由 Morde

DDoS对策是什么?详细解说DDoS攻击难以防御的理由和对策方法

攻击规模逐年增加的DDoS攻击。据相关调查介绍,2023年最大的攻击甚至达到了700Gbps。 为了抑制DDoS攻击的危害,采取适当的对策是很重要的。 特别是在网站显示花费时间或频繁出现504错误的情况下,可能已经受到了DDoS攻击,需要尽早采取对策。 本文将介绍受到DDoS攻击时的事件、受害内容和作为DDoS对策有效的三种服务。 到底什么是DDoS攻击? 理解事件、手段和损害 D

27. Remove Elements

题目: 解答: 类似题26,注意下删除后的元素的移动方式即可 代码: class Solution {public:int removeElement(vector<int>& nums, int val) {if(nums.empty()) return 0;int len = nums.size();int lenafter = 0, head = 0;for(int i

序列号SYN+确认号ACK

处于对于wireshark中的SYN和ACK如何计算出来的疑惑 找的这篇译文! From:  http://blog.csdn.net/a19881029/article/details/38091243 原文见:http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/

【VB6|第27期】如何在VB6中使用Shell函数实现同步执行

日期:2024年9月1日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 文

网络安全与恶意攻击:如何应对?

引言 随着技术的发展,我们的生活越来越依赖于网络。但是,这也暴露了我们的系统对各种网络威胁的脆弱性。无论是个人还是企业,网络安全都成为了我们不能忽视的话题。 网络威胁的类型 网络威胁主要有以下几种: 网络钓鱼攻击:这是一种试图通过冒充合法实体来欺骗用户提供敏感信息(例如,密码或信用卡信息)的攻击。 **恶意软件:**恶意软件是设计用来破坏、损坏或者非法获取访问权限的软件。其中包括病