陳 旖,張美璟,許發見
(1.福建警察學院計算機與信息安全管理系,福州 350007;2.福建警察學院網絡安全與電子物證研究所,福州 350007)
(*通信作者電子郵箱cy2007126@163.com)
針對HTTP 協議的慢速拒絕服務攻擊(Slow HTTP Denial of Service,SHDoS)是近年出現的新型攻擊手段,原理是攻擊者利用HTTP 協議自身的某些缺陷,通過構造畸形報文或低速收發報文,來長期占據服務器連接,達到耗盡服務器連接資源的目的[1-2],最終將導致服務器無法響應正常用戶的連接請求,從而實現拒絕服務(Denial of Service,DoS)攻擊的效果。
傳統的DoS攻擊往往需要大量主機和帶寬資源來快速地訪問服務器,從而耗盡服務器的帶寬及運算資源。而新型的SHDoS 攻擊僅需要少量的主機,以較低的寬帶速率占用服務器的連接資源,即可達到攻擊目的。SHDoS 還可以通過分布式方式發起攻擊,僅幾臺主機就能對小型服務器產生顯著的攻擊效果[3-4]。由于SHDoS 具有實施成本低且效果顯著的特點,近年來被頻繁用于攻擊互聯網站點,對網絡安全造成了極大的隱患。因此,如何有效地防御SHDoS 攻擊是具有實際應用價值的研究課題。
近年來,隨著機器學習技術的發展,越來越多的研究者開始將機器學習方法應用于惡意流量檢測問題,其中就包含對DoS流量的檢測。
文獻[5]中提出一種基于XGBoost(eXtreme Gradient Boosting)算法的檢測模型,并在入侵檢測數據集KDD-CUP99上進行訓練和驗證,與決策樹、邏輯回歸、K最近鄰(K-Nearest Neighbor,KNN)等算法相比,具有較高的準確率和召回率。文獻[6]中提出一種基于粗糙集屬性約簡的在線序貫極限學習機(Online Sequential Extreme Learning Machine based on Attributes Reduction,AR-OSELM)方法,該方法先從KDDCUP99 數據集中篩選出無冗余屬性的特征集合,再使用AROSELM 算法進行分類,具有較好的泛化能力,誤報率較低。文獻[7]在完整的網絡環境中針對最新的攻擊工具及良性訪問采集了樣本,生成了數據集CICIDS2017,并設計了一種針對數據流的特征分析工具CICFlowMeter。該工具可以從抓包文件中計算出數據流的特征值,其中包含報文發送頻率、流傳輸速率、報文平均長度等數十種量化特征,供分類模型處理。文獻[8]在文獻[7]的基礎上,提出一種基于集成學習的DoS流量檢測方法,該方法先對CICFlowMeter 提供的數據流特征進行篩選,再通過隨機森林算法構建模型,最后使用CICIDS2017 中的DoS 樣本進行訓練,取得了較好的效果。文獻[9]中提出了一種基于改進遺傳算法和模擬退火算法的混合優化框架,用于高效地構建出基于深度神經網絡的入侵檢測系統。該系統使用CICIDS2017 等數據集進行模擬和驗證,具有較高的檢測精度和較低的誤報率。
上述研究成果各具優勢,但也存在一定局限性。主要存在以下問題:1)部分檢測方法在SHDoS 攻擊頻率變化時出現準確率降低的問題。出現該問題有兩方面的原因:首先,模型對攻擊頻率變化的數據流的泛化能力較弱,無法通過對已有樣本的學習來對未見過的攻擊頻率樣本進行檢測;另外,數據集中SHDoS 數據流的攻擊頻率是基本固定的,導致訓練樣本的代表性較弱;2)部分檢測方法未清洗無效數據流,導致實際檢測中發生誤判。由于SHDoS 攻擊可使服務器進入拒絕服務的狀態,這將導致大量的良性和攻擊數據流都處于握手或等待的狀態。這些數據流是攻擊生效后產生的無效數據流。若未過濾這類樣本,將導致模型在實際檢測中易對良性主機作出誤判;3)部分方法中未對大量高度相似的樣本進行去重,導致模型可能出現過擬合。部分方法中使用了數據流的時間及傳輸速率特征。然而,由于報文的采樣時間存在誤差,即使完全相同的兩個數據流,時間和速率特征也不完全相同。這使得這類方法的訓練集和測試集中存在大量高度相似的樣本,導致測試集無法準確評估模型的過擬合情況。
例如文獻[5-6]使用KDD-CUP99 數據集及文獻[7]采集的CICIDS2017 數據集都存在樣本在攻擊頻率方面代表性較弱的問題;文獻[8-9]中都未對無效數據流進行清洗,且都未對高度相似的樣本去重;在實驗中發現,文獻[8]模型對未見過的攻擊頻率樣本的檢測能力較弱。
在上述研究與分析的基礎上,本文提出一種基于一維卷積神經網絡(Convolutional Neural Network,CNN)[10-11]的SHDoS 攻擊流量檢測方法,以解決當前研究中存在的問題。該方法在多種合理的攻擊頻率下對三種類型的攻擊流量進行采樣,并從樣本中清洗掉無效的數據流;之后,設計了一種數據流轉換算法,可將樣本轉換為一維序列,并進行去重處理;最后,使用一維CNN 構建檢測模型,并使用序列樣本進行訓練。
首先,本文方法借助CNN 算法中卷積計算的特性,使模型能夠對訓練集中未出現過的攻擊頻率的樣本具有較好的檢測能力;并且通過對采樣環節的設計,保證了數據樣本在不同攻擊頻率上具有代表性,從而解決了問題1)中攻擊頻率變化導致的準確率降低的問題。此外,本文方法通過對數據流的處理流程設計,能夠有效地清洗無效數據流,并剔除大量高度相似的樣本,避免了問題2)和問題3)導致的樣本誤判和模型過擬合的問題。在獨立驗證集上的實驗結果表明,本文方法可解決攻擊頻率變化導致的檢測準確率降低的問題。
2.1.1 應用場景
本文方法典型的應用場景如圖1 所示,HTTP 服務器一般部署在內網中,通過出口網關和互聯網連接。網關配置鏡像端口與防火墻連接,將出入內網的雙向報文鏡像同步給防火墻。防火墻以旁路部署模式工作。SHDoS防御組件作為防火墻中的功能組件,實時監聽HTTP 數據,當發現SHDoS 攻擊時,將設置網關轉發規則并發送傳輸控制協議(Transmission Control Protocol,TCP)的RST(ReSeT)報文,來主動屏蔽惡意主機連接,避免攻擊占用服務器的連接資源。

