新的DDoS攻擊手法來襲:TCP反射攻擊技術分析
我們常聽說UDP反射攻擊,那你聽說過TCP反射攻擊嗎?
我們對TCP三次握手諳熟於心,但你確定伺服器收到SYN包之後一定返回SYN/ACK嗎?
現網的DDoS對抗中,基於TCP協議的反射攻擊手法已經悄然興起,而且出現了多次手法變種,對DDoS防護方帶來嚴峻的挑戰。新場景下的技術對抗如約而至。
0×00 引言
筆者之前曾撰寫過一篇關於利用TCP協議發起的反射攻擊的文章 《小隱隱於野:基於 TCP 反射 DDoS 攻擊分析》 。分享的是一種新型的攻擊手法 ——TCP反射攻擊:黑客偽造目的伺服器IP向公網的TCP伺服器發起連線請求(SYN),以使得被攻擊伺服器收到大量SYN/ACK報文,最終造成拒絕服務的手法。而由於這種反射攻擊存在協議棧行為,傳統的TCP防護演算法難以湊效,這也使得這種攻擊手法有愈演愈烈之勢。
經過我們團隊研究人員長期的跟蹤分析,發現這種攻擊手法出現了兩個新的特徵:
黑客逐漸趨向利用CDN廠商的伺服器資源發起TCP發射攻擊,因為通過掃描CDN廠商網段,可以快速、高效地獲得豐富的TCP伺服器資源;
TCP反射攻擊流量從SYN/ACK轉變成ACK,防護難度進一步增大。
0×01 TCP反射的新特徵研究
特徵一:黑客逐漸趨向於利用CDN廠商的伺服器資源發起TCP發射攻擊
我們在整理分析現網的TCP反射攻擊時,發現會經常出現攻擊源幾乎全部來源海外CDN廠商的情況。如圖2、圖3所示,某次TCP反射攻擊事件中有99.88%的IP來源美國,而且88.39%屬於某個著名CDN廠商。
顯而易見這是黑客開始傾向於掃描CDN廠商的IP網段,以獲取大批量反射源的思路。由於CDN廠商的IP資源主要用於為使用者提供加速服務,不可避免地會開放TCP埠,黑客便可以通過這種方式快速地獲取到有效的TCP反射源。例如筆者隨機探測一個CDN廠商的C段IP,結果為:整個C段所有IP全部均有開放TCP埠 。
這種方法為黑客提供大量可用的TCP反射源,能夠讓攻擊者的資源實現最大化,而且TCP反射攻擊由於具備協議棧行為,傳統策略難以防護,所以不難推測後面這種攻擊手法將越來越盛行,為DDoS防護方帶來不小的挑戰。
特徵二:反射流量從SYN/ACK報文轉變為ACK報文,防護難度進一步增大
這裡給人的第一反應可能就是顛覆了我們TCP三次握手的印象,一個伺服器(反射源)收到一個SYN請求,不應該是返回SYN/ACK嗎?怎麼會返回ACK包?為了解答這個問題,容筆者從黑客偽造SYN請求的過程說起…
首先如上文描述TCP反射的原理,黑客會控制肉雞偽造成被攻擊伺服器的IP對公網的TCP伺服器發起SYN請求,而公網TCP伺服器的埠都是固定的,所以為了實現反射,SYN請求中的目的埠也同樣固定。與此同時,為了達到更好的攻擊效果,黑客需要使反射出來的報文的目的埠為被攻擊伺服器的業務埠(繞過安全裝置將非業務埠的流量直接攔截的策略),也就是說SYN請求報文中的源埠也是固定的。就是基於這些原因,攻擊者偽造SYN請求報文的五元組通常都會出現集聚 ,這個結論其實很重要,因為它就是引發伺服器反彈ACK的前提條件。
舉例如圖5所示:黑客需要攻擊的伺服器IP為183.*.*.45,其業務埠為80,而黑客掌握的TCP反射伺服器的IP是104.*.*.35,開放的埠是8080,那麼攻擊時構造SYN包的五元組就會集聚在Protocol: TCP、DST_IP: 104.*.*.35、SRC_IP: 183.*.*.45、DST_PORT: 8080、SRC_PORT: 80。
而我們都知道五元組決定了一個會話,所以當黑客短時時間構造大量相同五元組的SYN包傳送到同一臺TCP伺服器時,就會造成大量的“會話衝突”。也就是說從TCP伺服器的角度來看,接收到第一個SYN包後,伺服器返回SYN/ACK等待ACK以建立TCP連線,而此時又再接收到同一個會話的SYN。那TCP伺服器會怎麼處理呢?再次返回SYN/ACK?RST?還是其他?
其實在這個情況下,TCP伺服器具體怎麼處理決定因素在於SYN包的seq號和伺服器的window size!假設第一個SYN包的seq號為SEQ1,TCP伺服器的windows size為WND,而第二個SYN的seq號為SEQ2,那麼:
一、如果SEQ2==SEQ1,此時TCP伺服器會認為這個是SYN包重傳,則再次返回SYN/ACK(其實是在重傳SYN/ACK),如圖6所示。這個攻擊場景從被攻擊伺服器的視角來看,就是在短時間內接收到大量的SYN/ACK報文,造成拒絕服務,這也是現網最為常見的場景之一。
二、如果SEQ2>SEQ1+WND或者SEQ2<SEQ1,那麼這種情況屬於out-of-windows:對於不在接收視窗內的報文,需要回復一個ACK,讓對方傳送正確SEQ號的包過來,協議描述可以參考RFC: 793 page69(見圖7)。
圖7 RFC: 793 page69
所以當黑客偽造SYN報文的SEQ隨機變化時,就很容易命中上述情況,TCP伺服器就會返回ACK報文,如圖8、圖9所示。
圖8 TCP反射,反彈ACK場景(SEQ2>SEQ1+WND)
圖9 TCP反射,反彈ACK場景(SEQ2<SEQ1)
這個場景中,被攻擊伺服器會接收到少量SYN/ACK以及大量的ACK報文,這是現網最越來越常見的場景。如圖10為現網中一次真實TCP反射攻擊的抓包取樣,表面上看跟普通的ACKFLOOD攻擊沒有太大區別,而實際上這些流量是具有協議棧行為,所以傳統策略難以有效防護。
圖10 現網TCP反射攻擊取樣
三、如果SEQ1<SEQ2<=SEQ1+WND,這種場景下TCP伺服器會認為會話出現異常,並返回RST斷開會話,如圖11所示。此時被攻擊伺服器會收到大量SYN/ACK+RST的混合流量(當前現網中這種情況很少,而RST的防護難度較小,這裡不做詳細闡述)。
圖11 TCP反射,反彈RST場景
綜上所述,黑客為了實現TCP反射攻擊,而且儘可能繞過防護策略,所以偽造的SYN報文的五元組會出現集聚,造成嚴重的會話衝突。而不同的SEQ號會觸發TCP伺服器不同的應答場景(情況彙總見圖12),所以現網中的TCP反射除了會出現大量的SYN/ACK流量以外,還有可能出現少量SYN/ACK+大量ACK的混合流量,而且後者的流量成份更為複雜,防護難度更大。
0×02 新型的 TCP 反射防護演算法
筆者整理總結了TCP反射防護的主要難點:
1、TCP反射流量具有協議棧行為,傳統的防護演算法難以識別和防護;
2、專業的抗D裝置通常旁路部署,所以無法獲得伺服器出流量,這也意味著無法通過雙向會話檢查的方式進行防護;
3、TCP反射通常為SYN/ACK和ACK的混合流量,而且在成份佔比和行為上跟正常業務流量幾乎沒有太大區別,所以傳統的成份分析、限速等方式也難以湊效。
*本文作者:暴雪@騰訊安全平臺部,轉載請註明來自FreeBuf.COM