吳玲云, 秦貴和, 于 赫
(1. 吉林大學 計算機科學與技術學院, 長春 130012; 2. 長春大學 電子信息工程學院, 長春 130022)
汽車上的電控設備, 除了基本的電控系統, 目前還有輔助駕駛系統與半自動駕駛系統, 如汽車輪胎壓力檢測、 輔助制動、 智能泊車等, 而這些系統的數據信息均從車載控制器局域網(CAN)總線中獲取. 汽車智能化的發展方向使汽車與互聯網的聯系非常緊密, 而汽車上的電子設備及智能化系統都可能成為黑客入侵車載總線網絡的途徑, 一旦黑客成功入侵車載CAN總線網絡, 駕駛人員很可能失去整輛汽車的控制權, 汽車將由入侵者控制其各項功能及運動狀態. Larson等[1]給出了使用CANopen協議的安全規則對非法的電子控制單元(ECU)行為進行檢測; Muter等給出了使用多個傳感器對汽車CAN總線的各種信息進行檢測, 組建了一個異常檢測系統[2], 并進一步探討了一種基于熵的車載網絡攻擊檢測方法, 評估了不同的攻擊場景, 表明信息理論的檢測方法可成功識別車載網絡異常[3]; Murvay等[4]提出了一種基于信息的特征識別方法進行檢測; Groza等[5-7]研究了多個在車載CAN上的廣播認證方法, 并通過實驗進行了證明; Schulze等[8]在汽車系統中建立了一個數據管理系統進行數據管理; Yu等[9]研究表明, 在基于網絡架構的嵌入式車輛中, 車載通信相對脆弱, 因此提出了使用混淆和加密技術保護ECU免受數據嗅探和代碼篡改的方法; Lin等[10]提出了一種安全機制, 這種安全機制可在總線利用率盡可能低的情況下實現高安全級別, 保持如總線負載和消息延遲等通信開銷在合理水平, 主要預防偽裝和重放等網絡攻擊; Kammerer等[11]提出一種星形耦合路由器, 通過路由配置表對CAN總線數據幀進行異常檢測, 預防偽造、 修改和拒絕等攻擊, 但由于需要重新設計網關等原因, 成本較高. Studnia等[12]提出了一種基于狀態的入侵檢測系統, 主要根據汽車當前的運行狀態(如停車、 正常行駛、 碰撞后啟動的緊急程序等)檢查在總線上發送的消息是否合法. 本文采用隨機森林算法, 提出一種針對總線上傳輸報文的指令是否正確的檢測方法. 結果表明, 該方法在很大程度上提升了車載總線的安全性.
車載CAN總線報文的安全研究主要是在協議層設計加解密等一系列措施保證CAN總線報文傳輸的安全性, 但該方法導致大量的計算開銷, 并存在向后兼容的問題. 報文檢測則著重檢查CAN總線報文的幀格式、 位數等是否正確, 而報文數據本身是否發生異常通常無法判斷, 尤其是攜帶大量信息、 命令的數據域的異常檢測, 對車輛各個ECU都有重要影響.
為了對車載CAN總線的報文進行異常檢測, 查看CAN總線報文的數據是否為正確數據, 本文采用一種新的檢測方法, 利用機器學習中的隨機森林分類方法進行檢測[13]. 隨機森林算法在數據集上的表現較好, 且能很好地處理多屬性的數據, 訓練速度較快, 相對于其他的分類算法, 實現也比較方便[14]. 本文使用CAN總線報文構造隨機森林, 然后將新的數據放入到分類模型中進行正常或異常的分類.
對于原始數據集{s1,s2,…,sn}, 采用bootstrap方法有放回地抽取N個訓練集, 每個訓練集中的數據數相同, 為原數據集中數據數的2/3, 由于每次數據的抽取均為有放回的隨機抽取, 因此每個子集中都有可能出現相同的數據元素, 從而避免了決策樹的局部最優問題. 對于抽取出的N個訓練集, 分別對應生成{h1,h2,…,hn}個不同的決策樹, 在構造每棵決策樹時都從M個屬性特征中隨機選取m個屬性, 本文使用Gini系數的指標依次選出m個屬性中的最優屬性, 按照CART節點分裂算法生成決策樹. 對新數據進行預測時, 將待預測數據分別輸入這N個決策樹進行分類, 最后統計投票, 得出最終預測結果.
CAN報文是否正確是一個二分類問題, CAN總線報文的Gini系數為
其中:D表示某一類CAN總線的訓練集報文; 由于CAN報文的最終分類只有正常和異常兩種分類結果, 因此i也只有兩種取值,i=1時表示該CAN總線報文正常,i=2時表示該CAN總線報文異常;p表示CAN總線報文正常樣本出現的概率.
采用Gini系數構造二叉決策樹, 對隨機選取出m個屬性中的每個屬性都要查看其分裂后的Gini系數, 由于CAN總線的數據域共8個字節, 64位二進制, 因此共劃分成16種屬性, 分裂后的Gini系數為
其中:D1和D2表示將訓練樣本集D分成兩部分,D集合非空; |D1|和|D2|分別表示兩個子集的樣本數目; |D|表示訓練集D的樣本個數. 一種屬性可能存在多個Gini系數, Gini系數越小, 屬性的劃分效果越好, 實驗中選取每種屬性的最優劃分點進行二值分裂.
對新的CAN總線報文進行異常檢測時, 首先根據報文ID判斷報文類別, 找到相應的隨機森林模型, 將報文輸入該隨機森林模型中的所有決策樹進行異常檢測, 最后統計投票表決最終的異常分類結果, 基于隨機森林的CAN總線異常檢測過程如圖1所示.