圖1 典型應用場景Fig.1 Typical application scenario
如圖1 所示,SHDoS 防御組件可分為四個子模塊。其中,數據流提取模塊用于從鏡像的IP 報文中提取TCP 數據流;攻擊流量檢測模塊基于本文方法設計的模型構建,用于對數據流進行SHDoS 攻擊檢測;攻擊阻斷模塊用于對檢出的攻擊流和惡意主機進行屏蔽;動態參數模塊根據連接負載情況,動態調節檢測及濾波參數。
2.1.2 模型訓練與應用的過程
本文方法可分為模型訓練和模型應用兩部分,過程如圖2所示。
在本文模型訓練的過程中,首先需要搭建網絡測試環境,對攻擊報文進行采樣,再從采樣報文中提取出完整的數據流并清洗掉無效數據;之后,使用本文方法設計的轉換算法,將數據流轉換為一維序列數據,并進行去重;最后,在一維CNN算法構建的模型上,使用序列數據進行訓練和驗證,最終生成針對SHDoS數據流的檢測模型。
在模型應用的過程中,SHDoS 防御組件通過旁路監聽獲取原始報文,再從報文中動態提取數據流,并轉換為一維序列后加入緩沖隊列。攻擊檢測模型從緩沖隊列中周期性讀取序列并進行攻擊檢測,進而檢測出攻擊數據流和惡意主機。

