安基網 首頁 安全 拒絕服務 查看內容

「華安解密之DDoS攻防」TCP原理篇之SYN Flood

2020-5-21 11:08| 投稿: xiaotiger |來自: 互聯網


免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

摘要: TCP協議的SYN Flood攻擊,這種攻擊方式雖然原始,但是生命力頑強,長久以來在DDoS圈里一直處于德高望重的地位。SYN Flood攻擊的影響也不容小覷,從攻擊事件中可以看到,以SYN Flood為主的數十G流量,很容易就造成被攻擊目標網絡癱瘓。 但TCP類的攻擊遠不止如此,本篇我們就來全面講解基于TCP協議的各種DDoS攻擊方式和防御原理,首先來了解TCP協議的基礎知識。

TCP協議的SYN Flood攻擊,這種攻擊方式雖然原始,但是生命力頑強,長久以來在DDoS圈里一直處于德高望重的地位。SYN Flood攻擊的影響也不容小覷,從攻擊事件中可以看到,以SYN Flood為主的數十G流量,很容易就造成被攻擊目標網絡癱瘓。

但TCP類的攻擊遠不止如此,本篇我們就來全面講解基于TCP協議的各種DDoS攻擊方式和防御原理,首先來了解TCP協議的基礎知識。

0x01 TCP協議基礎

提起TCP,相信大家都不會陌生,每一位網絡工程師入門時學到的第一個協議就是TCP了吧。由于與生俱來的優良品質(面向連接、超時重傳等可靠性保證),這個傳輸層協議構建了網絡的半壁江山,很多常用的協議或應用如Web、Telnet/SSH、FTP等都是承載于TCP的。

這里我們用一些篇幅再來溫習一遍TCP協議,我們以一次FTP連接建立和斷開的過程為例,分析TCP報文的交互過程,了解TCP報文中的關鍵字段。下面給出了使用Wireshark工具中Flow Graph功能繪制出的整個交互過程的流圖:


我們重點關注交互過程的一頭一尾,即三次握手建立連接以及四次握手斷開連接的過程。

三次握手建立連接

在TCP中,通信雙方使用三次握手來建立一個連接。第一次握手,客戶端向服務器發起請求,報文中的SYN標志位置為1,序號為2452765130(用X標記),如下圖所示:


第二次握手,服務器收到客戶端的請求后,向客戶端回應報文。報文中的SYN和ACK標志位均置為1,序號為1996069412(用Y標記),確認序號為客戶端的序號+1即X+1=2452765131,如下圖所示:


第三次握手,客戶端收到服務器回應的報文后,首先檢查報文中的確認序號是否正確。如果確認序號正確(客戶端的序號+1),發送確認報文。確認報文中的ACK標志位置為1,確認序號為服務器的序號+1即Y+1=1996069413,如下圖所示:


而如果客戶端檢查服務器回應報文中的確認序號不正確,則會發送RST(Reset)復位報文,報文中的RST標志位置為1,表示連接出現問題,需要重新建立。

經過上述三次握手的交互過程,通信雙方的一個TCP連接就建立完成了。

四次握手斷開連接

由于TCP連接的全雙工特性(兩個方向上能同時傳輸數據),所以通信雙方斷開一個連接需要經過四次握手的交互過程,或者叫做四次揮手更為準確,雙方都向對方揮手告別。

根據上面展示的報文交互流程圖中的信息,斷開連接時第一次握手是由服務器發起的,服務器要關閉與客戶端的連接,服務器發送的報文中FIN標志位和ACK標志位均置為1,序號為1996069507(用X標記),如下圖所示:


第二次握手,客戶端收到服務器的FIN報文后,向服務器回應報文。報文中的ACK標志位置為1,確認序號為客戶端的序號+1即X+1=1996069508,如下圖所示:


第三次握手,客戶端要關閉與服務器的連接,客戶端發送的報文中FIN標志位和ACK標志位均置為1,序號為2452765157(用Z標記),如下圖所示:


第四次握手,服務器收到客戶端的FIN報文后,向客戶端回應報文。報文中的ACK標志位置為1,確認序號為客戶端的序號+1即Z+1=2452765158,如下圖所示:


經過上述四次握手的交互過程,通信雙方就斷開了一個TCP連接。

上面簡單回顧了三次握手和四次握手的交互過程,我們會發現,TCP連接建立和斷開過程中涉及的概念很多。首先是TCP報文類型有很多種,包括SYN、ACK、FIN以及RST等,不同類型的報文各司其職;其次,TCP報文內容也比較復雜,除了IP地址和端口之外,還包括序號、確認序號、各種標志位等等。

我們從安全角度來看,把自己想象成是攻擊者,怎么利用這些交互過程來對TCP進行攻擊呢?可能的攻擊方式包括以下幾類:

1、Flood類攻擊,例如向被攻擊目標發送海量的SYN、ACK、FIN或RST報文,占用被攻擊目標的系統資源,使其無法提供正常服務。

2、連接耗盡類攻擊,例如與被攻擊目標完成三次握手后不再發送報文一直維持連接,或者立刻發送FIN或RST報文,斷開連接后再次快速發起新的連接等,消耗TCP連接資源。

3、異常報文類攻擊,例如TCP報文中的標志位全都置為1或置為0、SYN和FIN標志位同時置為1等,這些不符合TCP協議規范的異常報文就可能會導致被攻擊目標系統崩潰。

下面我們就逐一介紹這些攻擊方式,以及華為Anti-DDoS解決方案相應的防御方法,首先登場的是德高望重的SYN Flood攻擊。

0x02 SYN Flood攻擊與防御

