資源描述:
《SYN 網(wǎng)絡(luò)攻擊原理.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、1、TCP握手協(xié)議第一次握手:客戶端(作為源主機)通過向服務(wù)器(作為目的主機)發(fā)送TCP連接請求(又稱SYN段),其中標(biāo)志SYN=1,ACK=0;序列號為客戶端初始序列號(簡稱ISN);目的端口號為所請求的服務(wù)對應(yīng)的端口;還包括最大段長度(MSS)選項。這個SYN段不攜帶任何數(shù)據(jù),但是它消耗一個序列號。這一步客戶端執(zhí)行主動打開。第二次握手:服務(wù)器在指定的端口等待連接,收到TCP連接請求后,將回應(yīng)一個TCP連接應(yīng)答(又稱SYN/ACK段),其中標(biāo)志SYN=1,ACK=1;序列號為服務(wù)器初始序列號;確認(rèn)號為客戶端初始序列號加1;目的端口號為客戶端的源端口號。這個SYN/ACK段不攜帶數(shù)據(jù),但
2、消耗一個序列號。這一步服務(wù)器執(zhí)行被動打開。第三次握手:客戶端再向服務(wù)器發(fā)送一個TCP連接確認(rèn)報文(又稱ACK段),其中標(biāo)志SYN=0,ACK=1;序列號為客戶端初始序列號加1;確認(rèn)號為服務(wù)器的初始序列號加1。一般來說,這個ACK段不攜帶數(shù)據(jù),因而不消耗序列號。經(jīng)過三次握手后,TCP連接正式建立。雙方都置ACK標(biāo)志,交換并確認(rèn)了對方的初始序列號,可以通過連接互相傳輸數(shù)據(jù)。2、SYN攻擊原理SYNFlood攻擊屬于DOS攻擊的一種,它利用TCP協(xié)議缺陷,發(fā)送大量偽造的TCP連接請求,從而使得被攻擊方資源耗盡(CPU滿負(fù)荷或內(nèi)存不足),最終導(dǎo)致系統(tǒng)或服務(wù)器宕機。SYNFlood攻擊正是利用了T
3、CP連接的三次握手,假設(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分鐘并不會對服務(wù)器端造成什么大的影響,但如果有大量的等待丟失的情況發(fā)生,服務(wù)器端將為了維護一個非常大的半連接請求而消耗非常多的資源。我們可以想象大量的保存并遍歷也會消耗非常多的CPU時
4、間和內(nèi)存,再加上服務(wù)器端不斷對列表中的IP進行SYN+ACK的重試,服務(wù)器的負(fù)載將會變得非常巨大。如果服務(wù)器的TCP/IP棧不夠強大,最后的結(jié)果往往是堆棧溢出崩潰。相對于攻擊數(shù)據(jù)流,正常的用戶請求就顯得十分渺小,服務(wù)器疲于處理攻擊者偽造的TCP連接請求而無暇理睬客戶的正常請求,此時從正??蛻魰憩F(xiàn)為打開頁面緩慢或服務(wù)器無響應(yīng),這種情況就是我們常說的服務(wù)器端SYNFlood攻擊(SYN洪水攻擊)。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內(nèi)偽造大量不存在的IP地址,向服務(wù)器不斷地發(fā)送syn包,服務(wù)器回復(fù)確認(rèn)包,并等待客戶的確認(rèn),由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)
5、直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN請求被丟棄,目標(biāo)系統(tǒng)運行緩慢,嚴(yán)重者引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。從防御角度來講,存在幾種的解決方法:第一種是縮短SYNTimeout時間,由于SYNFlood攻擊的效果取決于服務(wù)器上保持的SYN半連接數(shù),這個值=SYN攻擊的頻度xSYNTimeout,所以通過縮短從接收到SYN報文到確定這個報文無效并丟棄改連接的時間,例如設(shè)置為20秒以下,可以成倍的降低服務(wù)器的負(fù)荷。但過低的SYNTimeout設(shè)置可能會影響客戶的正常訪問?! 〉诙N方法是設(shè)置SYNCookie,就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內(nèi)
6、連續(xù)受到某個IP的重復(fù)SYN報文,就認(rèn)定是受到了攻擊,并記錄地址信息,以后從這個IP地址來的包會被一概丟棄。這樣做的結(jié)果也可能會影響到正常用戶的訪問?! ∩鲜龅膬煞N方法只能對付比較原始的SYNFlood攻擊,縮短SYNTimeout時間僅在對方攻擊頻度不高的情況下生效,SYNCookie更依賴于對方使用真實的IP地址,如果攻擊者以數(shù)萬/秒的速度發(fā)送SYN報文,同時利用SOCK_RAW隨機改寫IP報文中的源地址,以上的方法將毫無用武之地。一些TCP/IP棧的實現(xiàn)只能等待從有限數(shù)量的計算機發(fā)來的ACK消息,因為他們只有有限的內(nèi)存緩沖區(qū)用于創(chuàng)建連接,如果這一緩沖區(qū)充滿了虛假連接的初始信息,該服
7、務(wù)器就會對接下來的連接停止響應(yīng),直到緩沖區(qū)里的連接企圖超時。在一些創(chuàng)建連接不受限制的實現(xiàn)里,SYN洪水具有類似的影響。防御:在防火墻上過濾來自同一主機的后續(xù)連接。未來的SYN洪水令人擔(dān)憂,由于釋放洪水的并不尋求響應(yīng),所以無法從一個簡單高容量的傳輸中鑒別出來。本文章的目是介紹使用python構(gòu)造packet的方法。使用rawsocket來發(fā)送packets。該程序只適用于Linux。windows可以嘗試調(diào)用winpcap?!≡谟懻揝