吳玲云, 秦貴和, 于 赫
(1. 吉林大學(xué) 計算機科學(xué)與技術(shù)學(xué)院, 長春 130012; 2. 長春大學(xué) 電子信息工程學(xué)院, 長春 130022)
汽車上的電控設(shè)備, 除了基本的電控系統(tǒng), 目前還有輔助駕駛系統(tǒng)與半自動駕駛系統(tǒng), 如汽車輪胎壓力檢測、 輔助制動、 智能泊車等, 而這些系統(tǒng)的數(shù)據(jù)信息均從車載控制器局域網(wǎng)(CAN)總線中獲取. 汽車智能化的發(fā)展方向使汽車與互聯(lián)網(wǎng)的聯(lián)系非常緊密, 而汽車上的電子設(shè)備及智能化系統(tǒng)都可能成為黑客入侵車載總線網(wǎng)絡(luò)的途徑, 一旦黑客成功入侵車載CAN總線網(wǎng)絡(luò), 駕駛?cè)藛T很可能失去整輛汽車的控制權(quán), 汽車將由入侵者控制其各項功能及運動狀態(tài). Larson等[1]給出了使用CANopen協(xié)議的安全規(guī)則對非法的電子控制單元(ECU)行為進(jìn)行檢測; Muter等給出了使用多個傳感器對汽車CAN總線的各種信息進(jìn)行檢測, 組建了一個異常檢測系統(tǒng)[2], 并進(jìn)一步探討了一種基于熵的車載網(wǎng)絡(luò)攻擊檢測方法, 評估了不同的攻擊場景, 表明信息理論的檢測方法可成功識別車載網(wǎng)絡(luò)異常[3]; Murvay等[4]提出了一種基于信息的特征識別方法進(jìn)行檢測; Groza等[5-7]研究了多個在車載CAN上的廣播認(rèn)證方法, 并通過實驗進(jìn)行了證明; Schulze等[8]在汽車系統(tǒng)中建立了一個數(shù)據(jù)管理系統(tǒng)進(jìn)行數(shù)據(jù)管理; Yu等[9]研究表明, 在基于網(wǎng)絡(luò)架構(gòu)的嵌入式車輛中, 車載通信相對脆弱, 因此提出了使用混淆和加密技術(shù)保護(hù)ECU免受數(shù)據(jù)嗅探和代碼篡改的方法; Lin等[10]提出了一種安全機制, 這種安全機制可在總線利用率盡可能低的情況下實現(xiàn)高安全級別, 保持如總線負(fù)載和消息延遲等通信開銷在合理水平, 主要預(yù)防偽裝和重放等網(wǎng)絡(luò)攻擊; Kammerer等[11]提出一種星形耦合路由器, 通過路由配置表對CAN總線數(shù)據(jù)幀進(jìn)行異常檢測, 預(yù)防偽造、 修改和拒絕等攻擊, 但由于需要重新設(shè)計網(wǎng)關(guān)等原因, 成本較高. Studnia等[12]提出了一種基于狀態(tài)的入侵檢測系統(tǒng), 主要根據(jù)汽車當(dāng)前的運行狀態(tài)(如停車、 正常行駛、 碰撞后啟動的緊急程序等)檢查在總線上發(fā)送的消息是否合法. 本文采用隨機森林算法, 提出一種針對總線上傳輸報文的指令是否正確的檢測方法. 結(jié)果表明, 該方法在很大程度上提升了車載總線的安全性.
車載CAN總線報文的安全研究主要是在協(xié)議層設(shè)計加解密等一系列措施保證CAN總線報文傳輸?shù)陌踩? 但該方法導(dǎo)致大量的計算開銷, 并存在向后兼容的問題. 報文檢測則著重檢查CAN總線報文的幀格式、 位數(shù)等是否正確, 而報文數(shù)據(jù)本身是否發(fā)生異常通常無法判斷, 尤其是攜帶大量信息、 命令的數(shù)據(jù)域的異常檢測, 對車輛各個ECU都有重要影響.
為了對車載CAN總線的報文進(jìn)行異常檢測, 查看CAN總線報文的數(shù)據(jù)是否為正確數(shù)據(jù), 本文采用一種新的檢測方法, 利用機器學(xué)習(xí)中的隨機森林分類方法進(jìn)行檢測[13]. 隨機森林算法在數(shù)據(jù)集上的表現(xiàn)較好, 且能很好地處理多屬性的數(shù)據(jù), 訓(xùn)練速度較快, 相對于其他的分類算法, 實現(xiàn)也比較方便[14]. 本文使用CAN總線報文構(gòu)造隨機森林, 然后將新的數(shù)據(jù)放入到分類模型中進(jìn)行正?;虍惓5姆诸?
對于原始數(shù)據(jù)集{s1,s2,…,sn}, 采用bootstrap方法有放回地抽取N個訓(xùn)練集, 每個訓(xùn)練集中的數(shù)據(jù)數(shù)相同, 為原數(shù)據(jù)集中數(shù)據(jù)數(shù)的2/3, 由于每次數(shù)據(jù)的抽取均為有放回的隨機抽取, 因此每個子集中都有可能出現(xiàn)相同的數(shù)據(jù)元素, 從而避免了決策樹的局部最優(yōu)問題. 對于抽取出的N個訓(xùn)練集, 分別對應(yīng)生成{h1,h2,…,hn}個不同的決策樹, 在構(gòu)造每棵決策樹時都從M個屬性特征中隨機選取m個屬性, 本文使用Gini系數(shù)的指標(biāo)依次選出m個屬性中的最優(yōu)屬性, 按照CART節(jié)點分裂算法生成決策樹. 對新數(shù)據(jù)進(jìn)行預(yù)測時, 將待預(yù)測數(shù)據(jù)分別輸入這N個決策樹進(jìn)行分類, 最后統(tǒng)計投票, 得出最終預(yù)測結(jié)果.
CAN報文是否正確是一個二分類問題, CAN總線報文的Gini系數(shù)為
其中:D表示某一類CAN總線的訓(xùn)練集報文; 由于CAN報文的最終分類只有正常和異常兩種分類結(jié)果, 因此i也只有兩種取值,i=1時表示該CAN總線報文正常,i=2時表示該CAN總線報文異常;p表示CAN總線報文正常樣本出現(xiàn)的概率.
采用Gini系數(shù)構(gòu)造二叉決策樹, 對隨機選取出m個屬性中的每個屬性都要查看其分裂后的Gini系數(shù), 由于CAN總線的數(shù)據(jù)域共8個字節(jié), 64位二進(jìn)制, 因此共劃分成16種屬性, 分裂后的Gini系數(shù)為
其中:D1和D2表示將訓(xùn)練樣本集D分成兩部分,D集合非空; |D1|和|D2|分別表示兩個子集的樣本數(shù)目; |D|表示訓(xùn)練集D的樣本個數(shù). 一種屬性可能存在多個Gini系數(shù), Gini系數(shù)越小, 屬性的劃分效果越好, 實驗中選取每種屬性的最優(yōu)劃分點進(jìn)行二值分裂.
對新的CAN總線報文進(jìn)行異常檢測時, 首先根據(jù)報文ID判斷報文類別, 找到相應(yīng)的隨機森林模型, 將報文輸入該隨機森林模型中的所有決策樹進(jìn)行異常檢測, 最后統(tǒng)計投票表決最終的異常分類結(jié)果, 基于隨機森林的CAN總線異常檢測過程如圖1所示.
圖1 車載CAN總線報文異常檢測流程Fig.1 Flow chart of message anomaly detection for in-vehicle CAN bus
1) 將CAN總線報文進(jìn)行預(yù)處理, 產(chǎn)生CAN總線報文訓(xùn)練樣本集D和測試樣本集U;
2) 根據(jù)ID將訓(xùn)練樣本集D中的報文數(shù)據(jù)進(jìn)行劃分, 共劃分為52類;
3) 對于每種ID的訓(xùn)練樣本集構(gòu)造隨機森林模型;
4) 分別使用訓(xùn)練集D和測試集U中的樣本對構(gòu)造的隨機森林進(jìn)行異常測試, 通過數(shù)據(jù)分析改變隨機森林模型參數(shù), 提高車載CAN總線報文的異常檢測準(zhǔn)確性;
5) 將新的待測數(shù)據(jù)放入隨機森林模型中進(jìn)行分類測試, 判斷其是否異常.
在構(gòu)造隨機森林前, 首先將采集到的車載CAN總線的報文數(shù)據(jù)進(jìn)行預(yù)處理操作, 實驗中所使用的車載CAN總線報文初始數(shù)據(jù)均由真實車輛采集, 均為真實數(shù)據(jù). 由于報文數(shù)據(jù)存在不同的ID, 不同報文ID的數(shù)據(jù)間沒有可比性, 因此將報文數(shù)據(jù)按不同的報文ID進(jìn)行劃分, 采集的數(shù)據(jù)中共有52種不同報文ID的數(shù)據(jù)幀, 且52種報文ID的數(shù)據(jù)幀數(shù)目也不相同.
CAN報文數(shù)據(jù)的格式以十六進(jìn)制的形式采集, 共有8位. 為方便, 實驗將表1中所列報文數(shù)據(jù)轉(zhuǎn)化成二進(jìn)制的形式進(jìn)行屬性分類, 且數(shù)據(jù)幀的實際傳輸形式也以“0”、 “1”的二進(jìn)制形式進(jìn)行, 經(jīng)過多次實驗, 以4個二進(jìn)制位為一個屬性單元, 共產(chǎn)生16種屬性.
表1 報文數(shù)據(jù)
由于本文采集的CAN總線報文數(shù)據(jù)均為正常數(shù)據(jù), 共約有12萬個, 使用雜序的方法構(gòu)造異常報文, 且異常報文的數(shù)目與正常報文數(shù)目相同, 報文的每個二進(jìn)制位都有0和1兩種可能, 共有64個這樣的二進(jìn)制位, 隨機挑選每條報文的任意數(shù)目, 任意位置的二進(jìn)制位進(jìn)行翻轉(zhuǎn), 盡可能隨機產(chǎn)生異常報文樣本, 保證每種不同報文ID中正常報文樣本和異常報文樣本的數(shù)目相同, 并在每種報文ID的正常和異常樣本中各隨機取出一部分作為訓(xùn)練樣本集, 余下的作為測試集進(jìn)行測試.圖2為分別構(gòu)造“00000133H”、 “00000244H”、 “000003D9H”3種不同ID的部分異常樣本, 其中黑線表示對應(yīng)ID的原始正常報文, 紅色表示相應(yīng)報文ID的個別位置進(jìn)行翻轉(zhuǎn)后的異常報文,圖中每種報文ID都隨機取3條報文, 每條報文均有64個二進(jìn)制位.圖2表示3種不同報文ID中正常報文中0和1的數(shù)目以及進(jìn)行翻轉(zhuǎn)后的異常報文中0和1的數(shù)目.
圖2 異常報文樣本生成Fig.2 Abnormal message sample generation
圖3為截取了與圖2相對應(yīng)的“00000133H”、 “00000244H”、 “000003D9H”3種不同ID的報文數(shù)據(jù)幀中0和1的變化情況, 其中: 橫坐標(biāo)表示報文共有64位二進(jìn)制位; 縱坐標(biāo)表示3種不同ID的正、 異常0和1數(shù)目, 且這3種ID的報文在報文數(shù)目上具有很強的代表意義. 由圖3可見, 同一種ID的不同二進(jìn)制位上出現(xiàn)0和1的數(shù)目并不相同, 尤其ID為“000003D9H”的報文, 不同二進(jìn)制位上0和1的數(shù)目差別較大.
圖3 報文的變化Fig.3 Change of messages
隨機森林模型由多棵決策樹組成, 而決策樹數(shù)目不同會影響實驗構(gòu)造的隨機森林分類模型的準(zhǔn)確性. 本文實驗共采集52種不同ID的數(shù)據(jù), 因此構(gòu)造的52種隨機森林模型隨著決策樹數(shù)目的變化, 分類效果也不相同, 在隨機選取屬性且所有決策樹深度最優(yōu)的情況下, 將隨機森林中的決策樹數(shù)目進(jìn)行改變. 為了充分測試使用隨機森林分類方法判斷CAN總線報文正?;虍惓5臏?zhǔn)確度, 實驗中將構(gòu)造隨機森林分類模型的訓(xùn)練集數(shù)據(jù)樣本也輸入隨機森林進(jìn)行測試, 即構(gòu)造的隨機森林模型分別對訓(xùn)練集樣本和測試集樣本都進(jìn)行測試.
圖4和圖5分別為將不同ID的訓(xùn)練集及測試集中的數(shù)據(jù)放入隨機森林模型進(jìn)行分類的準(zhǔn)確率, 其中不同顏色的折線共有52條, 每種顏色均表示一個ID分類, 折線的變化則表示訓(xùn)練集中的數(shù)據(jù)樣本放入隨機森林中進(jìn)行測試時分類的準(zhǔn)確率. 由圖4和圖5可見: 訓(xùn)練集數(shù)據(jù)樣本和測試集數(shù)據(jù)樣本的準(zhǔn)確率均在90%以上, 其中藍(lán)線的準(zhǔn)確率最低, 這是由于藍(lán)線表示ID為“00000180H”的報文數(shù)目非常少, 導(dǎo)致測試效果相對于其他報文ID較差; 當(dāng)每種報文ID的隨機森林分類模型的決策樹數(shù)目至少為20棵時分類效果最好.
圖4 訓(xùn)練集樣本隨決策樹數(shù)目變化的測試準(zhǔn)確率Fig.4 Test accuracy rate of training set sample with change of number of decision trees
圖5 測試集樣本隨決策樹數(shù)目變化的測試準(zhǔn)確率Fig.5 Text accuracy rate of test set sample with change of number of decision trees
實驗中按照二進(jìn)制位共分為16種屬性, 構(gòu)建隨機森林中決策樹時采用隨機選擇屬性的方法, 但選擇屬性的數(shù)目不同, 對構(gòu)造出的隨機森林準(zhǔn)確率也有較大影響. 為了選擇決策樹中最優(yōu)的屬性數(shù)目, 本文在選定隨機森林中決策樹為20棵后, 將隨機森林中決策樹選擇屬性的數(shù)目進(jìn)行變化, 并使用訓(xùn)練集和測試集的數(shù)據(jù)樣本進(jìn)行測試.
圖6和圖7分別為將不同報文ID的訓(xùn)練集和測試集放入隨機森林模型中, 且改變隨機森林中決策樹的屬性數(shù)目時進(jìn)行測試的結(jié)果, 其中: 橫軸表示隨機森林決策樹中屬性數(shù)目的變化, 共16種屬性, 因此隨機選擇屬性的數(shù)目變化為1~16; 縱軸表示準(zhǔn)確率, 不同的報文ID由不同顏色的線條表示. 由圖6和圖7可見, 在隨機森林中決策樹的數(shù)目為20時, 屬性數(shù)目最好的選擇為7個, 此時測試的準(zhǔn)確率達(dá)98%以上.
圖6 訓(xùn)練集樣本隨屬性數(shù)目變化的測試準(zhǔn)確率Fig.6 Test accuracy rate of training set sample with change of number of attributes
圖7 測試集樣本隨屬性數(shù)目變化的測試準(zhǔn)確率Fig.7 Test accuracy rate of test set sample with change of number of attributes
根據(jù)上述分析結(jié)果, 將隨機森林中決策樹的數(shù)目設(shè)為20, 選擇屬性的數(shù)目設(shè)為7, 使用構(gòu)建好的隨機森林分類模型對接收到的數(shù)據(jù)進(jìn)行異常檢測.圖8為部分實驗檢測結(jié)果, 其中: ID為對應(yīng)報文的ID號; Data表示報文的數(shù)據(jù)域. 檢查報文是否發(fā)生異常, 如果報文為異常報文, 則會出現(xiàn)Anomaly標(biāo)志. 實驗結(jié)果表明, 該方法可有效檢測報文數(shù)據(jù)是否異常.
綜上所述, 本文利用真實車輛采集的大量數(shù)據(jù)進(jìn)行研究, 并在構(gòu)造隨機森林分類算法時進(jìn)行了多次調(diào)整, 不同參數(shù)對異常數(shù)據(jù)幀檢測的準(zhǔn)確率有很大影響. 實驗證明, 選擇合適的參數(shù), 該方法可有效檢測出CAN總線中的異常數(shù)據(jù)幀.
圖8 部分測試結(jié)果Fig.8 Partial test results