?

一種基于XGBoost的惡意HTTP請求識別方法

2018-12-21 02:33徐迪
電信工程技術與標準化 2018年12期
關鍵詞:特征提取分類矩陣

徐迪

(中移(杭州)信息技術有限公司,杭州 310012)

現如今,互聯網已成為人們家庭與工作生活的重要組成部分。網站的功能也是日新月異,增加了更多的互動功能,以提供更好的用戶體驗。這些業務極大的流行,使得75%以上的網絡攻擊都瞄準了Web,而隨著Web應用類型的豐富,Web攻擊也豐富起來[1]。

日益頻繁和多樣化的Web攻擊使運營者意識到Web安全面臨的巨大風險,網站自身及客戶的數據泄露風險巨大,網站的聲譽極易受損,網站可用性難以保障,業務中斷帶來的經濟損失巨大[1]。

Web應用防火墻(簡稱WAF)通過精細的配置將多種Web安全檢測方法連接成一套完整的解決方案,能夠對網站的HTTP請求進行檢測,識別惡意請求[1]。但是市面上大部分WAF均基于靜態規則對HTTP請求進行檢測,規則的提煉基于對各類攻擊語句進行提煉,構造正則匹配,或者識別請求中是否包含敏感文件、路徑及命令等?;谝巹t的惡意HTTP請求識別對一些基礎攻擊請求能起到一定的識別作用,包括SQL注入、XSS注入、遠程命令執行、文件包含等,但是規則也非常容易被繞過,不能覆蓋住比較隱藏或者深度構造的惡意請求,同時規則數量的增加對系統性能影響非常大,但是隨著攻擊方式的逐日更新,必須定期更新規則,這樣給性能帶來很大的挑戰。綜上,傳統的基于規則的惡意HTTP請求識別已經不能滿足現階段WAF的需求,因此將機器學習、數據挖掘等方法應用到惡意HTTP請求識別中,已經成為現階段研究熱點之一。

目前,國內外針對基于機器學習的惡意HTTP請求識別取得了一定的成果,其中具有代表性的有基于統計的學習模型和基于聚類模型。文獻[2]對Web用戶的HTTP請求速度、請求的響應負載流量等設定相應的正常用戶的流量閾值,從而進行異常檢測。文獻[3]引入有監督的樸素貝葉斯(Nauce Bayes, NB)機器學習方法進行流量分類與應用識別,使用核密度估計對樸素貝葉斯進行改進?;诮y計的學習模型的難點在于閾值并不好確定,容易造成誤報率高[4],比較適用于網絡環境較穩定的統計模型,應用不夠廣泛[4]?;跈C器學習的惡意HTTP請求識別基于訓練集建立模型,能依據訓練結果,提高識別率及效率,具有較好的范化識別能力和多種可選的聚類算法。

本文基于機器學習方法,提出一種基于詞袋與TFIDF特征點聚類的異常HTTP請求識別方法。對URL解碼后的HTTP請求進行特征提取,將提取的特征向量進行XGBoost分類算法進行分類,通過分類器識別惡意的HTTP請求,在提高檢測率的同時,降低了檢測時間。

1 惡意HTTP請求識別流程

惡意HTTP請求識別流程包括兩個階段,訓練階段和識別階段,如圖1所示。

圖1 惡意HTTP請求識別流程

1.1 訓練階段

首先進行訓練階段,訓練階段可離線進行。主要流程包括如下。

(1)收集正常和惡意的HTTP請求樣本。

(2)對樣本進行特征提取,使用的是詞袋和TFIDF模型。

(3)利用XGBoost算法進行模型訓練。

(4)存儲特征提取時詞袋相關參數以及訓練好的分類模型,用于惡意HTTP請求檢測。

同時將定期離線更新最新的Webshell樣本和PHP文件樣本,重新訓練模型,使得模型能夠經常得到更新。

1.2 識別階段

對Web的HTTP請求進行實時識別,主要流程包括如下。

(1)若有待檢測的HTTP請求,首先利用存儲的相關參數進行詞袋和TF-IDF模型特征提取。

(2)將提取的特征輸入存儲的訓練好的分類模型,得到檢測結果,并且上報。

2 特征提取

2.1 URL構成

在介紹樣本數據的特征提取之前,首先介紹一下統一資源定位符的組成。在互聯網上,每一信息資源都有統一的且在網上唯一的地址,該地址就叫URL(Uniform Resource Locator,統一資源定位符),它是WWW的統一資源定位標志,就是指網絡地址[5]。URL由3個部分組成:資源類型、存放資源的主機域名、資源文件名。URL的一般語法格式為:

protocol://hostname[:port]/path/[;parameters][?query]#fragment,

