范禹辰,劉相坤,朱建生,蔣秋華,李 琪,徐東平
(1.中國鐵道科學研究院研究生部,北京 100081;2.中國鐵道科學研究院集團有限公司電子計算技術(shù)研究所,北京 100081)
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,web應(yīng)用及網(wǎng)站正在給越來越多的人提供服務(wù)。提供大規(guī)模服務(wù)的同時意味著需要傳輸和保存大量的用戶數(shù)據(jù),而這會招致一些惡意攻擊者對網(wǎng)站及web應(yīng)用進行惡意攻擊、滲透,以竊取用戶數(shù)據(jù)或破壞系統(tǒng)正常運行。該文的服務(wù)網(wǎng)站作為在線售票服務(wù)提供網(wǎng)站,每年都會受到大量惡意攻擊,其中SQLi攻擊數(shù)量最多、XSS攻擊其次,因此需要部署WAF來檢測經(jīng)CDN到內(nèi)網(wǎng)服務(wù)器的http請求,過濾掉惡意的http請求。
基于上述背景,提出一種基于BERT[1]的web攻擊檢測方法,并選擇攻擊樣本數(shù)量較多的SQLi和XSS跨站腳本攻擊作為研究對象,通過對BERT改進使其支持長文本輸入來實現(xiàn)對http頭的全量檢測。由于服務(wù)網(wǎng)站互聯(lián)網(wǎng)出口流量較大,為了保證web服務(wù)的時延在可接受的范圍內(nèi),采用參數(shù)量小的BERT-mini[2]預訓練模型訓練該任務(wù),在保證檢測準確率的同時,提高模型的檢測速度。
傳統(tǒng)基于規(guī)則的WAF只能通過人工添加規(guī)則匹配已出現(xiàn)過的攻擊類型,無法檢測未知的攻擊,且匹配規(guī)則大多基于正則引擎,添加大量規(guī)則會增加計算資源的消耗,降低檢測效率。近年基于深度學習的web攻擊檢測的方向中,文獻[3]基于抽象語法樹及BP神經(jīng)網(wǎng)絡(luò)提出了一種語義分析與神經(jīng)網(wǎng)絡(luò)結(jié)合的WebShell檢測方法;文獻[4]提出了一種基于CNN的web攻擊檢測方法,將web流量轉(zhuǎn)化為流量圖像,并構(gòu)建基于空間金字塔池化的卷積神經(jīng)網(wǎng)絡(luò),將web攻擊檢測問題轉(zhuǎn)化為圖像分類問題進行分類;文獻[5]提出了一種基于ResNet的web攻擊檢測方法,使用CSIC2010、FWAF、HttpParams三個公開數(shù)據(jù)集,將數(shù)據(jù)正則化后使用word2vec[6]和TF-IDF進行特征提取并分類;文獻[7]使用CSIC2010數(shù)據(jù)集和WAF產(chǎn)生的數(shù)據(jù),對url進行word embedding,并采用LSTM[8]和GRU[9]兩種方式評估檢測結(jié)果;文獻[10]提出了一種Locate-Then-Detect的實時檢測方法,對每個url使用payload檢測定位網(wǎng)絡(luò)提取多個候選區(qū)域,再將其送入基于隱式馬爾可夫模型[11]的payload分類網(wǎng)絡(luò)進行分類。Gong Xinyu等人[12]提出了一種基于字符級卷積網(wǎng)絡(luò)[13]的web攻擊檢測方法,使用LSTM及多層感知機進行特征提取,并在CSIC數(shù)據(jù)集下驗證效果。
目前大多基于深度學習的web攻擊檢測方法為了提高檢測效率及降低樣本的復雜度,都僅針對http get請求的url字段及其參數(shù),而不對http頭內(nèi)的其余字段進行檢測,這將會使所有存在于http頭其余字段內(nèi)的user-agent字段注入、cookie注入惡意攻擊等無法被有效統(tǒng)計到,從而導致漏報或誤報?;谏疃葘W習的web攻擊檢測可以被看作一個NLP中的文本分類任務(wù),而上述幾種方法采用的模型并不是近年來在NLP任務(wù)上得分較好的模型,近年在NLP領(lǐng)域表現(xiàn)較好的模型有GPT[14]、ERNIE[15]、XLNet[16]、BERT等,該文基于預訓練模型BERT-mini設(shè)計檢測模型。
本節(jié)將討論http請求的預處理、檢測模型的設(shè)計以及數(shù)據(jù)集的構(gòu)建、選取。將長文本分片,送入BERT得到各片段的表征輸出,設(shè)計了基于LSTM和Transformer[17]兩種模型進行特征融合的方法并使用融合后的特征進行分類。
BERT對應(yīng)的全稱為Bidirectional Encoder Representations from Transformers,即基于Transformer的雙向編碼器表征,該模型由google AI研究院在2018年提出,曾刷新11個NLP任務(wù)的紀錄,是近年用途最廣泛的NLP模型之一。該文采用的BERT-mini模型由4個Transformer結(jié)構(gòu)組成,每個Transformer包含6個Encoder,BERT網(wǎng)絡(luò)模型結(jié)構(gòu)和Transformer的結(jié)構(gòu)如圖1所示。

