資源描述:
《syn flood攻擊的基本原理及防御》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、SYNFlood攻擊的基本原理及防御第一部分SYNFlood的基本原理??SYNFlood是當(dāng)前最流行的DoS(拒絕服務(wù)攻擊)與DDoS(分布式拒絕服務(wù)攻擊)的方式之一,這是一種利用TCP協(xié)議缺陷,發(fā)送大量偽造的TCP連接請求,從而使得被攻擊方資源耗盡(CPU滿負荷或內(nèi)存不足)的攻擊方式。??要明白這種攻擊的基本原理,還是要從TCP連接建立的過程開始說起:大家都知道,TCP與UDP不同,它是基于連接的,也就是說:為了在服務(wù)端和客戶端之間傳送TCP數(shù)據(jù),必須先建立一個虛擬電路,也就是TCP連接,建立
2、TCP連接的標(biāo)準(zhǔn)過程是這樣的:首先,請求端(客戶端)發(fā)送一個包含SYN標(biāo)志的TCP報文,SYN即同步(Synchronize),同步報文會指明客戶端使用的端口以及TCP連接的初始序號;第二步,服務(wù)器在收到客戶端的SYN報文后,將返回一個SYN+ACK的報文,表示客戶端的請求被接受,同時TCP序號被加一,ACK即確認(Acknowledgement)。第三步,客戶端也返回一個確認報文ACK給服務(wù)器端,同樣TCP序列號被加一,到此一個TCP連接完成。以上的連接過程在TCP協(xié)議中被稱為三次握手(Thre
3、e-wayHandshake)。??問題就出在TCP連接的三次握手中,假設(shè)一個用戶向服務(wù)器發(fā)送了SYN報文后突然死機或掉線,那么服務(wù)器在發(fā)出SYN+ACK應(yīng)答報文后是無法收到客戶端的ACK報文的(第三次握手無法完成),這種情況下服務(wù)器端一般會重試(再次發(fā)送SYN+ACK給客戶端)并等待一段時間后丟棄這個未完成的連接,這段時間的長度我們稱為SYNTimeout,一般來說這個時間是分鐘的數(shù)量級(大約為30秒-2分鐘);一個用戶出現(xiàn)異常導(dǎo)致服務(wù)器的一個線程等待1分鐘并不是什么很大的問題,但如果有一個惡意
4、的攻擊者大量模擬這種情況,服務(wù)器端將為了維護一個非常大的半連接列表而消耗非常多的資源----數(shù)以萬計的半連接,即使是簡單的保存并遍歷也會消耗非常多的CPU時間和內(nèi)存,何況還要不斷對這個列表中的IP進行SYN+ACK的重試。實際上如果服務(wù)器的TCP/IP棧不夠強大,最后的結(jié)果往往是堆棧溢出崩潰---即使服務(wù)器端的系統(tǒng)足夠強大,服務(wù)器端也將忙于處理攻擊者偽造的TCP連接請求而無暇理睬客戶的正常請求(畢竟客戶端的正常請求比率非常之?。?,此時從正??蛻舻慕嵌瓤磥?,服務(wù)器失去響應(yīng),這種情況我們稱作:服務(wù)器端
5、受到了SYNFlood攻擊(SYN洪水攻擊)。??從防御角度來說,有幾種簡單的解決方法,第一種是縮短SYNTimeout時間,由于SYNFlood攻擊的效果取決于服務(wù)器上保持的SYN半連接數(shù),這個值=SYN攻擊的頻度x??SYNTimeout,所以通過縮短從接收到SYN報文到確定這個報文無效并丟棄改連接的時間,例如設(shè)置為20秒以下(過低的SYNTimeout設(shè)置可能會影響客戶的正常訪問),可以成倍的降低服務(wù)器的負荷。????第二種方法是設(shè)置SYNCookie,就是給每一個請求連接的IP地址分配一個
6、Cookie,如果短時間內(nèi)連續(xù)受到某個IP的重復(fù)SYN報文,就認定是受到了攻擊,以后從這個IP地址來的包會被一概丟棄。????可是上述的兩種方法只能對付比較原始的SYNFlood攻擊,縮短SYNTimeout時間僅在對方攻擊頻度不高的情況下生效,SYNCookie更依賴于對方使用真實的IP地址,如果攻擊者以數(shù)萬/秒的速度發(fā)送SYN報文,同時利用SOCK_RAW隨機改寫IP報文中的源地址,以上的方法將毫無用武之地。????????????????第二部份SYNFlooder源碼解讀??????下面我
7、們來分析SYNFlooder的程序?qū)崿F(xiàn)。首先,我們來看一下TCP報文的格式:??0????????1????????2????????3????????4????????5????????6????024680246802468024680246802468024????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+??
8、??????IP首部??????
9、????TCP首部??????
10、????TCP數(shù)據(jù)段 ??
11、
12、+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+??????????????圖一TCP報文結(jié)構(gòu)??如上圖所示,一個TCP報文由三個部分構(gòu)成:20字節(jié)的IP首部、20字節(jié)的TCP首部與不定長的數(shù)據(jù)段,(實際操作時可能會有可選的IP選項,這種情況下TCP首部向后順延)由于我們只是發(fā)送一個SYN信號,并不傳遞任何數(shù)據(jù),所以TCP數(shù)據(jù)段為空。TCP首部的數(shù)據(jù)結(jié)構(gòu)為:????0????????????????