摘 要: 在分析現有報文丟棄攻擊檢測算法的基礎上,提出了一種基于簇首協作的報文丟棄攻擊全局感知方案,利用IDS簇首協同監視節點報文收發狀態,改進現有算法的監測方式和節點狀態判定算法。仿真結果表明,該算法具有良好的檢測率和誤檢率,在規避網絡中的惡意節點以及維護網絡正常吞吐量等方面具有較好的性能。
關鍵詞: 移動自組織網絡;丟棄攻擊;惡意節點檢測;入侵檢測系統
移動自組織網絡MANET(Mobile Ad Hoc Networks)由眾多節點以自組織的方式組成,網絡中不存在中心控制節點,較遠距離節點間以多跳的方式進行通信。然而,在大規模無線自組織網絡中,部分節點為了保護自身較少的資源,可能不轉發其他節點請求轉發的數據包,產生自私節點問題[1],特別場景下(如戰爭環境)合法節點被攻陷后將成為惡意節點。
在數據報文傳輸過程中,自私節點和惡意節點可以故意隨機丟棄部分需要自身轉發的數據報文來對網絡通信實施破壞,這就是內部節點丟棄報文攻擊,它導致網絡吞吐率下降、報文重傳率增高,嚴重時會造成網絡報文傳輸無法進行。然而,由于無線自組織網絡中節點性質的不確定性,現有的適用于Ad Hoc網絡的路由協議無法應對這種在網絡層發起的攻擊。報文丟棄攻擊難以檢測和防范,嚴重影響到了無線自組織網絡的通信性能和實際應用。
目前,針對報文丟棄攻擊的研究多數集中在基于鄰居節點監測方法[2]對現有路由協議(如DSR)的改進,希望構造一個安全的路由協議或模型來抵抗攻擊。然而,鄰居節點監測算法本身存在一些局限性,此類方案增加了MANET網絡路由協議的復雜度,監測效果卻不理想。
本文在分析現有解決方案的基礎上,提出了一種基于簇首協作的報文丟棄攻擊全局感知算法,在MANET入侵檢測系統中利用分簇IDS的簇首節點協作進行全局監測。該方案將安全檢測從路由協議中獨立出來,由IDS來實現報文丟棄攻擊的檢測,簡化了Ad Hoc路由協議的設計,同時彌補了鄰居節點監測算法的不足,在報文丟棄攻擊的檢測率、誤報率和檢測響應速率方面有較好的性能。
1 鄰居節點檢測算法分析
1.1 報文丟棄攻擊相關研究
為對抗內部節點在網絡層發起的報文丟棄攻擊,MARTI S等人提出了Watchdog算法[3],節點在混雜模式下工作,當節點把報文轉發給下一跳節點后,利用無線信號暴露在空中的特性來監聽下一跳節點是否繼續轉發該報文。LEE S和CHOI Y采用了類似Watchdog的鄰居節點監測系統(NWS)來獲取鄰居節點的報文狀況,但是局部管理的方法增加了節點能量耗費,降低了網絡帶寬使用效率。參考文獻[4]中提出兩種不合作的節點形式,并提出用CCS中央控制系統給每個節點分配信用值,如果節點A為節點B轉發了到目的節點D數據報,則D要給A一些信用幣,哪個節點用完了信用,可以向CCS要求補充。由于每次都是目的節點支付信用幣,這就為DOS攻擊提供了方便。參考文獻[5]希望利用有限自動機構造自組網的入侵檢測算法,此方案能夠監測節點發送的報文,但在如何監測節點收到的報文方面沒有給出有效的解決方法。
1.2 鄰居節點監測算法介紹
上述研究大多以鄰居節點監測算法為基礎對節點的收發報文情況進行監聽,從而達到判斷入侵節點的目的。當一個節點轉發數據報時,鄰居監測系統會確認路由的下一跳節點是否轉發了該報文。鄰居監測系統監聽下一跳節點采取的行為,并依此判斷下一跳節點是否有惡意行為。
如圖1所示,假設S到D有通路,中間節點為A、B、C,節點A不能直接和C通信,但A可以監聽到B發送的報文。A可以辨認B是否轉發了報文。A緩存下剛發送的數據報,和監聽到的B轉發的數據報比較,看是否一致。如果一致,表明此數據報已經發送,A移除緩存的數據報,這一過程結束;如果不一致,表明B有篡改信息的惡意行為;如果數據報在緩存區保留的時間超過一個門限,則認為B沒有正常工作。對于后兩種情況,A會給這個沒有盡責的節點記過。如果B被記過的次數超過一個門限值,A確定此節點有惡意行為,它向源節點S發送路由出錯報文(RRER)通知B是惡意節點。在從A回到S節點過程中,路由到的節點都會記錄下B是惡意節點,在以后的路由選擇過程中會將B節點從路由鏈路中排除。
1.3 鄰居節點監測算法的缺陷
鄰居節點算法利用無線網絡信號暴露在空間中而且信號多向傳播的特性來實現對鄰居節點轉發數據報的監測,然而這種方法卻存在以下的局限性:
(1)鄰居監測系統需要每個節點監督其鄰居節點,并緩存有用的狀態信息,要求節點的存儲和計算功能得到加強。而且由于每個節點均被其所有鄰居節點監視,導致監測信息存在大量冗余,浪費了節點電池能量和計算資源。
(2)節點A只能孤立地監測其鄰居節點的轉發報文狀態,并根據自身的監測記錄判斷鄰居節點B是否有惡意丟包行為,不能綜合B的其他鄰居節點(如C)對節點B的監測結果。因此,這種判斷帶有很大的片面性,容易得出錯誤的監測結論。
(3)惡意節點可以把無辜節點作為惡意節點放在RRER數據報中,發送給源節點S,比如,節點A可以向S打虛假報告B沒有轉發報文,使S認為B是惡意節點,這個問題的發現就需要依賴消息正常發送到D,節點D反饋消息給S,則S會認為路由是正常的。如果在消息給B傳遞后未能到達目的節點D,或者D的反饋消息沒有正常到達A,則節點B就會被當作惡意節點,從而造成誤報,本文稱這種攻擊為虛假丟報文丟棄攻擊。
2 報文丟棄攻擊全局感知方案
2.1 分簇IDS
移動自組網的組網特點決定了相應的入侵檢測系統必須要采取分簇架構。分簇結構IDS典型層次如圖2所示,整個MANET系統以簇為單位分成多IDS簇,每個簇選出簇頭,IDS功能模塊按需要置于簇頭或簇成員節點上。
在鄰居節點檢測算法中,每個節點都監測其鄰居節點的行為,產生大量冗余監測信息,耗費了節點資源。本文提出基于簇首的監測模式,即整個網絡劃分為簇,每個區域選出一個簇頭作為監視節點,負責整個區域的入侵檢測。該簇頭收集整個區域內節點的行為信息,并按檢測算法進行分析,確定入侵行為。IDS簇首節點周期性地廣播告示報文,以維持簇首監測節點的地位。簇首節點服務時間到了后,就重新啟動一個新的選舉過程。為了保證公平和隨機性,防止惡意節點一直占據簇首位置,發動虛假報文丟棄攻擊,IDS分簇算法要求上一分簇周期的簇首節點將不能參加下一周期簇首節點的選舉,除非整個區域只有一個節點存在。
2.2 簇首節點協作實現監測節點報文收發狀態
不同于傳統有線網絡中的IDS,MANET中的簇首節點并不能像在有線網絡中那樣監測到節點的報文收發狀態。由于無線網絡的傳播特性,分簇結構IDS中的簇首節點只能監測到其簇成員節點發送的報文,而對于簇成員接收到的數據包只能部分監測到,因此,在應對報文丟棄攻擊之類的被動攻擊時顯得無能為力。圖2中,節點C、E為簇首,節點A、S為C的簇成員,節點B、D為E的簇成員。簇首節點E只能監測到節點B發送了數據包,如果節點A轉發給B一個數據包,并要求B轉發給D,如果節點B此時發動報文丟棄攻擊,這時,簇首節點E并不能監測到B接收了這樣一個數據包,因此,并不能發現B丟棄了應轉發給節點D的數據包。
為了解決這個缺陷,本文提出了基于簇首協作監測的方案,利用各簇首節點間相互通信協作檢測的方法實現對報文丟棄攻擊的檢測。圖2中,雖然節點E不能夠監測到B應該轉發一個數據包,但節點A在給B轉發數據包時,節點A的簇首節點C能夠監測到節點A給節點B轉發了數據包,并通過查詢數據包中下一跳路由信息得知B接收了這個數據報并應該轉發該數據包給D,如果E和C進行通信,交換彼此監測信息,節點B的簇首節點E就能夠借助和C交換的消息來全面監測節點B應發的數據報和已發數據報狀態。下面利用這一方法給出詳細解決方案。
2.3 基于簇首協作的報文丟棄攻擊全局感知方案
首先,為了監測節點收發報文狀態,各IDS簇首節點需要為網絡中所有節點維護一個數據結構,記錄各節點收到報文的數量和發送報文的數量。數據結構定義偽碼表示如下:
typedef struct {Long Receive; Long Send;} Record;其中,Record表示此數據結構,下文簡記為Recd;Send表示監聽到節點轉發一個數據報文;Receive表示根據監聽到的報文中的路由信息,該數據報文下一跳節點應該轉發此數據報文,其值為負,下文簡記為Rece。
假設S到D有通路,中間節點為A、B,此時節點S轉發數據報文到A,因為節點S處于簇首C的簇內,C能夠監聽到節點S轉發了一個數據報文,同時,從該數據報文路由信處表中查得一下跳地址為節點A,則執行操作S.Recd.Send+1和A.Recd.Rece-1,表示節點A需要轉發一個數據報文。如果節點A也正常轉發了該數據報文,其簇首節點C會監聽到該數據報文,執行操作A.Recd.Send+1和B.Recd.Rece-1。節點B并不在簇首C的監控范圍內,但如果節點B正常轉發此數據報文到節點D,則其簇首節點E會監聽到該數據報文并執行操作B.Recd.Send+1和C.Recd.Rece-1。
在MANET網絡中,各簇首節點在監測周期結束時多播Hello消息,彼此交換監測的簇內節點報文轉發狀態表,其中,服務周期的長短由系統根據需要設定。通過檢測算法就可以對網絡中是否存在報文攻擊及惡意節點號做出檢測。
2.4 報文丟棄攻擊全局感知算法詳細實現
設網絡中共有m個IDS簇頭,分別記為H1、H2、…、Hm。則經過一個Hello周期交換后,節點i應發送數據包數為-■Xk.I.Recd.Rece,已發送的報文總數為-■Xk.I.Recd.Rece。則節點i的報文轉發率可以表示為:
2.5 惡意丟棄報文節點判定
本方案采用狄克遜準則對惡意節點進行判定。狄克遜準則是通過極差比判定和剔除異常數據。與一般比較簡單的極差方法不同,該準則為了提高判斷效率,對不同的實驗量測定數應用不同的極差比進行計算。該準則認為異常數據應該是最大數據和最小數據,因此其基本方法是將數據按大小排隊,檢驗最大數據和最小數據是否是異常數據。
依式(4)分別計算各節點的Status值,從小到大排列為Status(1),≤Status(2),……≤Status(n),因為丟包率大的節點才有可能是惡意節點,所以這里舍棄最小值,僅取最大值,應用狄克遜準則進行節點類型進行判定。如果f0>f(n,α)就可以判定該值所對應節點為可疑節點。f(n,α)可以查表獲得,其中n是節點個數,α為檢驗水平,根據檢測精度需要可以取0.01或是0.05。fo的計算如下:
為防止惡意簇首節點發送虛假報文丟棄通告對正常節點進行攻擊,節點i連續在兩個系統監測周期內都被判定為可疑節點后,系統即判定該節點為惡意節點,發出告警并通過Hello消息廣播將該節點隔離出網絡后,重新進行報文丟棄惡意節點檢測。
如果簇首節點j在自己的監測周期內發動虛假報文丟棄攻擊,使正常節點i在該監測周期內被判定為可疑節點,但下一監測周期中,由于更改了IDS簇頭,節點i將不再被判定為可疑節點,則系統記錄節點j為可疑節點,認為j在自己的監測周期內可能發動了虛假報文丟棄攻擊,如果在節點j再次當選為IDS簇首周期內,再次有發送虛假報文丟棄攻擊嫌疑,則系統認為節點j為惡意節點,發出告警并通過Hello消息廣播將該節點隔離出網絡。
為便于算法實現,需要定義節點狀態數據結構:
tepydef struct{
Bool Drop;//上一監測周期節點狀態判定結果
Bool LastDrop;//上一監測周期節點狀態判定結果
Bool Cheat;//簇首節點虛假報文丟棄攻擊嫌疑
}Node;
算法偽碼表示如下:當系統一個監測周期結束后,對每個節點執行如下算法,設節點i的上一周期IDS簇首節點為j。
while(true)//系統按周期循環監測
{
if (node.Drop)//被判定為可疑報文丟棄節點
if(node.LastDrop)//上一周期也是可疑結點
{Alarm(node);//報警并隔離節點,
next;
}//進入下一周期
else node.LastDrop = true;//記錄node為可疑節點
else//node未被判定為可疑節點
if(i.LastDrop)//上一周期是可疑節點
if(j.Cheat)//如果j已是可疑節點
{Alarm(j);//報警并隔離節點j,
netxt;
}//進入下一周期
else
{ j.Cheat = true;//記錄j可疑節點
node.LastDrop = false;//節點node取消懷疑
}
}
3 實驗與性能分析
本文使用Qualnet[6]作為模擬仿真實驗平臺。在2 000×2 000的區域內隨機布置100個節點。仿真時間為1 000 s,節點使用Random Waypoint移動模型,以0~ 20 m/s的速度運動。通信模型采用CBR(Continuous Bit Rat)流,CBR流大小為512 B。每秒鐘發10個數據包, 從源節點到目的節點有不間斷的數據包發送,網絡層采用AODV路由協議,實驗中采用不同數量的惡意節點發動報文丟棄攻擊和虛假報文丟棄攻擊。影響仿真結果的因素很多,主要是環境的設置,如節點間發報的速率、節點移動速度、IDS簇首監測周期大小、節點活動的范圍。
評價算法性能的主要指標是惡意節點的檢測率和惡意節點的誤檢率。檢測率是指被檢測出來的惡意節點個數占網絡中實際的全部惡意節點個數的比例。誤檢率是指正常節點被誤檢為惡意節點的個數占整個網絡中正常節點的比例。對檢測率和誤檢率各做10次實驗,然后取平均值。
圖4表示了不同惡意節點數量下,全局感知算法的檢測率。無論是否存在虛假報文丟棄攻擊,算法對惡意節點的檢測率均隨著惡意節點在網絡中所占比例的增加有所下降,因為惡意節點的增加導致了網絡中節點報文轉發率的異常數據增多,干擾了統計分析過程。圖5表示了不同惡意節點數量下,全局感知算法對惡意節點的誤測率。從圖5可以看出,無論是否存在虛假報文丟棄攻擊,算法的誤檢率都較低,雖然隨惡意節點數量的增大而有小幅上升,但最高不超過3%。
實驗表明,本文算法的惡意節點檢測率和誤檢率性能良好。在惡意節點所占比例較低的情況下,檢測率接近100%,誤檢率接近0%。隨著惡意節點所占比例的提高和惡意節點發送虛假的鄰居節點報文轉發率信息,惡意節點的檢測率有所下降,但仍保持在90%以上;誤檢率有所上升,但仍保持在3%范圍內。
惡意簇首節點發送虛假的簇內節點,節點報文轉發率信息對檢測率造成了一定的影響,這主要是由于實驗時指定的惡意節點并不一定會被選舉為簇首。本算法對于發送虛假報文丟棄攻擊,需要在節點兩次當選為監測簇首才做出判定,但這并不會影響網絡的性能。因為算法是基于簇結構的,惡意節點只有連續兩次當選簇首才能對一個正常節點發動虛假報文誣陷攻擊,而算法在成簇階段已經阻止了此類攻擊發生,所以節點無法發動虛假報文丟棄攻擊,因此表現為檢測率降低。在虛假報文丟棄攻擊惡意節點比例較高的情況下,檢測率平均降低了2%左右。
本文分析了現有依據鄰居節點檢測算法對報文丟棄攻擊和虛假報文丟棄攻擊進行檢測算法存在的不足,在此基礎上,設計了一種基于簇首協作的報文丟棄攻擊全局感知算法。仿真實驗表明,該算法通過對報文丟棄攻擊節點進行全局監測,減輕了網絡各節點資源和網絡帶寬的消耗;利用狄克遜準則進行惡意節點判定,提高了報文丟棄攻擊的檢測精確度;同時,由于使用了基于簇首的監測方式,惡意節點在作為簇成員的時候無法發動虛假報文丟棄攻擊,很大程度上抑制了虛擬報文丟棄攻擊在網絡中發生的頻率。由于算法基于全局監測周期進行消息交換,在周期結束的時候進行惡意節點的檢測,因此,在提高入侵檢測響應速率和改進Hello消息傳播方式節省網絡帶寬方面需要進一步優化。
參考文獻
[1] PAUL K, WESTHOFF D. Context aware detection of selfish Nodes in DSR based Ad hoc networks[C]. IEEE Global Telecommunications Conference, 2002: 178-182.
[2] LEE S, CHOI Y. A resilient packet-forwarding scheme against maliciously packet-dropping nodes in sensor networks[C]. Proceedings of the 4th ACM Workshop on Security of Ad Hoc and Sensor Networks (SASN’06). Alexandria, USA, 2006:59-70.
[3] MARTI S, GIULI T, LAI K, et al. Mitigating routing misbehavior in mobile Ad Hoc networks[C]. Proceedings of the 6th International Conference on Mobile Computing and Networking (Mobicom’00). Boston, USA, 2000: 255-265.
[4] ZHONG S, CHEN J, YANG Y R. Sprite: a simple cheat-proof credit-Based system for mobile ad hoc networks[C]. INFOCOM 2003, twenty Second Annual Joint Conference of the IEEE Computer and Communications. San Francisco, CA, USA, April, 2003:1987-1997.
[5] 王芳,易平,吳越,等.基于規范的移動Ad Hoc網絡分布式入侵檢測[J].計算機科學,2010,37(10):118-122.
[6] JAIKAEO C, SHEN C C. Qualnet Tutorial[R]. Scalable Network Technologies, University of Delaware, 2007:21-46.