目前機(jī)器學(xué)習(xí)是研究車輛網(wǎng)絡(luò)入侵檢測(cè)技術(shù)的熱門方向,通過(guò)引入機(jī)器學(xué)習(xí)算法來(lái)識(shí)別車載總線上的網(wǎng)絡(luò)報(bào)文,可實(shí)現(xiàn)對(duì)車輛已知/未知威脅的入侵檢測(cè)。這種基于機(jī)器學(xué)習(xí)的異常檢測(cè)技術(shù)普適性較強(qiáng),無(wú)需對(duì)適配車型進(jìn)行定制化開發(fā),但存在異常樣本采集數(shù)量大和訓(xùn)練難度高的問(wèn)題。本文將結(jié)合個(gè)人經(jīng)驗(yàn)對(duì)基于機(jī)器學(xué)習(xí)的汽車CAN總線異常檢測(cè)方法展開具體介紹。
01
車載異常檢測(cè)流程
基于機(jī)器學(xué)習(xí)的車載異常檢測(cè)的整體流程如圖1所示,其中關(guān)鍵環(huán)節(jié)包括輸入數(shù)據(jù)、數(shù)據(jù)預(yù)處理、訓(xùn)練及測(cè)試算法、評(píng)估及優(yōu)化。圖1 基于機(jī)器學(xué)習(xí)的車載異常檢測(cè)整體流程
02
數(shù)據(jù)源
針對(duì)特定車型進(jìn)行數(shù)據(jù)的采集,形成有特點(diǎn)的定制化數(shù)據(jù)集,并用此數(shù)據(jù)集進(jìn)行智能算法的訓(xùn)練與驗(yàn)證。在實(shí)際應(yīng)用中,工程師可以直接采用公開數(shù)據(jù)集作為模型訓(xùn)練的數(shù)據(jù),也可以通過(guò)實(shí)際采集車輛真實(shí)數(shù)據(jù)來(lái)獲取數(shù)據(jù)集。公開數(shù)據(jù)集:公開數(shù)據(jù)集CAR-HACKING DATASET[1]中提供了汽車黑客數(shù)據(jù),如圖2所示,其中包括 DoS 攻擊、模糊攻擊、驅(qū)動(dòng)齒輪欺騙攻擊和RPM儀表欺騙攻擊四種類別的數(shù)據(jù)。該數(shù)據(jù)集是通過(guò)在執(zhí)行消息注入攻擊時(shí)利用真實(shí)車輛的OBD-II端口記錄CAN流量來(lái)構(gòu)建的。其數(shù)據(jù)集特征包括Timestamp,CAN ID,DLC(數(shù)據(jù)長(zhǎng)度碼),data(CAN數(shù)據(jù)字段),F(xiàn)lag(T或R,T代表注入信息,R代表正常信息)。公開數(shù)據(jù)集一般是經(jīng)過(guò)公開驗(yàn)證的,更具有通用性和代表性,便于進(jìn)行不同算法異常檢測(cè)效果的比對(duì)。
圖2 CAR-HACKING DATASET[1]
實(shí)車數(shù)據(jù)集:數(shù)據(jù)源還可以通過(guò)實(shí)車采集的方式獲取,通過(guò)向車內(nèi)注入特定的攻擊,并使用CAN采集工具對(duì)實(shí)車數(shù)據(jù)中的報(bào)文數(shù)據(jù)進(jìn)行采集,采集時(shí)需要注意采集時(shí)間要盡可能平均。由此得到的實(shí)車數(shù)據(jù)集更加真實(shí),其中可能包含一些公開數(shù)據(jù)集無(wú)法覆蓋的異常場(chǎng)景。此外,實(shí)車數(shù)據(jù)采集得到的數(shù)據(jù)集通常還需要進(jìn)行預(yù)處理工作。2.1 數(shù)據(jù)預(yù)處理
機(jī)器學(xué)習(xí)算法模型的質(zhì)量很大程度取決于數(shù)據(jù)的質(zhì)量。原始數(shù)據(jù)往往不利于模型的訓(xùn)練,因此需要進(jìn)行數(shù)據(jù)預(yù)處理以提高數(shù)據(jù)的質(zhì)量,使其更好地適用模型。數(shù)據(jù)預(yù)處理過(guò)程一般包括特征選取、數(shù)據(jù)標(biāo)準(zhǔn)化及特征編碼,如圖3所示。在實(shí)際車載異常檢測(cè)應(yīng)用中,最終選用的數(shù)據(jù)預(yù)處理方法通常會(huì)根據(jù)智能算法的不同而有所差異。圖3 數(shù)據(jù)處理過(guò)程
CAN報(bào)文的特征及描述如表1所示。記錄每一條數(shù)據(jù)的時(shí)間標(biāo)識(shí)Time,每一條報(bào)文的序號(hào)為CAN ID,相同CAN ID報(bào)文出現(xiàn)的時(shí)間間隔為period。Payload部分通常將十六進(jìn)制的信息轉(zhuǎn)換為十進(jìn)制,根據(jù)CAN報(bào)文的特點(diǎn),將payload劃分為8個(gè)特征位(byte0,byte1, byte2, byte3, byte4, byte5, byte6, byte7),它們?nèi)糠植荚?~255之間。一般輸入數(shù)據(jù)格式為Dataframe格式,對(duì)應(yīng)的特征是Dataframe的列名稱。在進(jìn)行不同算法的訓(xùn)練時(shí),選取包含指定特征值(某些列)的Dataframe進(jìn)行后續(xù)數(shù)據(jù)標(biāo)準(zhǔn)化的操作。表1 CAN報(bào)文特征
2.3 數(shù)據(jù)標(biāo)準(zhǔn)化車載網(wǎng)絡(luò)報(bào)文的數(shù)據(jù)信號(hào)(數(shù)據(jù)payload部分)具有不同的量綱和取值范圍,通過(guò)標(biāo)準(zhǔn)化,在不改變樣本數(shù)據(jù)分布的同時(shí),使得這些數(shù)值信號(hào)能夠進(jìn)行比較。對(duì)于利用梯度下降的模型,數(shù)值型數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化可以削弱不同特征對(duì)模型的影響差異,使得梯度下降能更快地找到最優(yōu)解,同時(shí)結(jié)果更可靠。對(duì)于決策樹這類不通過(guò)梯度下降而利用信息增益比的算法,則不需要進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化,整體流程如圖4所示。標(biāo)準(zhǔn)化對(duì)樣本的payload特征分別進(jìn)行計(jì)算使其滿足正態(tài)分布,Z= (x- μ)/σ。一般情況下,標(biāo)準(zhǔn)化與數(shù)據(jù)分布相關(guān),具有更強(qiáng)的統(tǒng)計(jì)意義,在車載入侵檢測(cè)數(shù)據(jù)的處理上更加通用合適。對(duì)于需要數(shù)據(jù)標(biāo)準(zhǔn)化的算法,使用Scikit-learn中preprocessing.StandardScaler(df)函數(shù),df為需要標(biāo)準(zhǔn)化的數(shù)據(jù)(只含有payload部分的Dataframe),得到標(biāo)準(zhǔn)化后的數(shù)據(jù)特征編碼或直接進(jìn)行訓(xùn)練。
圖4 數(shù)據(jù)標(biāo)準(zhǔn)化流程
2.4 特征編碼
車載網(wǎng)絡(luò)報(bào)文中,數(shù)據(jù)場(chǎng)以外還存在一部分報(bào)文內(nèi)容,如CAN ID。對(duì)于很多機(jī)器學(xué)習(xí)算法,分類器往往默認(rèn)數(shù)據(jù)是連續(xù)的,并且是有序的,因此需要對(duì)此類特征進(jìn)行編碼。對(duì)于維度較低的特征可以直接使用獨(dú)熱編碼。對(duì)于維度較高的特征,可以使用二進(jìn)制編碼。獨(dú)熱編碼是用等同于狀態(tài)數(shù)量的維度進(jìn)行編碼,每種狀態(tài)下的獨(dú)熱編碼只有其中一位為1,其余均為0。編碼后的特征互斥,每次只有一個(gè)激活,有利于模型處理數(shù)據(jù)。輸入數(shù)據(jù)集,如CAN ID經(jīng)過(guò)one_hot(df)函數(shù),將輸入數(shù)據(jù)進(jìn)行one-hot編碼。一個(gè)CAN ID將變?yōu)?6*3的向量,如圖5所示。該向量將作為訓(xùn)練模型的輸入,進(jìn)行后續(xù)的模型訓(xùn)練工作。圖5 CAN ID 特征編碼[1]
03
算法訓(xùn)練及測(cè)試
輸入數(shù)據(jù)集以7:1.5:1.5的比例劃分成訓(xùn)練集、驗(yàn)證集和測(cè)試集。訓(xùn)練集數(shù)據(jù)只用來(lái)訓(xùn)練模型,其數(shù)據(jù)不出現(xiàn)在算法測(cè)試中。驗(yàn)證集主要是用來(lái)反映訓(xùn)練得到模型的相關(guān)效果,也會(huì)在其上進(jìn)行算法模型的優(yōu)化與調(diào)試,反復(fù)驗(yàn)證直到達(dá)到最佳效果。測(cè)試集主要表現(xiàn)模型的最終效果,測(cè)試集數(shù)據(jù)也是用來(lái)評(píng)價(jià)模型的數(shù)據(jù),測(cè)試集數(shù)據(jù)不出現(xiàn)在算法訓(xùn)練中。數(shù)據(jù)集劃分流程如圖6所示,首先輸入數(shù)據(jù)采用Scikit-learn中model_selection.train_test_split()函數(shù),此函數(shù)可以將數(shù)據(jù)集先劃分成7:3的訓(xùn)練集和測(cè)試數(shù)據(jù),然后再將測(cè)試數(shù)據(jù)集劃分成5:5的驗(yàn)證集與測(cè)試集。圖6 數(shù)據(jù)集劃分流程
3.2 SMOTE采樣
對(duì)于采集到的車載網(wǎng)絡(luò)數(shù)據(jù),攻擊報(bào)文數(shù)量遠(yuǎn)少于正常報(bào)文,造成了樣本類別不平衡。機(jī)器學(xué)習(xí)中往往假定訓(xùn)練樣本各類別是同等數(shù)量,即各類樣本數(shù)目是均衡的。一般來(lái)說(shuō),不平衡樣本會(huì)導(dǎo)致訓(xùn)練模型側(cè)重樣本數(shù)目較多的類別,而“輕視”樣本數(shù)目較少類別,這樣模型在測(cè)試數(shù)據(jù)上的泛化能力就會(huì)受到影響。通過(guò)SMOTE[2](合成少數(shù)類過(guò)采樣技術(shù)),在少數(shù)類別樣本之間進(jìn)行插值生成新的樣本,如圖7。相比隨機(jī)過(guò)采樣,SMOTE大大降低了過(guò)擬合的可能。圖7 SMOTE采樣原理 [2]
在訓(xùn)練模型前對(duì)各類別的訓(xùn)練數(shù)據(jù)進(jìn)行SMOTE過(guò)采樣的操作,SMOTE過(guò)采樣流程如圖8。使用imblearn.over_sampling中的SMOTE().fit_resample(X,Y)函數(shù),其中X為輸入需要訓(xùn)練的報(bào)文集合,Y為X中每一條報(bào)文的類別。經(jīng)過(guò)SMOTE處理,各類別的報(bào)文數(shù)量會(huì)變得一樣多,可以進(jìn)行下一步的操作。圖8 SMOTE采樣流程
3.3 模型訓(xùn)練
模型訓(xùn)練是從標(biāo)簽化訓(xùn)練數(shù)據(jù)集中推斷出函數(shù)的機(jī)器學(xué)習(xí)任務(wù)。常用的模型訓(xùn)練算法包括RNN(Recurrent Neural Network,循環(huán)神經(jīng)網(wǎng)絡(luò))、LSTM(Long Short-Term Memory,長(zhǎng)短期記憶網(wǎng)絡(luò))、GRU(Gated Recurrent Units,門控循環(huán)神經(jīng)網(wǎng)絡(luò))、DCNN(Dynamic Convolution Neural Network,深度卷積神經(jīng)網(wǎng)絡(luò))、SVM(Support Vector Machine,支持向量機(jī))、DT(Decision Tree,決策樹)、RF(Random Forest,隨機(jī)森林)、XGBoost(Extreme Gradient Boosting,極端梯度提升)、Stacking(集成學(xué)習(xí)算法)、Clustering(聚類)等。
04
評(píng)估與優(yōu)化
模型的總體優(yōu)化流程如圖9所示,對(duì)模型測(cè)試的結(jié)果進(jìn)行評(píng)估,根據(jù)評(píng)估的結(jié)果進(jìn)一步優(yōu)化模型。下面詳細(xì)闡述評(píng)估指標(biāo)和優(yōu)化方式。方案使用平均準(zhǔn)確率、P-R曲線、F-score對(duì)模型進(jìn)行評(píng)價(jià)。平均準(zhǔn)確率是判斷入侵檢測(cè)算法優(yōu)劣的最直觀的評(píng)價(jià)標(biāo)準(zhǔn)。P-R曲線和F-score能更加直觀地反映入侵檢測(cè)模型在特定數(shù)據(jù)集上的表現(xiàn)。本方案選擇平均準(zhǔn)確率作為模型在驗(yàn)證集上的評(píng)價(jià)指標(biāo),在超參數(shù)調(diào)優(yōu)時(shí),根據(jù)平均準(zhǔn)確率選擇更優(yōu)超參數(shù)組合。本方案選擇F-score作為模型在測(cè)試集上的評(píng)價(jià)指標(biāo),評(píng)價(jià)最終的模型效果。圖9 模型優(yōu)化流程
Accuracy = (TP + TN) / (TP + TN + FP + FN)其中,TP(true positive)是正例,代表被模型正確地預(yù)測(cè)為正類別的樣本。例如,模型推斷出某條報(bào)文是攻擊報(bào)文,而該報(bào)文確實(shí)是攻擊報(bào)文。TN(true negative)為假正例,代表被模型正確地預(yù)測(cè)為負(fù)類別的樣本。例如,模型推斷出某條報(bào)文不是攻擊報(bào)文,而該報(bào)文確實(shí)不是攻擊報(bào)文。FN (false negative)是假負(fù)例,代表被模型錯(cuò)誤地預(yù)測(cè)為負(fù)類別的樣本。例如,模型推斷出某條報(bào)文不是攻擊報(bào)文(負(fù)類別),但該條報(bào)文其實(shí)是攻擊報(bào)文。FP(false positive)為假正例,代表被模型錯(cuò)誤地預(yù)測(cè)為正類別的樣本。例如,模型推斷出某條報(bào)文是攻擊報(bào)文(正類別),但該條報(bào)文其實(shí)不是攻擊報(bào)文。準(zhǔn)確率是指分類正確的樣本占總樣本個(gè)數(shù)的比例。在不同類別的樣本比例非常不均衡時(shí),占比大的類別將成為影響準(zhǔn)確率的主要因素。導(dǎo)致模型整體準(zhǔn)確率很高,但是不代表對(duì)小占比類別的分類效果很好。因此,使用平均準(zhǔn)確率,即每個(gè)類別下的樣本準(zhǔn)確率的算術(shù)平均作為模型評(píng)估的指標(biāo)。在超參數(shù)選擇階段,算法會(huì)根據(jù)各個(gè)超參數(shù)的準(zhǔn)確率Accuracy,進(jìn)行選擇。選擇準(zhǔn)確率最高的超參數(shù)作為模型使用的超參數(shù)。精確率P = TP / (TP+FP),指分類正確的正樣本個(gè)數(shù)占分類器判定為正樣本的樣本個(gè)數(shù)的比例。召回率R = TP / (TP+FN),指分類正確的正樣本個(gè)數(shù)占真正的正樣本個(gè)數(shù)的比例。通過(guò)F-score進(jìn)行定量分析,同時(shí)考慮了精確率和召回率。 F-score =(1+β^2 )*P*R/(β^2*P+R)智能分析使用F1-score作為指標(biāo),評(píng)價(jià)最終模型在測(cè)試集上的表現(xiàn)效果。入侵檢測(cè)使用到的機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)模型包含大量的超參數(shù),超參數(shù)直接影響了模型的優(yōu)劣,尋找超參數(shù)的最優(yōu)取值是至關(guān)重要的問(wèn)題。通過(guò)超參數(shù)優(yōu)化方法和K折交叉驗(yàn)證,找到最優(yōu)的超參數(shù),使模型能夠準(zhǔn)確地判斷報(bào)文類型。K折交叉驗(yàn)證用于模型調(diào)優(yōu),測(cè)試模型預(yù)測(cè)未用于估計(jì)的新數(shù)據(jù)的能力,找到使得模型泛化性能最優(yōu)的超參值。具體原理如圖10,將訓(xùn)練數(shù)據(jù)分成K份,用其中的(K-1)份訓(xùn)練模型,剩余的1份數(shù)據(jù)用于評(píng)估模型。循環(huán)迭代K次,并對(duì)得到的K個(gè)評(píng)估結(jié)果取平均值,得到最終的結(jié)果。圖10 K折交叉驗(yàn)證原理[3]
K值越小,模型越偏差越低、方差越高,容易出現(xiàn)過(guò)擬合。K值越大,則偏差提高,方差降低,且計(jì)算開銷增大。在訓(xùn)練中我們一般選擇k=5。使用下面函數(shù)進(jìn)行K折交叉驗(yàn)證劃分,sklearn.model_selection.KFold(n_splits=5,shuffle=True,random_state=999).split(df),其中n_splits為交叉驗(yàn)證的折數(shù),shuffle表示是否打亂數(shù)據(jù),random_state為隨機(jī)種子,df為訓(xùn)練數(shù)據(jù)。超參數(shù)優(yōu)化方法主要有:網(wǎng)格搜索和貝葉斯優(yōu)化。網(wǎng)格搜索:以窮舉的方式遍歷所有可能的參數(shù)組合,網(wǎng)格搜索在1維、2維、3維的搜索空間表現(xiàn)相對(duì)來(lái)說(shuō)不錯(cuò),很容易覆蓋到空間的大部分,而且耗時(shí)不大。使用sklearn.model_selection中的GridSearchCV ()進(jìn)行超參數(shù)選擇和交叉驗(yàn)證。貝葉斯優(yōu)化:網(wǎng)格搜索和隨機(jī)搜索沒有利用已搜索點(diǎn)的信息,使用這些信息指導(dǎo)搜索過(guò)程可以提高結(jié)果的質(zhì)量以及搜索的速度。貝葉斯優(yōu)化利用之前已搜索點(diǎn)的信息確定下一個(gè)搜索點(diǎn),用于求解維數(shù)不高的黑盒優(yōu)化問(wèn)題。它的本質(zhì)其實(shí)是一種回歸模型,即利用回歸模型預(yù)測(cè)的函數(shù)值來(lái)選擇下一個(gè)搜索點(diǎn)。使用hyperopt中的fmin()函數(shù)進(jìn)行貝葉斯優(yōu)化,給出最優(yōu)模型參數(shù)。以訓(xùn)練集的交叉驗(yàn)證結(jié)果作為性能度量。根據(jù)模型的超參數(shù)數(shù)量、取值范圍、性能影響等因素,選擇不同的超參數(shù)優(yōu)化方法,對(duì)模型進(jìn)行參數(shù)優(yōu)化。
05
小結(jié)
面向智能網(wǎng)聯(lián)汽車無(wú)線通信系統(tǒng)、車載娛樂(lè)系統(tǒng)、駕駛輔助系統(tǒng)以及典型智能網(wǎng)聯(lián)場(chǎng)景,機(jī)器學(xué)習(xí)作為車載網(wǎng)絡(luò)入侵檢測(cè)中至關(guān)重要的一項(xiàng)技術(shù),可實(shí)現(xiàn)對(duì)已知/未知攻擊行為的特征識(shí)別檢測(cè),最終助力車端和云端安全聯(lián)動(dòng),保障車載網(wǎng)絡(luò)的信息安全。
參考文獻(xiàn):
[1] Seo, Eunbi, Hyun Min Song, and Huy Kang Kim. "GIDS: GAN based intrusion detection system for in-vehicle network." 2018 16th Annual Conference on Privacy, Security and Trust (PST). IEEE, 2018.
[2] He H, Garcia E A. Learning from imbalanced data[J]. IEEE Transactions on knowledge and data engineering, 2009, 21(9): 1263-1284.
[3] Ashfaque J M, Iqbal A. Introduction to support vector machines and kernel methods[J]. publication at https://www. researchgate. net/publication/332370436, 2019.