魏志強,張 浩,陳 龍
(福州大學 數學與計算機科學學院,福州 350116)
(福建省網絡計算與智能信息處理重點實驗室,福州 350116)
E-mail:zhanghao@fzu.edu.cn
隨著網絡技術的迅速發展,根據中國互聯網絡信息中心最新統計報告顯示,截至2018年12月,我國網民規模達8.29億,普及率達59.6%,人們的生活越來越離不開互聯網.近十年來,Web廣泛應用于社交、網購、銀行和Email等重要線上業務,在人們享受這網絡帶來便利的同時也面臨著很多安全威脅.根據國家應急響應中心(CNCERT/CC)《網絡安全信息與動態周報——2019 年第4期》統計,每周 CNCERT 監測發現境內被篡改網站數量為701個;境內被植入后門的網站數量為600個.在現有的Web應用攻擊檢測中,無論是WAF(Web應用防火墻)或IDS(入侵檢測系統)亦或IPS(入侵防御系統)等,這類基于誤用檢測的技術主要是依賴黑白名單或已知攻擊規則,對每條報文進行正則匹配以達到檢測防御的目的.這種基于規則的方法通常情況下能夠抵御絕大部分的攻擊,但是在實際應用過程中存在以下問題:僅能檢測已知攻擊;規則庫維護困難,安全管理員需要豐富的安全知識,以制定匹配規則;出現誤報不易及時修改.異常檢測可以通過建立正常行為模型檢測未知攻擊,其中包括基于日志信息挖掘和流量行為建模等方法.日志信息保留著攻擊者的攻擊痕跡,一般發現比較遲,攻擊者可能已經成功入侵,所以采用挖掘日志信息來檢測攻擊行為的方法存在一定的滯后性.由于所有攻擊指令都需要在網絡上進行交互,基于流量行為建模分析流量特征上細微變化攻擊行為,可以在攻擊者在入侵過程中發現并且采取相應應急措施.本文采用機器學習針對流量建立行為模型,對流量進行實時檢測,相比誤用檢測,該方式具有檢測未知攻擊、訓練過程簡單、人工成本投入少以及可擴展性好等優點,相比基于日志信息建模,可以提前識別攻擊過程中的攻擊行為.
基于機器學習的Web攻擊檢測已經有不少研究成果:一些學者采用特征選擇來降低維度.Huang等人[1]選擇自組織映射(Self-Organizing Map,SOM)提取主成分作為“normal picture”的壓縮表示;Muhammad Hilmi Kamarudin等人[2]提出了一種基于異常的集成分類入侵檢測系統來檢測web服務器上未知攻擊的方法,該方法使用Filter和Wrapper結合遺傳搜索刪除無關的和冗余的特性,最終得到較小維度的特征子集;Chen等[3]利用最大信息系數(maximum information coefficient,MIC)對不相關屬性進行過濾,提高分類精度;文獻[4,5]使用人工特征分析和SVM優化相結合的方法進行Web攻擊檢測,但是檢測率并不高,大部分低于90%,對于實時檢測難以滿足要求;錢亞冠[6]等人針對通過篡改訓練數據進而誤導SVM的機器學習過程的新型攻擊方法,提出一種針對基于 SVM 入侵檢測系統的毒性攻擊方法;文獻[7]提出基于數據包大小檢查的Slow HTTP POST攻擊檢測方法,檢測僅使用少量攻擊流量的Slow HTTP POST攻擊;Gilberto Fernandes Jr等人[8]提取IP流進行七維分析,包括每秒傳輸的比特、包和流等進行描述,利用主成分析和蟻群優化對網絡流量異常進行檢測;文獻[9]提出了一種基于流量預測和變化點檢測的網絡異常檢測方法,該方法針對DDOS取到了良好的效果;Malhotra P 等人[10]利用LSTM網絡對時間序列異常檢測,此網絡雖然可以對時間序列的異常有較好的檢測,但是如果網絡流量數據的模式沒有一定的周期,就不能很好地對實際流量數據進行分類;田俊峰等人[11]采用卷積神經網絡檢測異常,把Web請求流量映射成灰度圖,利用神經網絡識別圖像的優點,對細微變化的流量有較好的檢測效果.其它諸如人工神經網絡分類器[12]、傅立葉分析[13]和小波分析[14]在低維或單維環境中表現更好,但低維或單維無法完整挖掘流量中的信息,基于神經網絡的方法復雜度較高,訓練時間長.現階段基于流量檢測Web攻擊的檢測率仍然有待提高,且由于算法的適應性以及流量特征的復雜性導致檢測效率低,無法滿足隨著網路流量的激增的檢測要求,較少關注正常和異常流量分布不均引起少數類攻擊檢測率低等問題.
針對上述現階段檢測方法仍存在的一些不足,本文提出基于SMOTE結合Tomek Links(下文稱SmoteTomek)和LightGBM算法的Web異常檢測框架.其中,采用SmoteTomek算法對少量攻擊數據進行過采樣,解決正常與異常數據之間的不平衡問題;采取基于基尼系數的GBDT算法計算特征重要性,降低特征維度,提升后續算法的計算效率;采用基于LightGBM算法,對流量進行二分類和多分類,最后利用真實流量數據UNSW-NB15進行實驗.
SMOTE[15]的基本算法思想是在少數類樣本與其k個近鄰之間的連線上,利用隨機函數產生隨機數合成新樣本,從而增加了少數類樣本數量,達到對少數類樣本過采樣的目的,使分類器更好地對少數類樣本進行預測,有效地提高了分類精度.SMOTE新樣本生成過程如圖1所示.