圖2 模型訓練與應用的過程Fig.2 Model training and application process
2.2.1 樣本標簽類別設計
SHDoS攻擊通過長期占用服務器的可用連接資源來達到攻擊目的,主要包含以下三種攻擊方式:1)慢速頭部(Slow Header),通過循環發送請求頭而不發送結束空行來占用連接;2)慢速發送(Slow Post),通過極低的速率上傳數據來占用連接;3)慢速讀取(Slow Read),通過設置極小的滑動窗口來限制數據下載速度,從而占用連接。
這三種攻擊方式的原理不同,報文結構存在顯著的差異,對應的阻斷措施也不盡相同。因此,本文方法根據攻擊方式的不同,將攻擊樣本使用三類標簽進行標記。
2.2.2 數據流提取與清洗
在采樣結束后,還需要從抓包文件中提取出獨立的數據流。本文方法使用Python 語言和Scapy 庫實現了數據流提取模塊。該模塊根據TCP協議的三次握手、連接釋放、端口分配及系統端口重用等規則,將每個獨立的數據流從抓包文件中提取出來,形成以“IP-端口號-時間戳”為唯一標識的數據流樣本文件。
在提取數據流完成后,還需要對無效的數據流進行清洗。在SHDoS 攻擊過程中,由于HTTP 服務器可能因攻擊而進入拒絕服務的狀態,導致大量的數據流處于握手或等待的狀態,之后又因超時被斷開。這類數據流是攻擊成功后產生的副產品,一般長度較短,無法反映出正常攻擊數據流的特征,需要被過濾掉。
本文方法在清洗數據流時,將從數據流抓包文件中讀取IP 報文并進行分析,只有同時滿足以下三個條件的數據流才被認為是有效的:1)IP報文中包含合法的TCP三次握手過程;2)至少存在一個由客戶端發出的HTTP 請求報文;3)在服務器收到請求報文后,至少發出一個確認請求報文已收到的帶有ACK(ACKnowledgment)標志的TCP 報文。該清洗策略有效的原因是,SHDoS 是通過長期占用服務器TCP 連接來達成攻擊目的,因此必然存在與服務器握手和雙向交互的過程。而無效數據流處于握手或等待響應報文的狀態,不能滿足上述條件,因此可以根據上述規則來清洗無效數據流。
2.2.3 數據流轉換為序列
清洗后得到的有效數據流樣本保存在PCAP 格式的抓包文件中,還需要進一步轉換為模型能夠處理的一維序列數據。本文方法根據攻擊報文的特征分析及實驗驗證的結果,選取了報文方向、負載類型、TCP 報文標志位、報文時間間隔等參數,將PCAP格式的數據流轉換為一維序列。
開始轉換時,待輸出的序列為空,算法將依次讀取數據流的每一個TCP 報文:1)算法首先過濾掉握手、揮手等無關報文,并選取數據流中前t秒的報文進行下一步處理;2)算法處理負載非空的報文,根據報文的收發方向、負載內容為HTTP頭部或數據,生成負載報文元素加入到序列中;3)算法檢查ACK 報文的標志位,根據其滑動窗口是否耗盡來生成控制報文元素加入序列;4)算法將在報文元素間插入時間間隔元素,時間間隔元素的數量為報文元素以秒為單位取整的時間差;5)將序列長度處理為固定值h,對超出的部分截斷,對不足的部分補空值。
由于入侵防御系統中,往往存在針對惡意攻擊的檢測時間指標要求。因此,不同于其他方法使用完整數據流分析,本文方法僅截取數據流固定的前t秒來生成樣本序列。另外,由于檢測模型的限制,生成的樣本序列的長度需為定值h,若h過大則將大大增加模型訓練和檢測的開銷,若h過小則會損失過多的樣本特征。在觀察樣本結構且權衡限制因素的基礎上,本文方法選取t為240 s,選取h為300。采樣數據流的前240 s樣本中僅有9.6%的序列長度超過300。
圖3 舉例展示了若干個數據流樣本經過算法處理后生成的序列結構。對其中的負載報文而言,R和S指報文的收發方向為接收或發送,H 和D 指負載內容為HTTP 頭部或數據;對控制報文而言,A 指普通響應報文,Z 指通告滑動窗口耗盡的響應報文;另外,P 指1 s 的時間間隔,N 指序列尾部填充空值。