圖1 BERT網(wǎng)絡(luò)結(jié)構(gòu)
BERT模型的訓練分為預訓練(pretraining)和微調(diào)(finetuning),預訓練模型采用谷歌公布的BERT-mini,無需額外預訓練,故該文僅考慮模型微調(diào)部分,對于文本分類任務(wù),進行一次檢測的流程如下:
(1)輸入的原始數(shù)據(jù)的頭部會增加一個[CLS]標志位,尾部添加一個[SEP]標志位,經(jīng)embedding層計算每個分詞的token embedding、segment embedding、position embedding。其中token embedding是每個單詞映射到固定長度的一維向量表示,[CLS]的token embedding可以理解為一個不包含特定語義信息,并在模型訓練過程中自動學習輸入數(shù)據(jù)全局的語義信息的向量,用于特定的分類任務(wù);segment embedding是在輸入序列為句子對的情況下,用于區(qū)分兩個句子的向量表示;position embedding是每個單詞的位置信息,用于解決token embedding無法編碼輸入序列位置信息的問題,即給不同位置的相同單詞賦予不同的語義。將這三種embedding結(jié)合作為Transformer Encoder層的輸入。
(2)如圖2所示,將embeddings作為Encoder的輸入,送入multi-head attention層,通過線性變換矩陣Wq、Wk、Wv計算輸入的查詢向量q(queries)、鍵值向量k(keys)、值向量v(values)的值,并根據(jù)這三個向量進一步計算得到attention向量。接下來對Attention向量與Transformer的輸入進行殘差連接,并進行層歸一化,將歸一化得到的結(jié)果送入由兩個全連接層構(gòu)成的前饋神經(jīng)網(wǎng)絡(luò),將其輸出與attention向量殘差連接并再進行一次層歸一化,得到Encoder的輸出,共經(jīng)過6個Encoder后得到最終的Encoder層輸出。

圖2 Encoder內(nèi)部結(jié)構(gòu)
(3)對于文本分類任務(wù),不需要Decoder層的參與,故最后一層Encoder的輸出即是Transformer的最終輸出,輸出[CLS]標志位對應(yīng)的向量用于文本分類。
BERT所采用的Transformer結(jié)構(gòu)綜合了RNN和CNN的優(yōu)點,同時擁有捕獲長距離特征及并行計算的能力,且在語義特征提取方面Transformer的效果遠超RNN和CNN,使其在運算速度較快的同時擁有較高的檢測精度。
部分攻擊載荷會隱藏在url編碼或base64編碼中,如請求片段“c2VsZWN0IChleHRyYWN0dm FsdWUoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpKSkpO w==”,經(jīng)base64解碼后為“select (extractvalue(1,concat(0x7e,database())));”。故第一步先對每條http請求嘗試進行url解碼及base64解碼。
大部分http請求長度都超過了BERT的最大輸入限制512,因此采用滑動窗口的思想對http請求進行切片,若一個片段內(nèi)不存在攻擊載荷,則將其劃為正樣本,反之劃為負樣本。若攻擊載荷被分到了兩個不同的片段中,則重新對該http請求進行分割,保證攻擊載荷在一個片段中。
BERT的Basic Tokenizer和Wordpiece Tokenizer會對http請求進行進一步處理。Basic Tokenizer首先對http請求片段進行unicode編碼,去除多余的空格、亂碼及非法字符,然后根據(jù)空格進行一遍分詞,最后替換變音字符并根據(jù)標點進行分詞;Wordpiece Tokenize在Basic Tokenizer的分詞基礎(chǔ)上,將單詞分割為多個子詞,并得到分詞結(jié)果,即BERT的原始輸入。
考慮http請求實際長度和服務(wù)網(wǎng)站的流量強度,針對實時檢測需求,提出兩種對流量進行檢測的方法,用于降低服務(wù)網(wǎng)站受到惡意攻擊的風險。
2.3.1 基于BERT+LSTM的檢測方法
該方法基于BERT模型的表征輸出,在下游設(shè)計檢測模型,如圖3所示,在將http請求分片時,增加index標志位記錄其原本屬于的http請求,送入BERT后得到其表征輸出,將屬于同一http請求的表征輸出放到一起送入LSTM網(wǎng)絡(luò)得到融合結(jié)果,再經(jīng)過全連接層及softmax分類器得到最終的分類結(jié)果。