圖1 生成新樣本
算法1.SMOTE算法生成新樣本
1.輸入數據集f,設置近鄰數K;
2.對于少數類中每一個樣本x,計算它到所屬類樣本集Smin中所有樣本的歐氏距離,得到該樣本k近鄰;
3.根據多數類與少數類不平衡比例設置一個采樣倍率N;
4.從少數類樣本x的k近鄰中隨機選擇個n樣本,假設選擇的近鄰為xi,其中1
5.對于每一個隨機選出的近鄰xi,分別與原樣本按照下式構建新的樣本:
xnew=x+random(0,1)*|x-xi|
6.輸出:xnew
TOMEK在文獻[16]中提出Tomek Links算法,Tomek Links的算法思想如下:樣本x與樣本y來自于不同的類別,若不存在另外一個樣本z,使得d(x,z) 圖2 Tomek links對 在數據集D中,基尼系數表示隨機抽取兩個樣本類別不一致的概率,概率越小,集合就越純.在分類問題上,假設數據集D中有K個類別,其中Pk表示某個樣本屬于k類的概率,則可用基尼值來度量數據集D的純度: (1) 假設離散特征f有V種可能的取值f={f1,f2,…,fv},若使用f對樣本集D進行劃分,則數據集D會產生V個分支,其中第v個分支包含了在f特征上取值為fv的所有樣本,我們標記為Dv,將數據集D中特征f的基尼系數定義為: (2) 梯度提升決策樹(GBDT)[17]是基于加法模型,學習算法采用前向分步算法,以CART樹為基函數,并且根據不同的回歸問題和分類問題取不同的損失函數.本文中的GBDT算法采用損失函數負梯度作為殘差,并以該殘差的方向作為模型迭代的局部最優方向,通過在迭代中擬合殘差實現弱學習器的訓練,最后通過將訓練得到的多棵決策樹累加進行聯合決策. 算法2.梯度提升決策樹算法. 1.輸入訓練集:S={(x1,y1),(x2,y2),…,(xn,yn)},可微損失函數L(y,f(x)),迭代次數M,回歸模型f(x),學習率ρ; 3.對m=1,2,…,M計算: a)計算殘差: b)使用CART回歸樹擬合數據(xi,rmi),得到第m棵樹的葉子結點區域rmj,其中j=1,2,…,Jm; c)對j=1,2,…,Jm計算: γm,j=argmin∑xi∈rj,mL(yi,fm-1(xi)+γ) d)更新模型: 4.輸出:fM(x) 單棵樹上特征的重要性定義為:特征在所有非葉節在分裂時加權不純度的減少,減少的越多說明特征越重要.Gini系數的計算公式如式(1)所示: (3) 其中,K表示K個類別,Pmk表示在節點m中類別k所占的比例.根據上述基尼系數的定義,可以表示為從節點m中隨機抽取兩個樣本類別標記不同的概率. 考慮到各分支中所包含的樣本數不同對分支的影響不同,將各分支的基尼值乘以該分支的樣本數N,這樣可提高樣本數多的分支的影響,特征Xj在節點m的重要性可以表示為加權不純度的減少: (4) 其中,GIl和GIr分別表示分枝后兩個新節點的Gini系數,Nm、Nl、Nr分別表示節點m、左孩子節點l和右孩子節點r的樣本數. 如果在決策樹i中,決策樹節點集合為M,特征Xj所在的節點m在M中,那么Xj在第i棵樹的重要性為: (5) 假設有n棵樹,那么特征j在n棵樹的重要性之和為: (6) 對以上重要性評分做歸一化處理可得特征j的重要性: (7) 傳統的過采樣是基于有放回隨機采樣,以達到簡單的復制增加少數類樣本的目的,但是該方法造成了數據的冗余,容易造成過擬合現象.于是本文采用SMOTE算法對少數類進行過采樣,這樣可以在一定程度上避免放回隨機采樣存在大量重復樣本帶來的過擬合的現象. SMOTE方法是通過在兩個樣本之間的線性插值生成少數類樣本,在平衡類別分布的同時也使少數類的樣本空間擴張到其它類的樣本空間,可能產生原本屬于多數類樣本的空間被少數類“入侵”(invade)的問題,如圖3所示,也會造成模型的過擬合.通過尋找Tomek Links對可以找到那些噪聲點或者邊界點,直接刪除Tomek Links對就可以很好地解決“入侵”的問題. 圖3 SMOTE與Tomek Links結合 在剔除Tomek Links對時,由于插值的隨機性,可能會出現大量新生成的數據被剔除,使得數據仍然存在嚴重的不平衡,針對該問題,本文根據數據的量級設置閾值,該閾值是控制多數類與少數類的數據量差,若大于該閾值,則進行下一輪的采樣,直至滿足各類數據之間的平衡為止.雖然利用剔除Tomek Links會導致各類之間不能完全達到平衡狀態,但是這種少許的差值對模型的訓練結果不會產生太大的影響,在缺少大量的少數樣本的情況下依然可以很好解決少數類檢測問題. LightGBM[18]是一個實現 GBDT 算法的框架,解決GBDT訓練大量數據困難的問題,并且在訓練過程進行優化,提升了訓練的效率.傳統基于GBDT如Xgboost算法,是采用pre-sorted對特征進行預排序,而LightGBM是采用直方圖算法(histogram).無論是pre-sorted算法還是histogram算法,都需要完整的遍歷整個數據集,所以尋找切分點的時間復雜度都為O(#data*#feature).在訓練決策樹計算切分點的增益時,預排序需要對每個樣本的切分位置計算,所以時間復雜度是O(#data),由于histogram將連續的特征值分桶(buckets)裝進離散的箱子(bins),計算時將樣本離散化為直方圖后的直方圖切割位置的增益即可,時間復雜度為O(#bins),#bins遠小于#data,從而大大降低時間復雜度和內存的使用. LightGBM采用Leaf-wise的葉子生長策略,Leaf-wise是從當前所有的葉子中找分類增益最大的葉子結點進行分裂,避免對很多分裂增益低的葉子結點的搜索和分裂,而level-wise對每一層的節點都進行分割,相比level-wise更加高效.Leaf-wise采用最大深度限制,很好的限制了訓練過程長出較深的決策樹而產生的過擬合問題.計算某一節點的葉節點的直方圖,可以通過將該節點的父親節點直方圖與兄弟節點的直方圖做差得到,進一步加速計算. 很多算法局限于對小批量的數據訓練,本文采用基于histogram的LightGBM算法,降低了內存的使用,解決大批量數據訓練困難的問題,在訓練效率上大大提高,能較好的滿足實時檢測的需求.同時,LightGBM支持并行計算,有很好的擴展性,可以較好適應網絡流量急劇增加的趨勢. 基于SmoteTomek和LightGBM的Web異常檢測訓練模型如圖4、圖5所示,該模型由原始流量數據集、預處理模塊、特征選擇模塊、數據不平衡處理模塊和LightGBM分類器等組成.從數據庫獲取流量數據,采用基于基尼系數和GBDT算法計算特征的重要性,并且對數據進行歸一化,規范化數據格式,采用SmoteTomek算法對少數類攻擊數據進行過采樣,解決數據不平衡問題,最終采用LightGBM算法訓練分類器,訓練正常與異常流量模型以及多Web攻擊類別模型,圖4所示二分類訓練模型由于訓練集正常與異常流量數據量相差不大,因此沒有進行平衡處理,應用時可根據實際需求作相應處理. 圖4 二分類訓練模型 Web異常檢測框架如圖6所示,其中包括實時數據采集單元、異常檢測單元、異常響應單元和數據更新單元構成.實時數據采集單元:從交換機采集鏡像流量數據,把流量處理成會話形式,提取顯性和隱性特征;異常檢測單元:加載已訓練好的模型,對實時數據采集單元傳輸過來的數據進行檢測;異常響應單元:判斷異常檢測單元的檢測結果是否存在異常行為,若存在則發出警報;數據更新單元:將檢測結果進行詳細審核,對誤報的數據進行標簽更正,更新流量數據庫. 圖5 多分類訓練模型 采用公開數據集UNSW-NB15[19],該數據集2015年由澳大利亞網絡安全中心(ACCS)實驗室采集真實的正常和異常流量數據,共提取49個特征來反映網絡流量的性質.該數據混合了兩周內的正常活動和攻擊活動,包括1種正常類型和9種攻擊類型,它反映了當代網絡流量特征和新的低痕跡(low-footprint)攻擊場景,相比經典的KDD99數據集,該數據比較貼合當前網絡環境. 圖6 檢測模型 通過觀察,數據集中存在大量冗余數據,訓練分類器時容易造成過擬合,因此對數據進行去冗余處理,只留下互不相同的樣本.訓練集由10%的實例組成,其余90%用于構建測試集(由于Worms類數據量太少,Worms類型訓練集和測試集各取50%),如表1所示.該訓練數據集共有45個特征,包含4個字符型特征(proto,service,state,attack_cat)和41個float和int型特征,去掉id和attack_cat,且通過實驗證明對于proto、service和state這3個特征進行獨熱編碼,SOMTE進行過采樣時會造成維度災難,大大降低訓練效率,因此人為去掉這三個字符型特征,最后對數據進行歸一化. 表1 UNSW-NB15數據集 Table 1 UNSW-NB15 dataset TypeTraining setTesting setNornal342030786Analysis45401Backdoors40306Dos1721546Exploits7606849Fuzzers4854353Generic3663291Reconnaisance2702433Shellcode40338Worms2222 本文取30%訓練集,采用GBDT算法結合基尼系數計算特征重要性,部分結果如表2所示,經實驗采取重要性前10的特征. 表2 特征重要性 Table 2 Feature importance FeatureImportanceFeatureImportancesttl0.310dmean0.025ct_dst_sport_ltm0.284dttl0.023sbytes0.110synack0.020smean0.073dbytes0.019ct_srv_dst0.057dload0.018 由表1可以直觀地看出,數據的分布嚴重失衡,Normal數據有34206條,而Worms類只有44條,在訓練模型時Worms類容易學習不完全,導致分類準確率低.采用SmoteTomek算法對訓練集的少數類進行過采樣,均衡訓練集中各個類分布,結果如表3所示. 表3 平衡結果 Table 3 Result of balanced CatNumCatNumNornal3394Analysis3407Fuzzers3395Generic3414Backdoors3408Dos3387Reconnaisance3404Shellcode3413Exploits3384Worms3420 TN(真反例):真實的攻擊流量且模型分類結果也為攻擊流量;FN(假反例):真實的正常流量但模型分類結果為攻擊流量;TP(真正例):真實的正常流量且模型分類結果也為正常流量;FP(假正例):真實的攻擊流量但模型分類結果為正常流量,分類結果混淆矩陣如表4所示. 表4 混淆矩陣 Table 4 confusion matrix Actual classPredicted classPositivesNegativesPositivesTPFNNegativesFPTN 本文采用Accuracy(準確率)、Recall(召回率)、False Alarm Rate(FAR,誤報率包括FNR和FPR)等統計指標來評價分類算法的性能. (8) (9) (10) (11) 本文提出的檢測方法在異常流量檢測率可以達到97.53%,實驗結果如表5-表8所示.實驗采取的數據量與文獻[20]相同,相比該文獻提出的Dendron方法,本文提出的方法不僅擁有更高的檢測率,并且在檢測的精度上也優于該方法如表9所示. 表5 二分類混淆矩陣 Table 5 Confusion matrix of binary TypeNormalAnomalyNormal30261525Anomaly48319056 表6 二分類結果 Table 6 Results of binary TypeAccuracyRecallFARNormal98.43%98.30%2.47%Anomaly97.32%97.53%1.70% 表7 多分類結果 Table 7 Results of multiple TypeRecallAccuracyNornal98.10%96.69%Analysis55.56%24.46%Backdoors78.88%23.73%Dos48.58%48.59%Exploits75.57%90.07%Fuzzers74.20%87.30%Generic92.67%97.13%Reconnaisance84.46%85.00%Shellcode93.79%45.94%Worms95.45%48.84% 在數據不平衡的多分類問題中,由于算法傾向于選擇數據集的多數類,而少數類學習不完整,導致檢測過程中少數類的檢測率不高,使得檢測結果有較高的誤報率.本文采取SmoteTomek解決數據不平衡問題,由表8所示,經過Smote-Tomek處理后,少數類的檢測率都有很大的提升.可以看出Worms等少數類的數量級遠少于其他類型的數據,然而召回率能達到95.45%,說明該方法適用于解決流量異常檢測數據不平衡問題.與此同時,由于SmoteTomek均衡各類分布,增加了訓練的樣本數,會加大訓練時間的開銷,本文提出基于基尼系數的GBDT的特征選擇,特征維度降低至10維,使得訓練時間開銷(Cost)從32.78秒降到20.81秒和從57.56秒降到43.19秒. 表8 實驗結果 Table 8 Results of experimental TypeLightGBMLightGBM+GBDTLightGBM+TomeksmoteLightGBM+Tomeksmote+GBDTNornal98.88%99.15%98.20%98.10%Analysis2.49%5.49%56.01%55.56%Backdoors8.82%10.46%66.01%78.88%Dos11.32%12.1%47.87%48.58%Exploits80.54%80.85%74.54%75.57%Fuzzers54.15%56.21%74.09%74.20%Generic80.8%82.13%92.16%92.67%Reconnaisance73.24%79.12%84.01%84.46%Shellcode31.07%39.05%93.49%93.49%Worms27.27%45.45%100%95.46% 表9 算法性能比較 Table 9 Comparison of performance algorithm MethodAccADRFARKNN78.33%58.44%3.77%Xgboost85.15%70.66%2.32%Dendron84.33%63.76%2.61%LightGBM89.90%77.12%1.9% 從實驗結果可以看出,本文提出的方法在多分類問題上,Accuracy、Recall和FAR這3個指標上都優于Dendron[20]、Xgboost、KNN等方法如表9所示. 在本文中,我們設計并實現一種基于SmoteTomek和LightGBM的Web異常檢測模型,該模型首先采用基于基尼系數的GBDT算法進行特征選擇,其次結合SMOTE和Tomek Links算法各自的優點,對少數類樣本進行過采樣,最終利用LightGBM算法訓練Web流量二分類器與多分類器.本文提出的模型在多分類問題上,具有高精度和高召回率,克服了攻擊流量數據量遠少于正常流量的不足.同時,我們采用GBDT算法對流量特征進行約減,該方法可以很好的減少特征維度,在不損失訓練精度的基礎上提升訓練的效率.實驗數據是近年來的流量數據,說明本文提出的檢測模型可以很好的基于流量檢測Web異常.在可以滿足異常檢測需求的情況下,由于訓練數據量與SmoteTomek算法本身的適應性問題,檢測模型仍然存在少許誤差.下一步,我們將嘗試利用神經網絡解決數據不平衡,解決線性插值的不足,并且采集更多的數據來訓練模型,提高檢測模型的檢測率和準確率.
3.3 基尼系數
3.4 GBDT算法

4 基于SmoteTomek和LightGBM的Web異常檢測模型
4.1 基于基尼系數的GBDT算法計算特征的重要性
4.2 SMOTE與Tomek Links結合

4.3 基于GBDT的LightGBM算法
4.4 Web異常檢測框架


5 實驗及結果分析
5.1 數據集

5.2 數據預處理

5.3 特征選擇

5.4 數據平衡

5.5 評價指標

5.6 實驗結果分析





6 總結與展望