近期,关于DDoS攻击的话题再次引发用户关注。尤其是新型TCP反射放大攻击,其在黑产中快速传播,进而全网泛滥。
为应对这一问题,火山引擎基于字节跳动多年的海量业务 DDoS 防护经验,提出结合流量指纹、机器学习等多种技术手段,对流量进行精细化清洗,清洗成功率 99.9% 以上,可有效防护此类新型DDoS攻击。在防护带宽方面,火山引擎DDoS高防产品依托海量带宽储备资源与优质的BGP线路类型,可以抵御大流量 DDoS 攻击。
事实上,TCP反射放大攻击的首次提出是在2021年8月,马里兰大学Kevin Bock等在USENIX大会上正式提出这种利用中间盒发起的新型攻击手法:攻击者可以利用部分网络中间盒在TCP会话识别上的漏洞,实现一种全新的DDoS反射放大攻击。与2018年出现的利用协议栈发起的TCP反射无法放大攻击流量的情况不同,这种新型攻击实现了基于TCP协议的流量放大效果。
一、反射放大攻击的前世今生
在说明这种新型攻击手法之前,需要先科普一下反射放大攻击。所谓的反射放大攻击是非常常见的DDoS攻击手法,其基本原理非常简单:攻击者通过控制僵尸网络伪造靶机IP向特定的公网服务器发送请求,公网服务器收到请求后会向靶机发送更大的应答报文,从而实现攻击流量放大。
这里的公网服务器是指对外开放某些可被利用作反射放大的协议端口的服务器,比较常见的协议有DNS、NTP、SNMP、Memcached等,这些协议一般基于UDP,并且协议本身存在缺陷,没有校验来源IP的真实性,且存在应答报文远大于请求报文等特点。这种反射放大手法简单、有效,一直深受黑客喜爱,所以很长一段时间内UDP反射就是反射放大攻击的别称。
那有没有利用TCP协议做反射攻击的?答案是有的。早在2018年就出现利用公网服务器开放的TCP端口进行反射攻击的手法,相比UDP反射放大攻击,此类利用TCP协议栈的反射攻击实际并无太明显的流量放大效果,因为请求的来源IP是伪造的,无法与TCP服务器完成TCP三次握手建立连接,所以无法得到应用层的应答报文。但是这种攻击利用了TCP的协议栈特性,使靶机看到攻击流量具备协议栈行为,而且成份复杂(synack、ack、rst等混合流量),导致反向挑战、协议栈行为校验等传统的TCP防护算法无法防护,大大增加了防护难度,所以这种TCP反射诞生后很快成为DDoS攻击的主流攻击手法。
二、新型TCP反射放大攻击袭来
2.1 新型TCP反射攻击诞生
2021年8月马里兰大学Kevin Bock等人在《USENIX Security 2021》上发表文章,这篇题为《Weaponizing Middleboxes for TCP Reflected Amplification》的论文介绍了一种利用中间盒发起的新型TCP反射放大攻击手法。与2018年出现的TCP反射攻击受限于TCP三次握手机制导致难以实现流量放大的情况不同,这种新型的攻击手法利用了部分中间盒没有或者说无法严格遵循TCP协议栈的漏洞,精细构造特定请求,触发中间盒返回拦截页面,而由于拦截页面往往大于请求本身,最终实现了攻击流量的放大。
之所以说中间盒没有或者说无法严格遵循TCP协议栈是因为:现网很多中间盒例如防火墙、合规系统等考虑到网络架构、性能、稳定性等因素都会采用旁路部署、单边流量检测的架构,即这些系统本身只能看到机房入向的流量数据,最终这些中间盒只能根据单向流量判断是否存在TCP连接,甚至有中间盒不判断是否存在TCP连接,直接解析请求内容并下发拦截策略。所以攻击者发起这种新型TCP反射攻击的流程简单总结起来只需要以下几步:
1. 攻击者伪造靶机公网IP,向存在中间盒(一般是合规系统)的公网IP精心伪造单向TCP连接并发送一个包含未备案域名的请求;
2. 中间盒没有对TCP会话做双向的流量跟踪,误判TCP三次握手已经完成,并且检测到未备案的域名请求,触发未备案域名拦截动作;
3. 很多中间盒的拦截方式是返回一个较大的包含阻断页面的应答报文,靶机收到大量垃圾流量,最终黑客实现攻击流量的反射放大。
备注:当然这个攻击手法对基于双向流量识别,并严格遵循TCP协议栈的中间盒是无效的。
2.2 攻击原理和效果详解
根据攻击的思路可知,攻击者如果想把这种手法运用到实战,需要满足3个关键条件:
a. 找到欺骗中间盒让其误判TCP连接已经建立的有效手段
b. 找到更容易触发中间盒拦截的非法域名
c. 找到放大系数尽可能大的中间盒
(1)找到欺骗中间盒让其误判TCP连接已经建立的有效手段
由于这种新型TCP反射攻击本质上是利用了部分中间盒的弱点,而全球互联中存在种类极其繁多的中间盒,不同类型的中间盒具体机制存在差异,所以需要找到有效、高效、通用的方法,欺骗中间盒,使其误以为TCP连接已经建立。通过测试和分析,最终发现主要有以下TCP报文类型或组合可以欺骗中间盒:
值得注意的是单报文就能触发拦截的场景一般都是对应的中间盒完全没有做任何的TCP握手检查,而是基于特定标志位的报文就直接提取域名并进行拦截,此类中间盒相对较少。而SYN;PUSH+ACK这种请求报文组合完全伪造单向TCP握手和HTTP GET请求场景,可以欺骗绝大部分只能看到单向流量的中间盒,所以触发反射放大的成功率更高。
(2)找到更容易触发中间盒拦截的非法域名
找到欺骗中间盒,让其误判已经建立TCP连接的方法后,就需要找到更容易让中间盒下发拦截的域名。实际上中间盒对特定域名的拦截本质上就是互联网审查,所谓的互联网审查是由于政治、宗教、道德、经济等原因,世界很多国家都会对互联网流量进行不同程度的审查而且对不符合当地法律法规的域名进行屏蔽和请求拦截。
尽管审查的范围因国家地区而异,所以很难找到一个被所有审计中间盒拦截的域名,Kevin Bock等人在Quack 工具发布的公共数据进行测试分析,找到从大多数中间盒中引发响应的 5 个域,这些域巧合地跨越了五个不同的区域:
● 色情相关域名
● 赌博相关域名
● 社交媒体相关域名
● 文件共享相关域名
● 性健康/教育相关域名
(3)找到放大系数尽可能大的中间盒
为了让靶机受到更大的攻击流量,就需要找到放大效果更好的中间盒作为反射放大器,而放大系数就是主要的衡量标准。
放大系数可以理解为流量的放大倍数,计算方法非常简单,就是response总长度/query总长度。传统的UDP反射攻击的放大系数与具体的协议实现相关,所以放大系数是一个相对固定的值:除了Memcached反射攻击以外,其他UDP反射放大系数不超过600,而且以200以内为主。
而当前这种新型TCP反射攻击的放大倍数却并不是一个固定的值,因为不同地区、不同厂商、不同类型的中间盒的拦截方式并不一致,甚至可以说是差别巨大。所以为了量化和评估这种手法的放大系数情况,我们对全网网段进行扫描,并对放大系数超过5的反射放大器进行统计分析:大部分反射放大器的放大系数在5~100之间,同时发现超过1万个放大系数在100~10000的强力放大器,不过更让人吃惊的是还发现了几个放大系数超过1万,甚至超过5万超级放大器。
那问题来了,按理来说中间盒应答的阻断包虽然可能会大于请求包,但阻断页面大小毕竟是有限的,所以出现成百上千的放大倍数还能理解,为何会出现数以万倍,甚至是超过5万倍的放大效果呢?
而这个就是我们接下来讨论的超级放大器。
2.3 超级放大器
为了理解超级放大器,我们需要系统了解主要的反射场景:
● 场景一:服务器反射
这种场景下服务器收到请求后直接应答,一般会返回synack或者rst,这种反射场景实际就是2018年出现的利用服务器协议栈的TCP反射,并无明显放大效果。
● 场景二:中间盒反射
攻击请求触发了中间盒拦截,中间盒代替服务器给靶机应答一个较大的阻断页面,从而实现攻击流量放大,而且阻断页面越大,放大系数越大。当然部分中间盒并不会应答阻断页面,而是直接代替服务器返回rst,这种情况下并不会有放大效果。
● 场景三:服务器+中间盒反射
攻击请求触发既触发了中间盒拦截,又触发了后端服务器的应答,所以靶机会同时收到中间盒的拦截页面以及服务器的synack或者rst,放大系数会略大于场景二。
● 场景四:中间盒反射+路由环路
这个场景最为特殊,攻击请求到达服务器所在IDC机房后,由于路由环路使请求在两个路由器之间循环,最终导致中间盒收到大量请求,最终给靶机多次应答阻断页面。我们知道数据报文中有TTL字段,每经过一个路由设备就会减一,直到减到0报文才会被丢弃。而攻击请求报文的初始TTL设置为255,这就意味着经过路由环路,放大系数会比原来的增大200+倍。(如下图: 攻击请求环路导致中间盒收到大量重复请求)
然后这情况还不是最糟糕,在某些特定的网络环境,会存在TTL重置的情况(例如网络中跑MPLS协议,并设置了MPLS QOS,某些厂商设备的MPLS QOS默认会重置TTL),环路后请求包将无限循环,最终中间盒被迫以最大能力应答阻断页面,直到所在的出口带宽满载。上述因素就是出现超大放大系数中间盒的原因,这些反射器也被称为超级放大器。当然这种环路或者无限环路的情况会引起IDC运维和安全人员的警惕,所以超级反射器的存活并不稳定。例如笔者找到印度的一个超级反射器后,第二天就“失活”,变成普通反射器。
此外,Kevin Bock等在《USENIX Security 2021》提到的还有第五种反射场景:靶机与中间盒的持续反射也能实现无限放大的能力,但由于笔者扫描没有发现此场景,故本文不作详细阐述。
三、防护方案
被利用做反射放大器的中间盒如防火墙、合规系统一般都由IP网段所属企业/运营商统一部署及运营,所以同一个IP网段的放大效果接近,这就意味着如果攻击者要对外发起这种攻击,往往会向反射放大器所在IP网段发起扫描式的请求,这对反射放大器所在IP网段的来说就是扫段式的DDoS攻击。所以这种攻击的受害者其实有两个:(1)被攻击的靶机; (2)被当作放大器的IP网段。我们需要的是:既能有效防御这种攻击,又能避免成为攻击者的反射放大器。
3.1 新型TCP反射攻击如何防护
如果我们被攻击者盯上,成为了靶机,那么防护这种攻击的关键就有两个: (1)有效的防护策略;(2)充足的防护带宽。
● 在防护策略方面:由于中间盒的应答报文从四层流量上实际上与正常的HTTP应答报文并无明显差异,所以防护这种攻击实际比较困难,一般来说可以通过以下方法防护:
a. 如果没有源端口80的TCP业务流量,可以直接封禁源端口80的TCP流量
b. 对非客户所在区域或者IP网段进行封禁
c. 借助云厂商专业的DDoS防护能力进行防护,例如火山引擎基于字节跳动多年的海量业务 DDoS 防护经验,结合流量指纹、机器学习等多种技术手段,对流量进行精细化清洗,清洗成功率 99.9% 以上,可有效防护此类新型DDoS攻击,让用户高枕无忧
● 在防护带宽方面:由于该攻击手法具备流量放大效果,攻击流量往往很大,充足的防护带宽是不可或缺的。所以如果业务被攻击者盯上,面临这种大流量DDoS攻击时,非常推荐接入云端,通过云厂商海量的防护带宽进行防御。例如火山引擎DDoS高防产品依托海量带宽储备资源与优质的BGP线路类型,可以抵御大流量 DDoS 攻击。
3.2 如何避免沦为反射放大器
如果企业的中间盒(特别是合规系统)如果存在TCP会话识别的漏洞,且合规的阻断页面过大,那么就很有可能会被外部攻击者当做“优质的”反射放大器,从而不可避免地频繁遭受扫段式DDoS攻击,极大的浪费了系统性能、出口带宽等宝贵资源,而且面临被靶机投诉甚至报复的风险。为此优化合规系统等中间盒的机制,避免被利用将成为重要的安全话题,为此我们建议:
1. 中间盒可以新增TCP报文的合法性检查和丢弃,例如syn置位但又携带载荷的属于明显非法报文,可以将其丢弃;
2. 中间盒需要完善TCP会话识别能力,避免直接从TCP单包里直接提取域名直接下发拦截。在条件具备的情况下,尽量基于出入流量的双向会话检查,这样可以彻底规避风险。
四、关于火山引擎DDoS团队
火山引擎DDoS团队是业界资深安全专家组成,基于多年海量DDoS防护经验积累,持续保障抖音、今日头条、西瓜视频等业务,同时依托海量带宽储备资源与优质的BGP线路为火山引擎客户提供专业、可靠的DDoS防护服务,为用户一站式解决DDoS威胁。
目前,火山引擎DDoS团队正在持续招聘中,欢迎大家前往字节招聘官网投递简历。(作者:赵远)
好文章,需要你的鼓励
第一资本就凭借着对数据资源的差异化运用成功脱颖而出。”这样的基础不仅彻底改变了该公司进军银行业的方式,还建立起良性循环,使得更好的数据支撑起更强大的分析能力,进而改善客户交互并产生出更多数据。
Fortinet有着三大重要组成部分,“安全组网”、“unified SASE(统一SASE)”、“AI赋能安全组网”过去三年同比平均增长了14.6%、21.7%、22.3%,远超行业同期的9%、19%、14%的增长率。
近日Max Chan和我们分享了Avnet公司在现代数字领域得到的经验教训,从优化云支出到利用AI提高客户满意度。
金融服务公司Discover Financial Services采用容器化方法来实现其工作负载的敏捷性和灵活性,同时探索生成式AI的长期优势。