何世敏,劉嘉勇,鄭榮鋒
(1.四川大學(xué)電子信息學(xué)院,成都 610065;2.四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都 610065)
由于在實際的工業(yè)控制系統(tǒng)中,采集到的正常流量樣本數(shù)遠(yuǎn)多于異常流量的樣本數(shù)。所以采用傳統(tǒng)的支持向量機算法對正負(fù)樣本分類的準(zhǔn)確率會較低。而單類支持向量機算法利用一種類型的樣本數(shù)據(jù)就可以訓(xùn)練出檢測模型,并且也不需要對數(shù)據(jù)類型進行標(biāo)記。該算法是通過核函數(shù)把輸入的工控流量數(shù)據(jù)映射到高維特征空間,并在此空間中找出最大超平面來分類出異常和正常類型[1-3]。文獻[1]提出了一種基于單類支持向量機和遞歸K領(lǐng)域方法結(jié)合的異常檢測技術(shù),通過不斷調(diào)節(jié)單類支持向量機算法中核函數(shù)的參數(shù)g,算法本身參數(shù)C和設(shè)置K領(lǐng)域的閾值來提高檢測異常流量的準(zhǔn)確率。文獻[2]中,作者通過使用單類支持向量機和增量學(xué)習(xí)的方法分類正常和異常的數(shù)據(jù)類型。文獻[3]中,作者通過在單類支持向量機模型和K-means方法來檢測工控網(wǎng)絡(luò)流量。這些檢測方法都能夠分類出異常類型,但是對單類支持向量機中核函數(shù)的參數(shù)g和算法的本身參數(shù)C的優(yōu)化,傳統(tǒng)的方法是采用網(wǎng)格搜索法。該方法雖然具有全局的搜索能力,但是耗時多,效率低[4]。此外,在實際的工業(yè)操作過程中,由于獲得的樣本量大,數(shù)據(jù)維數(shù)過多,會使得訓(xùn)練模型和異常檢測時間復(fù)雜度高[2-3]。
本文針對西門子S7協(xié)議的通信特征和減少模型計算時間消耗的問題,采用單類支持向量機的算法建立異常檢測模型,同時結(jié)合了主成分分析法對數(shù)據(jù)的特征進行降維,減少了模型的訓(xùn)練和檢測時間。
在傳統(tǒng)的針對網(wǎng)絡(luò)層和傳輸層的網(wǎng)絡(luò)異常檢測研究中,一般選擇源端口、目的端口、源IP、目的IP、IP包總長度、TCP總長度、窗口流量大小作為能夠代表原數(shù)據(jù)包的特征[5]。針對在實際情況中,對工控網(wǎng)絡(luò)應(yīng)用層的攻擊手段較多的特點,本文除此之外,還對應(yīng)用層的S7協(xié)議進行了特征選擇。
S7協(xié)議的通信端口是102端口,工作在TPKT協(xié)議和COTP協(xié)議之上。該協(xié)議被IP頭、TCP頭、TPKT頭和COTP頭封裝。其數(shù)據(jù)包結(jié)構(gòu)如圖1所示。
圖1 S7協(xié)議數(shù)據(jù)包結(jié)構(gòu)
根據(jù)文獻[12]對S7協(xié)議的分析,Header部分是由Protocol Id、ROSCRT、Protocol Data Unit ReferenceData、Length、Parameter length字段組成,其中除了Protocol Data Unit Reference字段的值會隨著請求與響應(yīng)命令的發(fā)送增加外,其他字段的值都是固定不變的。因此本文把Protocol Data Unit Reference字段作為特征之一。
Parameters部分由Parameters set和Parameter Data字段組成。在Parameters set中Function字段代表的是PLC的操作,而在一般的攻擊行為中,都會通過改變Function的值來改變對PLC的操作,因此,F(xiàn)unction字段也作為本文的特征之一。
Parameter Data字段定位PLC中的內(nèi)存信息[6],該字段結(jié)構(gòu)如圖2所示。為了提取出內(nèi)存地址,字節(jié)大小,本文把Parameter Data整個字段作為特征。
圖2 Parameter Data結(jié)構(gòu)
Data部分中存儲的是PLC操作的數(shù)值,本文把如圖3所示的字段作為特征。因為文中在異常檢測實驗中,為了獲得異常流量數(shù)據(jù),會在實驗平臺上運行多種攻擊腳本,其中一種就是偽造圖中所示字段數(shù)值來改變發(fā)電機轉(zhuǎn)速。
圖3 Data字段
假設(shè)采集到的PLC和上位機之間的網(wǎng)絡(luò)流量中數(shù)據(jù)包有m個,經(jīng)過特征選擇之后,每個數(shù)據(jù)包中共有n=19個特征代表原始樣本的信息,用矩陣形式表達如下:
在特征選擇的過程中選擇的有效特征越多,越能體現(xiàn)原始樣本的信息。但是在實際的工控系統(tǒng)中,由于樣本量大和矩陣M的維多數(shù)的原因,會造成訓(xùn)練模型和檢測異常的時間消耗過多的問題。為此,本文在對數(shù)據(jù)包特征選擇之后,還采用主成分分析法對這些提取出的特征進降維處理。該算法流程圖如圖4所示。
圖4 主成分分析法流程
步驟一:在經(jīng)過特征選擇之后,確定S7協(xié)議數(shù)據(jù)包的n=19個特征,用并將特征從網(wǎng)絡(luò)層,傳輸層和應(yīng)用提取出。
步驟二:將n個特征的值歸一化。歸一化處理是因為提取出的特征往往是具有不同的量綱單位和大小,這樣的數(shù)據(jù)如果經(jīng)過降維處理,會使得結(jié)果不在同一數(shù)據(jù)范圍類,不具有可比性。本文采用的方法是首先求得每個數(shù)據(jù)包的n個特征的均值 μ和標(biāo)準(zhǔn)差δ,然后根據(jù)公式ni'=(ni-μ)/δ計算歸一化后的特征值。其中ni代表的是第i個特征值,用ni'代替原來的ni。
步驟三:把經(jīng)過歸一化處理的特征排列成矩陣M。 M=(N1,N2,N3…Nm),其中 Ni=(n1',n2'…nn')T。
步驟四:計算矩陣M1。根據(jù)主成分分析法的原理,在變換過程中需要對矩陣M進行均值化。目的是為了減少那些遠(yuǎn)離平均值的點帶來的降維誤差,同時也是為了對歸一化做進一步的規(guī)范[7]。均值化的第一步是對M中的樣本求均值向量,然后用M中的樣本減去均值向量得到新的矩陣M1。
步驟五:計算矩陣K。首先計算特征M1矩陣的協(xié)方差矩陣,然后求出協(xié)方差矩陣的特征向量和特征向量對應(yīng)的特征值,最后將特征向量按照特征值的大小降序排列,得到矩陣K。
步驟六:計算矩陣Y。去均值化之后,將樣本中的n個特征經(jīng)過投影映射,過程如下:
所得的結(jié)果Y就是由新特征組成的矩陣,其中yij=(ki1n1j'+ki2n2j'+…kinnnj')。
單類支持向量機的本質(zhì)是把原點看成異于訓(xùn)練樣本類型的點,通過非線性映射關(guān)系,把在低維空間中的數(shù)據(jù)映射到高維空間中,并在這個空間中找出一個超平面,使得原點到這個平面的距離盡可能地大[9-10]。該算法流程如圖5所示。
圖5 單類支持向量機模型
步驟一:在PLC和上位機之間采集樣本流量數(shù)據(jù)。
步驟二:確定樣本的特征值,個數(shù)為n,并提取出這些特征值,用主成分分析法對特征值降維,降維過后的特征值個數(shù)為k。
步驟三:求解雙二次規(guī)劃模型。把經(jīng)過前兩步處理之后的樣本用X={(xi),i=1,2,3…m}表示,其中每個xi都有k個特征。根據(jù)單類支持向量機的原理,為了使得樣本能夠通過非線性映射關(guān)系σ(xi)投射到高維空間中,先在高維空間中構(gòu)造一個超平面為Wσ-ρ=0。其中W是超平面的法向量,ρ為偏置量。根據(jù)文獻[2]可知,映射過程如下所示:
式中xi就是輸入的樣本。εi是一個懲罰系數(shù),系數(shù)C=1/(μm),μ是一個權(quán)衡系數(shù),m是樣本的個數(shù)。為簡化問題,單類支持向量機在映射過程中,引入了拉格朗日乘子式,將求解超平面的問題轉(zhuǎn)換為二次規(guī)劃問題[1]:
其中核函數(shù)是有多項式核函數(shù),線性核函數(shù),徑向基核函數(shù)。根據(jù)文獻[3]的實驗證明,選擇徑向基核函數(shù)(exp(-g‖xi-xj‖2))的單類支持向量機的檢測準(zhǔn)確率更高。
步驟四:確定參數(shù)C和g。
步驟五:在確定最優(yōu)參數(shù)g與C之后,求得雙二次規(guī)劃模型的解為{W*,ρ*,ε*},利用求得的解求出單類支持向量機的決策函數(shù)為 f(x)=sgn((W*)δ-ρ*)。該決策函數(shù)中sgn是一個符號函數(shù),取值只有1或者-1,如果輸入樣本之后,結(jié)果 f(xi)=-1,那么這個樣本就被標(biāo)記為異常類型輸出,如果結(jié)果 f(xi)=1,這個樣本就被標(biāo)記為正常類型輸出。
單類支持向量機的兩個參數(shù)g和C影響著算法的準(zhǔn)確率,為了獲得最優(yōu)參數(shù),本文采用人工蜂群的方法。該方法與用粒子群求解最優(yōu)參數(shù)方法相比,具有控制參數(shù)少的優(yōu)點。
人工蜂群的方法是通過模仿蜜蜂采蜜的過程,把求解單類支持向量機最優(yōu)參數(shù)的問題轉(zhuǎn)換為蜜蜂確定食物源位置問題[11-12]。該方法中的蜜蜂是分為采蜜蜂,觀察蜂和偵察蜂3種。人工蜂群算法將采蜜蜂和觀察蜂在食物源附近搜索新食物源以及偵察蜂在可行解空間中的隨機探索定義為一次迭代的過程,每次迭代所獲得的解質(zhì)量都比上一次迭代獲得的解質(zhì)量要高,當(dāng)?shù)螖?shù)接近無窮時,算法將以概率1收斂于全局的最優(yōu)解[11]。
用人工蜂群確定最優(yōu)參數(shù)g與C的方法如下:
以崗位能力點為標(biāo)準(zhǔn),以項目為載體的過程教學(xué)模式具有系列考核指標(biāo),學(xué)習(xí)效果評價管理網(wǎng)絡(luò)信息化便于教師記錄過程信息與考核結(jié)果,避免了傳統(tǒng)紙質(zhì)記錄的不便與管理的繁瑣。通過信息平臺向?qū)W生實時公開過程考核情況,以使學(xué)生了解自身的學(xué)習(xí)狀況,及時制定彌補措施,公開透明的評價方式也利于形成好的學(xué)習(xí)風(fēng)氣。
步驟一:初始化參數(shù)。根據(jù)人工蜂群算法的原理,本文用核函數(shù)參數(shù)g和算法本身參數(shù)C組成的二維向量(g,C)來代表一個食物源的位置解。利用文獻[17]的結(jié)果,把循環(huán)次數(shù)設(shè)置50,最大迭代次數(shù)設(shè)置為1000,g和C的范圍設(shè)置為(0,1),原始食物源的位置解個數(shù)設(shè)為N=20,用Xi=(g,C)i,i=1,2,...,N表示。其中(g,C)i是(0,1)之間隨機生成的。
步驟二:在原始解Xi的領(lǐng)域附近搜索新的解。由于Xi是由參數(shù)g和C組成的二維向量,所以搜索之后的新解也是g和C的二維向量。根據(jù)人工蜂群算法原理 ,新 解 vi2=Xi+random(0,1)×(Xi-Xk)。 其 中i,k=(1,2,3,…,20),且 i≠k 。
步驟四:比較vi2與Xi適應(yīng)度的大小。如果vi2適應(yīng)度大于Xi適應(yīng)度,用vi2替代Xi。其中i=1,2,…,20。
步驟五:重新確定新解。根據(jù)步驟三中替換后的結(jié)果,計算結(jié)果中每個解被選擇的概率i,2,3,…,20,并根據(jù)概率Pi重新選擇解。把得到的新結(jié)果代入步驟二的公式中,重復(fù)步驟三四五,并記為一次循環(huán)。
步驟六:如果某些解經(jīng)過循環(huán)50次,適應(yīng)度沒有得到提高,就把對應(yīng)的解放棄,并且用公式xi=(g,C)min+rand(0,1)×((g,C)max-(g,C)min)隨機生成新解替代原來放棄的解。
步驟七:計算迭代的次數(shù)。記步驟二至步驟六為一次迭代過程。若迭代的次數(shù)大于1000,輸出的解就是最優(yōu)解,也就是最優(yōu)參數(shù)g和C,若小于則返回步驟二。
實驗代碼所用工具:Python 2.7,Python scapy模塊提取特征和scikit-learn機器學(xué)習(xí)庫。實驗采集的訓(xùn)練樣本數(shù)據(jù)是工控實驗平臺中S7-300PLC和上位機之間的正常網(wǎng)絡(luò)流量數(shù)據(jù)。本文針對數(shù)據(jù)集中的單個數(shù)據(jù)包選擇的部分特征如表1所示。
圖6 實驗平臺示意圖
表1 數(shù)據(jù)包特征選擇
在經(jīng)過特征提取之后,采用主成分分析法降維,結(jié)果如圖7所示。其中橫軸代表的是降維后的矩陣中的特征,也就是主成分的分量,縱軸代表的是各個主成分的累計方差貢獻率。由圖可以看出前11個主成分的累計方差的貢獻率已經(jīng)達到了95%,所以可以把前11個主成分作為替代之前選擇的特征數(shù)據(jù)。
圖7 累計方差貢獻率
為了獲得測試數(shù)據(jù)集,本文在西門子實驗平臺上運行了三種攻擊腳本:
(1)中間人攻擊:在實驗平臺的正常工作過程中,操作員站對發(fā)電機轉(zhuǎn)速的控制是通過S7-300PLC的。當(dāng)發(fā)電機的轉(zhuǎn)速達到一定的閾值后,實驗平臺的蜂鳴器會產(chǎn)生警報。中間人攻擊是改變了操作員站與PLC之間的數(shù)據(jù),使得轉(zhuǎn)速超過閾值之后,蜂鳴器不工作[6],數(shù)據(jù)集記為T1。
(2)轉(zhuǎn)數(shù)邏輯序列攻擊:在正常工作流程中,PLC和現(xiàn)場控制的發(fā)電機工作產(chǎn)生的數(shù)據(jù)包的序列都是有邏輯順序的,通過修改數(shù)據(jù)包的次序來改變PLC和發(fā)電機的工作邏輯,數(shù)據(jù)集記為T2。
(3)轉(zhuǎn)速值改變攻擊:手動修改操作員站發(fā)送給PLC的數(shù)據(jù)來改變發(fā)電機的轉(zhuǎn)速,數(shù)據(jù)集記為T3。
為了能夠更加準(zhǔn)確的評估模型的性能,本文結(jié)合了分類的準(zhǔn)確率和F1-score兩個評價指標(biāo)。分準(zhǔn)確率和F1-score基于混淆矩陣計算,其中混淆矩陣如表2所示。
表2 分類器混淆矩陣
其中,TP表示實際和預(yù)測結(jié)果都是正樣本類型的樣本數(shù)。FN表示的是實際是正樣本但是預(yù)測結(jié)果是負(fù)樣本的樣本數(shù)。FP表示的是實際是負(fù)樣本但預(yù)測結(jié)果是正樣本的樣本數(shù)。TN表示的是實際和預(yù)測結(jié)果都是負(fù)樣本的樣本數(shù)。
分類準(zhǔn)確率計算如公式(5)所示:
分類的精確度是表明測試集中被預(yù)測的正樣本中為實際正樣本的比例,召回率是表明被模型預(yù)測的正樣本占總正樣本的比例。由于精確度和召回率相互制約的,所以F1-score是精確度和召回率的調(diào)和值[13],計算如過程如式(6-8)所示:
在模型訓(xùn)練階段,用人工蜂群方法求得最優(yōu)參數(shù)g=0.0123,C=0.462。本文對比了傳統(tǒng)的OCSVM的準(zhǔn)確率和計算時間,結(jié)果如圖8和圖9所示。相比于傳統(tǒng)的OCSVM,本文的方法在降維之后依然保持著傳統(tǒng)OCSVM異常檢測的準(zhǔn)確率,在數(shù)據(jù)集個數(shù)大于2000個時,傳統(tǒng)的OCSVM算法和本文采用的主成分分析結(jié)合OCSVM算法模型訓(xùn)練的分類準(zhǔn)確率都達到90%以上。但是在模型的訓(xùn)練時間對比中,傳統(tǒng)的OCSVM算法消耗的平均時間比主成分分析結(jié)合OCSVM算法消耗的平均時間多46.45秒。
圖8 訓(xùn)練模型的準(zhǔn)確率
圖9 模型訓(xùn)練時間對比
在使用相同用測試集T1,T2,T3的情況下,本文對比了傳統(tǒng)OCSVM算法的分類準(zhǔn)確率,F(xiàn)1-score和模型檢測時間,如表3所示。
表3 異常檢測結(jié)果對比
實驗采集的三種攻擊腳本下的數(shù)據(jù)集T1,T2,T3數(shù)據(jù)包總數(shù)分別為9158,4993,2246。使用主成分分析結(jié)合單類支持向量機的方法在分類準(zhǔn)確率Acc和F1-score上都保持著傳統(tǒng)支持向量機的90%以上的檢測性能。但是在檢測時間消耗方面,使用主成分分析結(jié)合單類支持向量機檢測數(shù)據(jù)集T1,T2,T3比使用傳統(tǒng)支持向量機檢測分別少119秒、82秒和41秒。
本文主要是以西門子S7協(xié)議為研究對象,針對實際情況下工控網(wǎng)絡(luò)異常數(shù)據(jù)少,維數(shù)多的情況,在使用主成分分析法降維之后,采用單類支持向量機的方法來進行模型訓(xùn)練和檢準(zhǔn)精確度的同時,能有效減少模型運算時間的消耗。