SYN Flood是什么?这篇给你讲明白!

简介: SYN Flood是1994年发现的DDoS攻击方式,利用TCP三次握手的漏洞,通过发送大量伪造源IP的SYN报文,使服务器创建半连接,耗尽资源,导致服务中断。防御策略包括源认证、首包丢弃和使用Anti-DDoS系统。高防服务器和抗D盾等解决方案提供DDoS清洗和CC攻击防御,通过智能分布式云接入隐藏真实IP,保持TCP连接稳定,同时提供网络加速和防掉线功能。

一、前言
SYN Flood是互联网上最原始、最经典的DDoS(Distributed Denial of Service)攻击之一。它利用了TCP协议的三次握手机制,攻击者通常利用工具或者控制僵尸主机向服务器发送海量的变源IP地址或变源端口的TCP SYN报文,服务器响应了这些报文后就会生成大量的半连接,当系统资源被耗尽后,服务器将无法提供正常的服务。增加服务器性能,提供更多的连接能力对于SYN Flood的海量报文来说杯水车薪,防御SYN Flood的关键在于判断哪些连接请求来自于真实源,屏蔽非真实源的请求以保障正常的业务请求能得到服务。

二、目录
SYN洪泛攻击的历史和技术基础

SYN Flood是如何发生的?

如何识别和防御SYN Flood?

三、SYN Flood的历史和技术基础
(一)历史
早在1994年,Bill Cheswick和Steve Bellovin就发现了TCP SYN泛洪弱点[B96]。他们在《防火墙和互联网安全:击退威利黑客》(CB94)一书中加入并删除了一段关于攻击的内容。不幸的是,在接下来的两年内没有制定任何对策。

SYN泛洪攻击于1996年在Phrack杂志上首次公开,杂志发布了一个SYN泛洪攻击的描述和利用工具[P48-13]。除了一些小的错误,本文的质量足够高,非常有用,文章中的代码被广泛分发和使用。

到1996年9月,开始广泛观察到SYN泛洪袭击。特别是,针对一家ISP邮件服务器的攻击导致了众所周知的停机。CERT很快发布了一份关于此次攻击的建议[CA-96.21]。与当时已知的其他拒绝服务攻击相比,SYN泛滥尤为严重。SYN洪泛不是依赖于简单耗尽网络资源的常见暴力策略,而是针对需要消耗更少数据包的终端主机资源。

社区很快开发了许多不同的技术来防止或限制SYN泛洪攻击的影响。其中许多已经在互联网上不同程度地部署,包括终端主机和中间路由器。这些技术中的一些已经成为某些操作系统中TCP实现的重要部分,尽管有些技术与TCP规范有很大的不同,并且这些技术中没有一项技术已经被IETF过程标准化或认可。
(二)操作理论
TCP实现可以允许使用应用程序指定的IP地址和端口号对中的全部、部分或全部进入LISTEN状态。在许多常见的应用程序(如web服务器)中,远程主机的任何信息都不是预先已知或预先配置的,因此可以与服务器事先不知道其详细信息的任何客户端建立连接。这种类型的“未绑定”LISTEN是SYN洪泛攻击的目标,因为它通常由操作系统实现。

为了成功,SYN洪泛攻击依赖于受害主机TCP实现的行为。特别是,它假设受害者在收到每个TCP SYN段时为其分配状态,并且对这种状态的数量有限制,不能在任何时候保持。当前的基本TCP规范RFC 793[RFC0793]描述了传入SYN段的标准处理。RFC 793描述了传输控制块(Transmission Control Block,TCB)数据结构的概念,以存储单个连接的所有状态信息。在实践中,操作系统可能以不同的方式实现这个概念,但关键是每个TCP连接都需要一些内存空间。

根据RFC 793,当接收到连接处于LISTEN状态的本地TCP端口的SYN时,状态转换为SYN-REEVED,并且使用来自接收到的SYN段的报头字段的信息初始化一些TCB。实际上,许多操作系统不改变LISTEN中的TCB,而是复制TCB,并在副本上执行状态转换和更新。这样做使得本地TCP端口可以在几个不同的连接之间共享。这种TCB复制行为实际上对这一目的并不重要,但会影响希望通过单个TCP端口处理多个同时连接的应用程序的编写方式。这种行为的关键结果是,必须将新的(或未使用的)内存专用于复制的TCB,而不是更新已分配的内存。

例如,在Linux2.6.10网络代码中,使用“sock”结构来实现TCB概念。通过检查,这种结构需要1300多个字节才能存储在内存中。在实现较不复杂的TCP算法和选项的其他系统中,开销可能较小,尽管它通常超过280字节[SK+97]。