其中帶方括號的為可選項。Protocol指定使用的傳輸協議,最常用的是HTTP協議。hostname是指存放資源的服務器的域名系統主機名或 IP 地址。Port是指端口號。path是由零或多個“/”符號隔開的字符串,一般用來表示主機上的一個目錄或文件地址。parameters是用于指定特殊參數的可選項。query用于給動態網頁(如使用 CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技術制作的網頁)傳遞參數。fragment用于指定網絡資源中的片斷[5]。

本文采用的樣本數據為包括path在內的后續請求內容,正常樣本示例為:

/includes/functions_kb.php?phpbb_root_path=http://cirt.net/rfiinc.txt?,

惡意樣本示例為:

/cgi-bin/search.pl?form=../../../../../../etc/passwdx00。

將樣本數據進行URL解碼,然后利用詞袋模型和TF-IDF模型進行后續特征提取。

2.2 詞袋模型

文本特征提取主要包括兩個非常重要的模型:詞集模型和詞袋模型。詞集模型是單詞構成的集合,集合中僅統計單詞是否出現,次數并不關心;詞袋模型在詞集的基礎上,統計其出現的次數。兩者本質上的區別在于,詞袋是在詞集的基礎上增加了頻率的維度,詞集只關注有無,詞袋需加上次數[4]。

把一個HTTP請求作為一個完整的字符串處理,首先對請求進行URL解碼。本方法使用的是n-Gram提取詞袋模型。所謂n-Gram是詞袋模型的一個細分類別,即每n個字符作為一個處理單元。將相鄰的n個字符劃分到一個組中,同時統計該組在字符串樣本中出現的次數,以此表示字符串樣本。在詞組切分完成后,每個字符串樣本都被表示成一個組頻向量。本文n取值范圍為1~3,即相鄰的1個字符、2個字符、3個字符均劃分為組,并計算組頻作為特征向量。

2.3 TF-IDF模型

TF-IDF為詞頻與逆向文件頻率模型。TF-IDF的主要原理是如果某個詞或詞組在一篇文檔中出現的TF高,且在其它文檔中卻沒有,則認為此詞或者短語具有很好的類別區分能力,適合用來對文檔進行分類。其中,TF指的是某個詞或詞組在某篇文檔中出現的次數,IDF則是詞或詞組“權重”的度量[6]。如果某個詞在多篇文檔中TF低,但卻頻繁出現在某篇文檔,則這個詞IDF值越大。相對地,某個詞越常見,IDF越低。將某個詞或者詞組的TF值和IDF值相乘即得到TF-IDF值。當這個值越大時,表明該詞在該文檔中越具有代表性,越重要[6]。

使用TF-IDF算法處理字符串詞頻矩陣,將獲得能夠反映各個詞組重要程度的特征矩陣。公式如下:

將組頻向量通過TF-IDF模型,得到每個組的重要程度的特征向量,作為該HTTP請求的特征,用于后續進行分類。

3 XGBoost算法

本方法采用XGBoost分類算法進行分類,與普通的進行惡意HTTP請求檢測的分類算法相比所需耗費的內存得到了降低,同時能夠支持分布式的集成,能夠有效的提高分類的性能。

3.1 算法原理

XGBoost是梯度提升決策樹算法(GBDT)的高效實現,它繼承了GBDT并加以改進,其核心思想如下[7]。

(1)在目標函數中加入了正則化項,正則化項與樹的葉子節點的數量和葉子節點的值有關,如公式(4)﹑(5)所示[8]。

(2)在計算偽殘差的時候,不僅僅使用到了一階導數,還是用了二階泰勒展開,如公式(6)所示,其中g為一階導數,h為二階導數[8]。

(3)使用與正則化項相關的lamda、gama作為分割點的標準,如公式(8)所示[8]。

3.2 算法優勢

XGBoost分類算法是基于Boosting的一種集成學習方法,相比傳統的集成學習GBDT算法,XGBoost主要有以下8大優點。

(1)傳統的GBDT基分類器是基于CART,而XGBoost算法也支持線性分類器。

(2)XGBoost分類算法在優化時利用的是二階泰勒展開,相比于傳統GBDT只有一階導數,還增加了二階導數,提高了準確性。

(3)XGBoost分類算法在代價函數里面加入了正則項,能夠降低模型的方差,簡化模型,去除過擬合。

(4)為了使模型更加泛化,增大后面過程的學習空間,XGBoost算法每次迭代一次以后,會將結果即葉子節點的權重乘以一個參數相當于學習速率,降低影響。

(5)為了防止過擬合,減少計算量,XGBoost算法支持列抽樣。