圖1 車載CAN總線報文異常檢測流程Fig.1 Flow chart of message anomaly detection for in-vehicle CAN bus
1) 將CAN總線報文進行預處理, 產生CAN總線報文訓練樣本集D和測試樣本集U;
2) 根據ID將訓練樣本集D中的報文數據進行劃分, 共劃分為52類;
3) 對于每種ID的訓練樣本集構造隨機森林模型;
4) 分別使用訓練集D和測試集U中的樣本對構造的隨機森林進行異常測試, 通過數據分析改變隨機森林模型參數, 提高車載CAN總線報文的異常檢測準確性;
5) 將新的待測數據放入隨機森林模型中進行分類測試, 判斷其是否異常.
在構造隨機森林前, 首先將采集到的車載CAN總線的報文數據進行預處理操作, 實驗中所使用的車載CAN總線報文初始數據均由真實車輛采集, 均為真實數據. 由于報文數據存在不同的ID, 不同報文ID的數據間沒有可比性, 因此將報文數據按不同的報文ID進行劃分, 采集的數據中共有52種不同報文ID的數據幀, 且52種報文ID的數據幀數目也不相同.
CAN報文數據的格式以十六進制的形式采集, 共有8位. 為方便, 實驗將表1中所列報文數據轉化成二進制的形式進行屬性分類, 且數據幀的實際傳輸形式也以“0”、 “1”的二進制形式進行, 經過多次實驗, 以4個二進制位為一個屬性單元, 共產生16種屬性.

表1 報文數據
由于本文采集的CAN總線報文數據均為正常數據, 共約有12萬個, 使用雜序的方法構造異常報文, 且異常報文的數目與正常報文數目相同, 報文的每個二進制位都有0和1兩種可能, 共有64個這樣的二進制位, 隨機挑選每條報文的任意數目, 任意位置的二進制位進行翻轉, 盡可能隨機產生異常報文樣本, 保證每種不同報文ID中正常報文樣本和異常報文樣本的數目相同, 并在每種報文ID的正常和異常樣本中各隨機取出一部分作為訓練樣本集, 余下的作為測試集進行測試.圖2為分別構造“00000133H”、 “00000244H”、 “000003D9H”3種不同ID的部分異常樣本, 其中黑線表示對應ID的原始正常報文, 紅色表示相應報文ID的個別位置進行翻轉后的異常報文,圖中每種報文ID都隨機取3條報文, 每條報文均有64個二進制位.圖2表示3種不同報文ID中正常報文中0和1的數目以及進行翻轉后的異常報文中0和1的數目.