圖3 基于LSTM的后續(xù)檢測網(wǎng)絡(luò)結(jié)構(gòu)
Web攻擊檢測是一個多分類任務(wù),故LSTM的損失函數(shù)選擇交叉熵損失函數(shù),并使用Adam優(yōu)化器進行優(yōu)化,交叉熵損失函數(shù)公式如下:
(1)
其中,N為樣本總數(shù),k為標簽類別總數(shù),pxk為樣本x的實際類別,qxk為模型計算得到的樣本x屬于類別k的概率。
2.3.2 基于BERT+Transformer的檢測方法
該方法同樣在BERT模型后增加一個額外的Transformer,利用Transformer的Encoder層來融合BERT的表征輸出,但融合方式與LSTM不同,對于一條完整的長http請求,將分片后的送入BERT得到的表征輸出,令第i個片段的表征輸出為CLSi,把所有的表征輸出連接到一起,并在頭部增加額外的[CLS]標志位,得到Transformer的輸入為:
c=([CLS],CLS1,CLS2,…,CLSn)
(2)
輸入c經(jīng)Transformer得到輸出后,經(jīng)一層全連接層及softmax分類器得到最終分類結(jié)果。整個檢測網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。

圖4 基于Transformer的后續(xù)網(wǎng)絡(luò)結(jié)構(gòu)
選取公共數(shù)據(jù)集和服務(wù)網(wǎng)站真實數(shù)據(jù)集來訓練并驗證模型效果。公共數(shù)據(jù)集使用 CSIC 2010,網(wǎng)站真實數(shù)據(jù)集的正常流量部分由互聯(lián)網(wǎng)出口核心交換機鏡像導出,異常流量部分從旁路部署的攻擊溯源系統(tǒng)中提取。
3.1.1 公開數(shù)據(jù)集
大多用于web攻擊檢測的公開數(shù)據(jù)集僅提供url或攻擊載荷的關(guān)鍵詞,不符合對http請求全量檢測的需求,因此該文選取的公開數(shù)據(jù)集為CSIC 2010,該數(shù)據(jù)集是西班牙高等科研理事會于2010年公布的由正常和異常web流量組成的數(shù)據(jù)集,并被廣泛用于web攻擊檢測的研究。
其中每條數(shù)據(jù)都是完整的http請求,且POST請求包含請求體。標簽分為正常和異常流量兩類,異常流量中包括SQLi、目錄遍歷、XSS跨站腳本、CRLF注入等多種攻擊類型。該文選用CSIC2010數(shù)據(jù)集中的正常流量以及屬于SQLi和XSS跨站腳本的異常流量,對異常流量樣本重新標注,來驗證設(shè)計模型的泛化能力。
3.1.2 服務(wù)網(wǎng)站真實數(shù)據(jù)集
服務(wù)網(wǎng)站真實數(shù)據(jù)集最初收集了100萬條正常請求,6萬條異常請求作為全部樣本,經(jīng)測試發(fā)現(xiàn)無法有效檢測異常請求,后經(jīng)調(diào)整各類別樣本所占比例進行測試,最終確定網(wǎng)站真實數(shù)據(jù)集共128 756條數(shù)據(jù),其中,NORM類65 933條,SQLi類46 824條,XSS類15 999條。
該文使用上述數(shù)據(jù)集對所設(shè)計方法進行測試,為了關(guān)注檢測的準確性以及誤報率、漏報率,模型的評估指標選用Accuracy、TPR、TNR。各評估指標計算方式如下:
(3)

