辛 壯,萬 良,李均濤
(1.貴州大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550025;2.貴州財經(jīng)大學(xué) 信息學(xué)院,貴州 貴陽 550025)
現(xiàn)階段,計算機(jī)網(wǎng)絡(luò)已經(jīng)基本實現(xiàn)全球化,龐大的網(wǎng)絡(luò)體系方便了信息的交流與傳遞,但是也給網(wǎng)絡(luò)黑客提供了更多的便利。面對著越來越復(fù)雜的網(wǎng)絡(luò)環(huán)境、靈活多變的網(wǎng)絡(luò)攻擊手段,如何快速、準(zhǔn)確地識別網(wǎng)絡(luò)異常行為,并減輕異常行為對網(wǎng)絡(luò)環(huán)境的破壞具有非常重要的意義。對此,專家學(xué)者們將數(shù)據(jù)挖掘技術(shù)應(yīng)用到檢測技術(shù)中,依靠無監(jiān)督、半監(jiān)督的方式快速準(zhǔn)確地識別異常、非異常行為,這也是當(dāng)前的研究熱點之一[1-2]。
K-means作為傳統(tǒng)的聚類算法,能夠?qū)Υ罅康臄?shù)據(jù)進(jìn)行快速聚類,較好地符合了網(wǎng)絡(luò)異常行為檢測的實時性要求。K-means算法能夠?qū)o標(biāo)記的數(shù)據(jù)樣本進(jìn)行有效聚類,相比于有監(jiān)督的方法能夠大大減少標(biāo)記時間并且降低數(shù)據(jù)開銷。國內(nèi)外不斷有學(xué)者將聚類算法與分類算法相結(jié)合的半監(jiān)督學(xué)習(xí)方式應(yīng)用于異常行為檢測,例如,Zhang等[3]分析了半監(jiān)督學(xué)習(xí)方式對于聚類效果的影響,Erman等[4]將半監(jiān)督學(xué)習(xí)方式應(yīng)用到流量分類中,并且驗證了半監(jiān)督學(xué)習(xí)方式對于網(wǎng)絡(luò)流量分類的有效性。
傳統(tǒng)的K-means算法雖然簡單有效,但需要事先確定k值,并且算法對于噪聲敏感。為了克服K-means算法的不足,許多專家學(xué)者都曾試圖從各個角度對K-means算法進(jìn)行改進(jìn)與優(yōu)化。文獻(xiàn)[5]提出了一種快速的最小生成樹算法,該算法與K-means算法結(jié)合使用能夠快速處理大規(guī)模數(shù)據(jù)集。把精確的最小生成樹算法應(yīng)用到通過K-means算法得到的K個聚類之中,根據(jù)提出的準(zhǔn)則連接每個處理之后的聚類,形成近似的最小生成樹。再將聚類產(chǎn)生的相鄰對的相鄰邊界劃分為一個聚類,并構(gòu)建另一個近似的最小生成樹。通過合并操作,將兩個近似最小生成樹合并成一個圖形,從而生成更精確的最小生成樹,以提高算法的運(yùn)行效率,使結(jié)果更加有效。文獻(xiàn)[6]提出了一種能夠快速對多維數(shù)據(jù)進(jìn)行K-means聚類的方法。通過將多維數(shù)據(jù)分組,不同的組對應(yīng)不同的帶權(quán)值的非空單元格,K-means聚類對象不再作用于單個的多維對象而是直接對非空單元格的啞元點進(jìn)行操作,并且在算法的迭代過程中不再重復(fù)計算啞元點與不同聚類中心之間的聚類。這種改進(jìn)能夠?qū)Υ罅康亩嗑S數(shù)據(jù)進(jìn)行快速有效的聚類。文獻(xiàn)[7]提出一種新的聚類算法,將最小生成樹算法與K-means算法結(jié)合使用,通過基于質(zhì)心的最近鄰規(guī)則來劃分局部鄰域圖以代替?zhèn)鹘y(tǒng)的構(gòu)造完全圖的方法。該算法能夠在保證簇質(zhì)量的前提下降低計算時間。文獻(xiàn)[8]提出一種異常檢測技術(shù),通過K-means算法將數(shù)據(jù)集聚類并構(gòu)建最小生成樹,將樹中的最長邊刪除形成新的聚類,將小聚類中的數(shù)據(jù)點作為異常值的候選點并進(jìn)行分析,從而找出真正的異常點。文獻(xiàn)[9]提出一種無參數(shù)最小生成樹算法來自動地確定簇數(shù),通過計算簇間與簇內(nèi)距離的比例,對K-means聚類結(jié)果進(jìn)行測試。結(jié)果表明,改進(jìn)算法有更好的聚類效果。文獻(xiàn)[10]提出使用模糊聚類算法,將聚類邊緣的網(wǎng)絡(luò)數(shù)據(jù)特征值再次模糊聚類的異常行為判斷方法。
上述改進(jìn)雖然能夠在聚類前事先確定k值,也能減少噪聲點對聚類效果的影響,但是對于準(zhǔn)確選擇初始聚類中心和有效識別非球狀簇這兩個問題并沒有得到改善。對此,文中提出一種改進(jìn)的聚類算法應(yīng)用在網(wǎng)絡(luò)異常行為檢測中,該算法的優(yōu)越性表現(xiàn)在:融合最小生成樹算法,能夠更佳有效地判斷聚類中心,避免了傳統(tǒng)K-means算法依靠隨機(jī)生成聚類中心從而造成聚類結(jié)果不準(zhǔn)確的情況;使用重心算法更新聚類中心,能夠更好地識別非球狀簇;通過距離比值在聚類的迭代過程中判斷聚類效果的優(yōu)劣,使得聚類結(jié)果始終保持在最優(yōu)狀態(tài)。
K-means算法是經(jīng)典的聚類算法,應(yīng)用在異常行為檢測中能很好地對訓(xùn)練數(shù)據(jù)集進(jìn)行訓(xùn)練從而構(gòu)建分類器,檢測模塊根據(jù)分類器來判斷是否發(fā)生異常行為。算法應(yīng)用如圖1所示。
圖1 聚類算法在網(wǎng)絡(luò)異常行為檢測中的應(yīng)用模型
算法能夠根據(jù)預(yù)先給定的k值,隨機(jī)地在樣本集中選取k個聚類中心,通過計算歐氏距離與預(yù)先設(shè)置好的閾值進(jìn)行對比,把相似度高的樣本分配到同一個簇中。之后不斷的進(jìn)行迭代,更新聚類中心,直到目標(biāo)函數(shù)收斂,最終把樣本集聚類成k個類[11]。算法步驟如下:
設(shè)聚類樣本集為X={x1,x2,…,xn},其中x為樣本數(shù)據(jù),n為樣本總數(shù);聚類類別為Zk={z1,z2,…,zk},其中k為類別數(shù)目,nk表示第k類的樣本數(shù)目;{c1,c2,…,ck}為k個聚類中心。
定義樣本數(shù)據(jù)平均值:
(1)
定義目標(biāo)函數(shù):
(2)
目標(biāo)函數(shù)J為樣本數(shù)據(jù)集每個類中所有點到聚類中心的距離平方和,當(dāng)J最小即得到最小均方差時,迭代完成。
(1)預(yù)先指定聚類個數(shù)k;
(2)隨機(jī)選取k個樣本數(shù)據(jù)c1,c2,…,ck作為初始聚類中心;
(3)根據(jù)公式d(xi,xj)計算每個點與聚類中心的距離,根據(jù)歐氏距離對樣本數(shù)據(jù)進(jìn)行聚類,每個樣本數(shù)據(jù)總是聚類到與包含樣本點最近的聚類中心的簇中;
(4)根據(jù)式1重新計算聚類中心c1,c2,…,ck;
(5)若式2收斂,則聚類完成,若不收斂,則重復(fù)執(zhí)行步驟3~4。
K-means算法作為傳統(tǒng)的聚類算法,能夠應(yīng)付大規(guī)模的數(shù)據(jù)處理,并且聚類速度快,但當(dāng)K-means算法應(yīng)用在網(wǎng)絡(luò)異常行為檢測領(lǐng)域時也有一定的缺點:
(1)要人為確定k值,這需要進(jìn)行大量的實驗和具備一定的學(xué)術(shù)經(jīng)驗才能對k值進(jìn)行準(zhǔn)確判斷,不同的k值對聚類結(jié)果影響巨大,一個不好的k值往往會降低聚類效果;
(2)K-means算法中初始聚類中心的確定是隨機(jī)的;
(3)對離群值與噪聲數(shù)據(jù)敏感;
(4)對非球狀簇的聚類效果不明顯;
(5)容易陷入局部最優(yōu)解[12-13]。
K-means聚類算法也有要遵循的前提條件,這也是所有聚類算法要遵循的幾點假設(shè)。
(1)在聚類過程中,正常網(wǎng)絡(luò)數(shù)據(jù)流量的數(shù)目要占多數(shù),遠(yuǎn)遠(yuǎn)大于非正常網(wǎng)絡(luò)數(shù)據(jù)流量的數(shù)目;
(2)正常網(wǎng)絡(luò)數(shù)據(jù)流量要與非正常網(wǎng)絡(luò)數(shù)據(jù)流量特征有明顯的差異。
根據(jù)對K-means聚類算法的大量研究,以K-means聚類算法為基礎(chǔ),添加最小生成樹概念,在已經(jīng)確定好k值的情況下,通過融合最小生成樹算法,將訓(xùn)練數(shù)據(jù)集進(jìn)行合并和分裂操作來確定訓(xùn)練樣本關(guān)鍵點。把關(guān)鍵點映射成訓(xùn)練數(shù)據(jù)集的初始聚類中心,在數(shù)據(jù)迭代過程中,通過重心算法重新計算聚類中心,通過對比距離比值聚類結(jié)果的優(yōu)劣,直到收斂函數(shù)收斂,得到最終的聚類結(jié)果[14-17]。
(1)重心。
傳統(tǒng)的K-means算法由于算法限制及依據(jù)數(shù)據(jù)點距離平均值選取聚類中心的方法,使其對非球狀簇的識別效果并不理想。通過計算聚類重心來更新聚類中心的方法,能夠使得聚類中心不會偏離聚類本身,使得算法在識別非球狀簇時也能有很好的聚類效果。公式如下:
g=(w1+w2+…+wn)/n
(3)
(2)類內(nèi)距離。
設(shè)cj(j=1,2,…,k)為聚類中心,xi是以cj為中心的聚類中的任意數(shù)據(jù)。類內(nèi)距離DWC為類內(nèi)任意數(shù)據(jù)點到聚類中心距離的平均值,即:
(4)
其中,nj為某一類中的數(shù)據(jù)個數(shù)。
(3)類間距離。
(5)
(4)距離比值。
距離比值WB是類內(nèi)距離DWC與類間距離DBC的比值,公式為:
(6)
通過WB來反映聚類效果的優(yōu)劣。K-means算法根據(jù)類間分離、類內(nèi)緊湊的原則進(jìn)行聚類劃分,通過對單個數(shù)據(jù)點進(jìn)行研究分析,分別用類間距離DBC與類內(nèi)距離DWC表示類間分離度、類內(nèi)緊湊度,計算出的結(jié)果能夠更加直觀準(zhǔn)確地對聚類效果進(jìn)行判斷。如圖2所示,網(wǎng)絡(luò)數(shù)據(jù)流量樣本被分為四類,分別為j、x、y、z,j類中的樣本中心點為i。根據(jù)概念2得知,樣本中心點i到j(luò)類內(nèi)其他樣本數(shù)據(jù)距離的平均值為類內(nèi)距離,反映了類內(nèi)的緊湊程度,從數(shù)值上看,得到的DWC數(shù)值越小,類內(nèi)緊湊程度就越大。根據(jù)概念3,j類樣本中心點i到其他類x、y、z的樣本中心點距離的平均值稱為類間距離,反映了類間的離散程度,類間距離越大,DBC越大,離散程度越高。從類內(nèi)緊湊程度來看,希望DWC越小越好,從類間離散程度來看,希望DBC越大越好。因此單一的DBC或者DWC都無法準(zhǔn)確地判斷聚類效果的優(yōu)劣,于是將WD作為聚類結(jié)果的評價標(biāo)準(zhǔn)。WD通過類間距離與類內(nèi)距離的比值作為評判標(biāo)準(zhǔn),WD越小說明聚類效果越好,但是并不適用于聚類數(shù)為1的情況。
圖2 聚類結(jié)構(gòu)示意
(1)初始聚類中心的選取。
最小生成樹是完全圖的最小連通子圖,包含完全圖的所有點。將網(wǎng)絡(luò)流量數(shù)據(jù)作為完全圖的連接點構(gòu)建帶權(quán)完全圖G(x)={V,E,D},其中V(V∈X)為完全圖的頂點集,E(E={(xi,xj)|xi,xj∈X})為完全圖的邊,將任意兩個連接點xi,xj之間的距離d(xi,xj)作為邊的權(quán)重D(D={d(xi,xj)|xi,xj∈X})。通過Kruskal算法構(gòu)建出完全圖的最小生成樹,通過最小生成樹確定網(wǎng)絡(luò)數(shù)據(jù)流量關(guān)鍵點,其具體過程如下:
首先,確定網(wǎng)絡(luò)流量數(shù)據(jù)關(guān)鍵點的所有候選點。計算完全圖中所有邊的權(quán)值D,尋找權(quán)值最小邊的點,如xi,xj是權(quán)值最小邊的點,將兩點存入集合Bx,將邊存入集合Ex。搜索完全圖中所有的邊,此時集合Bx與集合Ex包含全部的數(shù)據(jù)點與邊,并且邊集Ex中的數(shù)據(jù)是以邊權(quán)重的大小進(jìn)行排列的。
遍歷邊集Ex,將最小權(quán)值的邊添加到最小生成樹中,若添加一條邊之后,最小生成樹構(gòu)成回路則刪除邊集Ex、點集Bx中對應(yīng)的數(shù)據(jù),最終構(gòu)建出最小生成樹T(E1,E2,…,En)。根據(jù)最小生成樹,逐層查找距離最小的兩個點,計算兩個點的中心O=d(xi,xj)/2。用計算出的中心點O代替兩個連接點的邊,并且將中心點作為父節(jié)點處理,更新邊集Ex與點集Bx,此時兩個集合中的數(shù)據(jù)都將減少1,重復(fù)執(zhí)行合并操作,直到最小生成樹只含有k個連接點時,查找結(jié)束。將最小生成樹剩余的連接點作為網(wǎng)絡(luò)流量數(shù)據(jù)的初始聚類中心。
(2)初始聚類的劃分。
將最小生成樹算法得到的數(shù)據(jù)點作為初始聚類中心,得到聚類中心集C={o1,o2,…,on}。取其中一個聚類中心點ox為例,遍歷新數(shù)據(jù)樣本集X'(X'∈{X-ox}),根據(jù)預(yù)先設(shè)置的半徑R,若樣本數(shù)據(jù)集中的數(shù)據(jù)元素與聚類中心點ox的距離小于半徑R,則劃分到以ox為聚類中心的簇中,并修改類標(biāo)識,在新的樣本數(shù)據(jù)集中刪除此樣本數(shù)據(jù)。若距離大于半徑R,則將此樣本數(shù)據(jù)點與其他聚類中心點進(jìn)行比較。
(3)生成新的聚類。
根據(jù)式3計算新的聚類中心,得到新的聚類中心集C。與初始聚類劃分的操作類似,根據(jù)半徑R進(jìn)行新聚類的劃分。新聚類劃分完成之后,計算每個點的DWC與DBC,得到距離比值WB。若比值過大或超過閾值,則需要重新聚類。
具體的算法實現(xiàn)如下:
步驟1:根據(jù)公式d(xi,xj)計算出任意樣本數(shù)據(jù)xi(i=1,2,…,n)與其他樣本數(shù)據(jù)x∈X,{X-{x}}的歐氏距離d,獲得數(shù)據(jù)集D,用來存儲樣本的數(shù)據(jù)距離。
步驟2:根據(jù)Kruskal算法,把樣本數(shù)據(jù)集D中的數(shù)據(jù)作為最小生成樹的端點,將兩點之間的距離作為最小生成樹的邊,從而構(gòu)建最小生成樹,將邊長存入數(shù)據(jù)集E。從數(shù)據(jù)集E中尋找權(quán)重最小的邊即歐氏距離最小的兩個點,公式如下:
Dmin=min{d(xi,xj)}
(7)
其中,xi,xj為訓(xùn)練集中的任意數(shù)據(jù),若其權(quán)重最小,則計算出中心點dij,用計算出的值代替權(quán)重最小的邊,更新數(shù)據(jù)集E,直到數(shù)據(jù)集E中的元素個數(shù)剩余k個。
步驟3:以數(shù)據(jù)集E中的元素作為關(guān)鍵點,映射到樣本數(shù)據(jù)集合X中,以關(guān)鍵點作為初始聚類中心,獲得聚類中心集合C。
步驟4:以集合C中的元素ox為中心,遍歷訓(xùn)練集的樣本數(shù)據(jù),根據(jù)距離最近的原則將數(shù)據(jù)點劃分成k個簇。
步驟5:根據(jù)式3重新計算出新的聚類中心,根據(jù)新的聚類中心更新聚類中心集合C,根據(jù)數(shù)據(jù)集中點的相似度進(jìn)行重新聚類。
步驟6:根據(jù)式6計算出樣本的WB,與預(yù)先設(shè)置好的閾值進(jìn)行比較,若不滿足條件則重新執(zhí)行步驟4,重新聚類,若滿足則執(zhí)行步驟7。
步驟7:若目標(biāo)函數(shù)(式2)收斂,則輸出最終聚類結(jié)果,若不收斂,則重新聚類。
在聚類過程中會遇到邊緣值的問題,樣本數(shù)據(jù)點會在類的交界處,這種數(shù)據(jù)至少擁有幾個類的屬性特征,沒辦法明確地確定這種數(shù)據(jù)點到底屬于哪一個類。通過計算余弦相似度來進(jìn)行區(qū)分,計算公式如下:
(8)
其中,n表示樣本數(shù)據(jù)維度;x表示在類交界處的數(shù)據(jù)點;y表示處于交界類中的任意數(shù)據(jù)。改進(jìn)的K-means算法將處于類交界處的數(shù)據(jù)點劃分到余弦相似度最大的類中。
采用KDD Cup99數(shù)據(jù)集進(jìn)行仿真實驗,該數(shù)據(jù)集是由哥倫比亞大學(xué)教授和北卡羅來納州立大學(xué)教授通過數(shù)據(jù)挖掘技術(shù)對DARPA數(shù)據(jù)進(jìn)行處理形成的。數(shù)據(jù)集中包括Normal、DOS、Probe、R2L、U2R五大類攻擊類型的數(shù)據(jù),并且又細(xì)分為22種攻擊行為數(shù)據(jù),其中訓(xùn)練集僅存在8種攻擊行為數(shù)據(jù),另外14種攻擊行為數(shù)據(jù)存在于測試集中。
數(shù)據(jù)預(yù)處理的目的是使數(shù)據(jù)能夠更加快速有效地進(jìn)行數(shù)據(jù)挖掘。首先把離散屬性轉(zhuǎn)換為連續(xù)屬性,然后再進(jìn)行數(shù)據(jù)點標(biāo)準(zhǔn)化與歸一化。計算公式如下:
(9)
(10)
|Xnj-AVGj|)
(11)
數(shù)據(jù)歸一化是把標(biāo)準(zhǔn)化的數(shù)據(jù)歸一到[0-1]區(qū)間之內(nèi),歸一化的公式如下:
(12)
(13)
(14)
從KDD Cup99數(shù)據(jù)集中按比例抽取一部分?jǐn)?shù)據(jù)作為訓(xùn)練集與測試集,把訓(xùn)練集和測試集分為四組進(jìn)行測試。其中每組正常行為數(shù)據(jù)為4 890條,非正常行為數(shù)據(jù)為110條,如表1所示。
表1 異常行為檢測測試數(shù)據(jù)集
實驗使用檢測率與誤檢率作為網(wǎng)絡(luò)異常行為檢測的評判標(biāo)準(zhǔn),公式如下:
(15)
誤檢率=
(16)
經(jīng)過多次實驗,得出能實現(xiàn)較好聚類結(jié)果的k值,首先對傳統(tǒng)的K-means算法與融合高斯隨機(jī)數(shù)的K-means算法進(jìn)行比較,結(jié)果如表2所示。
表2 算法檢測結(jié)果比較
使用融合最小生成樹的K-means算法對數(shù)據(jù)集進(jìn)行檢測,檢測結(jié)果如表3所示。
表3 融合最小生成樹的K-means算法檢測結(jié)果
由對比結(jié)果可以看出,對于網(wǎng)絡(luò)異常行為檢測,傳統(tǒng)的K-means算法誤檢率較高,容易產(chǎn)生誤報,將正常的網(wǎng)絡(luò)行為檢測成異常網(wǎng)絡(luò)行為,誤檢率平均值為9.3%。檢測率在三種方法中最低,平均值為74.0%,對于異常網(wǎng)絡(luò)行為,容易產(chǎn)生漏報。而融合高斯隨機(jī)數(shù)的K-means算法對于網(wǎng)絡(luò)異常行為檢測,檢測率相對于傳統(tǒng)K-means有所提高,但是檢測率波動較大,具有隨機(jī)性。
由表3可以看出,融合最小生成樹的K-means算法,在網(wǎng)絡(luò)異常行為檢測方面有較好的效果。與傳統(tǒng)K-means算法、融合高斯隨機(jī)數(shù)的K-means算法相比,檢測率有明顯的提升,均值提升到95.2%,誤檢率平均值下降到1%以下。
為了更好地檢驗融合最小生成樹的K-means算法對于網(wǎng)絡(luò)異常行為的檢測效果,將其與傳統(tǒng)K-means算法進(jìn)行比較,檢測效果如表4所示。
表4 對不同攻擊類型檢測效果
傳統(tǒng)的K-means算法對于U2R、R2L的檢測效果不是太理想,這兩種攻擊類型都是偽裝成用戶正常行為來實現(xiàn)攻擊的,數(shù)據(jù)特征與正常行為特征具有相似性,并且兩種攻擊類型數(shù)據(jù)數(shù)目較少,在數(shù)據(jù)訓(xùn)練時對其處理效果不好,導(dǎo)致后期檢測效果下降。另一方面,改進(jìn)后的K-means算法對于四種攻擊都有很好的檢測效果,尤其是Prohe類型攻擊,達(dá)到了完全檢測的效果。對于U2R類型攻擊,不可避免地將其聚類到正常網(wǎng)絡(luò)行為中,使得其誤檢率較高。
從實驗結(jié)果可以看出,融合最小生成樹的K-means算法對網(wǎng)絡(luò)異常行為具有更高的檢測效果,由最小生成樹得到數(shù)據(jù)關(guān)鍵點,以關(guān)鍵點為初始聚類中心。相對于傳統(tǒng)的K-means算法,該算法能夠較好地解決初始聚類中心隨機(jī)選擇的問題,克服了聚類容易陷入局部最優(yōu)的問題。自定義的有效性指標(biāo)能夠判斷聚類效果的好壞,確保最佳聚類效果,通過重心選擇算法更新聚類中心的方法,使得聚類不再因為聚類簇圖像過于狹窄或者非球形而使得聚類中心偏離簇本身,與傳統(tǒng)的K-means算法相比,檢測效果明顯提升。
通過仿真實驗可以看出,融合最小生成樹算法能夠使得K-means算法在網(wǎng)絡(luò)異常行為檢測中得到更好的應(yīng)用,并且改進(jìn)的重心選擇算法能夠使得K-means算法的聚類效果更加準(zhǔn)確有效。該算法在k值確定的情況下,通過最小生成樹算法確定初始聚類中心,克服了初始聚類中心隨機(jī)性選擇的問題,距離比值的存在確保了輸出的聚類能夠達(dá)到最好的效果,在更新聚類中心的過程中,通過重心選擇算法選取新的聚類中心,這有別與傳統(tǒng)的計算平均值算法,有效解決了聚類中心因為聚類簇太狹窄而使得聚類中心偏移的問題。
然而融合最小生成樹的K-means算法,時間復(fù)雜度太高,要迭代數(shù)次才能完成數(shù)據(jù)關(guān)鍵點的確認(rèn)。并且該算法仍然要事先確定k值,還是不能擺脫算法對k值的依賴。在今后的工作中仍要對該算法進(jìn)行進(jìn)一步優(yōu)化,在確保檢測率提升的同時,降低誤檢率與時間復(fù)雜度。