圖3 數據流樣本序列示例Fig.3 Examples of data stream sample sequences
2.2.4 樣本序列去重
將數據流樣本轉換為序列之后,還需要對各類別中相同的樣本序列進行去重。原始的數據流樣本中存在大量高度相似的數據流。這類數據流一般由相同的工具生成,報文結構相似,僅在抓包時間上存在微小的差異。傳統基于流速率特征的檢測方法難以直接根據速率來對這類相似的數據流進行去重。本文方法在數據流序列化的過程中將時間值處理為以秒為單位的時間片間隔,可直接通過對序列去重,來實現對相似數據流的剔除,避免大量相似數據流樣本對模型的泛化能力產生的影響。
2.2.5 數據流轉換序列的一般性處理方法
在本文模型訓練階段,對數據流轉換序列的過程主要有以下步驟:1)采集攻擊樣本;2)提取數據流;3)清洗無效數據流;4)轉換為一維序列;5)樣本序列去重;6)生成訓練數據集。在本文模型應用階段,本文方法對數據流的一般性處理過程和訓練階段相比,在以下步驟中存在差異:步驟1)中,應用階段直接從網卡中實時抓取報文;步驟5)中,應用階段無需對樣本去重;步驟6)中,應用階段將直接使用模型檢測生成的樣本。
2.3.1 檢測算法的分析與設計
本文方法將樣本數據流處理為序列后,還需要構建模型來學習攻擊數據流的序列特征。目前可對一維序列數據進行分類的常見模型有一維CNN、循環神經網絡(Recurrent Neural Network,RNN)[12]、長短期記憶(Long Short-Term Memory,LSTM)網絡[13]、雙向長短期記憶(Bidirectional LSTM,Bi-LSTM)網絡[14]等。
在傳統的密集連接型神經網絡中,網絡節點在輸入和輸出之間不保存任何狀態,這導致該結構在處理自然語言等一維序列時效果不佳。而RNN 則通過在節點中引入內部循環的方式,使得模型對序列元素的前后順序狀態信息具有一定的記憶能力,增強了模型對序列處理的能力。LSTM網絡則在RNN 的基礎上增加了將狀態信息跨越多個元素的方法,解決了RNN 中梯度消失的問題。Bi-LSTM 網絡在LSTM 網絡的基礎上,通過從正序和逆序兩個方向對序列進行學習,進一步提高了模型的性能。
不同于RNN這類網絡,一維CNN是通過序列的局部模式特征來識別序列。它通過一維卷積核來提取序列的局部片段,進而從片段中學習序列的局部模式[15]。一維CNN 模型從一個片段學習到的局部模式還可以在其他位置的片段中再被使用,這使得模型在處理序列時具有平移不變性,即局部模式在序列整體中的位置發生平移時,并不影響模型的處理結果。
在SHDoS 檢測問題中,惡意數據流的攻擊頻率的可選值眾多,但采樣工作僅能覆蓋部分典型的攻擊頻率。這就要求模型能夠從少數幾種攻擊頻率的樣本中學習到攻擊序列的特征,從而對其他攻擊頻率的樣本也具備檢測能力。對于RNN這類網絡而言,模型的記憶能力僅能記住訓練樣本中出現過的幾種攻擊頻率的特征,而無法拓展到對其他攻擊頻率樣本的檢測。然而,對于一維CNN 而言,未知攻擊頻率的樣本序列可以看作是訓練集中典型頻率樣本序列的拓展和平移,這是因為這兩類樣本雖然攻擊頻率不同但局部模式依然是相似的。由于一維CNN 具有的平移不變性,使得模型對未知攻擊頻率的SHDoS 樣本依然具有較好的檢測能力。因此,本文方法選取一維CNN算法來構建檢測模型。
2.3.2 一維CNN模型結構
本文方法使用一維CNN 算法來構造檢測模型,結構如圖4所示。