(4)

(5)
其中,TP表示正確分類的正樣本,TN表示正確分類的負樣本,F(xiàn)P表示錯誤分類的正樣本,F(xiàn)N表示錯誤分類的負樣本。Accuracy反映了模型識別的準確率;TPR也被稱作Recall,代表所有正樣本中被正確預測的比例,可以反映出模型檢測時的誤報率;TNR代表所有負樣本中被正確預測的比例,可以反映出模型檢測時的漏報率?;谏鲜鋈N指標,可以對模型的檢測能力進行較為全面的評估。
經(jīng)多次實驗,選取實驗結(jié)果最佳一次的參數(shù),給出實驗參數(shù)如下:Epoch=3,Learning Rate=1e-4,Dropout=0.1,Batchsize=16,滑動窗口大小=400。
基于該文所設(shè)計的兩種模型,不使用CSIC2010數(shù)據(jù)集作為訓練集,僅作為測試集,使用服務(wù)網(wǎng)站真實數(shù)據(jù)集中的70%當作訓練集,驗證集和測試集各占15%。選取實驗結(jié)果最佳的參數(shù),使用訓練集在網(wǎng)絡(luò)模型上訓練3個epoch后,用CSIC2010數(shù)據(jù)集以及服務(wù)網(wǎng)站真實數(shù)據(jù)集中的測試集部分,分別對訓練好的模型進行測試,測試完成得到模型的評估指標如表1、表2所示。

表1 使用BERT+LSTM模型的實驗結(jié)果

表2 使用BERT+Transformer模型的實驗結(jié)果
根據(jù)實驗結(jié)果可以看出,使用Transformer的檢測模型融合特征的效果比LSTM要好,且泛化能力更強,使用Transformer模型檢測得到的幾種評估指標均高于使用LSTM的模型?;趯嶒灲Y(jié)果分析性能差異的原因,Transformer與LSTM相比,能夠更有效地提取語義信息,但在長距離依賴捕獲方面不如屬于RNN類結(jié)構(gòu)的LSTM,在web攻擊檢測的具體任務(wù)下,由于大部分攻擊載荷長度不會太高,所以LSTM的優(yōu)勢體現(xiàn)的不明顯,而Transformer能夠更有效地提取出含有攻擊特征的語義,故在文中環(huán)境下,BERT+Transformer檢測模型的表現(xiàn)要優(yōu)于BERT+LSTM模型。
為了評估模型的檢測能力與檢測效率,選用原生BERT模型及XLNet模型與文中所設(shè)計模型進行對比,比較模型的Accuracy指標以及檢測時間,由于BERT不支持長度超過512位的輸入,使用http請求的切片對模型進行評估,每個切片對應(yīng)一個標簽。XLNet為2019年提出的預訓練模型,與BERT相比,引入了自編碼語言模型,并使用更多的數(shù)據(jù)對模型進行預訓練,在多項NLP任務(wù)中得分超過BERT,參數(shù)量為BERT-mini的十倍以上。
使用服務(wù)網(wǎng)站真實數(shù)據(jù)集的訓練集對XLNet訓練3個epoch,訓練完成后使用服務(wù)網(wǎng)站測試集對XLNet進行測試,得到的實驗結(jié)果與文中模型的對比如表3所示。

