專利名稱::一種基于二叉樹檢測UDPFlood攻擊和防御的方法
技術領域:
:本發(fā)明涉及一種網(wǎng)絡安全
技術領域:
,具體涉及一種基于二叉樹檢測來判定UDPFlood攻擊和防御的方法。
背景技術:
:拒絕服務攻擊(DoQ和分布式拒絕服務攻擊(DDoQ是目前常用的網(wǎng)絡攻擊方式,這種攻擊通過發(fā)送大量偽造的服務請求,消耗被攻擊網(wǎng)絡的帶寬和受攻擊主機的服務資源,從而使得正常的服務請求得不到響應。特別是UDPFlood攻擊,由于它利用了UDP協(xié)議(UserDatagramProtocol的簡稱,用戶數(shù)據(jù)報協(xié)議)存在的固有的漏洞,所以現(xiàn)有的協(xié)議體系對此攻擊免疫力非常弱。當前對這種攻擊采取的防御手段主要有禁用或過濾監(jiān)控和響應服務、禁用或過濾未啟用的UDP服務、禁用某些容易遭受UDPFlood攻擊的端口、過濾UDP碎片、拒絕接受所有UDP數(shù)據(jù)報(某些極端情況下)、建立UDP連接規(guī)則,要求所有去往該端口的UDP包,必須首先與TCP端口建立TCP連接、如果用戶必須提供一些對外的UDP服務,那么需要使用代理機制來保護這些服務,使它不會被濫用、對用戶的網(wǎng)絡進行監(jiān)控以了解哪些系統(tǒng)在使用這些服務,并對濫用的跡象進行監(jiān)控,在一定的情況下,這些措施有可能起到一定的效果,但是這些方法絕大部分非常被動、防御面窄、防御效果差,并且可能誤傷正常業(yè)務和降低網(wǎng)絡傳輸效率,比如禁用某些端口會嚴重干擾某些正常UDP業(yè)務的進行并且只能防御針對被禁用的端口的UDPFlood攻擊;禁用或過濾響應服務有時會嚴重降低網(wǎng)絡的傳輸效率。綜上可以看出,當產(chǎn)生大規(guī)模UDP類型的DDoS攻擊時,常規(guī)的防御方法基本束手無策。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種防御UDPFlood攻擊的方法。本發(fā)明是通過如下方式實現(xiàn)的一種基于二叉樹檢測UDPFlood攻擊和防御的方法,按如下步驟進行;第一步構建環(huán)境變量創(chuàng)建二叉樹A和二叉樹B,樹A用來存儲等待分析的UDP數(shù)據(jù)包,樹B用來存儲已被檢測出來的正在進行UDPFlood攻擊的主機IP,分別初始化樹A和樹B,使每個節(jié)點都為空;轉第二步;第二步判斷收到IP數(shù)據(jù)包是否為UDP數(shù)據(jù)包從網(wǎng)卡隊列中讀取一個IP數(shù)據(jù)包,基于Iibnids抓包,檢查其IP協(xié)議字段代號,若為17,則該數(shù)據(jù)包是UDP數(shù)據(jù)包,轉第三步;否則轉第十五步;第三步判斷UDP數(shù)據(jù)包是否為第一分片或者完整的UDP數(shù)據(jù)包檢查并判斷該IP數(shù)據(jù)包內(nèi)的分段偏移量字段的值是否為0,若為0,則該數(shù)據(jù)包為UDP數(shù)據(jù)包的第一分片或完整的UDP數(shù)據(jù)包,轉第四步;否則轉第十五步;第四步對IP數(shù)據(jù)包的源IP地址和其中的UDP數(shù)據(jù)包的數(shù)據(jù)部分進行預存儲首先,取IP數(shù)據(jù)包的源IP地址和其中的UDP數(shù)據(jù)包的數(shù)據(jù)部分,并設置兩個標記字段分別記錄匹配次數(shù)和不匹配次數(shù),初始化為0;分別存入一個字符數(shù)組Sl中,該數(shù)組大小為1500字節(jié);然后,檢查樹A的根節(jié)點是否為空,如果是,則將Sl存入該根節(jié)點,轉第十五步;如果不是,將Sl的源IP地址與樹A根節(jié)點中IP地址比較;若Sl的源IP地址小,轉第五步;若大,轉第六步;若相等,轉第七步;第五步訪問樹A當前節(jié)點的左孩子,若不存在,創(chuàng)建一個空節(jié)點作為左孩子,并將該左孩子設為當前節(jié)點;檢查該節(jié)點是否為空,如果是,則將Sl存入當前節(jié)點,轉第十五步;如果不是,將其中IP地址與Sl的源IP地址比較,若Sl的源IP地址小,轉第五步;若大,轉第六步;若相等,轉第七步;第六步訪問樹A當前節(jié)點的右孩子,若不存在,創(chuàng)建一個空節(jié)點作為右孩子,并將該右孩子設為當前節(jié)點;檢查該節(jié)點是否為空,如果是,則將Si存入當前節(jié)點,轉第十五步;如果不是,將其中IP地址與Sl的源IP地址比較,若Sl的源IP地址小,轉第五步;若大,轉第六步;若相等,轉第七步;第七步將Sl內(nèi)UDP數(shù)據(jù)包的數(shù)據(jù)部分與樹A當前節(jié)點中的UDP數(shù)據(jù)包的數(shù)據(jù)部分進行匹配,若完全匹配,轉第八步;否則,轉第九步;第八步樹A當前節(jié)點中的匹配次數(shù)標記字段加1并判斷其值是否大于等于規(guī)定的數(shù)值(一般為48),如果是,則可判定IP地址為當前節(jié)點內(nèi)存儲的源IP地址的主機正在進行UDPFlood攻擊,轉第十步;否則,轉第十五步;第九步樹A當前節(jié)點中的不匹配次數(shù)標記字段加1并判斷其值是否大于等于規(guī)定的數(shù)值(一般設為48),如果是,則可判定IP地址為當前節(jié)點內(nèi)存儲的源IP地址的主機沒有進行UDPFlood攻擊,轉第十四步;否則,轉第十五步;第十步取樹A當前節(jié)點存儲的源IP地址,檢查樹B的根節(jié)點存儲的內(nèi)容是否為空,如果是,則將此源IP地址存入B樹的根節(jié)點,轉第十三步;否則,將此源IP地址與B樹根節(jié)點存儲的IP地址進行比較;若源IP地址小,轉第十一步;若大,轉第十二步;若相等,轉第十四步;第十一步訪問B樹當前節(jié)點的左孩子,若不存在,創(chuàng)建一個空節(jié)點作為左孩子,并將該左孩子設為當前節(jié)點;檢查當前節(jié)點是否為空,如果是,則將此源IP地址存入當前節(jié)點,轉第十三步;否則,將此源IP地址與當前節(jié)點內(nèi)存儲的IP地址進行比較;若源IP地址小,轉第十一步;若大,轉第十二步;若相等,轉第十四步;第十二步訪問B樹當前節(jié)點的右孩子,若不存在,創(chuàng)建一個空節(jié)點作為右孩子,并將該右孩子設為當前節(jié)點;檢查當前節(jié)點是否為空,如果是,則將此源IP地址存入當前節(jié)點,轉第十三步;否則,將此源IP地址與當前節(jié)點內(nèi)存儲的IP地址進行比較;若源IP地址小,轉第十一步;若大,轉第十二步;若相等,轉第十四步;第十三步調(diào)用操作系統(tǒng)防火墻程序的過濾命令,過濾源IP地址為樹B當前節(jié)點內(nèi)存儲的IP地址的數(shù)據(jù)包;轉第十四步;第十四步清空樹A當前節(jié)點;轉第十五步;第十五步停止并跳出處理,轉第二步;采用本發(fā)明可以達到如下的有益效果對大型DDoS類型的UDPFlood攻擊采取基于二叉樹的循環(huán)檢測方式,通過二叉樹來預存儲UDP數(shù)據(jù)包和搜索二叉樹來匹配及循環(huán)檢測,檢測迅速高效,精確度很高,有著優(yōu)秀的防御效果。圖1是IP數(shù)據(jù)包的部分結構圖。圖2是本專利構建的保存源IP、匹配次數(shù)、不匹配次數(shù)、UDP數(shù)據(jù)包數(shù)據(jù)段的字符數(shù)組結構。圖3是初始化的二叉樹A,二叉樹B結構。圖4是服務器收到的IP數(shù)據(jù)包隊列圖。圖5是等待分析的數(shù)組隊列圖。圖6-8是分別是數(shù)組A、B、C在二叉樹A中的存儲過程。圖9-10是數(shù)組D-F的查找以及與數(shù)組A進行內(nèi)容匹配的過程。圖11-12是數(shù)組G-H的查找以及與數(shù)組C進行內(nèi)容匹配的過程。圖13-14是數(shù)組I-N的查找以及數(shù)組I_L與數(shù)組B進行內(nèi)容匹配的過程。圖15-16是數(shù)組O-P的查找以及與數(shù)組C進行內(nèi)容匹配的過程。圖17-18是數(shù)組Q-S的查找以及數(shù)組Q與數(shù)組B進行內(nèi)容匹配的過程。圖19-20是源IP地址IPl和IP2的存儲過程。圖21是本實驗的網(wǎng)絡拓撲圖。具體實施例方式下面結合實施例對本發(fā)明做進一步說明實施例如圖21所示是本例網(wǎng)絡拓撲圖,在該網(wǎng)絡中,3臺網(wǎng)絡主機能通過hternet訪問Internet上的一臺Linux服務器;此時,源IP地址為192.168.1.100與192.168.1.101的主機正在對Linux服務器發(fā)動UDPFlood攻擊,源IP地址為192.168.1.102的主機與Linux服務器進行正常的通信;此時,Linux服務器網(wǎng)卡緩存存儲的為來自hternet的IP數(shù)據(jù)包,各種系統(tǒng)進程按先進先出的方式讀取緩存中的IP數(shù)據(jù)包,即哪個網(wǎng)絡數(shù)據(jù)包先存入網(wǎng)卡緩存,將優(yōu)先處理誰。本例保護的是Linux服務器,hternet上發(fā)送給Linux服務器的流量在Linux服務器上進行過濾。先在Linux服務器操作系統(tǒng)上作如下準備在用戶層安裝Iibnids包,Iibnids是一個用于網(wǎng)絡入侵檢測開發(fā)的專業(yè)編程接口,它使用了Iibpcap所以它具有捕獲數(shù)據(jù)包的功能。同時,Iibnids提供了TCP數(shù)據(jù)流重組功能,所以對于分析基于TCP協(xié)議的各種協(xié)議Iibnids都能勝任.Iibnids還提供了對IP分片進行重組的功能,以及端口掃描檢測和異常數(shù)據(jù)包檢測功能;在內(nèi)核層注冊回調(diào)函數(shù)(通過該函數(shù)可以進入循環(huán)捕獲包狀態(tài))。在用戶層安裝iptables包(iptables集成到Iinux內(nèi)核中,用戶通過iptables,能對進出計算機的數(shù)據(jù)包進行過濾。通過iptables命令設置你的規(guī)則,來把守計算機網(wǎng)絡-哪些數(shù)據(jù)允許通過,哪些不能通過,哪些通過的數(shù)據(jù)進行記錄)。Linux服務器上部署動作如下第一步構建環(huán)境變量創(chuàng)建二叉樹A和二叉樹B如圖3所示,樹A用來存儲等待分析的UDP數(shù)據(jù)包,樹B用來存儲已被檢測出來的正在進行UDPFlood攻擊的主機IP,分別初始化樹A和樹B,使每個節(jié)點都為空;轉第二步;第二步判斷IP數(shù)據(jù)包是否為UDP數(shù)據(jù)包如圖4,我們可以看到,Linux服務器緩存中的IP數(shù)據(jù)包其IP協(xié)議字段代號都為17,所以這些IP數(shù)據(jù)包內(nèi)都是UDP數(shù)據(jù)包,轉第三步;第三步判斷UDP數(shù)據(jù)包是否為第一分片或者完整的UDP數(shù)據(jù)包如圖4,我們可以看到,Linux服務器緩存中的IP數(shù)據(jù)包其分段偏移量字段的值都為0,所以這些IP數(shù)據(jù)包為UDP數(shù)據(jù)包的第一分片或完整的UDP數(shù)據(jù)包,轉第四步;第四步對數(shù)組進行操作首先,分別取IP數(shù)據(jù)包A-S的源IP地址和其中的UDP數(shù)據(jù)包的數(shù)據(jù)部分,并設置兩個標記字段分別記錄匹配次數(shù)和不匹配次數(shù),初始化為0;分別存入字符數(shù)組中,如圖5所示;該數(shù)組大小為1500字節(jié),結構如圖2所示;對于數(shù)組A如圖6,此時樹A根節(jié)點為空,所以,將數(shù)組A存入根節(jié)點,轉第十五步;對于數(shù)組B如圖7,此時樹A根節(jié)點不為空,于是,將數(shù)組B中的源IP地址與樹A根節(jié)點中存儲的數(shù)組A中的源IP地址比較;發(fā)現(xiàn)數(shù)組B中的源IP地址小,轉第五步;對于數(shù)組C如圖8,此時樹A根節(jié)點不為空,于是,將數(shù)組C中的源IP地址與樹A根節(jié)點中存儲的數(shù)組A中的源IP地址比較;發(fā)現(xiàn)數(shù)組C中的源IP地址大,轉第六步;對于數(shù)組D如圖9,此時樹A根節(jié)點不為空,于是,將數(shù)組D中的源IP地址與樹A根節(jié)點中存儲的數(shù)組A中的源IP地址比較;發(fā)現(xiàn)兩者相等,轉第七步;對于數(shù)組G如圖11,此時樹A根節(jié)點不為空,于是,將數(shù)組G中的源IP地址與樹A根節(jié)點中存儲的數(shù)組A中的源IP地址比較;發(fā)現(xiàn)數(shù)組G中的源IP地址大,轉第六步;對于數(shù)組I如圖13,此時樹A根節(jié)點不為空,于是,將數(shù)組I中的源IP地址與樹A根節(jié)點中存儲的數(shù)組A中的源IP地址比較;發(fā)現(xiàn)數(shù)組I中的源IP地址小,轉第五步;對于數(shù)組0如圖15,此時樹A根節(jié)點不為空,于是,將數(shù)組0中的源IP地址與樹A根節(jié)點中存儲的數(shù)組A中的源IP地址比較;發(fā)現(xiàn)數(shù)組0中的源IP地址大,轉第六步;對于數(shù)組Q如圖17,此時樹A根節(jié)點不為空,于是,將數(shù)組Q中的源IP地址與樹A根節(jié)點中存儲的數(shù)組A中的源IP地址比較;發(fā)現(xiàn)兩者相等,轉第七步;第五步對于數(shù)組B如圖7,訪問樹A根節(jié)點的左孩子,發(fā)現(xiàn)其沒有左孩子,于是創(chuàng)建一個空節(jié)點作為左孩子,并將該左孩子設為當前節(jié)點;由于當前節(jié)點是為空,所以將數(shù)組B存入當前節(jié)點,轉第十五步;對于數(shù)組I如圖13,訪問樹A根節(jié)點的左孩子,發(fā)現(xiàn)其左孩子存在且不為空,設該節(jié)點為當前節(jié)點,于是,將字符數(shù)組I中的源IP地址與當前節(jié)點存儲的數(shù)組B中源IP地址比較,發(fā)現(xiàn)兩者相等,轉第七步;第六步對于數(shù)組C如圖8,訪問樹A根節(jié)點的右孩子,發(fā)現(xiàn)其沒有右孩子,于是創(chuàng)建一個空節(jié)點作為右孩子,并將該右孩子設為當前節(jié)點;由于當前節(jié)點是為空,所以將數(shù)組C存入當前節(jié)點,轉第十五步;對于數(shù)組G如圖11,訪問樹A根節(jié)點的右孩子,發(fā)現(xiàn)其右孩子存在且不為空,設該節(jié)點為當前節(jié)點,于是,將字符數(shù)組G中的源IP地址與當前節(jié)點存儲的數(shù)組C中源IP地址比較,發(fā)現(xiàn)兩者相等,轉第七步;對于數(shù)組0如圖15,訪問樹A根節(jié)點的右孩子,發(fā)現(xiàn)其右孩子存在且不為空,設該節(jié)點為當前節(jié)點,于是,將字符數(shù)組0中的源IP地址與當前節(jié)點存儲的數(shù)組C中源IP地址比較,發(fā)現(xiàn)兩者相等,轉第七步;第七步對于數(shù)組D如圖10,將數(shù)組D內(nèi)UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容與樹A當前節(jié)點中數(shù)組A的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容進行匹配,發(fā)現(xiàn)完全匹配,轉第八步;對于數(shù)組G如圖12,將數(shù)組G內(nèi)UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容與樹A當前節(jié)點中數(shù)組C的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容進行匹配,發(fā)現(xiàn)不能完全匹配,轉第九步;對于數(shù)組I如圖14,將字符數(shù)組I內(nèi)UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容與樹A當前節(jié)點中字符數(shù)組B的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容進行匹配,發(fā)現(xiàn)完全匹配,轉第八步;對于數(shù)組0如圖16,將字符數(shù)組0內(nèi)UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容與樹A當前節(jié)點中字符數(shù)組C的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容進行匹配,發(fā)現(xiàn)不能完全匹配,轉第九步;對于數(shù)組Q如圖18,將字符數(shù)組Q內(nèi)UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容與樹A當前節(jié)點中字符數(shù)組A的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容進行匹配,發(fā)現(xiàn)完全匹配,轉第八步;第八步對于數(shù)組D如圖10,樹A當前節(jié)點中的匹配次數(shù)標記字段加1并判斷其值是否大于等于4,此時其值為1,小于4;注由于數(shù)據(jù)包E、F與數(shù)據(jù)包內(nèi)容完全相同,所以其操作過程與數(shù)據(jù)包D的操作過程完全相同,在此不再贅述,詳見請圖9、圖10;經(jīng)過這3次循環(huán)操作后,樹A根節(jié)點中的匹配次數(shù)標記字段值變?yōu)?,小于4,轉第十五步。對于數(shù)組I如圖14,樹A當前節(jié)點中的不匹配次數(shù)標記字段加1并判斷其值是否大于等于4,此時其值為1,小于4;注由于數(shù)據(jù)包J、K、L與數(shù)據(jù)包內(nèi)容完全相同,所以其操作過程與數(shù)據(jù)包D的操作過程完全相同,在此不再贅述,詳見請圖13、圖14。當循環(huán)到數(shù)組L時,樹A根節(jié)點的左孩子中的匹配次數(shù)標記字段值變?yōu)?,滿足UDPFlood攻擊的判定條件,轉第十步。對于數(shù)組Q如圖18,樹A當前節(jié)點中的匹配次數(shù)標記字段加1并判斷其值是否大于等于4,此時其值為4,等于4,滿足UDPFlood攻擊的判定條件,轉第十步;第九步對于數(shù)組G如圖12,樹A當前節(jié)點中的不匹配次數(shù)標記字段加1并判斷其值是否大于等于4,此時其值為1,小于4;注由于IP數(shù)據(jù)包H與IP數(shù)據(jù)包G源IP地址及類型相同并且IP數(shù)據(jù)包H中的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容與IP數(shù)據(jù)包C中的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容不能完全匹配,所以IP數(shù)據(jù)包H的操作流程與IP數(shù)據(jù)包G完全相同,在此不再贅述,詳見圖11、圖12;經(jīng)過這2次循環(huán)操作后,樹A根節(jié)點的右孩子中的不匹配次數(shù)標記字段值變?yōu)?,小于4,轉第十五步。對于數(shù)組0如圖16,樹A當前節(jié)點中的不匹配次數(shù)標記字段加1并判斷其值是否大于等于4,此時其值為3,小于4;注由于IP數(shù)據(jù)包P與IP數(shù)據(jù)包0源IP地址及類型相同并且IP數(shù)據(jù)包P中的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容與IP數(shù)據(jù)包C中的UDP數(shù)據(jù)包數(shù)據(jù)段內(nèi)容不能完全匹配,所以IP數(shù)據(jù)包P的操作流程與IP數(shù)據(jù)包0完全相同,在此不再贅述,詳見請圖15、圖16;當循環(huán)到數(shù)組P時,樹A根節(jié)點的右孩子中的不匹配次數(shù)標記字段值變?yōu)?,滿足非UDPFlood攻擊的判定條件,轉第十四步。第十步對于數(shù)組L如圖19,取樹A根節(jié)點的左孩子存儲的源IP地址,并設為IP1,檢查發(fā)現(xiàn)樹B的根節(jié)點為空,于是將IPl存入B樹的根節(jié)點,轉第十三步;對于數(shù)組Q如圖20,取樹A根節(jié)點的左孩子存儲的源IP地址,并設為IP2,檢查發(fā)現(xiàn)樹B的根節(jié)點不為空,于是將IP2與存入B樹的根節(jié)點的IP比較,發(fā)現(xiàn)IP2大,轉第十二步;第十一步與后面的第十二步相比,第十一步唯一不同點在于其訪問的是當前節(jié)點的左孩子,對其進行的查詢、創(chuàng)建或插入操作與第十二步完全相同,在此不再贅述,詳情請參照第十二步。第十二步對于數(shù)組Q如圖20,訪問B樹根節(jié)點的右孩子,發(fā)現(xiàn)其沒有右孩子,于是創(chuàng)建一個空節(jié)點作為右孩子,并將該右孩子設為當前節(jié)點;由于當前節(jié)點是為空,所以將IP2存入當前節(jié)點,轉第十三步;第十三步對于數(shù)組L,調(diào)用Linux操作系統(tǒng)防火墻程序iptables的訪問控制命令,過濾源IP地址為IPl的網(wǎng)絡數(shù)據(jù)包,此時Linux操作系統(tǒng)將會過濾所有源IP地址為IPl的網(wǎng)絡數(shù)據(jù)包,即IP數(shù)據(jù)包M、N將被丟棄,不做任何處理,轉第十四步;對于數(shù)組Q,調(diào)用Linux操作系統(tǒng)防火墻程序iptables的訪問控制命令,過濾源IP地址為IPl的網(wǎng)絡數(shù)據(jù)包,此時Linux操作系統(tǒng)將會過濾所有源IP地址為IPl的網(wǎng)絡數(shù)據(jù)包,即IP數(shù)據(jù)包S將被丟棄,不做任何處理,轉第十四步;第十四步對于數(shù)組L,清空樹A根節(jié)點的左孩子,轉第十五步;對于數(shù)組P,清空樹A根節(jié)點的右孩子,轉第十五步;對于數(shù)組Q,清空樹A根節(jié)點,結束;第十五步停止并跳出處理,轉第二步;至此,本例演示完畢,通過本發(fā)明的基于二叉樹檢測UDPFlood攻擊和防御方法,Linux操作系統(tǒng)已經(jīng)成功過濾來自源IP地址為192.168.1.100和192.168.1.101的UDPFlood攻擊。權利要求1.一種基于二叉樹檢測UDPFlood攻擊和防御的方法,其特征在于按如下步驟進行;第一步構建環(huán)境變量創(chuàng)建二叉樹A和二叉樹B,樹A用來存儲等待分析的UDP數(shù)據(jù)包,樹B用來存儲已被檢測出來的正在進行UDPFlood攻擊的主機IP,分別初始化樹A和樹B,使每個節(jié)點都為空,轉第二步;第二步判斷收到IP數(shù)據(jù)包是否為UDP數(shù)據(jù)包從網(wǎng)卡隊列中讀取一個IP數(shù)據(jù)包,基于Iibnids抓包,檢查其IP協(xié)議字段代號,若為17,則該數(shù)據(jù)包是UDP數(shù)據(jù)包,轉第三步;否則轉第十五步;第三步判斷UDP數(shù)據(jù)包是否為第一分片或者完整的UDP數(shù)據(jù)包檢查并判斷該IP數(shù)據(jù)包內(nèi)的分段偏移量字段的值是否為0,若為0,則該數(shù)據(jù)包為UDP數(shù)據(jù)包的第一分片或完整的UDP數(shù)據(jù)包,轉第四步;否則轉第十五步;第四步對IP數(shù)據(jù)包的源IP地址和其中的UDP數(shù)據(jù)包的數(shù)據(jù)部分進行預存儲首先,取IP數(shù)據(jù)包的源IP地址和其中的UDP數(shù)據(jù)包的數(shù)據(jù)部分,并設置兩個標記字段分別記錄匹配次數(shù)和不匹配次數(shù),初始化為0;分別存入一個字符數(shù)組Sl中,該數(shù)組大小為1500字節(jié);然后,檢查樹A的根節(jié)點是否為空,如果是,則將Sl存入該根節(jié)點,轉第十五步;如果不是,將Sl的源IP地址與樹A根節(jié)點中IP地址比較;若Sl的源IP地址小,轉第五步;若大,轉第六步;若相等,轉第七步;第五步訪問樹A當前節(jié)點的左孩子,若不存在,創(chuàng)建一個空節(jié)點作為左孩子,并將該左孩子設為當前節(jié)點;檢查該節(jié)點是否為空,如果是,則將Sl存入當前節(jié)點,轉第十五步;如果不是,將其中IP地址與Sl的源IP地址比較,若Sl的源IP地址小,轉第五步;若大,轉第六步;若相等,轉第七步;第六步訪問樹A當前節(jié)點的右孩子,若不存在,創(chuàng)建一個空節(jié)點作為右孩子,并將該右孩子設為當前節(jié)點;檢查該節(jié)點是否為空,如果是,則將Sl存入當前節(jié)點,轉第十五步;如果不是,將其中IP地址與Sl的源IP地址比較,若Sl的源IP地址小,轉第五步;若大,轉第六步;若相等,轉第七步;第七步將Sl內(nèi)UDP數(shù)據(jù)包的數(shù)據(jù)部分與樹A當前節(jié)點中的UDP數(shù)據(jù)包的數(shù)據(jù)部分進行匹配,若完全匹配,轉第八步;否則,轉第九步;第八步樹A當前節(jié)點中的匹配次數(shù)標記字段加1并判斷其值是否大于等于規(guī)定的數(shù)值4-8,如果是,則可判定IP地址為當前節(jié)點內(nèi)存儲的源IP地址的主機正在進行UDPFlood攻擊,轉第十步;否則,轉第十五步;第九步樹A當前節(jié)點中的不匹配次數(shù)標記字段加1并判斷其值是否大于等于規(guī)定的數(shù)值4-8,如果是,則可判定IP地址為當前節(jié)點內(nèi)存儲的源IP地址的主機沒有進行UDPFlood攻擊,轉第十四步;否則,轉第十五步;第十步取樹A當前節(jié)點存儲的源IP地址,檢查樹B的根節(jié)點存儲的內(nèi)容是否為空,如果是,則將此源IP地址存入B樹的根節(jié)點,轉第十三步;否則,將此源IP地址與B樹根節(jié)點存儲的IP地址進行比較;若源IP地址小,轉第十一步;若大,轉第十二步;若相等,轉第十四步;第十一步訪問B樹當前節(jié)點的左孩子,若不存在,創(chuàng)建一個空節(jié)點作為左孩子,并將該左孩子設為當前節(jié)點;檢查當前節(jié)點是否為空,如果是,則將此源IP地址存入當前節(jié)點,轉第十三步;否則,將此源IP地址與當前節(jié)點內(nèi)存儲的IP地址進行比較;若源IP地址小,轉第十一步;若大,轉第十二步;若相等,轉第十四步;第十二步訪問B樹當前節(jié)點的右孩子,若不存在,創(chuàng)建一個空節(jié)點作為右孩子,并將該右孩子設為當前節(jié)點;檢查當前節(jié)點是否為空,如果是,則將此源IP地址存入當前節(jié)點,轉第十三步;否則,將此源IP地址與當前節(jié)點內(nèi)存儲的IP地址進行比較;若源IP地址小,轉第十一步;若大,轉第十二步;若相等,轉第十四步;第十三步調(diào)用操作系統(tǒng)防火墻程序的過濾命令,過濾源IP地址為樹B當前節(jié)點內(nèi)存儲的IP地址的數(shù)據(jù)包;轉第十四步;第十四步清空樹A當前節(jié)點;轉第十五步;第十五步停止并跳出處理,轉第二步。全文摘要本發(fā)明涉及網(wǎng)絡安全
技術領域:
,具體涉及一種基于二叉樹檢測來判定UDPFlood攻擊和防御的方法,包括以下步驟1、構建二叉樹結構,對UDP數(shù)據(jù)包及相關信息進行存儲和查詢;2、對UDP數(shù)據(jù)包及其相關信息進行預存儲;3、查找二叉樹,對已存入二叉樹的信息與當前分析的信息進行循環(huán)比較,判定是否為UDPFlood攻擊;4、調(diào)用操作系統(tǒng)防火墻程序過濾發(fā)送UDPFlood的主機IP,拒絕接收數(shù)據(jù)包。本發(fā)明可以達到如下的有益效果對大型DDoS類型的UDPFlood攻擊采取基于二叉樹的循環(huán)檢測方式,通過二叉樹來預存儲UDP數(shù)據(jù)包和搜索二叉樹來匹配及循環(huán)檢測,檢測迅速高效,精確度很高,有著優(yōu)秀的防御效果。文檔編號H04L29/06GK102299901SQ20101020889公開日2011年12月28日申請日期2010年6月25日優(yōu)先權日2010年6月25日發(fā)明者唐歡容,李勇周,李宇,歐陽建權,王輝申請人:湘潭大學