SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(Distributed Denial Of Service分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。
SYN Flood攻击的过程在TCP协议中被称为三次握手(Three-way Handshake),而SYN Flood拒绝服务攻击就是通过三次握手而实现的。
(1) 攻击者向被攻击服务器发送一个包含SYN标志的TCP报文,SYN(Synchronize)即同步报文。同步报文会指明客户端使用的端口以及TCP连接的初始序号。这时同被攻击服务器建立了第一次握手。
(2) 受害服务器在收到攻击者的SYN报文后,将返回一个SYN+ACK的报文,表示攻击者的请求被接受,同时TCP序号被加一,ACK(Acknowledgment)即确认,这样就同被攻击服务器建立了第二次握手。
(3) 攻击者也返回一个确认报文ACK给受害服务器,同样TCP序列号被加一,到此一个TCP连接完成,三次握手完成。
具体原理是:TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒~2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃—— 即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况就称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
SYN COOKIE 防火墙是SYN cookie的一个扩展,SYN cookie是建立在TCP堆栈上的,他为linux *** 作系统提供保护。SYN cookie防火墙是linux的 一大特色,你可以使用一个防火墙来保护你的网络以避免遭受SYN洪水攻击。
下面是SYN cookie防火墙的原理
client firewall server
------ ---------- ------
1. SYN----------- - - - - - - - - - ->
2. <------------SYN-ACK(cookie)
3. ACK----------- - - - - - - - - - ->
4. - - - - - - -SYN--------------->
5. <- - - - - - - - - ------------SYN-ACK
6. - - - - - - -ACK--------------->
7. ----------->relay the ------->
<----------- connection <-------
1:一个SYN包从C发送到S
2:防火墙在这里扮演了S的角色来回应一个带SYN cookie的SYN-ACK包给C
3:C发送ACK包,接着防火墙和C的连接就建立了。
4:防火墙这个时候扮演C的角色发送一个SYN给S
5:S返回一个SYN给C
6:防火墙扮演C发送一个ACK确认包给S,这个时候防火墙和S的连接也就建立了
7:防火墙转发C和S间的数据
如果系统遭受SYN Flood,那么第三步就不会有,而且无论在防火墙还是S都不会收到相应在第一步的SYN包,所以我们就击退了这次SYN洪水攻击。 攻击静态属性主要包括攻击控制模式、攻击通信模式、攻击技术原理、攻击协议和攻击协议层等。
(1)攻击控制方式
攻击控制方式直接关系到攻击源的隐蔽程度。根据攻击者控制攻击机的方式可以分为以下三个等级:直接控制方式(Direct)、间接控制方式(Indirect)和自动控制方式(Auto)。
最早的拒绝服务攻击通常是手工直接进行的,即对目标的确定、攻击的发起和中止都是由用户直接在攻击主机上进行手工 *** 作的。这种攻击追踪起来相对容易,如果能对攻击包进行准确的追踪,通常就能找到攻击者所在的位置。由于直接控制方式存在的缺点和攻击者想要控制大量攻击机发起更大规模攻击的需求,攻击者开始构建多层结构的攻击网络。多层结构的攻击网络给针对这种攻击的追踪带来很大困难,受害者在追踪到攻击机之后,还需要从攻击机出发继续追踪控制器,如果攻击者到最后一层控制器之间存在多重跳板时,还需要进行多次追踪才能最终找到攻击者,这种追踪不仅需要人工进行 *** 作,耗费时间长,而且对技术也有很高的要求。这种攻击模式,是目前最常用的一种攻击模式。自动攻击方式,是在释放的蠕虫或攻击程序中预先设定了攻击模式,使其在特定时刻对指定目标发起攻击。这种方式的攻击,从攻击机往往难以对攻击者进行追踪,但是这种控制方式的攻击对技术要求也很高。Mydoom蠕虫对SCO网站和Microsoft网站的攻击就属于第三种类型[TA04-028A]。
(2)攻击通信方式
在间接控制的攻击中,控制者和攻击机之间可以使用多种通信方式,它们之间使用的通信方式也是影响追踪难度的重要因素之一。攻击通信方式可以分为三种方式,分别是:双向通信方式(bi)、单向通信方式(mono)和间接通信方式(indirection)。
双向通信方式是指根据攻击端接收到的控制数据包中包含了控制者的真实IP地址,例如当控制器使用TCP与攻击机连接时,该通信方式就是双向通信。这种通信方式,可以很容易地从攻击机查找到其上一级的控制器。
单向通信方式指的是攻击者向攻击机发送指令时的数据包并不包含发送者的真实地址信息,例如用伪造IP地址的UDP包向攻击机发送指令。这一类的攻击很难从攻击机查找到控制器,只有通过包标记等IP追踪手段,才有可能查找到给攻击机发送指令的机器的真实地址。但是,这种通信方式在控制上存在若干局限性,例如控制者难以得到攻击机的信息反馈和状态。
间接通信方式是一种通过第三者进行交换的双向通信方式,这种通信方式具有隐蔽性强、难以追踪、难以监控和过滤等特点,对攻击机的审计和追踪往往只能追溯到某个被用于通信中介的公用服务器上就再难以继续进行。这种通信方式已发现的主要是通过IRC(Internet Relay Chat)进行通信[Jose Nazario],从2000年8月出现的名为Trinity的DDoS攻击工具开始,已经有多种DDoS攻击工具及蠕虫采纳了这种通信方式。在基于IRC的傀儡网络中,若干攻击者连接到Internet上的某个IRC服务器上,并通过服务器的聊天程序向傀儡主机发送指令。
(3)攻击原理
DoS攻击原理主要分为两种,分别是:语义攻击(Semantic)和暴力攻击(Brute)。
语义攻击指的是利用目标系统实现时的缺陷和漏洞,对目标主机进行的拒绝服务攻击,这种攻击往往不需要攻击者具有很高的攻击带宽,有时只需要发送1个数据包就可以达到攻击目的,对这种攻击的防范只需要修补系统中存在的缺陷即可。暴力攻击指的是不需要目标系统存在漏洞或缺陷,而是仅仅靠发送超过目标系统服务能力的服务请求数量来达到攻击的目的,也就是通常所说的风暴攻击。所以防御这类攻击必须借助于受害者上游路由器等的帮助,对攻击数据进行过滤或分流。某些攻击方式,兼具语义和暴力两种攻击的特征,比如SYN风暴攻击,虽然利用了TCP协议本身的缺陷,但仍然需要攻击者发送大量的攻击请求,用户要防御这种攻击,不仅需要对系统本身进行增强,而且也需要增大资源的服务能力。还有一些攻击方式,是利用系统设计缺陷,产生比攻击者带宽更高的通信数据来进行暴力攻击的,如DNS请求攻击和Smurf攻击,参见4.2.3节以及文献[IN-2000-04]和[CA-1998-01]。这些攻击方式在对协议和系统进行改进后可以消除或减轻危害,所以可把它们归于语义攻击的范畴。
(4)攻击协议层
攻击所在的TCP/IP协议层可以分为以下四类:数据链路层、网络层、传输层和应用层。
数据链路层的拒绝服务攻击[Convery] [Fischbach01][Fischbach02]受协议本身限制,只能发生在局域网内部,这种类型的攻击比较少见。针对IP层的攻击主要是针对目标系统处理IP包时所出现的漏洞进行的,如IP碎片攻击[Anderson01],针对传输层的攻击在实际中出现较多,SYN风暴、ACK风暴等都是这类攻击,面向应用层的攻击也较多,剧毒包攻击中很多利用应用程序漏洞的(例如缓冲区溢出的攻击)都属于此类型。
(5)攻击协议
攻击所涉及的最高层的具体协议,如SMTP、ICMP、UDP、HTTP等。攻击所涉及的协议层越高,则受害者对攻击包进行分析所需消耗的计算资源就越大。 攻击动态属性主要包括攻击源地址类型、攻击包数据生成模式和攻击目标类型。
(1)攻击源地址类型
攻击者在攻击包中使用的源地址类型可以分为三种:真实地址(True)、伪造合法地址(Forge Legal)和伪造非法地址(Forge Illegal)。
攻击时攻击者可以使用合法的IP地址,也可以使用伪造的IP地址。伪造的IP地址可以使攻击者更容易逃避追踪,同时增大受害者对攻击包进行鉴别、过滤的难度,但某些类型的攻击必须使用真实的IP地址,例如连接耗尽攻击。使用真实IP地址的攻击方式由于易被追踪和防御等原因,近些年来使用比例逐渐下降。使用伪造IP地址的攻击又分为两种情况:一种是使用网络中已存在的IP地址,这种伪造方式也是反射攻击所必需的源地址类型;另外一种是使用网络中尚未分配或者是保留的IP地址(例如192.168.0.0/16、172.16.0.0/12等内部网络保留地址[RFC1918])。
(2)攻击包数据生成模式
攻击包中包含的数据信息模式主要有5种:不需要生成数据(None)、统一生成模式(Unique)、随机生成模式(Random)、字典模式(Dictionary)和生成函数模式(Function)。
在攻击者实施风暴式拒绝服务攻击时,攻击者需要发送大量的数据包到目标主机,这些数据包所包含的数据信息载荷可以有多种生成模式,不同的生成模式对受害者在攻击包的检测和过滤能力方面有很大的影响。某些攻击包不需要包含载荷或者只需包含适当的固定的载荷,例如SYN风暴攻击和ACK风暴攻击,这两种攻击发送的数据包中的载荷都是空的,所以这种攻击是无法通过载荷进行分析的。但是对于另外一些类型的攻击包,就需要携带相应的载荷。
攻击包载荷的生成方式可以分为4种:第一种是发送带有相同载荷的包,这样的包由于带有明显的特征,很容易被检测出来。第二种是发送带有随机生成的载荷的包,这种随机生成的载荷虽然难以用模式识别的方式来检测,然而随机生成的载荷在某些应用中可能生成大量没有实际意义的包,这些没有意义的包也很容易被过滤掉,但是攻击者仍然可以精心设计载荷的随机生成方式,使得受害者只有解析到应用层协议才能识别出攻击数据包,从而增加了过滤的困难性。第三种方式是攻击者从若干有意义载荷的集合中按照某种规则每次取出一个填充到攻击包中,这种方式当集合的规模较小时,也比较容易被检测出来。最后一种方式是按照某种规则每次生成不同的载荷,这种方式依生成函数的不同,其检测的难度也是不同的。
(3)攻击目标类型
攻击目标类型可以分为以下6类:应用程序(Application)、系统(System)、网络关键资源(Critical)、网络(Network)、网络基础设施(Infrastructure)和因特网(Internet)。
针对特定应用程序的攻击是较为常见的攻击方式,其中以剧毒包攻击较多,它包括针对特定程序的,利用应用程序漏洞进行的拒绝服务攻击,以及针对一类应用的,使用连接耗尽方式进行的拒绝服务攻击。针对系统的攻击也很常见,像SYN风暴、UDP风暴[CA-1996-01]以及可以导致系统崩溃、重启的剧毒包攻击都可以导致整个系统难以提供服务。针对网络关键资源的攻击包括对特定DNS、路由器的攻击。而面向网络的攻击指的是将整个局域网的所有主机作为目标进行的攻击。针对网络基础设施的攻击需要攻击者拥有相当的资源和技术,攻击目标是根域名服务器、主干网核心路由器、大型证书服务器等网络基础设施,这种攻击发生次数虽然不多,但一旦攻击成功,造成的损失是难以估量的[Naraine02]。针对Internet的攻击是指通过蠕虫、病毒发起的,在整个Internet上蔓延并导致大量主机、网络拒绝服务的攻击,这种攻击的损失尤为严重。
DDOS和CC攻击的区别
dos攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动攻击,从而成倍地提高拒绝服务攻击的威力。ddos的攻击方式有很多种,最基本的dos攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。
CC攻击模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据 *** 作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。
ddos攻击和cc攻击区别主要是针对对象的不同。DDoS是主要针对IP的攻击,而CC攻击的主要是网页。CC攻击相对来说,攻击的危害不是毁灭性的,但是持续时间长而ddos攻击就是流量攻击,这种攻击的危害性较大,通过向目标服务器发送大量数据包,耗尽其带宽,甚至影响整个机房网络,所以一般的云服务商都是会设置有DDos防御值,比如阿里云都是免费5G的防御值,超过了后会把IP拉入黑洞,由此可看DDoS的威力更大。
那么如何做好CC和DDoS的防御呢?
其中高防服务器和高防IP价格相对较贵,主机吧推荐使用高防CDN,比如百度云加速高防CDN,价格既便宜,防御又好,还可以加速,还有清晰的报表显示,非常不错。
百度云加速提供四到七层的DDoS攻击防护,包括CC、SYN flood、UDP flood等所有DDoS攻击方式, 通过分布式高性能防火墙+精准流量清洗+CC防御+WEB攻击拦截,组合过滤精确识别,有效防御各种类型攻击。相关链接
序列化和反序列化本身并不存在问题。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。修复:
1、建议不要用JDK中的XmlDeocder类,寻求其它更安全的xml解析工具类,考虑是否删除WLS-WebServices组件。
2、官方修复:补丁限定了object,new,method,void,array等字段,限定了不能生成java 实例。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)