田俊峰,石 偉
1(河北大學(xué) 網(wǎng)絡(luò)空間安全與計算機學(xué)院,河北 保定 071000) 2(河北省高可信信息系統(tǒng)重點實驗室,河北 保定 071000)
隨著Web服務(wù)應(yīng)用范圍的擴大,其不僅用于網(wǎng)站后端,也越來越多的作為移動應(yīng)用程序的后端接口.通常網(wǎng)站和移動應(yīng)用程序同時供用戶訪問,使用Web服務(wù)以API的方式作為后端服務(wù)器可以大大節(jié)約開發(fā)成本,提高效率.為保證向用戶提供安全、可靠的服務(wù).要求這些Web服務(wù)不僅能實時地處理海量的請求,且需要高效準確地識別出其中的Web攻擊.而網(wǎng)絡(luò)中Web服務(wù)面臨的攻擊越來越復(fù)雜[1],在黑客對Web服務(wù)發(fā)動攻擊時,無論成功與否,都會產(chǎn)生Web攻擊流量.目前檢測Web攻擊流量的方法主要有基于規(guī)則匹配[2]和基于機器學(xué)習(xí)兩類.基于規(guī)則的方法存在嚴重依賴編寫規(guī)則的人員,規(guī)則的限制寬泛時容易漏掉攻擊以及正則引擎處理時的性能有瓶頸等不足.機器學(xué)習(xí)方法大多是使用采用手工方式提取流量特征,然后將提取到的特征輸入至分類器進行分類識別,檢測結(jié)果主要依賴于特征提取的效果.
結(jié)合Web攻擊流量龐大且具有多變性的特點,研究卷積神經(jīng)網(wǎng)絡(luò)的理論與技術(shù),提出一種基于卷積神經(jīng)網(wǎng)絡(luò)的Web攻擊檢測方法,將每次請求的Web流量轉(zhuǎn)化為流量圖像,充分利用卷積神經(jīng)網(wǎng)絡(luò)優(yōu)異的圖像識別能力,結(jié)合流量大小不確定的特點,構(gòu)建基于空間金字塔池化(Spatial Pyramid Pooling,SPP)[3]的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)[4,5],并用其學(xué)習(xí)Web攻擊流量的特征,為檢測到Web攻擊流量提供一種可靠方法.
檢測Web請求流量中的攻擊流量的方式主要有兩類[6].
一類是基于規(guī)則匹配的檢測方式,開發(fā)人員預(yù)置好檢測規(guī)則,逐條匹配.文獻[7]提出了一個完整的入侵檢測系統(tǒng),其檢測Web攻擊的方法是通過匹配規(guī)則庫.文獻[8]提出一個基于特征匹配的Web應(yīng)用防火墻,根據(jù)黑客攻擊的特點找出正則匹配算法,并最大可能做到匹配.文獻[9]提出了一個基于GPU的高性能正則引擎,可在用于入侵檢測系統(tǒng)時提高檢測效率.
另一類是基于機器學(xué)習(xí)的檢測方式,主要依靠特征提取,并在分類器中分類識別出Web攻擊流量或惡意數(shù)據(jù).文獻[10]提出一種實時網(wǎng)絡(luò)安全態(tài)勢預(yù)測方法,通過隱馬爾科夫模型預(yù)測下一個時刻的網(wǎng)絡(luò)安全狀態(tài),具有較高準確率與實時性.文獻[11]提出一種對惡意軟件進行分類的方法,將惡意軟件二進制文件可視化為灰度圖像,觀察到對于許多惡意軟件系列,屬于同一家族的圖像在布局和紋理上顯得非常相似.借助這種視覺相似性,對惡意代碼進行聚類.文獻[12]提出了一種基于紋理指紋的惡意代碼特征提取及檢測方法,在檢測中惡意代碼取得了良好的效果.文獻[13]提出采用隨機森林改進算法的 Webshell 檢測方法通過克服特征選擇完全隨機的弊端解決 Webshell 檢測特征覆蓋不全、檢測算法有待完善的問題.文獻[14]提出了一種基于動態(tài)詞窗口的卷積神經(jīng)網(wǎng)絡(luò)文本特征提取算法,結(jié)合領(lǐng)域詞性模板和特征模式改進CNN特征提取算法,實現(xiàn)自動提取文本特征向量.然而機器學(xué)習(xí)方法的檢測的準確率受限于人工進行特征提取的效果.CNN具有一些正則匹配等傳統(tǒng)技術(shù)所沒有的優(yōu)勢[15]:避免了顯式的特征抽取、較強的容錯能力、可借助GPU并行處理.CNN在手寫體識別[16]、人臉識別[17]等領(lǐng)域取得出色效果.基于CNN的方法避免了大量特征提取工作,但通常CNN的輸入要求固定大小,而Web流量的大小不確定,難以對其充分處理.
本文提出一種基于卷積神經(jīng)網(wǎng)絡(luò)檢測Web攻擊的方法.主要貢獻有:
1)提出流量圖像的概念,即將Web請求流量轉(zhuǎn)化為灰度圖;
2)構(gòu)建一個基于SPP的卷積神經(jīng)網(wǎng)絡(luò),利用SPP可以解決一般卷積神經(jīng)網(wǎng)絡(luò)只能處理固定大小圖像的問題,適于處理大小不同的流量圖像.并借助公開數(shù)據(jù)集CSIC2010進行實驗.
首先給出基于卷積神經(jīng)網(wǎng)絡(luò)的Web攻擊檢測方法,方法的處理流程如圖1所示,包括了四個步驟:
1)流量捕獲,捕獲請求本機Web服務(wù)的網(wǎng)絡(luò)數(shù)據(jù)包;
2)組合Web流量,組合網(wǎng)絡(luò)數(shù)據(jù)包,生成完整的Web請求數(shù)據(jù),不包含返回數(shù)據(jù);
3)生成流量圖像,將每一個Web請求數(shù)據(jù)轉(zhuǎn)換為灰度圖;
4)二分類,使用訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型檢測流量圖像是否為Web攻擊產(chǎn)生的Web流量.
現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)中,對于已經(jīng)確定結(jié)構(gòu)的網(wǎng)絡(luò),其輸入為固定大小的圖像.通常需要對輸入圖像進行處理,如縮放、裁剪等.Web流量的大小不一,采用截取固定大小等傳統(tǒng)處理數(shù)據(jù)的方法難以使卷積神經(jīng)網(wǎng)絡(luò)充分處理流量圖像.
卷積神經(jīng)網(wǎng)絡(luò)只能處理固定大小圖像的原因分析如下.
通常的卷積神經(jīng)網(wǎng)絡(luò)[18]主要包括如下三個過程:
1)卷積,例如3×3的卷積核,可以對不同大小圖像進行卷積操作,卷積操作對輸入圖像的大小沒有要求;
2)池化,池化過程仍然對輸入圖像大小沒有要求;
3)全連接,權(quán)值矩陣大小是固定的,需要全連接層輸入的大小固定.
顯然第3)部分才是限制卷積神經(jīng)網(wǎng)絡(luò)需要輸入固定大小的原因.
使用空間金字塔池化作為卷積層到全連接層的過渡,同時也是本文提出的網(wǎng)絡(luò)中卷積層與全連接層之間的一層.
圖1 檢測框架Fig.1 Detection framework
空間金字塔池化的過程如圖2所示.圖2中input image為前一層輸出的特征圖,圖2中的空間金子塔結(jié)構(gòu)為三層.即使用三種不同刻度(4,2,1)對其進行劃分,劃分的過程如下:
圖2 空間金字塔池化的過程Fig.2 Process of SPP
1)對input image的邊長劃分為4份,分為16塊;
2)對input image的邊長劃分為2份,分為4塊;
3)對input image的邊長不進行劃分,仍為1塊.
經(jīng)過上述操作,可得到21(42+22+12=21)塊,從每塊中提取一個特征,組成21維的特征向量.每一次劃分稱為空間金字塔的一層,每層都可以進行不同程度的劃分,而且空間金字塔可以按照需要設(shè)置層數(shù).
本文設(shè)計的處理流量圖像的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)如表1所示.網(wǎng)絡(luò)中各層的說明如下:
1)輸入層對圖像的大小沒有嚴格限制,形狀為正方形;
2)C1層為卷積層,本層產(chǎn)生32個大小不同的特征圖;
3)C2層為卷積層,本層產(chǎn)生64個大小不同的特征圖;
4)S1為池化層,本層產(chǎn)生64個大小不同的特征圖;
5)C3層為卷積層,本層得到128個大小不同的特征圖;
6)SPP層中設(shè)置三層結(jié)構(gòu),三層分割后的塊大小分別為16、4、1,每一層的步長為輸入邊長除以本層邊上塊的數(shù)目(如4、2、1),卷積核的邊長與步長相同;
7)FC1層為全連接層,將SPP層的特征圖連接成一個特征向量;
8)FC2層仍為全連接層,有2個神經(jīng)元構(gòu)成特征向量,對應(yīng)正常Web流量和Web攻擊流量兩種情況,F(xiàn)C2和輸出層構(gòu)成一個softmax分類器.
該神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)使用用ReLU,其損失函數(shù)采用交叉熵函數(shù),訓(xùn)練神經(jīng)網(wǎng)絡(luò)的步驟如下:
1)分離數(shù)據(jù)集中的Web請求數(shù)據(jù),轉(zhuǎn)化為灰度圖;
2)將樣本數(shù)據(jù)隨機劃分,訓(xùn)練占數(shù)據(jù)集90%,測試占數(shù)據(jù)集10%;
圖3 網(wǎng)絡(luò)結(jié)構(gòu)Fig.3 Structure of network
3)使用結(jié)構(gòu)為圖3的卷積神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練.數(shù)據(jù)集CSIC2010中正常Web流量圖像與Web攻擊流量圖像的比例為7:3.
表1 網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)設(shè)置Table 1 Setting of network structure parameter
神經(jīng)網(wǎng)絡(luò)的輸入為大小不同的流量圖像,輸出有兩種,即圖像所代表的流量屬于Web攻擊流量或正常Web流量.
實驗數(shù)據(jù)采用CSIC2010數(shù)據(jù)集[19],CSIC2010數(shù)據(jù)集由西班牙研究委員會(CSIC)信息安全研究所制作,包含數(shù)萬條用于測試網(wǎng)絡(luò)攻擊防護系統(tǒng)而自動生成的Web請求,不包含響應(yīng)數(shù)據(jù).CSIC2010包含電子商務(wù)類Web應(yīng)用程序的Web數(shù)據(jù)流量,這些流量數(shù)據(jù)的組成部分有,用戶通過購物車購買物品,及通過提供一些個人信息進行注冊等.此數(shù)據(jù)集基于西班牙語的Web應(yīng)用程序,其中包含一些拉丁字符等非ASCII編碼的字符,從特征而言,與漢字字符接近.因為二者都不能用ASCII編碼表示,基于ASCII編碼的正則匹配或特征提取無法進行.
數(shù)據(jù)集是自動生成的,包含36000個正常請求和超過25000個異常請求.這些Web請求被標記為正?;虍惓?,異常請求中覆蓋到的攻擊類型有:SQL注入、緩沖區(qū)溢出、信息收集、文件泄露,CRLF注入,跨站腳本,服務(wù)器端包含、參數(shù)篡改等.將數(shù)據(jù)集的每一個Web請求分離成獨立的文件,并標記normal和anomalous.
劃分每張流量圖像的方法如下,由于每一次Web請求的開頭為GET或POST,在數(shù)據(jù)集中以GET或POST開頭到下一個GET或POST之間的數(shù)據(jù)即一個Web請求數(shù)據(jù).請求數(shù)據(jù)中的正常請求流量如圖4所示,攻擊請求流量如圖5所示.可以看到圖5中包含DROP TABLE這樣的危險操作.用來生成流量圖像的數(shù)據(jù)不包含返回數(shù)據(jù).
圖4 正常流量Fig.4 Normal traffic
圖5 攻擊流量Fig.5 Attack traffic
通過Python的PIL模塊,將Web請求數(shù)據(jù)以二進制的方式轉(zhuǎn)換為灰度圖.轉(zhuǎn)換為灰度圖前,對數(shù)據(jù)的長度進行開方運算,將開方結(jié)果進位取整,設(shè)置為灰度圖的邊長,圖中不足的部分填0.算法1為分割數(shù)據(jù)后生成流量圖像的算法.生成的灰度圖如圖6所示.
圖6 流量圖像Fig.6 Traffic image
在實際應(yīng)用中數(shù)據(jù)通過交換機鏡像流量或使用Python的Scapy庫抓包獲取流量,將得到的每一個Web請求存儲為獨立的文件.或者將其存儲到消息隊列,如Kafka、RabbitMQ等,再從隊列中取出數(shù)據(jù)生成流量圖像.
實驗在Docker[20]中搭建TensorFlow的CPU版本,采用大唐高鴻可信服務(wù)器(操作系統(tǒng)CentOS 1511,CPU E5 2600,32G內(nèi)存,3T硬盤)部署.為了保證實驗的客觀性,實驗數(shù)據(jù)采用CSIC2010數(shù)據(jù)集,共60669張圖像,其中訓(xùn)練集與測試集的比例為9:1.s
算法1.生成流量圖像
/*返回生成的灰度圖*/
/*traffic 為輸入Web流量*/
begin
length = sqrt(len(traffic))
iflength % 1 != 0then
length = int(length)
length += 1
end
pic =[]
fori = 1 to length do
pic.append(traffic[(i -1) * length:i*length])
end
pic = pic.toImage
returnpic
end
實驗使用三種檢測方法進行對比,分別為:采用規(guī)則匹配方法、使用不包含SPP的傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)與本章提出的基于SPP的卷積神經(jīng)網(wǎng)絡(luò)進行對比實驗.對于規(guī)則匹配方法,首先總結(jié)出Web攻擊流量的規(guī)律,參考開源的匹配規(guī)則策略,寫出符合特點的過濾表達式.卷積神經(jīng)網(wǎng)絡(luò)中采用如圖3所示的結(jié)構(gòu).
其中使用不包含SPP的傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的具體實驗方法如下,此神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)與表1所列的一致,但其中不包含SPP層,使用與P1層一致參數(shù)替換SPP層,進行池化操作.同時,CSIC2010數(shù)據(jù)集生成流量圖像的方法也進行相應(yīng)調(diào)整,在4.1節(jié)中得到Web請求數(shù)據(jù)后,生成流量圖像時將其大小限制為39*39,超過的截斷,不足的填0.
對比實驗結(jié)果如表2所列.由表2可明顯看出,使用基于SPP的卷積神經(jīng)網(wǎng)絡(luò)識別攻擊的準確率達到93.9%,使用傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的準確率為89.95%,而使用規(guī)則匹配方法的準確率僅為66.9%.可看出卷積神經(jīng)網(wǎng)絡(luò)在識別Web攻擊流量方面具有優(yōu)勢.
圖7為兩種神經(jīng)網(wǎng)絡(luò)對流量圖像訓(xùn)練時間變化的對比曲線,記錄了網(wǎng)絡(luò)被訓(xùn)練不同次數(shù)所需的時間.其中使用本章所提出的基于SPP的卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練時間少于傳統(tǒng)神經(jīng)網(wǎng)絡(luò),且收斂速度更快.在訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型花費的時間較長,但對比人工研發(fā)匹配的規(guī)則效率依然大大提升.
表2 實驗結(jié)果Table 2 Results of experimental
在遠程進行掃描等模擬攻擊行為,在服務(wù)器端生成70397條流量圖像數(shù)據(jù),并使用模型進行檢測,完成進度與時間對比情況如圖7所示.
圖8中,在處理相同數(shù)量的流量圖像時,規(guī)則匹配方法在檢測完成20%時的速度較快,最后的結(jié)果是本文提出的基于SPP的網(wǎng)絡(luò)模型最先完成檢測任務(wù).檢測進行到20%的階段,規(guī)則匹配的程序啟動后便開始檢測,而基于卷積神經(jīng)網(wǎng)絡(luò)的方法需要加載,此過程占用一定時間,導(dǎo)致檢測的開始階段基于規(guī)則匹配的方法進度較快.在隨后的階段中,傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)需要處理的圖像有固定大小的限制,所需的計算多于基于SPP的卷積神經(jīng)網(wǎng)絡(luò),因而本文提出的網(wǎng)絡(luò)結(jié)構(gòu)完成檢測所需的時間最短.基于規(guī)則匹配的方法受限于正則引擎的性能,完成檢測所需時間最長.在實際應(yīng)用場景中,需要檢測大量數(shù)據(jù),檢測初始階段加載TensorFlow的時間影響很小.
圖7 訓(xùn)練時間Fig.7 Time of training
圖8 時間對比Fig.8 Comparison of time
圖9 準確率變化Fig.9 Change in accuracy
將檢測按檢測進度劃分,不同進度下段檢測的準確率變化如圖9所示.基于正則匹配的方法檢測準確率波動相對較大,其主要原因為檢測依賴預(yù)置規(guī)則,當(dāng)規(guī)則不能匹配到攻擊流量時,準確度偏低;而規(guī)則嚴格匹配攻擊流量時,檢測精度偏高.而基于卷積神經(jīng)網(wǎng)絡(luò)的方法檢測精度比較穩(wěn)定,其中基于傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的方法由于截取固定大小的流量圖像,導(dǎo)致不能充分提取流量圖像的特征,從而使準確度偏低;本文提出的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)可以處理大小不同的流量圖像,其提取到的特征更加充分,具有更高的識別準確率,但受到不同大小流量圖像的影響,其準確率的變化幅度高于基于傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的方法.
本文主要針對檢測Web攻擊流量提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的方法,構(gòu)建了一個基于SPP的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu).首先總結(jié)與分析了經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)特點,搭建基于SPP的卷積神經(jīng)網(wǎng)絡(luò).然后提出生成流量圖像,充分利用卷積神經(jīng)網(wǎng)絡(luò)處理圖像的優(yōu)勢,識別Web攻擊流量,從而發(fā)現(xiàn)Web攻擊.并通過實驗驗證其有效性,同時將其與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)和規(guī)則匹配方法對比,進一步驗證了本文所提出方法高效準確的優(yōu)勢.