當前位置:
首頁 > 新聞 > 基於機器學習的WEB攻擊分類檢測模型

基於機器學習的WEB攻擊分類檢測模型

機器學習目前已有很多創新應用,例如攻防對抗、UEBA以及金融反欺詐等。基於機器學習的新一代WEB攻擊檢測技術有望彌補傳統規則集方法的不足,為WEB對抗的防守端帶來新的發展和突破。


本文是作者近十年安全領域工作總結出的人工智慧實戰初探,首先採用聚類模型,將正常數據和已知攻擊類型的數據形成樣本簇,過濾掉異常數據之後送入分類模型對數據進行分類,從而發現新型WEB攻擊行為。


系統架構圖設計



分類檢測流程圖


一、日誌預處理


目前常見的網路安全攻擊類型主要包括:


































編號 攻擊類型
0 正常
1 SQL 注入
2 缺失報頭
3 爬蟲
4 跨站腳本攻擊
5 漏洞防護
6 掃描工具
7 協議違規
8 針對ie8的跨站攻擊

本文主要針對最常見的SQL注入攻擊和跨站腳本攻擊進行介紹。

1.SQL 注入:


SQL 注入其實就是攻擊者通過操作輸入修改後台資料庫的語句,執行代碼從而達到攻擊的目的。URL地址中的參數經常與資料庫SQL語句中各參數相關聯,攻擊者通過構造參數很容易會引起SQL注入的問題,所以攻擊者通常會在參數中注入資料庫專用語言和關鍵字。


2.XSS 攻擊:


即跨站腳本攻擊,曾被OWASP評為Web攻擊中最危險的攻擊,XSS攻擊可分為存儲型XSS和反射型XSS,其構造方法是在URL地址的請求參數中加入腳本代碼,本質上是一種針對HTML的注入攻擊。



基於機器學習的WEB攻擊分類檢測模型主要對URL進行分析:包括數字處理、字母處理、字元處理及文本結構分析,SQL注入和XSS攻擊具有關鍵詞、數字佔比較高等顯著特徵,通過文本分析進行統計處理,將明顯的特徵點提取出來作為後續分類的特徵向量。


二、聚類模型構建:

監督學習都需要一個訓練階段,牽涉到缺陷學習階段的引入,使得基於監督學習的WEB攻擊檢測模型設計變得較為複雜。首先需要為模型的學習準備訓練樣本集,並對訓練樣本分類打標記,這些都需要大量的人工參與。監督學習方法的檢測性能對訓練的好壞具有很大的依賴性,訓練樣本集的完備性和訓練樣本標記的正確性都會影響方法在檢測階段的性能表現。


通過對日誌和流量數據進行分析發現以下特徵:


1) 90% 以上都是正常的訪問請求,惡意的攻擊行為佔總請求量很小一部分;


2) 正常訪問的參數形式之間變化很小,具有很好的聚類特性;


3) 惡意攻擊與正常樣本模式之間有較大的差異,聚類特性較差。


通常正常流量是大量重複性存在的,而入侵行為則極為稀少。因此我們選取K-means構造能夠充分表達白樣本的最小模型作為Profile,實現異常檢測。



我們通過訓練大量正常樣本以及已知的攻擊類型樣本,過濾掉未知的攻擊行為,為我們後續分類器的準確度提供了保證。


以下代碼實現了如何使用聚類演算法形成樣本簇,判斷是否異常,過濾掉異常數據並將數據送入分類器模型。


三、分類檢測模型構建


以上介紹了如何利用聚類演算法對異常攻擊行為進行過濾,為下一步構造多分類檢測模型打好基礎,目前主流分類器包括SVM、隨機森林、xgboost等演算法,本文選擇隨機森林演算法,後續也會增加xgboost的實現。