为了保护主机内存不被连接请求耗尽,任何时候可以驻留的TCB结构的数量通常受到操作系统内核的限制。系统因限制是全局应用还是本地应用于特定端口号而有所不同。限制是否适用于完全建立的连接以及SYN-REEVED中的连接也存在差异。通常,系统为典型的listen()系统调用实现一个参数,该参数允许应用程序为这个限制建议一个值,称为backlog。当达到backlog限制时,要么忽略传入的SYN段,要么替换backlog中未完成的连接。标准文档中没有描述使用backlog的概念,因此到达backlog时的失败行为可能在堆栈之间有所不同(例如,可能会生成TCP RST)。确切的故障行为将决定发起主机是随时间继续重新发送SYN段,还是快速停止。这些实现上的差异是可以接受的,因为它们仅在本地堆栈的资源受到约束时影响其行为,而不会导致互操作性问题。

SYN洪泛攻击并不试图使网络资源或终端主机的内存过载,而只是试图耗尽与端口号相关的缓存的半开放连接。目标是从IP地址(通常是伪造的)快速发送SYN段,这些SYN段不会生成对生成的SYN ACK的回复。通过让缓存的连接充满了虚假的半开放连接,合法的请求将被拒绝。成功的三个重要攻击参数是拦阻的大小、生成拦阻的频率以及选择IP地址进行欺骗的方式。

四、SYN Flood是如何发生的?
SYN Flood顾名思义就是用洪水一样的SYN报文进行攻击。SYN报文指的是TCP协议中的Synchronize报文,是TCP三次握手过程中的首个报文。让我们先来了解一个正常的TCP三次握手过程。

图片.png

(一)TCP三次握手过程
开始建立连接时,客户端发送SYN报文到服务器,等待服务器确认。SYN报文的源IP地址和端口是客户端的IP地址和端口。

服务器收到SYN报文,回应一个SYN-ACK(Synchronize-Acknowledgement)报文。SYN-ACK报文的目的P地址和端口是客户端的IP地址和端口。

客户端收到服务器的SYN-ACK报文,向服务器发送ACK报文,服务器收到ACK报文后完成三次握手,TCP连接建立成功。在连接超时之前,服务器会一直等待ACK报文,此时该连接状态为半开放连接(也被称为半连接)。半连接会占用服务器的连接数,当连接数被占满时,服务器就无法提供正常的服务了。黑客正是通过这个机制来实现SYN Flood。

图片.png

(二)SYN Flood的攻击过程
黑客通常通过伪造的源IP地址或端口,向服务器发送大量的SYN报文,请求建立TCP连接。由于源IP地址或端口是伪造的,服务器发送的SYN-ACK报文永远不会被真实的客户端接收和回应。极少数情况下,黑客也会使用真实源IP地址,但他们只是通过攻击工具发送海量SYN报文,工具并不会响应来自服务器SYN-ACK报文。无论如何,服务器都接收不到ACK报文,产生了大量的半连接。此时服务器需要维持一张巨大的等待列表,不停地重试发送SYN-ACK报文,同时大量的资源无法释放。当服务器被这些恶意的半连接占满时,就不会再响应新的SYN报文,从而导致正常的用户无法建立TCP连接。

五、如何识别和防御SYN Flood?
SYN Flood的目的是占满服务器的连接数,消耗服务器的系统资源。对于服务器自身来说,最直接的做法就是提高服务能力,比如组建集群,升级硬件。但是这种方式成本巨大,且对于海量的攻击报文来说,并没有太大的作用,仅多撑几分钟甚至几秒而已。

所以,必须在这些攻击报文到达服务器之前就进行拦截。然而对于防火墙这类安全设备而言,SYN报文是正常的业务报文,防火墙的安全策略必须允许其通过,否则服务器就无法对外提供服务。如果能明确虚假源的IP地址,就能通过精细的安全策略阻止这些源发来的SYN报文。但是管理员无法预知哪些是虚假源。即使能分析出虚假源,也无法做到快速、自动地配置或取消安全策略来应对不可预期的攻击流量。

此时就需要Anti-DDoS系统的能力了,它部署在网络入口处,在服务器之前处理SYN报文,识别出虚假源,屏蔽来自这些地址的报文,只将合法的SYN报文传递给服务器。Anti-DDoS系统处理SYN报文主要有两种手段,源认证和首包丢弃。

(一)源认证
Anti-DDoS系统拦截客户端发送的SYN报文,代替服务器向客户端发送SYN-ACK报文,如果客户端不应答,则认为该客户端为虚假源;如果客户端应答,则Anti-DDoS系统认为该客户端为真实源,并将其IP地址加入白名单,在一段时间允许该源发送的所有SYN报文通过,也不做代答。

(二)首包丢弃
如果Anti-DDoS系统代替服务器应答了所有的SYN Flood攻击报文,那么性能瓶颈仅仅是从服务器转移到了Anti-DDoS系统而已。一旦Anti-DDoS系统的系统资源耗尽,攻击依旧会透传到服务器,而且大量反弹的SYN-ACK报文也会对网络造成一定的压力。Anti-DDoS系统利用首包丢弃来解决这个问题。

