DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室

0x00 背景

TCP反射攻击是在现网的DDoS攻防对抗中,逐渐兴起的一种新型攻击方式。攻击者伪造源IP地址为被攻击目标的IP地址向公网上大量的TCP服务器(通常是CDN、WEB站点等)发送连接请求(SYN报文),这些被利用的TCP反射服务器在收到大量的连接报文后,会向被攻击目标响应大量的数据包,这些反射数据包的类型通常包括SYN-ACK、ACK、和RST-ACK,由于这些攻击流量通常混杂着正常业务流量,并且存在协议栈行为,导致传统的DDoS防御系统很难防御,因而使得这种攻击方式近年来呈现出不断上升的趋势。

百度智云盾系统针对TCP反射攻击进行跟踪,分析发现攻击频率近几年呈现出明显上升的趋势,反射攻击手法也在不断变化,攻击流量从最常见的单一SYN-ACK,发展成由SYN-ACK、ACK和RST-ACK报文混合组成。根据监测的数据显示,混合型TCP反射已经成为了继SSDP、NTP反射之后最为流行的攻击方式。百度智云盾系统在与TCP反射攻击的长期攻防对抗中,制定出一套TCP反射防御算法,能够2s内识别攻击,实时对流量进行隔离和清洗,保障用户与公司免遭此类攻击的伤害。

0x01 反射原理

1)标准反射流

众所周知,TCP的三次握手,服务端在接受到客户端的SYN报文后,会响应SYN-ACK报文,并开启一个半连接放入队列。如果此时服务端短时间内收到多个相同五元组的SYN报文,就会在服务端造成会话冲突,此时不同服务器的处理方式不同。

标准的TCP协议栈在遇到会话冲突的情况时,会响应出SYN-ACK、ACK和RST-ACK报文,服务端在第一次收到SYN报文后,会回复一个SYN-ACK报文,后续针对同一五元组过来的SYN报文,则会与当前数据包的seq号SEQ2、第一次收到的seq号SEQ1以及服务端的window size有关。通常包含以下几种情况:

两次seq号相同:SEQ1=SEQ2 。

此时服务器判定这个SYN包是客户端重传,会再次响应seq号不同的SYN-ACK,也就是通常所说的重传SYN-ACK,这也是前些年网络上最为流行的SYN-ACK反射攻击。下图展示了我们使用linux系统多次发送seq号相同的SYN报文,测试反射出SYN-ACK的场景:

图片[1]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图1 反射SYN-ACK报文(测试)

SEQ2在window size之内:即SEQ2大于SEQ1,且小于等于SEQ1+ windows size。

此时服务器响应报文比较特殊,呈现出首次SYN报文响应RST-ACK报文,这也是现网流量里存在较多的一类攻击流量,下图展示了我们使用linux系统发送seq号处于windows size之内,服务器响应RST-ACK的场景:

图片[2]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图2 反射RST-ACK报文(测试)

SEQ2在windows size之外:即SEQ2小于SEQ1,或者SEQ2大于SEQ1+ windows size。

此时服务器会响应ACK报文,这也是当前遇到的最常见的攻击流量,下图展示了我们我们使用linux系统发送seq号按照5递减的SYN请求报文,测试反射ACK报文的场景:

图片[3]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图3 反射ACK报文(测试)

标准的TCP反射流量呈现,如下图所示:

图片[4]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图4 标准的TCP反射流

在攻防对抗过程中,我们发现攻击流量呈现出以ACK流量为主,SYN-ACK流量次之,以及少量的RST-ACK报文,这也符合黑客的攻击思路:攻击以随机seq的SYN报文短时间发送到TCP反射服务器,随机seq号的方式非常容易命中不在windows size的区域,导致反射服务器响应大量的ACK报文。下列三图展示了我们在现网中捕获的真实反射流量。

图片[5]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科图片[6]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科图片[7]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图5 真实的TCP反射攻击流量(现网)

以上均展示了端口开放时,标准的TCP协议栈处理连接请求时的响应的报文特征,那么端口关闭时,会响应什么呢?不同的系统处理不同,linux内核的TCP协议栈会响应RST-ACK报文。下图展示了我们在关闭TCP1000端口后服务器的响应报文。

图片[8]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图6 关闭端口后的反射(RST-ACK)报文(测试)

2)其他反射流

SYNCookie

在深入研究TCP反射攻击时,我们发现SYN Cookie机制会影响反射报文的特征。SYN Cookie机制是防护SYN Flood攻击一种技术手段,我们都知道SYN Flood攻击能够成立的前提关键在于服务器资源是有限的,由于服务器在收到SYN请求后会分配资源保存此次请求的关键信息,其中包括(五元组、TCP选项信息),这会占据服务器有限的系统资源,SYN Cookie机制可以让服务器在收到客户端的SYN报文时,将客户端信息保存在SYN-ACK的初始序号和时间戳中,不消耗系统资源保存客户端信息,从而SYN Flood。