圖4 檢測模型結構Fig.4 Detection model structure
本文模型包含一個詞嵌入層、卷積層C1和C2、池化層P1和P2以及一個全連接輸出層。其中,本文模型要求輸入數據是一維序列w,w即是數據流生成的序列樣本,序列中包含可反映通信過程的報文元素。
由于神經網絡模型只能處理數值張量,因此樣本輸入模型時,需要先使用詞嵌入層對w進行向量化。本文模型的詞嵌入層用于將序列中的每個元素轉換成長度固定的詞向量。詞嵌入層相當于是一個字典,它可在訓練中動態地學習元素的權重值,從而將一個離散元素映射為一組連續值組成的詞向量。w經過詞嵌入層的轉換,可生成一個由詞向量組成的矩陣d∈Rhg,其中h為樣本序列的長度,g為詞向量的維度。
一維卷積層可以對序列中的局部特征進行學習。如圖4所示,卷積層工作時,將使用卷積窗口以固定的步長遍歷序列,窗口內的元素將與多個卷積核進行點積運算。每個卷積核與整個序列完成運算后,將生成一個新序列,其值反映出輸入數據在該卷積核下表現出的特征。數學模型可描述為:

其中:Wc∈Rgp是卷積層C1中n個長度為p的卷積核中的第c個卷積核;di:i+p∈Rpg表示從d的第i行到第(i+p)行之前的每一行數據所組成的子矩陣;b∈R 表示偏置值;f為激活函數;sci是卷積核Wc和第i個子矩陣進行點積的結果。記d中子矩陣的個數為e。將n個卷積核和e個子矩陣運算后,可得到由sci組成的矩陣s∈Ren。
池化層可用于對數據進行下采樣,它使用一個長度為q的窗口掃描數據,用窗口內元素的最大值或平均值來代替整個窗口的數據,從而縮短數據的長度。這使得位于下層的卷積層能夠從更寬的跨度上觀察數據的特征。池化層P1使用最大值池化算法,數學模型可描述為:

其中:sjq:(j+1)q∈Rqn表示從s的第jq行到第(j+1)q行之前的每一行數據所組成的子矩陣,max 函數用于計算子矩陣中每一列的最大值,uj是由子矩陣每一列的最大值所組成的向量。記s中子矩陣的個數為l。將所有子矩陣進行最大池化運算后,可得到由uj組成的矩陣r∈Rln。
卷積層C2重復了卷積層C1的操作。它以矩陣r為輸入數據,目的是從更高的跨度上學習序列的特征。使用n個長度為p的卷積核對矩陣r進行卷積運算之后,得到矩陣a。池化層P2和P1的運算過程相似,使用全局最大池化算法,以矩陣每一列的最大值來代表整個列,即在式(2)的基礎上,設置窗口長度q的值等于矩陣的行數。矩陣a經過全局最大池化操作后生成全連接層可處理的一維向量z∈Rn,包含了原始輸入數據的高階特征。
全連接輸出層用于學習向量z和k種報文類別之間的映射關系。數學模型如式(3)所示,其中v∈Rnk為權重矩陣;B∈Rk為偏置向量,f為激活函數。運算將輸出向量y∈Rk,表示原始輸入樣本歸為某種數據流類別的概率。