SYN Flood指的是攻擊者利用工具或者操縱僵尸主機,向目標服務器發起大量的TCP SYN報文,當服務器回應SYN-ACK報文時,攻擊者不再繼續回應ACK報文。這樣就會導致服務器上存在大量的TCP半連接,服務器的資源會被這些半連接耗盡,無法響應正常的請求。

華為Anti-DDoS解決方案防御SYN Flood攻擊的常用手段是源認證,從SYN報文建立連接的“行為”入手,判斷是不是真實源發出的請求。源認證包括基本源認證和高級源認證兩種方式,我們先來學習基本源認證。

基本源認證

基本源認證的原理是Anti-DDoS系統代替服務器向客戶端響應SYN-ACK報文,報文中帶有錯誤的確認序號。我們在前面介紹過,真實的客戶端收到帶有錯誤確認序號的SYN-ACK報文后,會向服務器發送RST報文,要求重新建立連接;而虛假源收到帶有錯誤確認序號的SYN-ACK報文,不會做出任何響應。Anti-DDoS系統通過觀察客戶端的響應情況,來判斷客戶端的真實性。


1、當連續一段時間內去往目標服務器的SYN報文超過告警閾值后,Anti-DDoS系統啟動源認證機制。源認證機制啟動后,Anti-DDoS系統將會代替服務器向客戶端響應帶有錯誤確認序號的SYN-ACK報文。

2、如果這個源是虛假源,是一個不存在的地址或者是存在的地址但卻沒有發送過SYN報文,不會做出任何響應。

3、如果這個源是真實客戶端,則會向服務器發送RST報文,要求重新建立連接。Anti-DDoS系統收到RST報文后,將該客戶端的源IP地址加入白名單。

4、后續這個客戶端發出的SYN報文命中白名單直接通過。

基本源認證方式存在一定的局限性,如果網絡中存在某些設備會丟棄帶有錯誤確認序號的SYN-ACK報文,或者有的客戶端不響應帶有錯誤確認序號的SYN-ACK報文,基本源認證就不能生效了。此時,可以使用高級源認證來驗證客戶端的真實性。

級源認證

高級源認證的原理也是Anti-DDoS系統代替服務器向客戶端響應SYN-ACK報文,但與基本源認證不同的是,SYN-ACK報文中帶有正確的確認序號。真實的客戶端收到帶有正確確認序號的SYN-ACK報文后,會向服務器發送ACK報文;而虛假源收到帶有正確確認序號的SYN-ACK報文,不會做出任何響應。Anti-DDoS系統通過觀察客戶端的響應情況,來判斷客戶端的真實性。


1、當連續一段時間內去往目標服務器的SYN報文超過告警閾值后,Anti-DDoS系統啟動源認證機制。源認證機制啟動后,Anti-DDoS系統將會代替服務器向客戶端響應帶有正確確認序號的SYN-ACK報文。

2、如果這個源是虛假源,是一個不存在的地址或者是存在的地址但卻沒有發送過SYN報文,不會做出任何響應。

3、如果這個源是真實客戶端,則會向服務器發送ACK報文,對收到的SYN-ACK報文進行確認。Anti-DDoS系統收到ACK報文后,將該客戶端的源IP地址加入白名單。同時,Anti-DDoS系統會向客戶端發送RST報文,要求重新建立連接。

4、后續這個客戶端發出的SYN報文命中白名單直接通過。

無論是基本源認證還是高級源認證,其原理都是Anti-DDoS系統發送SYN-ACK報文來對源進行認證,形象點說,Anti-DDoS系統收到SYN報文后會反彈SYN-ACK報文。如果網絡中存在海量的SYN報文,同樣Anti-DDoS系統也會反彈出去海量的SYN-ACK報文,這樣勢必就會造成網絡擁塞更加嚴重。

為了避免這個問題,減少反彈的SYN-ACK報文對網絡擁塞的影響,Anti-DDoS系統提供了首包丟棄功能。

首包丟棄

TCP的可靠性保證除了面向連接(三次/四次握手)之外,還體現在超時與重傳機制。TCP協議規范要求發送端每發送一個報文,就啟動一個定時器并等待確認信息;如果在定時器超時前還沒有收到確認,就會重傳報文。

首包丟棄功能就是利用了TCP的超時重傳機制,Anti-DDoS系統對收到的第一個SYN報文直接丟棄,然后觀察客戶端是否重傳。如果客戶端重傳了SYN報文,再對重傳的SYN報文進行源認證,即反彈SYN-ACK報文,這樣就可以大大減少反彈報文的數量。


實際部署時,我們將首包丟棄和源認證結合使用。防御SYN Flood攻擊時,先通過首包丟棄功能來過濾掉一些攻擊報文,當重傳的SYN報文超過告警閾值后,再啟動源認證。這樣就能夠減少反彈的SYN-ACK報文的數量,緩解網絡擁塞情況。對于虛假源攻擊,尤其是對于不斷變換源IP和源端口的虛假源攻擊,可以達到最佳防御效果。

SYN Flood攻擊的原理和防御方式介紹完畢,下一篇我們將介紹另外幾種Flood類攻擊,包括SYN-ACK Flood、ACK Flood以及FIN/RST Flood,請大家繼續關注。



上期回顧:

「華安解密之DDoS攻防」10 TCP案例篇 土耳其攻擊事件解密



小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

本文出自:https://www.toutiao.com/a6828466551922885128/

免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


鮮花

握手

雷人

路過

雞蛋

相關閱讀

最新評論

 最新
返回頂部
洗衣店赚钱联系澳洁 北京11选五开奖走势图 娱乐场名称 黑龙江20选8走势图表 上海时时乐万能六码走势图 腾讯分分彩刷大底方法 北京快乐8陷阱 600779股票 快乐十分选号技巧口诀 浙汇体彩11选5走势图 重庆快乐十分一定牛综合分布