近期,關于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團隊正在持續招聘中,歡迎大家前往字節招聘官網投遞簡歷。(作者:唐群)