(6)針對特征有缺失的部分樣本,XGBoost能夠自動學習其分裂方向。

(7)XGBoost算法支持并行。由于XGBoost算法每一次迭代都需要用到上一次迭代的數據,所以并行并不是在tree粒度上進行的,而是在最耗時的確定最佳分割點的時候。方法是在開始訓練之前,會預先對數據進行排序,并且保存為塊結構,后續進行節點分裂時,需要選擇增益最大的特征進行分裂,就可以基于這個結構,從而實現并行,縮短時間[7]。

(8) XGBoost提出了一種可并行的近似直方圖算法,用于節點分裂時,當數據量過大無法全部載入內存時,可以高效率計算所有的分裂增益,選取最佳的分割點[7]。

4 實驗與評估

4.1 模型評估

混淆矩陣又名錯誤矩陣,常用語監督學習用來展示算法的效果?;煜仃嚢?個重要的指標: TP (True Positives, 真陽性),表示本身是正例,也識別為正例的比例;FP (False Positives, 假陽性),表示本身是負例,卻被識別為正例的比例;FN (False Negatives,假陰性),表示本身是正例,卻被識別為負例的比例;TN (True Negatives, 真陰性),表示本身是負例,也識別為負例的比例。

基于以上指標,監督學習常用的評估指標如下。

準確率(Accuracy):

精確率(Precision):預測正確的正樣本數占被預測為正樣本的數目的比例。

回召率(recall):預測正確的正樣本數占本身就是正樣本的數目的比例。

F1值是利用精確值和回召率來計算調和均值。

本文將使用以上4個評估指標對提出的惡意HTTP請求識別算法進行評估。

4.2 實驗描述

特征提取使用詞袋和TF-IDF模型,利用XGBoost算法進行分類,完整的訓練流程如圖2所示。

表1 不同模型的實驗結果對比

圖2 特征提取使用詞袋和TF-IDF模型的XGBoost算法訓練流程

(1)準備白樣本以及黑樣本:白樣本為正常的HTTP請求樣本,共收集白樣本1 265 974個。黑樣本即異常的HTTP請求樣本,共收集黑樣本44 532個。

(2)讀取樣本,提取詞袋:讀取全部樣本,將每一個樣本進行URL解碼,表示成一個可讀字符串,并附上標簽。惡意請求標簽為1,正常請求標簽為0。使用n-Gram提取詞袋模型,我們以每1~3個字符作為一個處理單元,設定最大的特征數為5 000。提取詞袋模型后,所有的樣本字符串被表示為一個1 310 506×5 000的詞頻矩陣。1 310 506為所有的樣本數目,5 000為最大特征數。矩陣中的數字表示對應位置單詞組在該樣本中出現的次數。

(3)TF-IDF處理:采用TF-IDF算法對詞頻矩陣進行詞頻分析,以獲得每一個詞組在該樣本中的重要程度,計算結果仍然表示為1 310 506×5 000的矩陣。

(4)隨機劃分為訓練集和測試集:其中測試集的比例設置為0.3。

(5)使用XGBoost算法在訓練集上訓練,獲得訓練好的模型數據。

(6)使用模型數據在測試集上進行預測。

(7)驗證XGBoost算法預測效果:使用準確率、召回率等對模型進行評估。

4.3 結果比較

將得到的實驗結果與其它常見的分類模型進行比較,其中特征提取方案均采取的是詞袋模型與TF-IDF模型,得到表1。

我們將基于詞袋和TF-IDF的XGBoost模型與隨機森林、支持向量機、邏輯回歸進行對比,可以發現本文提出的方法在準確率,精確率,召回率方面整體具有一定優勢。

4.4 實驗結論

本算法有以下技術優點。

本文提出的基于XGBoost的惡意HTTP檢測有效的提高了檢測的準確率。

利用XGBoost算法,在提升檢測模型準確率的同時也保證了高性能,所需耗費的內存得到了降低,同時能夠支持分布式的集成,能夠有效的提高分類的性能。

利用機器學習的方法使模型的檢測具有更強大的泛化能力,能對未知的惡意HTTP請求起到一定的檢測作用。

5 結束語

本文基于詞袋模型與TF-IDF模型,利用XGBoost算法對惡意HTTP請求進行識別,能夠進一步提高識別準確率、效率,并具有一定的泛化能力。

猜你喜歡
特征提取分類矩陣
分類算一算
分類討論求坐標
基于Daubechies(dbN)的飛行器音頻特征提取
數據分析中的分類討論
教你一招:數的分類
Bagging RCSP腦電特征提取算法
初等行變換與初等列變換并用求逆矩陣
矩陣
矩陣
矩陣
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合