圖2 異常報文樣本生成Fig.2 Abnormal message sample generation
圖3為截取了與圖2相對應的“00000133H”、 “00000244H”、 “000003D9H”3種不同ID的報文數據幀中0和1的變化情況, 其中: 橫坐標表示報文共有64位二進制位; 縱坐標表示3種不同ID的正、 異常0和1數目, 且這3種ID的報文在報文數目上具有很強的代表意義. 由圖3可見, 同一種ID的不同二進制位上出現0和1的數目并不相同, 尤其ID為“000003D9H”的報文, 不同二進制位上0和1的數目差別較大.

圖3 報文的變化Fig.3 Change of messages
隨機森林模型由多棵決策樹組成, 而決策樹數目不同會影響實驗構造的隨機森林分類模型的準確性. 本文實驗共采集52種不同ID的數據, 因此構造的52種隨機森林模型隨著決策樹數目的變化, 分類效果也不相同, 在隨機選取屬性且所有決策樹深度最優的情況下, 將隨機森林中的決策樹數目進行改變. 為了充分測試使用隨機森林分類方法判斷CAN總線報文正?;虍惓5臏蚀_度, 實驗中將構造隨機森林分類模型的訓練集數據樣本也輸入隨機森林進行測試, 即構造的隨機森林模型分別對訓練集樣本和測試集樣本都進行測試.
圖4和圖5分別為將不同ID的訓練集及測試集中的數據放入隨機森林模型進行分類的準確率, 其中不同顏色的折線共有52條, 每種顏色均表示一個ID分類, 折線的變化則表示訓練集中的數據樣本放入隨機森林中進行測試時分類的準確率. 由圖4和圖5可見: 訓練集數據樣本和測試集數據樣本的準確率均在90%以上, 其中藍線的準確率最低, 這是由于藍線表示ID為“00000180H”的報文數目非常少, 導致測試效果相對于其他報文ID較差; 當每種報文ID的隨機森林分類模型的決策樹數目至少為20棵時分類效果最好.

圖4 訓練集樣本隨決策樹數目變化的測試準確率Fig.4 Test accuracy rate of training set sample with change of number of decision trees

圖5 測試集樣本隨決策樹數目變化的測試準確率Fig.5 Text accuracy rate of test set sample with change of number of decision trees
實驗中按照二進制位共分為16種屬性, 構建隨機森林中決策樹時采用隨機選擇屬性的方法, 但選擇屬性的數目不同, 對構造出的隨機森林準確率也有較大影響. 為了選擇決策樹中最優的屬性數目, 本文在選定隨機森林中決策樹為20棵后, 將隨機森林中決策樹選擇屬性的數目進行變化, 并使用訓練集和測試集的數據樣本進行測試.
圖6和圖7分別為將不同報文ID的訓練集和測試集放入隨機森林模型中, 且改變隨機森林中決策樹的屬性數目時進行測試的結果, 其中: 橫軸表示隨機森林決策樹中屬性數目的變化, 共16種屬性, 因此隨機選擇屬性的數目變化為1~16; 縱軸表示準確率, 不同的報文ID由不同顏色的線條表示. 由圖6和圖7可見, 在隨機森林中決策樹的數目為20時, 屬性數目最好的選擇為7個, 此時測試的準確率達98%以上.

圖6 訓練集樣本隨屬性數目變化的測試準確率Fig.6 Test accuracy rate of training set sample with change of number of attributes

圖7 測試集樣本隨屬性數目變化的測試準確率Fig.7 Test accuracy rate of test set sample with change of number of attributes
根據上述分析結果, 將隨機森林中決策樹的數目設為20, 選擇屬性的數目設為7, 使用構建好的隨機森林分類模型對接收到的數據進行異常檢測.圖8為部分實驗檢測結果, 其中: ID為對應報文的ID號; Data表示報文的數據域. 檢查報文是否發生異常, 如果報文為異常報文, 則會出現Anomaly標志. 實驗結果表明, 該方法可有效檢測報文數據是否異常.
綜上所述, 本文利用真實車輛采集的大量數據進行研究, 并在構造隨機森林分類算法時進行了多次調整, 不同參數對異常數據幀檢測的準確率有很大影響. 實驗證明, 選擇合適的參數, 該方法可有效檢測出CAN總線中的異常數據幀.

圖8 部分測試結果Fig.8 Partial test results