邵金鳳,周柔,李佳佳,陳毛玥
(湖南師范大學 信息科學與工程學院,湖南長沙,410081)
對于車載網絡,目前許多研究者對可能的車內威脅進行了分析。例如Koscher 等人通過實驗室和路測實驗,對汽車進行了CAN 網絡的竊聽、模糊測試及代碼逆向工程等攻擊,對剎車、引擎進行了控制[1];Rouf 等人通過無線電頻道對輪胎壓力監測系統實施了攻擊,使監測系統失效[2];Checkoway 等人展示了在沒有預先物理入侵的情況下通過汽車對外接口進行攻擊,證明了汽車遠程控制的可行性[3]。以上研究表明網聯汽車確實面臨嚴重信息安全問題,迫切需要開展相關對策研究。
本文主要圍繞車載網絡數據異常檢測開展研究和實現原型系統。提出并實現基于支持向量機的異常檢測算法,且為減輕車載計算單元的計算負載,借助車聯網中的路側單元的邊緣服務器進行異常檢測,保護汽車正常行駛。
基于機器學習和深度學習是當前車載網絡入侵檢測的常用技術;Kang 等人利用深度信念網絡(DBN)初始化模型參數,再提取數據的特征向量作為深度神經網絡(DNN)的訓練樣本,提高了異常數據檢測準確率,降低了檢測響應時間[4];楊遠達等人通過設計新的損失函數,提出了一種基于GAN 模型的車載CAN 網絡入侵檢測方法,提高了GAN模型檢測異常數據的能力[5]。Zarai 等人將遞歸神經網絡和深度神經網絡用于入侵檢測系統中,使用了四個隱藏層、四十一層輸入和兩層輸出,共有100 次迭代。對四種常用的缺陷檢測模型架構進行比較,得出DNN3 算法性能最佳,使用了三層長短時記憶法(LSTM),最后顯示三層LSTM有著較高的性能[6]。Ravi 等人提出了一種新的SDRK 機器學習算法來檢測入侵[7]。SDRK 利用有監督的深層神經網絡(DNN)和無監督聚類技術,較大提高了算法的準確率。
針對目前車聯網背景下車載網絡易受到攻擊的現實,且為了減少車載網絡的計算負載,我們提出了一種基于邊緣計算的車載網絡入侵檢測算法。
基于邊緣計算的車載網絡異常檢測系統主要由服務端、邊緣端和車輛端三部分組成,三者間采用無線通信方式傳輸數據,系統的架構圖如圖1 所示,車輛端采集數據并將數據上傳至服務端,服務端構建、訓練得到最優異常檢測模型并部署至邊緣端,邊緣端接收車輛發送的數據,并對各數據進行處理,最后將數據作為模型輸入進行異常檢測,將檢測結果下傳回車輛端,車輛端根據接收到的結果做出相應反應。本系統采用多對多的星型組網結構,多對多組網結構可以滿足因為車輛行駛導致的網絡拓撲的動態變化,防止因單個服務器的崩潰而影響整個車聯網系統無法正常工作的情況出現。

圖1 系統架構圖
本系統構建的異常檢測模型為基于SVM 的模型。圖2為異常檢測模型的構建流程。