简单来说,开启SYN Cookie的服务器在收到SYN报文后,会根据当前五元组信息和TCP选项信息(时间戳、最大报文长度MSS)来计算出响应的SYN-ACK报文的seq号。正常的客户端收到SYN-ACK报文后会回复ACK报文,服务器根据ack确认号解析出之前计算的seq号,从而验证ACK报文的合法性。所以开启SYN Cookie的服务器均会响应seq号不同的SYN-ACK报文。

攻击者在利用开启SYN Cookie的TCP反射服务器时,服务器所发出的反射报文均为SYN-ACK报文,但是seq号与标准TCP反射流呈现出的特征不同,这与具体服务器的SYN Cookie实现机制有关系,这里不做过多介绍。

我们选取一台机器开启SYNCookie配置:

图片[9]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图7 开启SYNCookie

下图展示了我们我们使用linux系统测试的开启SYN Cookie的服务器响应的SYN-ACK报文:

图片[10]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图8 开启SYN Cookie的反射报文(测试)

3)其他类型服务器

Windows服务器在处理SYN报文时与linux有许多不同,我们使用Windows server2016,TCP开放端口为3389,进行反射测试分析,下面是三种情况收到的数据包类型。

SEQ2=SEQ1,windows服务器与linux服务器一样,响应seq号不同的SYN-ACK报文:

图片[11]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图9 windows server响应SYN-ACK(测试)

SEQ2<SEQ1,或者大于SEQ1与windwos size之和,会直接响应SYN-ACK报文:

图片[12]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科图片[13]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图10 window server响应SYN-ACK(测试)

SEQ2>SEQ1,并且小于SEQ1与windows size之和,服务器会在响应SYN-ACK后,不再响应任何报文:

图片[14]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图11 服务器只响应一次SYN-ACK报文(测试)

端口关闭时,windwos server与linux一样响应RST-ACK报文:

图片[15]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图12 关闭端口后windows server响应SYN-ACK报文(测试)

其他服务器:SUSE、Debian、Ubuntu等,如有兴趣,可以自行进行测试分析,这里不深入展开。

注:目前智云盾蜜罐系统已经长期被黑客利用进行TCP反射攻击,采样得到了大量的攻击踪影。

0x02 反射资源分析

1)捕获数据

从近几年来跟踪分析的反射资源来看,攻击者倾向于使用的反射源端口最常见于21、22、23、80、443、1900、8080等常用的TCP端口,目的端口通常为被攻击目标的业务端口,比如:80、443、8080等。

我们对采集到的反射源端口进行分类,下图展示了反射源端口占比图:

图片[16]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图13 反射源端口占比

从反射源IP的属地信息来看,攻击来源几乎全部来自于国内,国内源IP占比超过98%,反射源IP国家分布如下:

图片[17]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图14 反射源归属地分布

智云盾系统多次捕获的攻击时发现,攻击者使用的反射源端口呈现出特殊的组合方式,比如1900端口通常与53、7547、1737组合攻击。

2)全网数据

由于常见的TCP端口数据量非常之多,我们仅抽取了最常见的80端口在zoomeye查询,数据量之大引人深思。

图片[18]-DDoS预警:TCP反射的深度分析 – 作者:百度安全实验室-安全小百科

图15  zoomeye全网数据(80端口)

0x03 防御措施

TCP反射与传统的UDP反射相比,其反射流量特征较为复杂,攻击流量来自于真实IP,而且具有协议栈行为,传统的DDoS防护系统往往容易将现网的TCP反射带来的ACK流量识别为Flood攻击。TCP反射攻击的防护难点:

反射流量来自于真实IP,流量通常混杂着真实的业务流量

反射资源丰富,公网上开放了大量的TCP服务器,主要来自于CDN、WEB站点

流量类型通常包含SYN-ACK、ACK和RST-ACK,难以防护

传统的DDoS防护系统,无法通过双向会话检查进行防护

0x04 结尾

当前新冠疫情已经蔓延到世界各个角落,病例遍及219个国家和地区。对比疫情形势,全球地缘政治格局也在发生动荡,可以猜想网络空间冲突亦会愈演愈烈。攻击者在不断寻找防护方的弱点,防护方也需要不断研究黑客思维,提升防护能力。中国一直以来都是网络攻击最大的受害国,如此流行的TCP反射攻击将会扮演举足轻重的角色。

智云盾团队介绍

百度智云盾是百度安全专注在互联网基础设施网络安全攻防的团队,提供T级云防、定制端防和运营商联防等DDoS/CC防御解决方案。一直服务于搜索、贴吧、地图、云等百度业务,在保障百度全场景业务之余也进行防御能力外部输出,为互联网客户提供一体化的防御服务。

来源:freebuf.com 2021-04-30 17:35:12 by: 百度安全实验室

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论