隨機森林演算法把分類樹組合成隨機森林,即在變數(列)的使用和數據(行)的使用上進行隨機化,生成很多分類樹,再匯總分類樹的結果。隨機森林在運算量沒有顯著提高的前提下提高了預測精度。隨機森林對多元共線性不敏感,結果對缺失數據和非平衡的數據比較穩健,可以很好地預測多達幾千個解釋變數的作用。


隨機森林的主要優點有:


1) 訓練可以高度並行化,對於大數據時代的大樣本訓練速度有優勢;


2) 由於可以隨機選擇決策樹節點劃分特徵,這樣在樣本特徵維度很高的時候,仍然能高效的訓練模型;


3) 在訓練後,可以給出各個特徵對於輸出的重要性;


4) 由於採用了隨機採樣,訓練出的模型的方差小,泛化能力強;


5) 相對於Boosting系列的Adaboost和GBDT,隨機森林實現比較簡單;


6) 對部分特徵缺失不敏感;

7) 對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據,數據集無需規範化;


8) 在創建隨機森林的時候,對generlization error使用的是無偏估計;


9) 訓練過程中,能夠檢測到feature間的互相影響。


隨機森林也有一些缺點,包括:


1) 在某些噪音比較大的樣本集上,隨機森林模型容易陷入過擬合;


2) 取值劃分比較多的特徵容易對隨機森林的決策產生更大的影響,從而影響擬合的模型的效果。


將已知WEB攻擊和正常訪問文本抽象成多個特徵向量,再將特徵向量輸送到隨機森林中,對其進行分類得出分類模型,最後對新的訪問文本進行模式識別,發現新型WEB攻擊行為。整個分類檢測模型由 3 個組件組成:


1)文本分析 :


包括數字處理、字母處理、字元處理及文本結構分析,針對WEB攻擊類型中的每種工具,如SQL注入,典型 SQL 注入具有包含SQL關鍵詞、數字佔比較高等顯著特徵,文本分析主要進行一些統計上的處理,將一些明顯的特徵點提取出來作為分類的特徵向量。


2)特徵提取 :

包括特徵詞及權重、關鍵詞和特定信息,特徵提取主要是將WEB攻擊類型中的每種攻擊,如SQL注入的關鍵詞作為空間向量模型的關鍵詞,採用分詞的方法將字元串的詞語剝離出來,再統計詞頻,映射到空間向量中。


3)分類 :


包括隨機森林演算法、模型訓練、分類器和分類結果,分類主要是選取impurity, maxDepth, maxBins, numTrees的一些參數,經過訓練產生分類器,得出分類結果。


3.1 文本分析


文本分析對樣本進行數據統計並將樣本映射為空間向量。統計項主要有:典型 SQL注入關鍵詞是否存在、樣本文本中數字字元百分比、大寫字元百分比、截斷字元百分比、特殊字元百分比等。應用空間向量模型對文本樣本進行映射可以得出此文本空間的特徵向量值。


3.2 基本特徵的提取
