本文模型使用交叉熵損失作為損失函數,使用均方根傳遞(Root Mean Square prop,RMSprop)算法作為優化器。本文模型開始訓練前,神經網絡各層節點的權重值都是隨機的。本文模型訓練時,使用反向傳播算法和小批量梯度下降算法來逐步更新網絡的權重值,經過多輪的訓練與測試后,選取最優的權重值作為模型的網絡參數輸出。
本文方法在設計中有效地解決了當前研究中存在的三個問題:1)本文方法使用一維CNN 算法構建的模型,能夠有效地學習到樣本序列的局部特征,對局部特征發生平移的樣本也具有較好的檢測能力。因此,相較于RNN 等網絡模型,本文模型在對未知攻擊頻率樣本的檢測方面更具優勢,可解決攻擊頻率變化導致的準確率降低的問題。2)本文方法根據協議規則分析,通過報文特征來有效地清洗掉無效數據流。相較于聚類、離群點等異常值檢測手段,該方法在計算速度和準確性方面存在明顯優勢,可避免無效數據流導致的誤判問題。3)本文方法在數據流序列化的過程中,通過對時間值的單位量化處理,可將高度相似的數據流處理為完全相同的序列,進而有效地剔除重復數據。相較于選取數據流的多種特征進行相似性判斷的方法,該方法的運算量更小且具有較好的去重效果,可避免大量高度相似的樣本導致的過擬合問題。
3.1.1 實驗環境搭建與采樣
在樣本采集環境中,存在一臺運行Ubuntu Server 系統的服務器作為靶機,一臺運行Kali 系統的通用計算機作為攻擊機。其中,靶機運行Apache 作為HTTP 服務器,使用DWVA(Damn Vulnerable Web App)作為被攻擊頁面,使用TCPDump工具生成抓包文件;攻擊機上選取SlowHTTPTest 等工具進行攻擊。
進行采樣時,在攻擊模式上,測試環境中分別使用了慢速頭部、慢速發送、慢速讀取三種不同的攻擊模式;在攻擊報文的發送周期上,由于過長的通信周期將導致服務器主動關閉超時連接,故在60 s 的范圍內分別使用了6 種不同時間值作為報文發送或讀取的周期進行采樣;在報文負載上,使用隨機值作為攻擊報文的負載長度。對每種攻擊模式和攻擊周期值的組合采樣1 h。另外,使用CICIDS2017 中的正常HTTP 數據流作為良性樣本數據。本文方法在不同的攻擊模式和頻率下進行采樣,可保證樣本在不同攻擊頻率上具有代表性。
3.1.2 樣本處理與統計
采集的樣本還需要進行一系列的處理,其中包含:數據流提取、清洗無效數據流、轉換為一維序列、樣本序列去重,進而生成數據集。其中,樣本數量的統計情況如表1所示。

表1 數據集樣本類別統計情況Tab.1 Statistics of dataset sample categories
從表1 可以看出,從原始樣本中提取的數據流中包含大量的無效數據流,平均占比達到55.2%。而有效數據流中也包含大量高度相似的數據流,平均重復占比約為83.5%。從樣本統計情況中可以看出,本文方法可有效地清洗無效數據流并對高度相似樣本進行去重,從而避免了無效和重復數據導致的樣本誤判和模型過擬合的問題。
實驗使用準確率acc(accuracy)和精確率pre(precision)作為模型的評估指標。各類模型對x標簽類別的分類準確率和精確率的計算公式為:

其中:TP(True Positive)指將x類樣本正確分類為x類的樣本數量;TN(True Negative)指將非x類樣本正確分類為非x類的樣本數量;FN(False Negative)指將x類樣本漏判,誤分類為非x類的樣本數量;FP(False Positive)指將非x類樣本誤判,誤分類為x類別的樣本數量。實驗中,使用宏平均(macro-average)的方法來評估多分類器的性能,即迭代地將各類樣本視為x類,逐個類別計算準確率或精確率后,取均值作為該分類器的性能。
準確率是模型分類正確的樣本數在總樣本數中的占比,可反映出模型對各類數據流總體的檢測能力;精確率是在所有被檢測為x類的樣本中,實際確實為x類樣本的占比,可反映出模型對樣本的誤判情況。在本場景中,較高的精確率意味著較少出現良性數據流被誤判為攻擊的情況,可減少誤報對網絡正常功能的影響。因此,精確率在本場景中也具有一定的參考價值。另外,實驗還使用誤報率和漏報率來評估模型對樣本誤判的情況,其中誤報率(False Positive Rate,FPR)和漏報率(False Negative Rate,FNR)的計算公式如式(6)~(7)所示:

3.3.1 參數設定
通過多輪的參數設計和對比實驗,本文方法設計的模型結構如表2 所示。其中,本文模型的輸入為數據流生成的一維序列,長度為300;輸出是樣本屬于某種數據流的概率,存在4種類型。

表2 一維CNN模型參數設定Tab.2 Setting of one-dimensional CNN model parameters
3.3.2 模型結構設計
在一維CNN 模型結構中,卷積與池化層的組數、卷積核的長度及卷積核的個數,都對模型的檢測能力有著較大的影響。為了提高本文模型的性能,設計了三組實驗來選取最佳的模型結構。實驗使用本文采樣并轉換后生成的一維序列樣本數據集,其中包含2 073 個慢速頭部樣本、3 176 個慢速發送樣本、2 473個慢速讀取樣本及14 341個良性樣本,共4種標簽類型。攻擊樣本按3 種攻擊類型和6 種攻擊頻率分成18 組,良性樣本單列一組,從每組隨機抽取90%的樣本合并成訓練集,其余部分作為測試集。
第一組實驗用于選取卷積與池化層的組數,實驗分別將組數設置為1~3 組后訓練本文模型,通過比較各組模型的性能來選取最佳的組數配置,結果如表3 所示。其中,組數為2的模型在準確率和精確率上都要高于其他兩組模型,故本文方法使用兩組卷積與池化層來構建模型。

表3 不同卷積與池化層層數下本文模型的準確率和精確率對比Tab.3 Accuracy and precision comparison of proposed model with different convolution and pooling layers
第二組實驗用于選取一維卷積核的長度。分析序列樣本的生成規則可知,一次報文交互往往包含一對載荷、響應報文,進而生成5~6個序列元素。根據卷積計算的特性,預計卷積核的長度與一次報文交互生成的元素長度相近時,模型能更好地學習到報文序列的特征。因此,實驗分別將卷積核長度設置為1~10 后訓練本文模型,結果如圖5 所示。從圖5 中可以看出,當卷積核長度為6 或8 時,模型的準確率和精確率指標都處于較高的水平。考慮到較短的卷積核長度能降低模型的訓練開銷,故本文方法使用長度為6 的卷積核構建模型。

圖5 不同卷積核長度下本文模型的準確率和精確率對比Fig.5 Accuracy and precision comparison of proposed model with different convolution kernel lengths
第三組實驗用于選取一維卷積核的數量。一般來說,卷積核的數量越多則模型的學習能力越強,但數量過多時易導致過擬合,且增加了模型的訓練開銷。因此,實驗分別將卷積核的數量設置為2~60 內的偶數來訓練模型,性能變化的擬合曲線如圖6 所示。從曲線的變化趨勢可以看出,在橫軸值為34 的點之前,模型的性能基本隨著卷積核數量的增加而上升;在該點之后,模型的性能基本不再明顯上升;在該點上,模型的準確率和精確率都達到了較高的水平,故本文方法將卷積核數量設置為34來構建模型。

圖6 不同卷積核數量下本文模型的準確率和精確率對比Fig.6 Accuracy and precision comparison of proposed model with different numbers of convolution kernels
為檢驗本文模型的檢測性能,設計了實驗將其與RNN、LSTM、Bi-LSTM等幾種常見的序列分類模型進行對比。
實驗使用本文采樣并轉換后生成的一維序列樣本數據集。使用10折交叉驗證法生成10組訓練和測試集,即將數據集分為10 組,每次取9 組作為訓練集,取1 組作為測試集,共對模型測試10 次。測試時,每次訓練最大迭代次數為20 輪,訓練批量大小為128。從20輪迭代中選取結果最優的模型數據作為本次測試的性能數據。當10組測試都完成后,以10組測試數據的均值來評估模型的性能。實驗結果如表4所示。