表3 對照實驗
基于實驗結(jié)果分析模型性能差異的原因,該文設(shè)計的兩種檢測模型融合屬于同一http請求的切片的表征輸出,對http請求進行全量檢測,與不支持長度超過512位輸入的原生BERT相比,能更有效地提取語義信息并捕獲更長距離的特征,故在檢測準確率方面高于原生BERT;由于XLNet本身支持超長文本的輸入,預訓練時使用的語料庫比BERT更加龐大,且模型的參數(shù)量遠大于該文所選用的BERT,故檢測準確率比文中設(shè)計模型更高一些。而模型的參數(shù)量越大,進行一次運算所消耗的計算資源也越高,檢測時間也就越長,該文用到的BERT模型以及設(shè)計的檢測模型參數(shù)量差距不大,處于同一數(shù)量級,均在1 000萬左右,而XLNet的參數(shù)量在1億左右,故檢測時間方面,XLNet的平均檢測時間遠高于表3中的其余三種模型。
XLNet的準確率雖高,但因為模型參數(shù)量巨大,平均檢測時間達到了25 ms,是BERT+Transformer模型平均檢測時間的6倍以上,對于流量強度較大的服務(wù)網(wǎng)站,過高的檢測時間會對業(yè)務(wù)造成一定影響,故綜合準確率及平均檢測時間,BERT+Transformer是更加適合業(yè)務(wù)場景的檢測模型。
基于BERT+LSTM檢測模型研究不同大小的滑動窗口對檢測結(jié)果的影響,分別選取滑動窗口大小為100、200、300、400、500時訓練模型并測試檢測效果,實驗結(jié)果如表4所示。

表4 不同大小的滑動窗口下模型的檢測結(jié)果
根據(jù)實驗結(jié)果,隨滑動窗口不斷增大模型的準確率略微降低,但是滑動窗口過小時會嚴重降低模型的檢測效率,滑動窗口大小在300到500之間時,對檢測模型是一個比較合適的范圍。
為了方便日后數(shù)據(jù)集及模型的更新,研究學習率及Epoch次數(shù)對模型準確率的影響,在學習率為1e-4的條件下,分別選取epoch=1,2,3,4,5時的模型,使用服務(wù)網(wǎng)站數(shù)據(jù)集的測試集部分進行測試。并在epoch=3,4,5的條件下,分別測試學習率為1e-4、1e-5、1e-6檢測模型的準確率。
圖5(a)給出了Epoch與準確率之間關(guān)系的實驗結(jié)果。根據(jù)實驗結(jié)果,Epoch=3時,兩種模型均達到了最佳檢測效果,說明較大的學習率下,模型的收斂速度很快,當數(shù)據(jù)集更新時,可以較快訓練出新的檢測模型。圖5的(b)、(c)、(d)給出了不同Epoch次數(shù)下學

(a)Learning Rate=1e-4
習率與準確率之間關(guān)系的實驗結(jié)果,可以得到學習率為1e-4時模型能夠在最小的Epoch次數(shù)中獲得最佳的檢測效果。
該文提出了一種基于BERT的web攻擊檢測方法,基于輕量級預訓練模型BERT-mini,通過改進其網(wǎng)絡(luò)結(jié)構(gòu),設(shè)計了兩種不同的表征輸出融合方法,使其支持長文本的檢測,來對http請求進行全量檢測,識別url及其余字段的惡意攻擊載荷。其中BERT+Transformer模型在服務(wù)網(wǎng)站真實數(shù)據(jù)集下的檢測準確率達到了99.97%,平均檢測時間4 ms,基本實現(xiàn)了在保證模型檢測準確率的同時,保證模型的檢測效率;在CSIC2010數(shù)據(jù)集下的檢測準確率達到了95.83%,說明了模型具有一定的泛化能力,但基于各網(wǎng)站業(yè)務(wù)及提供服務(wù)的差異性,數(shù)據(jù)集之間的流量特征不全部相同,無法通過一個數(shù)據(jù)集訓練出的模型正確識別全部的http請求。
后續(xù)研究方向致力于研究web攻擊檢測與http請求語義之間的關(guān)系以及更多的攻擊類型分類,使模型能夠?qū)W習正常http請求以及惡意攻擊的語義特征,理解http請求,實現(xiàn)基于語義來識別web攻擊檢測的模型,能夠分辨出同一特征在不同應(yīng)用場景、排列順序下的不同語義,進一步提高模型的檢測能力、泛化能力,以實現(xiàn)一個基于深度學習的語義級WAF。