计算机网络之SYN Flood攻击

拒绝服务攻击(DDoS)从1970年出现直到今天都依然在作祟,并给全球范围内的各大组织带来了不可估量的损失。

 

SYN Flood是互联网上最经典的DDoS攻击方式之一,最早出现于1999年左右,雅虎是当时最著名的受害者。

 

SYN Flood攻击利用了TCP三次握手的缺陷,能够以较小代价使目标服务器无法响应,且难以追查。

 

SYN  flood是一种常见的DOS(denial of service拒绝服务)和DDos (distributed denial of serivce 分布式拒绝服务)攻击方式。这是一种使用TCP协议缺陷,发送大量的伪造的TCP连接请求,使得被攻击方cpu或内存资源耗尽,最终导致被攻击方无法提供正常的服务。

 

TCP  SYN  Flood攻击原理

 

TCP  SYN Flood攻击利用的是TCP的三次握手(SYN -> SYN/ACK -> ACK),假设连接发起方是A,连接接受方是B,

即B在某个端口(Port)上监听A发出的连接请求,过程如下图所示,左边是A,右边是B。

 

 

 

 

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确认也做好了接收数据的准备,至此三次握手完成,“连接”就建立了,实际上只是双方都按对方的要求进入了可以接收消息的状态。以上彼此要求对方确认的“状态”主要是双方将要使用的消息序号(SquenceNum),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,直到重试超过一定次数时才会放弃。

 

 

 

 

 

 

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

 

 

防范措施:

  1、降低SYN timeout时间,使得主机尽快释放半连接的占用

  2、采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文

  3、在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由

 

 

————————————————

版权声明:本文为CSDN博主「木霖森77」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/mulinsen77/java/article/details/88925672

 

转载请注明:“转自绿盟科技博客”: 原文链接.

 

欢迎大家关注我的微信公众号,获取你不知道的宝藏。

 

 

posted @ 2020-03-30 16:57  代码改变我的世界  阅读(1019)  评论(0编辑  收藏  举报