表4 不同模型對各類樣本的檢測準確率和精確率對比 單位:%Tab.4 Detection accuracy and precision comparison of different models for various samples unit:%
結合表4 的數據可以看出,本文模型在檢測準確率和精確率上都略高于Bi-LSTM 模型,且明顯優于RNN 和LSTM 模型。該結果說明,在SHDoS 攻擊檢測的場景中,本文模型對攻擊生成的序列樣本具有較好的檢測能力,相較于其他方法更具優勢。
為解決攻擊頻率變化導致模型檢測性能降低的問題,本文模型在對少數幾種攻擊頻率樣本進行學習后,應能夠對其他未知攻擊頻率的樣本也具有較好的檢測能力。為評估本文模型對未知攻擊頻率樣本的泛化能力,本組實驗采集了獨立的驗證集,并對本文模型、LSTM及Bi-LSTM模型進行了測試。
在生成驗證集時,實驗分別采集了攻擊周期為1~60 s 的60組攻擊數據流,每組數據流包含3種攻擊模式,每種攻擊模式采樣5 min。為了和實際檢驗過程保持一致,驗證集的數據流在生成序列樣本時不進行去重處理。實驗將采集的良性樣本分別與60 組攻擊樣本組合成60 組驗證集,每組都包含4 種標簽類型。平均每組驗證集包含有1 481個攻擊樣本,并加入了同等數量的良性樣本。
實驗分別將60 組包含不同攻擊頻率樣本的驗證集輸入各模型,并統計其檢測性能的變化情況。結果如圖7 所示,其中橫軸上的每個點對應一組驗證集,圖中的折線反映了各模型在不同驗證集上的檢測準確率和精確率的變化情況。從圖7 中可以直觀地看出,相較于其他模型,本文模型性能變化的折線更加平穩,在不同組別的驗證集上基本都保持了相近的準確率和精確率。
表5 統計了各模型在所有驗證集上取得的準確率和精確率的方差、標準差及平均值。從表5 的標準差和方差值也可以看出,在攻擊頻率變化時,本文模型性能的變化是最小的,平均準確率和精確率分別達到了96.76%和94.13%。
實驗使用獨立驗證集來評估本文模型在樣本誤報和漏報方面的性能,誤報率和漏報率分別為2.24%和8.49%,都處于較低的水平。此外,由于SHDoS 攻擊主機需要同時維持多條連接才能達成攻擊目的,因此防御系統還可以通過統計被檢出的攻擊數據流在固定時間段內是否超過閾值的策略,進一步降低系統對攻擊主機的誤判率和漏報率。

圖7 在驗證集上各模型的準確率和精確率對比Fig.7 Accuracy and precision comparison of different models on validation sets

表5 不同模型在所有驗證集上的準確率和精確率的方差、標準差及均值 單位:%Tab.5 Variance,standard deviation and mean of accuracy and precision of different models on all validation sets unit:%
實驗結果表明,本文模型能夠對其他未知攻擊頻率的樣本具有較好的檢測能力,能夠解決攻擊頻率變化導致模型檢測性能降低的問題。
本文針對SHDoS 攻擊流量檢測在攻擊頻率變化時出現準確率降低的問題,提出了一種基于一維CNN 的SHDoS 攻擊流量檢測方法。通過對SHDoS 攻擊原理和報文的分析,本文方法在多種攻擊頻率下對三種模式的攻擊流量進行采樣,保證了數據樣本在攻擊頻率上具有代表性。之后,本文方法還對樣本進行清洗,避免訪問失敗的無效數據流混入樣本,導致模型學習到錯誤的特征。另外,本文方法通過數據流的序列化算法和序列去重操作,有效地將高度相似數據流進行去重,避免訓練集和測試集中出現基本相同的樣本,導致模型出現過擬合的現象。最后,本文方法使用一維CNN 構建的分類器有效地學習到攻擊流量的序列特征,并對驗證集中未見過的攻擊頻率樣本具有較好檢測能力,取得了較高的檢測準確率和精確率。通過以上設計,本文方法能夠解決攻擊報文收發頻率變化導致的檢測準確率降低的問題,可滿足對不同攻擊頻率的SHDoS流量進行檢測的需求。