陳雪雁,章志明,楊 偉,李 萍,熊小勇
江西師范大學(xué) 軟件學(xué)院,南昌330022
隨著無線傳感器網(wǎng)絡(luò)(wireless sensor networks,WSNs)不斷廣泛應(yīng)用于軍事、環(huán)境監(jiān)測、交通、農(nóng)業(yè)、醫(yī)療和家居等領(lǐng)域,其安全問題一直以來都是研究熱點。由于WSNs 是由大量傳感器節(jié)點以無線、多跳的方式構(gòu)建而成,并且傳感器節(jié)點受計算、存儲和通信的限制,很容易受到許多內(nèi)、外部攻擊,其中選擇性轉(zhuǎn)發(fā)攻擊是危害最嚴重的一種內(nèi)部攻擊,并且由于無線信道的不穩(wěn)定性,網(wǎng)絡(luò)鏈路的正常丟包和由選擇性轉(zhuǎn)發(fā)攻擊造成的惡意丟包很難區(qū)分,具有很強的隱蔽性。因此,檢測、定位和隔離發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點至關(guān)重要。
近年來國內(nèi)外學(xué)者提出了一些有效的選擇性轉(zhuǎn)發(fā)攻擊檢測方案。文獻[4-8]基于多跳確認提出一組選擇性轉(zhuǎn)發(fā)攻擊檢測方案,基于多跳確認的檢測方案需要傳輸大量的確認包,從而會造成很高的通信開銷,大大降低網(wǎng)絡(luò)壽命。文獻[9-13]提出了一組基于信任評估檢測方案,基于信任評估檢測方案能有效檢測出網(wǎng)絡(luò)中一個或多個惡意節(jié)點,但是大多數(shù)檢測方案的信任閾值是靜態(tài)的,正常節(jié)點被誤判為惡意節(jié)點的誤檢率較高,并且需要較多的監(jiān)聽節(jié)點,大大增加了網(wǎng)絡(luò)的開銷。文獻[14-18]基于學(xué)習(xí)自動機提出了一組惡意節(jié)點檢測方案,但文獻[14-15]對不產(chǎn)生惡意數(shù)據(jù)包的選擇性轉(zhuǎn)發(fā)攻擊檢測效果不佳,為了能有效檢測出選擇性轉(zhuǎn)發(fā)攻擊,文獻[16-17]提出兩種異常節(jié)點檢測方案,但這兩種方案的學(xué)習(xí)自動機的獎懲參數(shù)是人為根據(jù)節(jié)點鄰居投票情況設(shè)定的固定值,檢測方法靈活性差。為了解決這個問題,文獻[18]提出一種可以動態(tài)調(diào)整學(xué)習(xí)自動機的獎懲參數(shù)的檢測方案,提高了檢測方法的靈活性和適用性,但該方案需要通過鄰居節(jié)點回復(fù)的確認包的數(shù)量來確定環(huán)境對學(xué)習(xí)自動機的反饋,消耗了大量的網(wǎng)絡(luò)資源。
基于上述考慮,本文提出一種輕量級的無線傳感器網(wǎng)絡(luò)選擇性轉(zhuǎn)發(fā)攻擊檢測方案(lightweight selective forwarding attack detection scheme for wireless sensor networks,LSFAD)。LSFAD 方案是基于這樣一個重要的觀察:當一條路徑上存在惡意節(jié)點發(fā)起選擇性轉(zhuǎn)發(fā)攻擊時,基站(base station,BS)收到源節(jié)點通過這條路徑轉(zhuǎn)發(fā)的數(shù)據(jù)包個數(shù)要遠遠少于源節(jié)點通過正常路徑轉(zhuǎn)發(fā)的數(shù)據(jù)包個數(shù)?;谶@樣的觀察,基站記錄每個源節(jié)點發(fā)送的數(shù)據(jù)包總個數(shù)以及這些數(shù)據(jù)包轉(zhuǎn)發(fā)的路由路徑,并計算路徑的平均丟包率和路徑的正常丟包率,如果路徑的平均丟包率大于路徑的正常丟包率,則表示當前路徑存在選擇性轉(zhuǎn)發(fā)攻擊。為了定位到路徑上發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點或惡意鏈路,路徑上每個中間轉(zhuǎn)發(fā)節(jié)點都存儲轉(zhuǎn)發(fā)源節(jié)點發(fā)送給基站的數(shù)據(jù)包的個數(shù),當確定某條路徑存在選擇性轉(zhuǎn)發(fā)攻擊,基站將通知路徑上的每個節(jié)點發(fā)送轉(zhuǎn)發(fā)了源節(jié)點的數(shù)據(jù)包的個數(shù)給基站,然后基站依次從源節(jié)點開始根據(jù)每個中間轉(zhuǎn)發(fā)節(jié)點轉(zhuǎn)發(fā)的數(shù)據(jù)包的個數(shù)計算每個節(jié)點的平均丟包率和正常丟包率,平均丟包率大于正常丟包率的節(jié)點和前一個節(jié)點組成的鏈路就是惡意鏈路。
LSFAD 方案設(shè)計簡單,不需要任何監(jiān)聽節(jié)點,不需要任何復(fù)雜的評估模型評估計算節(jié)點信任值,計算復(fù)雜度低,易于實現(xiàn),且在正常的數(shù)據(jù)包收發(fā)過程中進行惡意路徑的檢測,不會影響整個網(wǎng)絡(luò)的正常工作。LSFAD 方案能抵抗惡意節(jié)點發(fā)起的被動選擇性轉(zhuǎn)發(fā)攻擊和主動選擇性轉(zhuǎn)發(fā)攻擊。性能分析表明,LSFAD 方案的通信開銷遠遠小于其他方案。實驗仿真結(jié)果表明,LSFAD 方案即使當鏈路的正常丟包率為0.125,選擇性轉(zhuǎn)發(fā)攻擊路徑都能被檢測到,當鏈路正常丟包率大于0.025,發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點都能被成功檢測定位到,并且網(wǎng)絡(luò)在檢測定位惡意節(jié)點的狀態(tài)下消耗的能量與正常情況下消耗的能量相差不大。
目前國內(nèi)外學(xué)者提出的選擇性轉(zhuǎn)發(fā)攻擊檢測方案大體可分為基于多跳確認模型方案、基于信任評估模型方案和基于學(xué)習(xí)自動機方案。
Balakrishnan 等人基于確認節(jié)點提出一種兩跳確認檢測方案,因為在該方案中,每個節(jié)點都是確認節(jié)點,節(jié)點每收到一個數(shù)據(jù)包,就向離它兩跳的節(jié)點發(fā)送一個確認包,這會大大增加網(wǎng)絡(luò)消息的沖突和碰撞。為了解決這個問題,Xiao 等人提出一種多跳確認檢測方案,雖然該方案能大大減少網(wǎng)絡(luò)消息的沖突和碰撞,但如果該方案中存在兩個或兩個以上的惡意節(jié)點被選為確認節(jié)點,這些惡意節(jié)點合謀,將使得該方案失效。為了解決這個問題,Liu 等人提出一種新的基于多跳確認機制的方案(per-hop acknowledgement-based scheme,PHACK),在PHACK方案中,轉(zhuǎn)發(fā)路徑上的每個節(jié)點除了轉(zhuǎn)發(fā)正常數(shù)據(jù)包外,為了檢測定位到惡意節(jié)點,還需要為轉(zhuǎn)發(fā)的每個數(shù)據(jù)包產(chǎn)生一個確認數(shù)據(jù)包,并沿不同路徑發(fā)送給源節(jié)點。為了降低網(wǎng)絡(luò)開銷,并提高多惡意節(jié)點檢測率,Yin 等人結(jié)合多跳確認和信任評估模型,提出了一種選擇性轉(zhuǎn)發(fā)攻擊檢測方案,該方案提高了路徑上多惡意節(jié)點檢測率,并有效地節(jié)約了網(wǎng)絡(luò)開銷。Shakshuki 等人還提出一種基于無線自組織網(wǎng)絡(luò)的選擇性轉(zhuǎn)發(fā)攻擊檢測方案,該方案采用逐跳確認機制和改進的兩跳確認機制來檢測選擇性轉(zhuǎn)發(fā)行為以降低資源開銷。在此過程中,確認包通過原來的數(shù)據(jù)轉(zhuǎn)發(fā)路徑回傳給源節(jié)點。
Xiao 等人基于高斯分布提出一種傳感器網(wǎng)絡(luò)信譽模型,雖然該模型只需要確定一個信任閾值,但是該信任閾值是靜態(tài)的,正常節(jié)點被判定為惡意節(jié)點的誤判率較高。Zhou 等人基于貝葉斯和熵提出一種改進的信任評估模型,該模型在一定程度上克服了主觀分配權(quán)重帶來的局限性,但是靜態(tài)信譽值的問題并未解決。Cho 等人基于改進的Beta 和熵信任模型提出一種選擇性轉(zhuǎn)發(fā)攻擊檢測方案,該方案分成兩個階段,首先通過改進的Beta 分布和熵信任模型檢測選擇性轉(zhuǎn)發(fā)攻擊,一旦檢測定位到惡意節(jié)點,該方案使用兩種規(guī)避策略把數(shù)據(jù)包從被丟棄的位置重新發(fā)送給基站。Liao 等人提出一種基于混合策略監(jiān)聽-轉(zhuǎn)發(fā)博弈檢測方案來檢測選擇性轉(zhuǎn)發(fā)攻擊,該方案能有效緩解無線傳感器網(wǎng)絡(luò)中的選擇性轉(zhuǎn)發(fā)攻擊,并具有較少的能量消耗。Zhou 等人結(jié)合鄰居節(jié)點監(jiān)聽和看門狗機制提出一種基于分簇的選擇性轉(zhuǎn)發(fā)攻擊檢測方案,雖然該方案能夠迅速準確定位惡意節(jié)點,但監(jiān)督節(jié)點職責(zé)過重。
Misra 等人基于學(xué)習(xí)自動機提出兩種無線傳感器網(wǎng)絡(luò)入侵檢測方案,由于這兩種方案不是檢測節(jié)點的惡意行為,雖然對惡意數(shù)據(jù)包的檢測非常有效,但對不產(chǎn)生惡意數(shù)據(jù)包的選擇性轉(zhuǎn)發(fā)攻擊檢測效果不佳。為了能有效檢測出選擇性轉(zhuǎn)發(fā)攻擊,F(xiàn)athinavid 等人基于學(xué)習(xí)自動機提出兩種異常節(jié)點檢測方案(CADLA 和CLAIDS),在這兩種檢測方案中,可疑節(jié)點的閾值是通過轉(zhuǎn)發(fā)節(jié)點的穩(wěn)定性和能量水平來確定。雖然這兩種方案都能檢測出選擇性轉(zhuǎn)發(fā)攻擊,但在初始化學(xué)習(xí)自動機行動概率時,只考慮了當時節(jié)點能量剩余的大小,這可能會導(dǎo)致路由錯誤,使得數(shù)據(jù)包無法達到簇頭節(jié)點;并且學(xué)習(xí)自動機的獎懲參數(shù)是人為設(shè)定的一個固定值,檢測方法靈活性差。為了解決這些問題,Zhang提出一種基于學(xué)習(xí)自動機和通信質(zhì)量的選擇性轉(zhuǎn)發(fā)攻擊檢測方案(selective forwarding attack detection method based on adaptive learning automaton and communication quality,DSFLACQ),在DSFLACQ 方案中,學(xué)習(xí)自動機行動概率初始化考慮了無線信道的正常丟包情況,節(jié)點的綜合通信質(zhì)量是采用滑動時間窗口來衡量的,并且學(xué)習(xí)自動機的獎懲參數(shù)可以動態(tài)調(diào)整,提高了檢測方法的靈活性和適用性。
整個傳感器網(wǎng)絡(luò)由基站(base station,BS)、普通節(jié)點和惡意節(jié)點組成。每個節(jié)點在部署之前都被分配一個獨一無二的身份標記ID,分配一個與BS共享的對稱密鑰K。假設(shè)在網(wǎng)絡(luò)被部署到目標區(qū)域后,所有節(jié)點都不再移動,并且以BS 為根,所有節(jié)點形成一棵樹形結(jié)構(gòu),隨著網(wǎng)絡(luò)運行,可能一些節(jié)點由于電池耗盡而死亡,從而引起網(wǎng)絡(luò)路徑發(fā)生變化,因此每隔一段時間,BS 將及時更新整個網(wǎng)絡(luò)的拓撲結(jié)構(gòu)。當節(jié)點感知到數(shù)據(jù)后,將通過多跳的方式把數(shù)據(jù)發(fā)送給BS,在數(shù)據(jù)包從源節(jié)點發(fā)送給BS 的過程中,每個中間轉(zhuǎn)發(fā)節(jié)點將記錄它轉(zhuǎn)發(fā)了源節(jié)點發(fā)送的數(shù)據(jù)包個數(shù),BS 將記錄每個源節(jié)點發(fā)送的數(shù)據(jù)包總個數(shù)以及這些數(shù)據(jù)包轉(zhuǎn)發(fā)的路由路徑。在數(shù)據(jù)包的轉(zhuǎn)發(fā)路徑上,不僅路徑上的惡意節(jié)點會以一定的概率丟棄它應(yīng)該轉(zhuǎn)發(fā)的數(shù)據(jù)包,而且因為物理層無線信道的不穩(wěn)定性和MAC(media access control)層數(shù)據(jù)包沖突,任意兩個中間轉(zhuǎn)發(fā)節(jié)點的通信鏈路也可能會正常丟棄數(shù)據(jù)包。國內(nèi)外學(xué)者對于傳感數(shù)據(jù)的產(chǎn)生、融合已經(jīng)提出了許多方案,本文在此不作詳細描述,本文主要關(guān)注如何檢測選擇性轉(zhuǎn)發(fā)攻擊路徑以及定位發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點或惡意鏈路。本文假設(shè)基站的計算、存儲和通信能力都不受限制,并且假設(shè)敵人只能俘獲普通傳感節(jié)點,而不能俘獲基站。為了方便閱讀和說明,表1 對本文所用到的符號進行了描述。
表1 符號定義表Table 1 Notation definition table
假設(shè)在網(wǎng)絡(luò)中,除了基站外,其他任何節(jié)點都可能被敵人捕獲,一旦被捕獲,這些節(jié)點將成為惡意節(jié)點,敵人將得到其中的身份、密鑰等安全信息,并利用這些節(jié)點發(fā)起一系列攻擊,如注入虛假數(shù)據(jù)攻擊、蟲洞攻擊、克隆攻擊、女巫攻擊和選擇性轉(zhuǎn)發(fā)攻擊等,在本文中,只考慮惡意節(jié)點發(fā)起的選擇性轉(zhuǎn)發(fā)攻擊。選擇性轉(zhuǎn)發(fā)攻擊可分為被動選擇性轉(zhuǎn)發(fā)攻擊和主動選擇性轉(zhuǎn)發(fā)攻擊。被動選擇性轉(zhuǎn)發(fā)攻擊是指惡意節(jié)點只以一定的概率丟棄正常的數(shù)據(jù)包而忽略網(wǎng)絡(luò)中的選擇性轉(zhuǎn)發(fā)攻擊檢測行為。而主動選擇性轉(zhuǎn)發(fā)攻擊不僅以一定的概率丟掉正常的數(shù)據(jù)包,而且為了躲避被檢測而干擾選擇性轉(zhuǎn)發(fā)攻擊檢測行為。
本文提出的LSFAD 方案的安全目標是能抵抗惡意節(jié)點發(fā)起的被動選擇性轉(zhuǎn)發(fā)攻擊和主動選擇性轉(zhuǎn)發(fā)攻擊。
本文提出的LSFAD 方案具體分為源節(jié)點產(chǎn)生數(shù)據(jù)包、中間節(jié)點轉(zhuǎn)發(fā)數(shù)據(jù)包、基站檢測選擇性轉(zhuǎn)發(fā)攻擊路徑以及定位惡意節(jié)點四個步驟。
當源節(jié)點想要發(fā)送傳感數(shù)據(jù)給BS,在生成完數(shù)據(jù)包后,它將在數(shù)據(jù)包上創(chuàng)建兩個字段分別用于存儲數(shù)據(jù)包源節(jié)點的唯一身份標記和當前數(shù)據(jù)包的序列號。然后,節(jié)點把自己的身份標記ID和數(shù)據(jù)包序列號_Number存入相應(yīng)的字段,其中數(shù)據(jù)包的序列號是連續(xù)的,最后把數(shù)據(jù)包發(fā)送給下一個中間轉(zhuǎn)發(fā)節(jié)點。
所有中間轉(zhuǎn)發(fā)節(jié)點都維護一張數(shù)據(jù)包源節(jié)點轉(zhuǎn)發(fā)表(data forward table,DFT),如表2 所示,其中Source_ID 字段表示源節(jié)點身份標識,F(xiàn)orWord_Count字段表示轉(zhuǎn)發(fā)源節(jié)點的數(shù)據(jù)包個數(shù)。
表2 數(shù)據(jù)包轉(zhuǎn)發(fā)表Table 2 Data forward table
當中間轉(zhuǎn)發(fā)節(jié)點收到一個數(shù)據(jù)包后,它首先在自己的數(shù)據(jù)轉(zhuǎn)發(fā)表DFT 中查找是否存在源節(jié)點身份標識為.ID的記錄,如果沒有,則在數(shù)據(jù)轉(zhuǎn)發(fā)表DFT 中創(chuàng)建一條新的記錄,使._=.ID,._=1;如果存在,則使對應(yīng)記錄的_字段值加1,使._=._+1,然后把數(shù)據(jù)包轉(zhuǎn)發(fā)給下一個中間轉(zhuǎn)發(fā)節(jié)點。
基站維護一張數(shù)據(jù)包源節(jié)點發(fā)送表(data send table,DST),如表3 所示,其中Source_ID 字段表示源節(jié)點身份標識,Path_Array 字段存儲源節(jié)點到基站所經(jīng)過的中間節(jié)點身份標記的數(shù)組,Seq_Number 字段表示基站收到源節(jié)點發(fā)送的最后一個數(shù)據(jù)包的序列號,Sum_Count字段存儲基站收到源節(jié)點發(fā)送的數(shù)據(jù)包總個數(shù),Drop_Count 字段存儲源節(jié)點發(fā)送給基站丟失的數(shù)據(jù)包個數(shù)。在基站收集整個網(wǎng)絡(luò)的拓撲結(jié)構(gòu)后,把所有源節(jié)點的身份標識以及該源節(jié)點到基站所經(jīng)過的中間節(jié)點身份標記分別依次存入._和._字段,其他字段初始化為空。如果網(wǎng)絡(luò)的拓撲結(jié)構(gòu)發(fā)生改變,如某個節(jié)點由于電池耗盡而死亡,則可能使一些源節(jié)點到基站的路徑發(fā)生改變,基站將及時更新網(wǎng)絡(luò)的拓撲結(jié)構(gòu),修改數(shù)據(jù)包發(fā)送表DST 的Path_Array 字段。
表3 數(shù)據(jù)包發(fā)送表Table 3 Data send table
當基站收到一個數(shù)據(jù)包,將執(zhí)行算法1 檢測選擇性轉(zhuǎn)發(fā)攻擊路徑。它首先在數(shù)據(jù)包發(fā)送表DST中查找到源節(jié)點身份標識為.ID的記錄,如果Seq_Number 字段為空,表示是第一次收到該源節(jié)點發(fā)送的數(shù)據(jù)包,它將使._=._Number,._=1,._=0,如果Seq_Number 字段不為空,則比較上一次收到的數(shù)據(jù)包序列號與當前收到的數(shù)據(jù)包序列號是否連續(xù),如果連續(xù),則表示沒有丟包,它將更新._和._字段的值,使._=._Number,._=._+1;如果數(shù)據(jù)包序列號不連續(xù),則表示有丟包,它將使._=._Number,._=._+1,._=._+(._Number-._-1),其 中,._Number-._-1 表示丟失的數(shù)據(jù)包個數(shù),然后基站按式(1)計算當前路徑的平均丟包率,按式(2)計算當前路徑的正常丟包率。如果平均丟包率大于正常丟包率,則表示當前路徑上存在選擇性轉(zhuǎn)發(fā)攻擊,基站將執(zhí)行3.4 節(jié)的算法2 來定位惡意節(jié)點。其中,式(1)中的._+._表示源節(jié)點發(fā)送的總數(shù)據(jù)包個數(shù),._表示當前路徑總的丟包個數(shù),式(2)中的表示一個節(jié)點與前一個節(jié)點之間鏈路的正常丟包率,表示源節(jié)點到基站的路徑長度。
選擇性轉(zhuǎn)發(fā)攻擊路徑檢測
輸入:數(shù)據(jù)包,數(shù)據(jù)包發(fā)送表DST,節(jié)點之間鏈路的正常丟包率。
輸出:選擇性轉(zhuǎn)發(fā)攻擊路徑。
當基站發(fā)現(xiàn)路徑._Array存在選擇性轉(zhuǎn)發(fā)攻擊,假設(shè)路徑._Array從源節(jié)點到BS 共有跳,用(,,…,n,BS)表示,其中表示數(shù)據(jù)包源節(jié)點,其余節(jié)點表示路徑上的中間轉(zhuǎn)發(fā)節(jié)點。基站首先通知路徑上的每個節(jié)點從源節(jié)點開始依次沿路徑按式(3)的數(shù)據(jù)格式把數(shù)據(jù)轉(zhuǎn)發(fā)表DFT 中轉(zhuǎn)發(fā)了源節(jié)點的數(shù)據(jù)包個數(shù)發(fā)送給基站。式(3)中的ID表示節(jié)點n的身份標識,n.._表示節(jié)點n轉(zhuǎn)發(fā)了源節(jié)點的數(shù)據(jù)包個數(shù),p表示前一跳節(jié)點n發(fā)送的數(shù)據(jù)包,表示時間戳,||表示連接操作。
基站收到應(yīng)答數(shù)據(jù)包p后,它將執(zhí)行算法2 定位惡意節(jié)點。它首先從后往前,依次用與節(jié)點共享的對稱密鑰K解密p取出節(jié)點轉(zhuǎn)發(fā)了源節(jié)點的數(shù)據(jù)包總數(shù)n.._,然后從轉(zhuǎn)發(fā)源節(jié)點數(shù)據(jù)包的第一個節(jié)點開始分別根據(jù)式(4)和式(5)計算每個節(jié)點的平均丟包率和正常丟包率,平均丟包率大于正常丟包率的節(jié)點和前一個節(jié)點組成的鏈路就是惡意鏈路,基站將把這條鏈路從網(wǎng)絡(luò)中隔離,并通知其他節(jié)點。式(4)中的._+._表示源節(jié)點發(fā)送的總數(shù)據(jù)包個數(shù),._+._-n.._表示當前節(jié)點n的丟包個數(shù),式(5)中的表示一個節(jié)點與前一個節(jié)點之間鏈路的正常丟包率,-1 表示源節(jié)點到節(jié)點n的路徑長度。
惡意節(jié)點定位
輸入:._,BS 收到的應(yīng)答數(shù)據(jù)包p,數(shù)據(jù)包發(fā)送表DST,節(jié)點之間鏈路的正常丟包率。
輸出:發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點或惡意鏈路。
在本文提出的LSFAD 方案中,惡意節(jié)點發(fā)起的選擇性轉(zhuǎn)發(fā)攻擊可以是被動選擇性轉(zhuǎn)發(fā)攻擊或主動性選擇性轉(zhuǎn)發(fā)攻擊。被動選擇性轉(zhuǎn)發(fā)攻擊只以一定的概率丟棄正常的數(shù)據(jù)包,而主動選擇性轉(zhuǎn)發(fā)攻擊不僅以一定的概率丟掉正常的數(shù)據(jù)包,惡意節(jié)點可能通過修改、刪除前一個節(jié)點發(fā)送給BS 的應(yīng)答數(shù)據(jù)包p,或不發(fā)送自己轉(zhuǎn)發(fā)源節(jié)點的數(shù)據(jù)包個數(shù)給BS,從而躲避、干擾或破壞BS 執(zhí)行惡意節(jié)點的檢測。本章將討論本文提出的LSFAD 方案如何抵抗惡意節(jié)點發(fā)起的這兩種攻擊。
如果惡意節(jié)點只發(fā)起被動選擇性轉(zhuǎn)發(fā)攻擊,當BS 發(fā)現(xiàn)有惡意路徑時,BS 首先通知路徑上的每個節(jié)點從源節(jié)點開始依次沿路徑按式(3)的數(shù)據(jù)格式把數(shù)據(jù)轉(zhuǎn)發(fā)表DFT 中轉(zhuǎn)發(fā)了源節(jié)點的數(shù)據(jù)包個數(shù)發(fā)送給基站BS,根據(jù)惡意節(jié)點定位算法2,BS 將能正確定位到惡意節(jié)點。
為了破壞BS 執(zhí)行惡意節(jié)點的檢測,當BS 通知路徑上的每個節(jié)點依次沿路徑按式(3)的數(shù)據(jù)格式把轉(zhuǎn)發(fā)了源節(jié)點的數(shù)據(jù)包個數(shù)發(fā)送給基站BS 時,惡意節(jié)點n可以執(zhí)行以下操作:(1)試圖修改上一個節(jié)點發(fā)送給它的應(yīng)答數(shù)據(jù)包p中的數(shù)據(jù)信息,但數(shù)據(jù)包p是用節(jié)點n與BS 共享的對稱密鑰對時間戳、p和節(jié)點n的身份標識及轉(zhuǎn)發(fā)了源節(jié)點的數(shù)據(jù)包個數(shù)等信息進行加密而形成的密鑰鏈,即p=E(ID||n.._||p||),因為惡意節(jié)點n沒有節(jié)點n與BS 共享的對稱密鑰K,所以它修改不了上一個節(jié)點發(fā)送給它的應(yīng)答數(shù)據(jù)包p中的信息。(2)試圖刪除上一個節(jié)點發(fā)送給它的應(yīng)答數(shù)據(jù)包p中的數(shù)據(jù)信息,同樣因為惡意節(jié)點n沒有節(jié)點n與BS 共享的對稱密鑰K,所以它刪除不了上一個節(jié)點發(fā)送給它的應(yīng)答數(shù)據(jù)包p中的數(shù)據(jù)信息。(3)試圖不發(fā)送自己轉(zhuǎn)發(fā)源節(jié)點的數(shù)據(jù)包個數(shù)給BS,即直接把收到的上一個節(jié)點的應(yīng)答數(shù)據(jù)包p轉(zhuǎn)發(fā)給它的下一個節(jié)點n,在這種情況下,根據(jù)算法2,當BS 用與惡意節(jié)點n共享的對稱密鑰K試圖解密應(yīng)答數(shù)據(jù)包p時,由于惡意節(jié)點沒有發(fā)送應(yīng)答數(shù)據(jù)包,不能正確解密出應(yīng)答數(shù)據(jù)包p,因此可以確定節(jié)點n就是惡意節(jié)點。(4)試圖發(fā)送一個虛假的數(shù)據(jù)給BS,試圖干擾惡意節(jié)點的檢測。比如,惡意節(jié)點發(fā)送一個遠遠小于實際轉(zhuǎn)發(fā)了源節(jié)點數(shù)據(jù)包個數(shù)的值給BS,根據(jù)惡意節(jié)點定位算法2,BS 能正確定位到惡意節(jié)點和它前一個節(jié)點組成的惡意鏈路;同樣,惡意節(jié)點也可以發(fā)送一個遠遠大于實際轉(zhuǎn)發(fā)了源節(jié)點數(shù)據(jù)包個數(shù)的值給BS,根據(jù)惡意節(jié)點定位算法2,BS 能正確定位到惡意節(jié)點和它后一個節(jié)點組成的惡意鏈路。
綜上所述,本文提出的LSFAD 方案能抵抗惡意節(jié)點發(fā)起的被動選擇性轉(zhuǎn)發(fā)攻擊和主動選擇性轉(zhuǎn)發(fā)攻擊。
本文將從通信開銷和存儲開銷等方面對本文提出的LSFAD方案與文獻[6,17-18]提出的方案進行分析比較,并對選擇性轉(zhuǎn)發(fā)攻擊路徑檢測概率進行分析。由于本文方案假設(shè)基站的計算、存儲和通信能力都不受限制,在此不討論基站的通信開銷和存儲開銷。
本文分析由惡意節(jié)點檢測造成的通信開銷,并把每個節(jié)點需要轉(zhuǎn)發(fā)或發(fā)送的數(shù)據(jù)包數(shù)量作為衡量通信開銷的指標。文獻[6]提出的PHACK 方案是基于多跳確認的檢測方法,轉(zhuǎn)發(fā)路徑上的每個節(jié)點除了轉(zhuǎn)發(fā)正常數(shù)據(jù)包外,為了檢測定位到惡意節(jié)點,還需要為轉(zhuǎn)發(fā)的每個數(shù)據(jù)包產(chǎn)生一個確認數(shù)據(jù)包,并沿不同路徑發(fā)回給源節(jié)點,假設(shè)一個源節(jié)點一次發(fā)送個數(shù)據(jù)包,在PHACK 方案中,每個節(jié)點的通信開銷為2。在文獻[17]提出的CLAIDS 方案中,假設(shè)每個節(jié)點有個鄰居節(jié)點,一個節(jié)點給它的每個鄰居節(jié)點發(fā)送個數(shù)據(jù)包,則它的每個鄰居節(jié)點需要返回個確認包,因此,在CLAIDS 方案中,每個節(jié)點的通信開銷為2×。而在文獻[18]提出的DSFLACQ 方案中,假設(shè)每個節(jié)點有個鄰居節(jié)點,一個節(jié)點給它的每個鄰居節(jié)點發(fā)送個數(shù)據(jù)包,則它的每個鄰居節(jié)點只需要返回1 個確認包,因此,在DSFLACQ 方案中,每個節(jié)點的通信開銷為(+1)×。本文提出的LSFAD 方案既不需要鄰居節(jié)點監(jiān)聽,也不需要發(fā)送確認數(shù)據(jù)包給源節(jié)點,攻擊路徑的檢測是由基站完成的,假設(shè)基站收到源節(jié)點發(fā)送的個數(shù)據(jù)包后檢測到攻擊路徑,路徑上的每個節(jié)點將依次從源節(jié)點開始沿轉(zhuǎn)發(fā)路徑發(fā)送一個統(tǒng)計數(shù)據(jù)包給基站進行惡意節(jié)點定位,因此,在本文提出的LSFAD 方案中,每個節(jié)點的通信開銷為+1。表4描述了本文提出的LSFAD 方案與CLAIDS 方案、DSFLACQ 方案和PHACK 方案的每個節(jié)點需要的具體通信開銷。從表4 中可以看出,本文提出的LSFAD方案的通信開銷要遠遠小于其他方案的通信開銷。
表4 通信開銷比較Table 4 Comparison of communication overhead
在文獻[17]提出的CLAIDS 方案中,每個節(jié)點需要為它的所有鄰居節(jié)點維護一張表,包括5 個字段,其中,能量大小字段占4 Byte,轉(zhuǎn)發(fā)包的數(shù)量字段占2 Byte,接收到的確認包數(shù)量字段占2 Byte,通信質(zhì)量字段占4 Byte,檢測閾值字段占4 Byte,因此,CLAIDS方案的每個節(jié)點存儲開銷為16,表示鄰居節(jié)點個數(shù)。文獻[18]提出的DSFLACQ 方案在CLAIDS 方案的存儲需求基礎(chǔ)上增加兩個字段,其中,正常丟包率字段占4 Byte,滑動時間窗口存儲的通信質(zhì)量字段占4,表示滑動時間窗口的長度,因此,DSFLACQ方案的每個節(jié)點存儲開銷為(20+4)×。在本文提出的LSFAD 方案中,路徑上的所有中間轉(zhuǎn)發(fā)節(jié)點都需要維護一張數(shù)據(jù)包源節(jié)點轉(zhuǎn)發(fā)表(DFT),如表2所示。DFT 表有兩個字段,假設(shè)Source_ID 字段占2 Byte,F(xiàn)orWord_Count 字段也占2 Byte,假設(shè)網(wǎng)絡(luò)中總共有個節(jié)點,每個中間轉(zhuǎn)發(fā)節(jié)點最多情況下可以轉(zhuǎn)發(fā)-1 源節(jié)點的數(shù)據(jù)包,因此在LSFAD 方案中,每個節(jié)點的最大存儲開銷為4×(-1)。表5 描述了本文提出的LSFAD 方案與CLAIDS 方案、DSFLACQ 方案的每個節(jié)點需要的具體存儲開銷。從表5 中可以看出,本文提出的LSFAD 方案的每個節(jié)點的最大存儲開銷要大于其他方案的存儲開銷,因為LSFAD 方案的每個節(jié)點最多情況下可以轉(zhuǎn)發(fā)-1 源節(jié)點的數(shù)據(jù)包,所以最大情況下需要維護-1 個節(jié)點的一張表,而CLAIDS 方案和DSFLACQ 方案只需要維護它的所有鄰居節(jié)點的一張表。
表5 存儲開銷比較Table 5 Comparison of storage overhead
在不考慮鏈路正常丟包的情況下,假設(shè)惡意節(jié)點丟棄數(shù)據(jù)包的概率為,源節(jié)點發(fā)送次數(shù)據(jù)后,基站能夠檢測到路徑上存在惡意節(jié)點丟包行為的概率為:
設(shè)為惡意節(jié)點丟棄數(shù)據(jù)包后被基站檢測到的次數(shù),顯然服從參數(shù)為,的二項分布,即-(,),的分布律為:
因此基站能夠檢測到路徑上存在惡意節(jié)點丟包行為的概率為:
即式(6)得證。
本文從惡意路徑檢測概率、惡意節(jié)點定位概率和能量消耗等方面對LSFAD 方案的性能進行仿真評估。仿真實驗環(huán)境在OMNeT++平臺上進行,100 個節(jié)點隨機分布在500 m×500 m 的正方形區(qū)域內(nèi),每個節(jié)點都被分配一個唯一身份ID,每個節(jié)點的通信范圍為90 m,節(jié)點部署之后將不再移動,基站部署在區(qū)域的中心位置。隨機選取網(wǎng)絡(luò)的一些節(jié)點作為數(shù)據(jù)源節(jié)點和惡意節(jié)點,其他節(jié)點作為中間轉(zhuǎn)發(fā)節(jié)點。數(shù)據(jù)源節(jié)點每隔1 s 通過多跳的方式向基站發(fā)送一次數(shù)據(jù),每個數(shù)據(jù)包的長度為256 Byte。每個節(jié)點的初始能量為1 J,發(fā)送和接收能耗為50 nJ/bit。當惡意節(jié)點成為中間轉(zhuǎn)發(fā)節(jié)點后,它將以0.2~0.8的概率故意丟棄它要轉(zhuǎn)發(fā)的數(shù)據(jù)包。對于每個設(shè)置的參數(shù),取仿真100次得到的平均值。實驗仿真的參數(shù)設(shè)置如表6。
表6 實驗仿真參數(shù)Table 6 Experimental simulation parameters
當基站收到源節(jié)點發(fā)送的數(shù)據(jù)包,它將執(zhí)行算法1 檢測選擇性轉(zhuǎn)發(fā)攻擊路徑,它按式(1)計算當前路徑的平均丟包率,按式(2)計算當前路徑的正常丟包率,如果路徑的平均丟包率大于路徑的正常丟包率,則表示當前路徑上存在選擇性轉(zhuǎn)發(fā)攻擊。圖1描述了鏈路正常丟包率分別為0.005、0.025、0.045、0.065、0.085 和0.105,惡意節(jié)點丟包率分別為0.2、0.4、0.6 和0.8,路徑中只有一個惡意節(jié)點時,路徑的正常丟包率和平均丟包率的情況。從圖1 中可以看出,當鏈路正常丟包率小于0.1 時,路徑的平均丟包率都在路徑的正常丟包率上方,表示路徑的平均丟包率大于路徑的正常丟包率,也即表示當鏈路正常丟包率小于0.1 時,路徑上的惡意節(jié)點分別以丟包率等于0.2、0.4、0.6 和0.8 發(fā)起的選擇性轉(zhuǎn)發(fā)攻擊路徑都能被檢測到。從圖1 中可以看出,檢測出選擇性轉(zhuǎn)發(fā)攻擊路徑的概率與鏈路正常丟包率和惡意節(jié)點的丟包率有關(guān)。鏈路正常丟包率越低,選擇性轉(zhuǎn)發(fā)攻擊路徑檢驗成功的概率越高;惡意節(jié)點的丟包率越高,選擇性轉(zhuǎn)發(fā)攻擊路徑檢驗成功的概率相對越高。
圖1 只有一個惡意節(jié)點的路徑正常和平均丟包率Fig.1 Normal packet loss rate and average packet loss rate of path with only one malicious node
圖2 描述了在不同鏈路正常丟包率的情況下,路徑中有多個惡意節(jié)點的路徑正常丟包率和路徑平均丟包率的情況。圖2(a)、圖2(b)和圖2(c)分別表示鏈路正常丟包率分別為0.005、0.045 和0.085,路徑中的惡意節(jié)點個數(shù)分別為1、2、3、4,惡意節(jié)點丟包率分別為0.2、0.4、0.6 和0.8 時,路徑的正常丟包率和路徑的平均丟包率的情況。從圖2(a)、圖2(b)和圖2(c)可以看出,在鏈路的正常丟包率分別為0.005、0.045 和0.085 的情況下,路徑的平均丟包率都大于路徑的正常丟包率,也即表示在鏈路的正常丟包率分別為0.005、0.045 和0.085 的情況下,路徑上的多個惡意節(jié)點分別以丟包率等于0.2、0.4、0.6 和0.8 發(fā)起的選擇性轉(zhuǎn)發(fā)攻擊路徑都能被檢測到,并且隨著路徑上惡意節(jié)點個數(shù)的增加,路徑的平均丟包率都大于路徑的正常丟包率。圖2(d)表示在鏈路正常丟包率為0.125 的情況下,路徑中有多個惡意節(jié)點的路徑正常丟包率和路徑平均丟包率的情況。從圖2(d)可以看出,即使當鏈路的正常丟包率為0.125,路徑上的多個惡意節(jié)點以大于0.21 的概率發(fā)起的選擇性轉(zhuǎn)發(fā)攻擊路徑都能被檢測到。從圖2 可以看出,隨著路徑中的惡意節(jié)點個數(shù)的增加或惡意節(jié)點丟包率的增大,選擇性轉(zhuǎn)發(fā)攻擊路徑檢測成功的概率越高。
圖2 有多個惡意節(jié)點的路徑正常和平均丟包率Fig.2 Normal packet loss rate and average packet loss rate of path with multiple malicious nodes
圖3 描述了在不同鏈路正常丟包率和不同路徑長度的情況下,路徑中含一個惡意節(jié)點的路徑正常丟包率和路徑平均丟包率的情況。從圖3(a)、圖3(b)和圖3(c)可以看出,在鏈路正常丟包率分別為0.005、0.045 和0.085,路徑中含一個惡意節(jié)點的情況下,當惡意節(jié)點以不同的丟包率發(fā)起選擇性轉(zhuǎn)發(fā)攻擊時,路徑的平均丟包率和路徑的正常丟包率隨路徑長度的增加而增加,且路徑的平均丟包率都大于路徑的正常丟包率,也即表示在鏈路正常丟包率分別為0.005、0.045 和0.085,路徑長度分別為4、8、12、16 的情況下,路徑上的惡意節(jié)點分別以丟包率等于0.2、0.4、0.6 和0.8 發(fā)起的選擇性轉(zhuǎn)發(fā)攻擊路徑都能被檢測到。從圖3(d)可以看出,即使在鏈路正常丟包率為0.125 的情況下,當路徑長度小于12 或惡意節(jié)點的丟包率大于0.2,路徑的平均丟包率大于路徑的正常丟包率,都能成功檢測到選擇性轉(zhuǎn)發(fā)攻擊路徑。
圖3 不同路徑長度下的路徑正常和平均丟包率Fig.3 Normal packet loss rate and average packet loss rate of path with different path lengths
當基站發(fā)現(xiàn)某條路徑存在選擇性轉(zhuǎn)發(fā)攻擊,它將執(zhí)行算法2 定位惡意節(jié)點。圖4 描述了惡意節(jié)點在路徑的不同位置的情況下,成功定位到惡意節(jié)點的概率的情況。從圖4(a)可以看出,當惡意節(jié)點位于路徑的第3 個位置,即=3,在鏈路正常丟包率分別為0.005、0.025、0.045、0.065、0.085 和0.105 的情況下,分別以丟包率等于0.2、0.4、0.6 和0.8 發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點都能被成功檢測定位到。從圖4(b)、圖4(c)和圖4(d)可以看出,當惡意節(jié)點分別位于路徑的第6、9 和12 個位置,鏈路正常丟包率大于0.025 時,分別以丟包率等于0.2、0.4、0.6 和0.8 發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點都能被成功檢測定位到。
圖4 成功定位到惡意節(jié)點的概率Fig.4 Probability of successfully locating malicious node
圖5 正常模式和檢測模式下的能量消耗Fig.5 Energy consumption in normal mode and detection mode
本文提出了一種輕量級的無線傳感器網(wǎng)絡(luò)選擇性轉(zhuǎn)發(fā)攻擊檢測方案(LSFAD),在LSFAD 方案中,基站記錄每個源節(jié)點發(fā)送的數(shù)據(jù)包總個數(shù)以及這些數(shù)據(jù)包轉(zhuǎn)發(fā)的路由路徑,通過計算并比較路徑的平均丟包率和路徑的正常丟包率來判斷當前路徑是否存在選擇性轉(zhuǎn)發(fā)攻擊。為了定位到路徑上發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點或惡意鏈路,基站計算每個節(jié)點的平均丟包率和正常丟包率,平均丟包率大于正常丟包率的節(jié)點和前一個節(jié)點組成的鏈路就是惡意鏈路。LSFAD 方案設(shè)計簡單,不需要任何監(jiān)聽節(jié)點,不需要任何復(fù)雜的評估模型評估計算節(jié)點信任值,易于實現(xiàn)。LSFAD 方案還能抵抗惡意節(jié)點發(fā)起的被動選擇性轉(zhuǎn)發(fā)攻擊和主動選擇性轉(zhuǎn)發(fā)攻擊。性能分析及實驗仿真結(jié)果表明,LSFAD 方案的通信開銷要遠遠小于其他方案,LSFAD 方案即使當鏈路的正常丟包率為0.125,選擇性轉(zhuǎn)發(fā)攻擊路徑都能被檢測到,當鏈路正常丟包率大于0.025,發(fā)起選擇性轉(zhuǎn)發(fā)攻擊的惡意節(jié)點都能被成功檢測定位到,并且網(wǎng)絡(luò)在檢測定位惡意節(jié)點的狀態(tài)下消耗的能量與正常情況下消耗的能量相差不大。