圖2 異常檢測模型的構建流程
(1)數據集
本文采用的數據集由韓國黑客與對策研究實驗室提供,為真實車輛采集數據。這些數據集是在執行消息注入攻擊時,通過真實車輛的OBD-II 端口記錄CAN 流量構建的。每個數據集總共有30~40min 的CAN 流量,包含每300 個消息注入入侵,每次入侵執行3~5s。在拒絕服務攻擊中,每0.3ms 注入一次“0000”CAN ID 的消息0000'是最占優勢的。在模糊攻擊中,每0.5ms 注入完全隨機的CAN ID 和DATA值的消息。而在欺騙攻擊(轉速/齒輪):每1ms 注入與RPM/齒輪信息相關的某些CAN ID 的消息。
數據集的主要構成部分:(1)時間戳:記錄的時間;(2)CAN ID:十六進制中CAN 報文的標識符(例如043f);(3)DLC:數據字節數,從0 到8;(4)數據[ 0~ 7 ]:數據值(字節);(5)標志:T 或R,T 表示注入消息,R 表示正常消息。
(2)特征數據提取
將數據集的內容作為基礎,將攻擊報文與正常報文之間的差異性作為判斷根據。數據集中的時間戳、CAN ID 通常不具有合法性,無法為異常檢測提供直接的判斷依據,因此舍棄;直接提取數據集中每一周期數據的8 個字節數據值以及標志位,對提取的特征數據進行歸一化處理后,劃分4/5 作為訓練集,1/5 為測試集,這樣更有利于模型的訓練和預測。
(3)模型構建與訓練
SVM(Support Vector Machine)是一種常見的有監督學習算法,用于進行二分類或多分類任務。它的主要思想是找到最優決策面,把數據集正確分開。本系統對模型輸入數據的異常檢測可看作線性不可分的二分類問題,使用高斯核函數將數據映射高維空間,進而可以更加容易區分;利用交叉驗證和網格搜索選擇最佳參數;得到的最佳參數進行模型的構建和訓練:構建模型的懲罰參數C,RBF 核的gamma,允許容錯、泛化能力強,決策函數類型為OVR,即訓練N個分類器,核函數為徑向核函數/高斯核(RBF),使用數據預處理中分出的訓練集訓練模型,使用分出的測試集測試并計算模型正確率。
本系統服務端通過無線通信方式與車輛端進行通信與數據傳輸,接收車輛端上傳的數據并進行處理,使用Python 構建基于支持向量機的異常檢測模型,用處理后的數據對模型進行評估優化,得到最優模型,對該最優模型進行持久化處理并保存;再使用相應模型部署軟件,查詢輸入邊緣端的IP 地址連接服務端和邊緣端,將訓練好的模型部署到邊緣端。
邊緣端分布在道路兩側,利用無線通信模塊接收各車輛上傳的周期性8 維行駛數據,然后打開串口并對串口進行初始化,無線通信模塊初始化完成后,將接收到的數據發送至串口,串口判斷是否收到數據,若未收到則重新接收數據,若收到則解碼數據,拆解處理成所需要的格式,調用服務端提前部署的最優異常檢測模型進行預測;若數據為標準格式即為可預測數據,將檢測得出的結果即“0”或“1”以字符串形式編碼后發送至串口返回給車輛端,同時打印顯示,便于對異常檢測算法預測結果進行監控;若數據為非標準格式即預測失敗,直接打印失敗信息,便于更改調試。
本系統車輛利用無線通信方式將CAN 總線數據上傳至邊緣端的服務器,然后接收邊緣端下傳至車輛的異常預測結果,對異常結果做出預警。車輛端加載實時行駛數據,并將其以字符串的形式保存在數組中,周期性地將數據發送至串口,再通過串口所連接的無線通信模塊將一組8 維的數據發送至邊緣端,每個維度經過歸一化處理后大小在0~255之間。車輛端接收到邊緣端下傳的異常檢測結果,通過串口讀取保存起來,該結果以字符串的形式接收,對所接收結果進行判斷,若為1(正常數據)則繼續加載發送下一組數據,若為0(異常數據)車輛端停止發送數據且蜂鳴器工作,達到預警效果。
實驗中服務端即PC 端。使用STM32F103C8T6 系列單片機智能小車來替代真實車輛如圖3 所示,使用LoRa 模塊進行車輛端與服務器端的無線通信。LoRa 模塊通過USB 轉TTL 和杜邦線與小車進行連接,小車既可使用電池供電也可以使用USB 電源供電,實現有線和無線供電雙模式。

圖3 車輛端實物圖
邊緣端使用Jetson nano 邊緣開發板實現,如圖4 所示,在M2 接口接入無線網卡,用一個螺絲固定,用于連接網絡;將藍牙鍵盤適配器通過USB 口進行連接,LoRa 無線通信模塊通過杜邦線與邊緣開發板進行連接,通過HDMI連接線將顯示屏與邊緣端相連。

圖4 服務器端實物圖
實驗中在求得模型最佳參數時列出7 個svg_C 和6 個svg_gamma,一共42 種組合,創建網格搜索,42 組參數組合,8 核,日志冗長度為1(偶爾輸出訓練過程),最終確定最佳參數懲罰因子C 為0.01,RBF 核的 gamma 為 1;并構建模型;使用由65536 個周期的正常數據和65536 個周期的異常數據組成的數據集,提取其中25000 個周期的正常數據和2000 個周期的異常數據組成訓練樣本集,得到訓練模型,對1000 個周期的異常數據進行異常檢測,檢測率為95.30%。對于訓練樣本集,正常數據不變,將異常數據分別增加到4000 和7000 個周期時,得到訓練模型,對1000 個周期的異常數據進行異常檢測,檢測率分別達到98.20%和98.60%。
在不同訓練樣本集下,利用本文所設計系統對車輛行駛數據進行異常檢測,車輛端與服務器端的通信如圖5 所示,得到的部分檢測結果如圖6 所示,數據異常可及時預警,引起駕駛人員注意。

圖5 車輛端與服務器端通信

圖6 數據異常檢測結果
本文提出了基于支持向量機的車載網絡異常檢測算法,并識別每個周期數據的標志作為特征來訓練支持向量機,并進行異常檢測驗證,表明了該算法具有較高的檢測概率;實現了基于邊緣計算的車載網絡數據異常檢測系統,將本應在車內進行的異常檢測轉移到邊緣服務器,減輕了車載網絡計算單元的計算負載。