曾凡鋒,田雨絲,王景中
(北方工業(yè)大學(xué)信息學(xué)院,北京 100144)
作為第三次信息時(shí)代發(fā)展浪潮,物聯(lián)網(wǎng)[1]將互聯(lián)網(wǎng)的客戶端延伸到了任何物品和物品之間,滿足信息交換和通信。由于物聯(lián)網(wǎng)感知層存在節(jié)點(diǎn)設(shè)備基數(shù)龐大、微處理器計(jì)算受限、感知環(huán)境不確定和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)動(dòng)態(tài)變化等特點(diǎn),實(shí)現(xiàn)物聯(lián)網(wǎng)網(wǎng)絡(luò)安全存在巨大挑戰(zhàn)[2]。攻擊者通常采用控制節(jié)點(diǎn)設(shè)備的方法來(lái)入侵物聯(lián)網(wǎng)網(wǎng)絡(luò),經(jīng)過(guò)物理捕獲感染節(jié)點(diǎn)、將節(jié)點(diǎn)重新部署回到網(wǎng)絡(luò)和通過(guò)被感染節(jié)點(diǎn)發(fā)起攻擊這三個(gè)階段來(lái)完成入侵[3]。針對(duì)防御的研究重點(diǎn)大多數(shù)放在了第二和第三階段,例如基于節(jié)點(diǎn)位置的檢測(cè)[4]等。但由于攻擊進(jìn)行到第二、三階段時(shí),已經(jīng)對(duì)節(jié)點(diǎn)設(shè)備或者整個(gè)網(wǎng)絡(luò)造成了一定的損失,因此,盡早檢測(cè)出被捕獲節(jié)點(diǎn)對(duì)維護(hù)物聯(lián)網(wǎng)網(wǎng)絡(luò)安全具有重要意義。
目前,物聯(lián)網(wǎng)安全技術(shù)研究方面,許多安全技術(shù)已經(jīng)被提議,但是由于物聯(lián)網(wǎng)網(wǎng)絡(luò)協(xié)議設(shè)計(jì)階段,沒(méi)有考慮安全問(wèn)題,因此也沒(méi)有形成完善的安全體系。針對(duì)通信協(xié)議的安全問(wèn)題,大多數(shù)研究都是基于修改協(xié)議源碼展開(kāi),面向的問(wèn)題也常為數(shù)據(jù)安全問(wèn)題[5],并且針對(duì)特定問(wèn)題修改協(xié)議內(nèi)容在一定程度上影響了安全策略的實(shí)施難度和適用性。
本文不更改協(xié)議源碼,從MQTT協(xié)議應(yīng)用角度出發(fā),借助其心跳機(jī)制設(shè)計(jì)了包括心跳消息、問(wèn)候消息在內(nèi)的檢測(cè)流程,并充分考慮到其發(fā)布訂閱模式[6]下的服務(wù)器客戶端網(wǎng)絡(luò)結(jié)構(gòu),設(shè)計(jì)了包括服務(wù)器、鄰居節(jié)點(diǎn)在內(nèi)的多方協(xié)同決策方案。由仿真結(jié)果表明,該方法在檢測(cè)率和誤報(bào)率方面均優(yōu)于傳統(tǒng)方法,特別是在降低誤報(bào)率方面具有較好的效果。
節(jié)點(diǎn)捕獲攻擊主要是利用傳感器的編程和測(cè)試接口對(duì)傳感器進(jìn)行妥協(xié)從而達(dá)到控制的目的[7]。研究表明,節(jié)點(diǎn)捕獲攻擊需要將節(jié)點(diǎn)從正常網(wǎng)絡(luò)通信中“移除”一段不可忽略的時(shí)間,從幾分鐘到幾小時(shí)不等[8]。對(duì)節(jié)點(diǎn)捕獲攻擊檢測(cè)的現(xiàn)有方法正是利用這一特征,通過(guò)節(jié)點(diǎn)間廣播信標(biāo)消息、問(wèn)候消息或心跳消息相互監(jiān)控對(duì)方的存活性,以盡早發(fā)現(xiàn)被捕獲節(jié)點(diǎn)。
Lin Xiaodong等人的CAT方法[3]采用H-W兩兩配對(duì)的方式,通過(guò)發(fā)送接受BEACON信標(biāo)消息相互監(jiān)控對(duì)方的存活性,如果未收到的信標(biāo)消息超過(guò)一定閾值則將判斷對(duì)方被入侵。如果區(qū)域節(jié)點(diǎn)為奇數(shù)時(shí),將有一組H-W-C節(jié)點(diǎn)進(jìn)行相互監(jiān)控,用以消除網(wǎng)絡(luò)中的孤立節(jié)點(diǎn)。由于CAT方法中節(jié)點(diǎn)的檢測(cè)效果由其配對(duì)的一方所決定,節(jié)點(diǎn)被同時(shí)捕獲時(shí),檢測(cè)方法無(wú)效,且對(duì)可疑狀態(tài)的節(jié)點(diǎn)沒(méi)有進(jìn)行審查判斷,會(huì)增加誤報(bào)率。Ding Wei等人的FSD方法[9]是通過(guò)節(jié)點(diǎn)定期廣播hello消息來(lái)證明自己的存在,監(jiān)控節(jié)點(diǎn)未收到來(lái)自被監(jiān)控節(jié)點(diǎn)的連續(xù)hello消息超過(guò)一定數(shù)量,將多次發(fā)送長(zhǎng)間隔的詢問(wèn)ask消息確認(rèn)被監(jiān)控節(jié)點(diǎn)狀態(tài),若節(jié)點(diǎn)沒(méi)有回復(fù)則認(rèn)為其被捕獲。在FSD方法中,節(jié)點(diǎn)還具有自檢功能,如果節(jié)點(diǎn)沒(méi)有收到所有鄰居的hello消息,則考慮自己被捕獲,節(jié)點(diǎn)開(kāi)啟自毀模式并向鄰居廣播消息。相較于CAT方法,F(xiàn)SD方法對(duì)被監(jiān)控節(jié)點(diǎn)增加了一個(gè)監(jiān)控方,一定程度上降低了誤報(bào)率。Al-Riyami等人針對(duì)耗能問(wèn)題,對(duì)不同簇下的hello消息采用不同的廣播頻率[10]。Zhang Zhihua等人針對(duì)節(jié)點(diǎn)休眠問(wèn)題,提出了節(jié)點(diǎn)聲明消息統(tǒng)一調(diào)度廣播機(jī)制[11]。
但以上方法在節(jié)點(diǎn)狀態(tài)的檢測(cè)判斷中,只運(yùn)用了傳感器網(wǎng)絡(luò)下角色相同的節(jié)點(diǎn)進(jìn)行相互監(jiān)控,沒(méi)有考慮運(yùn)用物聯(lián)網(wǎng)中服務(wù)器客戶端網(wǎng)絡(luò)結(jié)構(gòu)下的服務(wù)器節(jié)點(diǎn)。而引入不同角色的節(jié)點(diǎn),增加不同消息類型的監(jiān)控,使節(jié)點(diǎn)的檢測(cè)更全面、更可靠。筆者所提方法在傳統(tǒng)方法鄰居監(jiān)控的基礎(chǔ)上,借助了MQTT協(xié)議中服務(wù)器與客戶端的心跳監(jiān)控,增加了服務(wù)器節(jié)點(diǎn)的決策環(huán)節(jié),在不額外增加網(wǎng)絡(luò)負(fù)擔(dān)的情況下,優(yōu)化了傳統(tǒng)方法的檢測(cè)結(jié)果。
傳統(tǒng)方法的實(shí)驗(yàn)環(huán)境通常為包含了一個(gè)sink和多個(gè)終端節(jié)點(diǎn)的傳感器網(wǎng)絡(luò),而應(yīng)用了MQTT協(xié)議的物聯(lián)網(wǎng)網(wǎng)絡(luò)通常由一個(gè)云端服務(wù)器、M個(gè)服務(wù)器節(jié)點(diǎn)和N個(gè)終端節(jié)點(diǎn)組成。網(wǎng)絡(luò)結(jié)構(gòu)模型如圖1所示。假設(shè)服務(wù)器節(jié)點(diǎn)在網(wǎng)絡(luò)中是安全的,終端節(jié)點(diǎn)隨機(jī)均勻分布在服務(wù)器節(jié)點(diǎn)下。所有節(jié)點(diǎn)都在同一時(shí)間啟動(dòng),每一個(gè)節(jié)點(diǎn)部署好之后都是靜止的,且具備一個(gè)全網(wǎng)唯一的ID標(biāo)識(shí)。每一個(gè)服務(wù)器節(jié)點(diǎn)和其終端節(jié)點(diǎn)都維護(hù)一個(gè)存有ID號(hào)的鄰居表,用來(lái)確認(rèn)節(jié)點(diǎn)鄰居。服務(wù)器節(jié)點(diǎn)周期性匯總終端節(jié)點(diǎn)的采集數(shù)據(jù)發(fā)送給云端服務(wù)器,終端節(jié)點(diǎn)周期性向服務(wù)器節(jié)點(diǎn)發(fā)布采集數(shù)據(jù)。服務(wù)器節(jié)點(diǎn)與終端節(jié)點(diǎn)間雙向發(fā)包,終端節(jié)點(diǎn)之間也可以互通消息。
圖1 網(wǎng)絡(luò)結(jié)構(gòu)模型
由于節(jié)點(diǎn)被捕獲的第一階段狀態(tài)表現(xiàn)為無(wú)法通信,可以假設(shè)在網(wǎng)絡(luò)初始化后,將每個(gè)終端節(jié)點(diǎn)在一定概率下隨機(jī)定義為被捕獲節(jié)點(diǎn),被捕獲節(jié)點(diǎn)在一段時(shí)間內(nèi)不再發(fā)送任何消息。若被捕獲的節(jié)點(diǎn)過(guò)多,檢測(cè)是沒(méi)有意義的,本文假設(shè)被捕獲節(jié)點(diǎn)總數(shù)K的上限是節(jié)點(diǎn)總數(shù)N的25%。如果已被捕獲的節(jié)點(diǎn)未被檢測(cè)出來(lái),該節(jié)點(diǎn)的通信將時(shí)斷時(shí)續(xù)來(lái)模擬入侵者通過(guò)該節(jié)點(diǎn)分析網(wǎng)絡(luò)的行為;如果已被捕獲節(jié)點(diǎn)被成功檢測(cè),則將主動(dòng)使其脫離網(wǎng)絡(luò)。
服務(wù)器客戶端網(wǎng)絡(luò)結(jié)構(gòu)中設(shè)備角色有:
1)云端服務(wù)器Cloud:云端服務(wù)器連接服務(wù)器節(jié)點(diǎn)來(lái)接收工作數(shù)據(jù)。
2)服務(wù)器節(jié)點(diǎn)Server:服務(wù)器節(jié)點(diǎn)連接云端服務(wù)器和終端節(jié)點(diǎn),與終端節(jié)點(diǎn)雙向發(fā)包。
3)終端節(jié)點(diǎn)Node:終端節(jié)點(diǎn)連接服務(wù)器節(jié)點(diǎn),同一個(gè)服務(wù)器節(jié)點(diǎn)下的終端節(jié)點(diǎn)也可以相互發(fā)包。
主要消息類型有:
1)Conn負(fù)責(zé)Node和Server之間的連接。
2)SUBSCRIBLE負(fù)責(zé)推送Node的左右鄰居id給Server。
3)HEART負(fù)責(zé)Node和Server之間的心跳。
4)HELLO負(fù)責(zé)Node之間的問(wèn)候。
5)CLOUD負(fù)責(zé)云數(shù)據(jù)推送。
6)DECISION負(fù)責(zé)發(fā)送檢測(cè)信號(hào)。
7)UPDATE負(fù)責(zé)通知Node更新鄰居列表。消息類型還包括交互過(guò)程的應(yīng)答消息。
節(jié)點(diǎn)捕獲早期檢測(cè)在全網(wǎng)執(zhí)行檢測(cè)任務(wù),根據(jù)監(jiān)控、詢問(wèn)和決策判斷結(jié)果來(lái)對(duì)被監(jiān)控節(jié)點(diǎn)的狀態(tài)進(jìn)行判斷。終端節(jié)點(diǎn)入網(wǎng)后將分別向服務(wù)器節(jié)點(diǎn)、鄰居節(jié)點(diǎn)發(fā)送周期性的心跳消息和問(wèn)候消息;當(dāng)服務(wù)器未收到某節(jié)點(diǎn)超過(guò)一定數(shù)量的心跳消息時(shí),該節(jié)點(diǎn)進(jìn)入被審查狀態(tài);經(jīng)過(guò)對(duì)該節(jié)點(diǎn)問(wèn)候消息以及后續(xù)心跳消息發(fā)送情況的綜合決策,得出該節(jié)點(diǎn)狀態(tài);當(dāng)決策結(jié)果為異常時(shí),通過(guò)更新鄰居列表來(lái)將該節(jié)點(diǎn)排除在外,不再使其接入網(wǎng)絡(luò)。
網(wǎng)絡(luò)初始化后,云端服務(wù)器Cloud將與服務(wù)器節(jié)點(diǎn)Server[0,1,…M]、終端節(jié)點(diǎn)Node[0,1,…N]形成一個(gè)樹(shù)形結(jié)構(gòu)。每個(gè)服務(wù)器節(jié)點(diǎn)Server[i]下有n=N/M個(gè)終端節(jié)點(diǎn),分別是Node[i*n]、Node[i*n+1]…Node[i*n+n-1]。每個(gè)終端節(jié)點(diǎn)Node[myId]的左右鄰居的ID分別是left.id=myId-1、right.id=myId+1,其中首節(jié)點(diǎn)的左鄰居left.id=myId+n-1,尾節(jié)點(diǎn)的右鄰居right.id=myId-n-1。網(wǎng)絡(luò)運(yùn)行過(guò)程中,節(jié)點(diǎn)之間狀態(tài)轉(zhuǎn)換如圖2所示。
圖2 節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換
正常狀態(tài)下:Server周期性向Cloud推送工作數(shù)據(jù)。Node周期性向Server發(fā)送heart消息和工作數(shù)據(jù)。Server每次接收heart消息都會(huì)對(duì)節(jié)點(diǎn)心跳信息進(jìn)行維護(hù),內(nèi)容包括heart數(shù)量、loss遺失數(shù)量、heartTime。Node也向自己的左右鄰居left、right發(fā)送周期性的hello消息,每個(gè)節(jié)點(diǎn)也將維護(hù)自己左右鄰居節(jié)點(diǎn)的hello消息信息,使用hasHello來(lái)表示是否收到問(wèn)候消息,helloTime來(lái)監(jiān)控問(wèn)候消息的發(fā)送間隔。
被審查狀態(tài):當(dāng)Server維護(hù)的某Node.loss超過(guò)所設(shè)定閾值時(shí),該節(jié)點(diǎn)進(jìn)入檢測(cè)判斷環(huán)節(jié)。Server將生成一個(gè)新的結(jié)構(gòu)體ExceptionNode,讀取該可疑節(jié)點(diǎn)的id和收集其鄰居的hello情況放入hellos中。Server向可疑節(jié)點(diǎn)的左右鄰居發(fā)送DECISION消息,收到DECISION消息的節(jié)點(diǎn),將檢查被審查節(jié)點(diǎn)是否發(fā)送了問(wèn)候消息,并通過(guò)DECACK消息發(fā)送給Server,內(nèi)容包含ok(表示hasHello),服務(wù)器將warnId節(jié)點(diǎn)的左右鄰居ok情況存入hellos。之后服務(wù)器將根據(jù)hellos和loss的情況對(duì)該id的節(jié)點(diǎn)狀態(tài)進(jìn)行分情況判定。
在Node.loss達(dá)到閾值從而進(jìn)入被審查狀態(tài)后,節(jié)點(diǎn)判斷為入侵的三種情況:
1)左右鄰居均收到了hello,且Node.loss達(dá)到maxThreashold。
2)左右鄰居只有一個(gè)收到了hello,且Node.loss達(dá)到了maxThreashold的一半。
3)左右鄰居均未收到hello。
異常狀態(tài):若節(jié)點(diǎn)判定為被捕獲狀態(tài),則服務(wù)器Server向warnId的鄰居節(jié)點(diǎn)發(fā)送UPDATE消息來(lái)提醒節(jié)點(diǎn)更新鄰居列表,接收到此消息的節(jié)點(diǎn)根據(jù)消息中的warnId值選擇新的鄰居nextId。服務(wù)器Server還將在結(jié)構(gòu)體Node中刪除id為warnId的節(jié)點(diǎn)。
下面對(duì)所提方法和傳統(tǒng)方法的有效性和通信開(kāi)銷情況進(jìn)行評(píng)價(jià)。實(shí)驗(yàn)在OMNET++平臺(tái)上進(jìn)行,并在相同的網(wǎng)絡(luò)拓?fù)?、相同的參?shù)下與CAT方法、FSD方法進(jìn)行比較,其中丟包率和節(jié)點(diǎn)入侵概率均為0.01。實(shí)驗(yàn)中隨機(jī)均勻部署10個(gè)服務(wù)器節(jié)點(diǎn),190個(gè)終端節(jié)點(diǎn)和一個(gè)云節(jié)點(diǎn)。網(wǎng)絡(luò)拓?fù)淙鐖D3所示。
圖3 實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)?/p>
采用三種方法進(jìn)行實(shí)驗(yàn)的結(jié)果如下。被捕獲節(jié)點(diǎn)檢測(cè)率如圖4所示,可以看出在被捕獲節(jié)點(diǎn)較少時(shí),三種方法的檢測(cè)率都比較高,基于節(jié)點(diǎn)存活性進(jìn)行檢測(cè)的方法都具有很高的靈敏性,在發(fā)現(xiàn)節(jié)點(diǎn)的異常行為方面非常高效。本次實(shí)驗(yàn)設(shè)置190個(gè)終端節(jié)點(diǎn)作為可攻擊節(jié)點(diǎn),當(dāng)被捕獲節(jié)點(diǎn)超過(guò)190*25%時(shí),三種方法的檢測(cè)率都有所下降,其中,由于CAT方法中節(jié)點(diǎn)的監(jiān)控只依靠一個(gè)節(jié)點(diǎn)對(duì)象,在被捕獲節(jié)點(diǎn)增加的情況下,檢測(cè)率下降較快。FSD方法和本文所提方法在存活性監(jiān)控基礎(chǔ)上增加多個(gè)對(duì)象的監(jiān)控,使檢測(cè)率下降較慢,且均采用了鄰居節(jié)點(diǎn)監(jiān)控方式,檢測(cè)率差異性不大。
圖4 三種方法的檢測(cè)率
被捕獲節(jié)點(diǎn)誤檢率如圖5所示。CAT方法和FSD方法的誤檢率在整體趨勢(shì)上隨著被捕獲節(jié)點(diǎn)的增加而上升,CAT方法對(duì)異常節(jié)點(diǎn)未加判斷,導(dǎo)致了最高的誤報(bào)率;FSD方法在對(duì)異常節(jié)點(diǎn)的判斷時(shí),只依靠鄰居間的問(wèn)候消息,當(dāng)此消息產(chǎn)生較高丟包現(xiàn)象時(shí)容易造成誤判。本文所提方法不僅有鄰居節(jié)點(diǎn)的問(wèn)候消息監(jiān)控,還增加了服務(wù)器節(jié)點(diǎn)的心跳消息參與監(jiān)控和判斷,使其在最大程度上避免了誤檢。
圖5 三種方法的誤檢率
圖6 三種方法的負(fù)載
被捕獲節(jié)點(diǎn)通信負(fù)載如圖6所示。三種方法的實(shí)驗(yàn)環(huán)境和參數(shù)均相同的情況下,由于本文采用的心跳消息是MQTT協(xié)議自帶的環(huán)節(jié),在檢測(cè)開(kāi)銷上只增加了鄰居間的問(wèn)候消息和發(fā)現(xiàn)異常后的詢問(wèn)消息,并未給網(wǎng)絡(luò)造成額外負(fù)擔(dān)。隨著被捕獲節(jié)點(diǎn)的增加,被踢出網(wǎng)絡(luò)的節(jié)點(diǎn)數(shù)量變多,使得整個(gè)網(wǎng)絡(luò)的負(fù)載呈下降趨勢(shì)。CAT方法只包含對(duì)一個(gè)節(jié)點(diǎn)的問(wèn)候消息,且沒(méi)有進(jìn)行詢問(wèn),所以誤報(bào)較高使而負(fù)載最少;本文所提方法與FSD方法既有對(duì)兩個(gè)鄰居的問(wèn)候也有詢問(wèn),但是FSD方法包含多次問(wèn)候和詢問(wèn)環(huán)節(jié),而本文方法只進(jìn)行一次詢問(wèn)來(lái)收集hasHello的情況,在檢測(cè)判斷環(huán)節(jié)上比FSD方法更加便捷,負(fù)載更少。
針對(duì)具有服務(wù)器客戶端的物聯(lián)網(wǎng)網(wǎng)絡(luò)結(jié)構(gòu),結(jié)合MQTT協(xié)議特點(diǎn),提出了一種心跳消息和問(wèn)候消息結(jié)合的節(jié)點(diǎn)捕獲早期檢測(cè)方法,以實(shí)現(xiàn)對(duì)捕獲攻擊的早期發(fā)現(xiàn)。該方法基于節(jié)點(diǎn)存活性監(jiān)控,通過(guò)逐步審查、多方協(xié)同的方式對(duì)節(jié)點(diǎn)狀態(tài)進(jìn)行判斷。實(shí)驗(yàn)結(jié)果表明,所提方法有效避免了因?yàn)閬G包等情況對(duì)捕獲攻擊檢測(cè)效果的影響,在不影響網(wǎng)絡(luò)負(fù)載和檢測(cè)率的情況下,顯著降低了誤報(bào)率。