級別 SQl 惡意關鍵字
High and,or,xp,substr,utl,benchmark,shutdown,@@version,mformation_schema,hex(
Middle Select,if(,union,group,by,—,count(,/**/,char(,drop,delete,concat,orderby,case when,assic(,exec(,length
Low and,or,like,from,insert, update,create,else, exist,table ,database,Where,sleep,mid,updatexml(,null,sqlmap,md5(,floorm,rand,cast,dual,fetch,print,declare,cursor,extractvalue(,upperjoin,exec,innier,convert,distinct















級別 Xss 惡意關鍵字
High <scrip, </script, <iframe, </iframe,response,write(,eval(,prompt(,alert(,javascript;,document,cookie
Middle Onclick=,onerror=,,<base,< base="">>,location,hash,window,name,<form,</form</base,<>
Low echo,print,href=,sleep

樣本數據中如果存在SQL注入常用關鍵詞則特徵值為1,如果不存在則特徵值為0。但是通常訪問文本是一串字元串,而且字元串的內容因網站設計的不同差異性很大,因此首先要對訪問文本進行分詞處理。因為URL字元串只能是 ASCII 碼,而且不同的應用對數據進行了不同的封裝和顯示處理,如果根據其他的規則分詞,準確率就會大大降低。所以本文只採用 3 種字元進行分詞:「空格」、「/」和「&」 。


SQL 注入和XSS攻擊的基本類型和變形的內容可以通過統計的方法對訪問字元串進行詞頻統計,統計內容包括:


1)大寫字元在字元串中所佔的比例,根據 SQL 注入中的變形攻擊將查詢語句中部分字元的大小寫進行轉化,來避開過濾器的檢測;


2)空格字元在字元串中所佔的比例,主要針對空字元攻擊;

3)特殊字元在字元串中所佔的比例,主要是閉合截斷字元,常見的閉合截斷字元有: 「{}」「[]」「=」「? 」「#」「/」 「 style_=」font-size: 16pt; color: black;」>< 」 「 > style_=」font-size: 16pt; color: black;」>」 「 ! 」# % & 』 : ; < > = ? @ [ ] / {} $ , * + - 」等。主要針對內聯注釋序列和截斷字元變形攻擊;


4)數字字元在字元串中所佔的比例,主要針對動態查詢變形攻擊。




























































































































類別 序號 特徵名稱 特徵描述
語法特徵 1 URL_len URL 長度
2 Path_len 路徑長度
3 Path 路徑最大長度
4 Path_Maxlen 路徑平均長度
5 Argument_len 參數部分長度
6 Name_Max_len 參數名最大長度
7 Name_Avglen 參數名平均長度
8 Value_Max_len 參數值最大長度
9 Value_Avg_len 參數值平均長度
10 Argument_len 參數個數
11 String_Max_len 字元串最大長度
12 Number_Maxlen 連續數字最大長度
13 Path_number 路徑中的數字個數
14 Unknow_len 特殊字元的個數
15 Number_Percentage 參數值中數字佔有比例
16 String_Percentage 參數值字母佔有比例
17 Unkown_Percentage 參數值中特殊字元的比例
18 BigString_Percentage 大寫字元所佔比例
19 Spacing_Precentage 空格字元所佔比例
領域特徵 19 ContainIP 參數值是否包含IP
20 Sql_Risk_level SQL 類型危險等級
21 Xss_Risk_level Xss 類型危險等級
22 Others_Risk_level 其他類型危險等級

初始提取的特徵如表


3.3 詞袋模型


機器學習演算法的實現首先是要構造好的特徵向量,在類似的分類演算法中比較好的是首先通過N-Gram將文本數據(URL)向量化,比如對於下面的例子,如果N取2,步長為1,則:

style_="color: black;">www.xxx.com.cn/api/user/getMessagehttp

去掉主機名得到:

api/user/getMessagehttp

用』 / 』分詞 得到:

api,user, getMessagehttp

[api user 和user getMessagehttp]

然後計算TF-IDF,詞頻—逆文檔頻率(簡稱TF-IDF)是一種用來從文本文檔(例如URL)中生成特徵向量的簡單方法。它為文檔中的每個詞計算兩個統計值:一個是詞頻(TF),也就是每個詞在文檔中出現的次數,另一個是逆文檔頻率(IDF),用來衡量一個詞在整個文檔語料庫中出現的(逆)頻繁程度。這些值的積,也就是TF×IDF,展示了一個詞與特定文檔的相關程度(比如這個詞在某文檔中很常見,但在整個語料庫中卻很少見)。


N-Gram 的分詞方法乍一看好像沒什麼道理,因為一般的特徵向量的構造是提取的特徵關鍵詞。比如如果我們將向量定義為script、select、union、eval等詞出現的詞頻,那就很好理解,因為那些詞都是惡意關鍵詞,在正則匹配中一般也會攔截。但其實N-Gram也是一樣的效果,一個特定的關鍵詞會被切分成特定的序列,比如select被分成[sel,ele,lec,ect],而其他的正常的詞一般不會出現這樣的序列。其中N的取值需要進行多次試驗,不同的演算法最佳值不同。

特徵提取主要是將SQL注入的關鍵詞作為空間向量模型的關鍵詞,採用分詞的方法將字元串的詞語剝離出來,再統計詞頻,映射到空間向量中,


SQL 注入的主要載體為訪問的URL字元串,將這段字元串看成是一個文本,首先進行分詞,分詞之後就可以構建 URL字元串所對應的空間向量,空間向量中的每個特徵即是所存在的SQL注入特徵關鍵詞,詞頻可以用來統計,而權重則取決於逆文檔率。


最終特徵:


【分詞生成特徵向量 + 統計特徵 + 基本特徵(敏感關鍵詞個數) 】


目前存在的問題是利用TF-IDF產生的特徵向量極度依賴訓練集,當測試機中某一關鍵字未出現,則TF-IDF產生的特徵向量也將不包含,而提取的統計特徵現在只針對SQL注入及XSS攻擊有領域特徵,對於其他攻擊類型的特徵提取直接決定了WEB攻擊檢測精度。


四、分類檢測模型訓練


4.1 分類檢測模型實現

隨機森林是一個包含多個決策樹的分類器,其輸出的類別是由個別樹輸出的類別的眾數而定。決策樹演算法家族能自然地處理類別型和數值型特徵。決策樹演算法容易並行化,它們對數據中的離群點(outlier)具有魯棒性(robust),這意味著一些極端或可能錯誤的數據點根本不會對預測產生影響。演算法可以接受不同類型和量綱的數據,對數據類型和尺度不相同的情況不需要做預處理或規範化。



在決策樹的每層,演算法並不會考慮所有可能的決策規則。如果在每層上都要考慮所有可能的決策規則,演算法的運行時間將無法想像。對一個有 N 個取值的類別型特徵,總共有 2N – 2 style_=」font-size: 16pt; color: black;」>個可能的決策規則(除空集和全集以外的所有子集)。即使對於一個一般大的 N,這也將創建數十億候選決策規則。


相反,決策樹使用一些啟發式策略,能夠聰明地找到需要實際考慮的少數規則。在選擇規則的過程中也涉及一些隨機性;每次只考慮隨機選擇少數特徵,而且只考慮訓練數據中一個隨機子集。在犧牲一些準確度的同時換回了速度的大幅提升,但也意味著每次決策樹演算法構造的樹都不相同。



4.2 交叉驗證與評價指標


本文對WEB攻擊分類檢測模型評估指標選用的是精確率(Precision)、召回率(Recall)和F1值(F-Measure),在二分類問題中,一個樣本的檢測結果通常會出現四種情況:


1.TP:(TruePositive)正樣本被模型預測為正,稱作判斷為真的正確率;


2.TN:(TrueNegative):負樣本被模型預測為負,稱作判斷為假的正確率;


3.FP:(FalsePositive):負樣本被模型預測為正,稱作誤報率;


4.FN:(FasleNegative):正樣本被模型預測為負,稱作漏報率。


評估指標用上述名詞表示如下:

Precision(精確率)=TP/(TP+FP) Recall(召回率)=TP/(TP+FN)

F_Measure 則是Precision與Recall的加權平均。


當精確率和召回率同時都高的時候,F1值才會高,因此F1值能夠全面的評估URL分類模型的性能,即在滿足高準確率的情況下也要保證高召回率。多類分類評估指標和二分類評估指標計算方式有所不同,多分類時把每個類別分別看做正樣本,所有其它樣本視為負樣本,分別計算各個類別的精確率、召回率和F1值,然後再對所有類的指標求算術平均值作為多分類模型的最後評估結果。



攻擊類型編號:


































編號 攻擊類型
0 正常
1 SQL 注入
2 缺失報頭
3 爬蟲
4 跨站腳本攻擊
5 漏洞防護
6 掃描工具
7 協議違規
8 針對ie8的跨站攻擊

訓練集



正常流量F1


0.9391002297047453


SQL 注入F1


0.9567709186179794


爬蟲F1


0.7716240805761294


漏洞防護F1


0.9021054675580459


跨站腳本攻擊F1


0.7221889055472264


缺失報頭F1


0.9634720123185718


掃描工具F1


0.5475933908045977


協議違規F1


0.6563775510204082


針對ie8的跨站攻擊F1


0.6810157194679565


混淆矩陣:


















































































































編號 0 1 2 3 4 5 6 7 8
0 16762 0 60 222 196 23 89 586 15
1 127 11686 92 5 95 3 1 97 0
2 48 0 15054 614 119 101 838 1129 39
3 395 53 712 16260 166 7 250 111 23
4 99 188 309 98 14451 9 931 1257 642
5 12 0 660 187 31 16894 74 80 5
6 84 52 3418 258 485 46 9147 4179 364
7 152 245 502 226 677 30 3282 12865 28
8 66 98 270 202 5816 13 763 889 9856

測試集



正常流量F1


0.9318407960199004


SQL 注入F1


0.9606017191977076


爬蟲F1


0.7713125845737483


漏洞防護F1


0.8954344624447718


跨站腳本攻擊F1


0.6946902654867257


缺失報頭F1


0.9616342800199303


掃描工具F1


0.5380181169365907


協議違規F1


0.6589411497386958


針對ie8的跨站攻擊F1


0.6376456161863887


混淆矩陣:


















































































































編號 0 1 2 3 4 5 6 7 8
0 1873 0 7 32 30 2 23 75 5
1 14 1341 9 0 15 1 0 12 0
2 4 0 1710 76 21 7 92 139 9
3 45 3 87 1824 18 0 32 13 1
4 10 20 26 10 1570 3 103 148 126
5 0 0 76 29 5 1930 8 8 1
6 9 7 381 29 60 7 980 448 46
7 10 24 51 22 86 2 341 1450 7
8 8 5 29 29 699 5 97 115 1040

從訓練集對訓練結果進行分析,測試集類似。


觀察每個類別的F1值(綜合了查准率與查全率)發現:


爬蟲 ,跨站腳本攻擊,掃描工具,協議違規針對ie8的跨站腳本攻擊值F1值較低,其餘的F1值較高,大概在百分之九十多。


從訓練集混淆矩陣分析發現:


1)爬蟲 ,跨站腳本攻擊,掃描工具,協議違規,針對ie8的跨站腳本攻擊大約有兩萬條;


2)爬蟲 ,跨站腳本攻擊,掃描工具,協議違規,針對ie8的跨站腳本攻擊被正確分類的個數依次為:15054,14451,9147,12865,9856;


3)爬蟲被誤分類為協議違規(1129條),掃描工具(838條),漏洞防護(614條);


4)跨站腳本攻擊容易被誤分類為協議違規(1257條),掃描工具(931條),針對ie8的跨站腳本攻擊(642條);


5)掃描工具容易被誤分類為協議違規(4179條),爬蟲(3418條 );


6)協議違規容易被誤分類為掃描工具(3282條 ),跨站腳本攻擊(677條),爬蟲(502條);


7)針對ie8的跨站腳本攻擊最容易被誤分類跨站腳本攻擊(58160),其次是協議違規(889條),掃描工具(763條)。


綜上所述:


XSS 攻擊與針對ie8的跨站腳本攻擊payload較為相似,協議違規,掃描工具,爬蟲payload也較為接近,下階段需要進一步細分對這些攻擊類別的判別方式,從而設計特徵進行區分。


*本文原創作者:王Sir_甜橙金融,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

你的「蘋果」可能有毒!變身「搭訕」利器,被「黑化」的AirDrop
BlackHat 2018 | 關注三個熱點領域:加密數字貨幣、醫療設備和機器學習

TAG:FreeBuf |