TCP协议的可靠性不仅体现在三次握手,还体现在超时与重传的机制。正常情况下客户端发送SYN报文后如果在一定时间没有收到服务器的SYN-ACK应答,客户端会重新发送SYN报文。Anti-DDoS系统会丢弃掉收到的第一个SYN报文。SYN Flood攻击时,黑客发送的绝大多数是变源的SYN报文,所有的SYN报文对于Anti-DDoS系统来说都是首包,都将被直接丢弃。如果客户端重传了SYN报文,Anti-DDoS系统再对该报文进行源认证。如此一来,大大减少了Anti-DDoS系统代答的压力。首包丢弃和源认证两种手段结合,对于防御SYN Flood(特别是不断变换源IP和源端口的虚假源攻击)非常有效。

(三)高防服务器
T级别数据中心,具备完善的机房设施,核心骨干网络有效保证高品质的网络环境和丰富的带宽资源

DDoS清洗:近源清洗多种流量清洗部署方案,无损防御各种DDoS攻击

CC攻击防御:5s发现恶意请求,10s快速阻断攻击,事前拦截、事后溯源、全方位防黑

Web应用防火墙:防SQL注入、XSS跨站,后门隔离保护、Webshell上传、非法HTTP协议请求。

德迅卫士:系统层安全软件,为用户远程桌面扫描登陆、手机短信验证登陆等。一键后台优化服务器权限、威胁组件、威胁端口。


图片.png


图片.png


图片.png

(四)抗D盾的使用
抗D盾是新一代的智能分布式云接入系统,接入节点采用多机房集群部署模式,隐藏真实服务器IP,类似于网站CDN的节点接入,但是“抗D盾”是比CDN应用范围更广的接入方式,适合任何TCP 端类应用包括(游戏、APP、微端、端类内嵌Web等)。用户连接状态在各机房之间实时同步,节点间切换过程中用户无感知,保持TCP连接不中断,轻松应对任何网络攻击。

DDoS防御:基于SDK接入的分布式防御体系,可精准定位恶意攻击者并主动隔离,具备自动化溯源能力。

CC攻击防御:私有化协议二次封装,非链接限速、报文检测机制,0误杀、0漏过。

集成方式:EXE封装、SDK接入,支持Windows、iOS、Android系统,分钟级集成。

网络加速:智能多线节点分布,配合独家研发的隧道填补技术,保证每条线路都是优质网络

防掉线系统:研发新SocKet协议,弥补WinSock链接失败会断开问题,链接失败自动无缝切换

承诺服务:提供被攻击打死无理由退款,封装失败或者无效无理由退款,24小时运维在线服务

图片.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
|
缓存 移动开发 网络协议
为什么会TCP粘包?读完这篇你就懂了
TCP粘包是网络编程中的问题,因TCP的Nagle算法和数据缓存机制导致。发送方发送的小数据包可能被合并,接收方如果读取速度慢也可能合并数据包。解决方法包括:发送定长包、包尾加特殊标记(如FTP的`\r\n`)或包头携带包体长度。理解原因并选择合适方案能确保数据正确解析。
216 4
|
5月前
|
监控 网络协议 程序员
不再困惑!一文搞懂TCP与UDP的所有区别
**TCP与UDP是网络协议,TCP提供可靠连接(面向连接、顺序传输、错误检查),适合HTTP、FTP、SMTP等需要数据完整性的应用。UDP则是无连接、快速但不可靠,常用于DNS、RIP、SNMP等实时或效率优先的场景。**
251 0
|
6月前
|
监控 网络协议 安全
TCP和UDP面试题提问
TCP是一种面向连接、可靠的协议,提供确认和重传机制,确保数据完整性和可靠性,适合网页浏览、邮件收发等。UDP则是无连接、轻量级协议,不保证数据可靠性,但适合实时应用如语音视频通话和在线游戏,追求低延迟。
|
7月前
|
网络协议 Linux 应用服务中间件
以前收集整理的一些tcp知识点
以前收集整理的一些tcp知识点
39 0
|
7月前
|
网络协议 前端开发 算法
前端知识笔记(三十二)———TCP 连接建立
前端知识笔记(三十二)———TCP 连接建立
127 0
|
网络协议 算法 开发者
[网络坦白局] TCP粘包 数据包:我只是犯了每个数据包都会犯的错 |硬核图解
[网络坦白局] TCP粘包 数据包:我只是犯了每个数据包都会犯的错 |硬核图解
100 1
|
网络协议 安全 Shell
牛皮了,头一次见有大佬把TCP三次握手四次挥手解释的这么明白
计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。
|
存储 缓存 网络协议
Linux网络编程TCP粘包问题解析及解决方法
Linux网络编程TCP粘包问题解析及解决方法
145 0
|
存储 运维 网络协议
深入浅出:这次终于能把 TCP/IP 协议搞明白了
深入浅出:这次终于能把 TCP/IP 协议搞明白了
深入浅出:这次终于能把 TCP/IP 协议搞明白了
|
网络协议 安全 Linux
Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)
本节我们来介绍TCP连接的建立和断开。我们主要介绍两个过程、两个状态。
205 0
Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)