萬 梅,曹 琳
(1.廣州工商學院 計算科學與工程系,廣東 廣州 510850;2.南方醫科大學 基礎醫學院,廣東 廣州 510515)
軟件定義網絡(software defined network,SDN)[1]將數據與控制分離,控制層通過控制器管理和配置網絡結構,部署網絡的協議,數據層的dumb交換機負責快速地轉發匹配的數據包[2]。兩層之間通過開放的接口交互(例如:OpenFlow[3]),控制器通過接口向交換機下發規則,交換機執行規則對應的動作。隨著SDN的廣泛應用,其安全性逐漸成為了當前互聯網的研究熱點[4]。
目前SDN安全領域的研究熱點主要集中于異常檢測[5]、攻擊檢測[6]、拒絕服務攻擊和信息竊取[7]等方面,大多數SDN的異常檢測方案在控制層實時提取交換機的流量表,構造整個網絡的統計信息,再通過分類器將流量特征分類,分析正常流量和異常流量[8]。文獻[9]采用5個流量特征的中位值作為正常流量類的中心點,再通過KNN分類器和歐氏距離度量各個樣本和中心點的距離。該方案較好地實現了對DDoS攻擊的檢測效果,但是無法檢測差異較小的異常流量。文獻[10]提出了輕量級的在線惡意行為檢測算法,該文總結了一組判定規則檢測經過交換機的每個報文,該方案的響應速度較快,但是檢測的準確率不夠理想。文獻[11]提出了SDN環境下異常流量的檢測和解決方案,該文提取SDN控制層的參數,然后通過簡單的孤立點檢測技術提取異常的行為,該方案也僅僅適用于異常行為顯著的惡意行為。
文獻[12,13]研究了基于離散小波變換的流量數據分析,將數據的小波分解作為網絡流量的特征,獲得了較好的結果。此外,正常的網絡流量在長時間范圍內應當滿足正態分布[14],本文將離散小波分解和網絡流量的統計特征結合,提高流量特征的表達能力。
經典的分類器對于弱標記數據的分類準確率較低,直接影響異常流量檢測的效果。強化學習在與環境的交互中學習,且無需教師信號和先驗知識,具有較強的自適應能力[15]。本文采用強化學習作為監督學習方法,強化學習一般和真實的在線環境進行交互,而非預記錄的數據集,所以本文將在線環境替換為訓練集模擬的環境。最終將強化學習的策略函數作為神經網絡的分類函數,實現了較強的分類能力。實驗結果表明,本方案對于SDN的異常流量實現了較高的檢測準確率,并且提供了攻擊行為的解決方案。
DWT能夠快速地提取數據特征,本文將正態分布和DWT結合,快速分類網絡流量并檢測孤立點。
SDN包括數據平面、控制平面和應用平面,如圖1所示。從控制平面提取網絡的統計參數,數據平面與控制平面之間通過SDN控制數據平面接口(control-data-plane interface,CDPI)進行通信,目前主流的CDPI協議是OpenFlow協議。控制平面與應用平面之間由北向接口(northbound interface,NBI)負責通信,NBI由用戶自主開發。控制平面包含邏輯中心的控制器,負責控制邏輯策略和維護全網視圖。

圖1 本文SDN異常流量檢測系統的總體設計
通過OpenFlow協議從數據平面采集數據。每隔30 s(1個周期)發送一次OpenFlow請求,交換機收到請求后通過OpenFlow消息向請求控制器返回響應消息,響應消息中包含了流量表的詳細內容。本文以30 s為一個周期,不僅能夠及時檢查出異常流量,而且能夠運行全部的異常處理程序。
在預處理階段提取并分析了以下6個流量屬性:比特流長度、報文數量、源IP地址、目標IP地址、源端口、目標端口。最后4個屬性為非量化指標,采用香濃熵理論對這4個網絡流量屬性做量化處理。設一個流量特征為Y={y1,y2,…,yn},其中yi表示在一個周期內第i個值的出現次數,如果是計算源端口和目標端口熵值的情況,yi表示第i個端口在樣本數據集中出現的次數。流量特征Y的熵H定義為
(1)
式中:pi=yi/n是Y值為yi的概率。
通過上述的預處理可觀察流量屬性值的集中程度。例如:在DDoS攻擊下流量屬性的集中程度會發生變化。如果某個源IP地址創建大量的連接,則短時間內該源IP地址將會變得十分密集。
采用DWT的正態分布提取數據的特征并檢測異常數據,DWT將信號分解為頻譜集[16]。DWT在每個分解層將數據劃分為小波系數djk,小波系數是上一層數據的高頻部分,近似系數ajk是低頻部分。
DWT的數學表達式f(t)定義為
(2)
其中,φj0k(t)為尺度函數,aj0k為近似系數,Ψjk(t)為小波函數,djk為DWT每個分解層的細節系數,兩個系數均包括K個元素,其中K=N/2,N為輸入的數據量。
將DWT考慮為濾波器,輸出為高通濾波器和低通濾波器的矩陣乘法運算。設輸入數據為F,濾波矩陣F為高通濾波器和低通濾波器乘法運算的結果。將F和x相乘獲得近似系數和細節系數的向量coef,該運算產生第1層的系數。后續每層將近似系數作為輸入數據x。該過程的數學表達式定義為式(3)和式(4)
Fx=coef
(3)
(4)
采用小波函數[17]作為DWT的濾波器,通過高通濾波器獲得細節系數djk,通過低通濾波器獲得近似系數ajk。近似系數是信號與尺度函數的內積,細節系數是信號與小波函數的內積。DWT的一個關鍵屬性是如果原數據為正態分布,則變換后的數據也為正態分布,即小波系數也為正態分布,本文利用該屬性分析數據小波變換的統計分布。
首先基于DWT提取正常流量的模式:
步驟1 檢測正常流量。檢測的流量屬性包括:每秒的報文數、比特率、源端口的熵和目標端口的熵,源IP地址熵和目標IP地址熵。正常流量檢測主要采用Shapiro-Wilk(SW)檢驗工具,檢測結果顯示比特流和各個統計的熵值均服從正態分布。基于該觀察結果,本文應用正態分布的屬性分析SDN數據流的樣本。
步驟2 選擇最佳的Wf窗口。使用Shapiro-Wilk (SW)檢驗分析滿足正態分布的最佳Wf窗口,該窗口作為時間t的流量分析數字簽名(digital signature of network segments using flow analysis,DSNSF)[18]。
隨之使用K-means分類相似的流量,定義正常流量的模式,然后使用神經網絡將實際流量和正常流量比較,為實際流量分配類標簽。
采用K-means將所有的元組分類,K-means的目標是最大化類內的相似性、最小化類間的相似性,目標函數定義為
(5)

因為網絡流量具有高度的自相似性,大多元組的元素值相似,所以網絡流量的分類結果應該是一個極為密集的分類和若干極為稀疏的分類,密集類為正常流量,稀疏類為離群點。計算每個分類的加權平均值
(6)
式中:p(j)為分類cj的元素數量,N為窗口t的元組總量,dt定義了窗口t的正常流量行為特征。假設矩陣D=[d1,…,dt,…]為全天DSNSF的期望流量行為,dt=[d1,d2,…,d6]表示時間t的6個流量特征。
將異常流量檢測考慮為一個流量分類問題,選出不同于期望流量行為的流量模式。該問題屬于有監督分類問題,數據集是含有特征的觀測數據,通過分類器預測每個到達樣本的類標簽。經典的分類器包括統計方法、決策樹、K-近鄰分類和人工神經網絡等,這些分類器均為靜態模型,需要對每個窗口的流量進行重新訓練,無法適用于變化劇烈的SDN場景。本文將強化學習技術引入人工神經網絡模型,將動態的流量數據作為強化學習的一個agent(環境),人工神經網絡分類器作為第二個agent,并行地運行學習程序和環境調節程序。
本文采用強化學習作為監督學習方法,而強化學習一般和真實的在線環境進行交互,而非預記錄的數據集,所以本文將在線環境替換為訓練集模擬的環境。首先,從數據集隨機采樣生成新樣本集,根據分類器的預測效果產生獎賞,然后,根據學習目標深入調節初始化的行為,修改環境來增加分類器的預測困難。環境是一個agent,分類器是另一個agent。
在強化學習的框架中,環境告知agent當前的環境狀態,agent對該環境響應一個動作,該動作可能會引起環境發生變化,環境根據該動作引起環境的變化向agent返回一個獎賞。針對SDN的流量分類問題,本文對強化學習模型做如下3點修改:
(1)根據SDN問題模型模擬強化學習的環境,環境的狀態是網絡攻擊的類型。
(2)agent是一個人工神經網絡分類器,其目標是根據模擬環境的狀態預測流量的類標簽。
(3)環境根據agent是否預測正確產生獎賞。
將上述3點修改應用于強化學習的Q-learning算法,預測流量數據的類標簽。Q-learning的目標是尋找agent的最佳Q()函數,Q()函數為每對狀態-動作產生一個估計值,該值等于該狀態的全部獎賞之和。Q()函數的計算方法為

(7)
式中:St為當前的狀態,At為當前的動作,At+1為下一個動作,Rt+1為下一個獎賞值,α為學習率,γ為折扣因子。因為本文每個狀態之間的沒有相關性,所以無需記憶之前的狀態,本文將折扣因子設為接近0。參數α和γ分別設為1和0.001。
采用一個完全連接神經網絡(neural network,NN)作為分類器,NN的輸入為當前狀態,即從標記數據集提取的特征,NN的輸出為Q()函數。因為網絡流量是高度不平衡數據,正常數據的比例遠高于異常數據,所以本文對上述分類框架進行修改,提高環境模擬的智能性。本文并行地訓練環境agent和分類器agent,分類器agent的輸出結果是對輸入樣本預測的類標簽,環境agent的動作是攻擊的類型,訓練程序中采用這些攻擊類型生成新的樣本。分類器agent和環境agent是兩個基于獎賞的對手模型,環境通過選擇樣本來增加分類器agent的誤差,提高分類器的分類難度。
因為異常流量的出現概率極低,分類器agent的所有正獎賞對于環境agent為副作用,所以本文通過產生分類器失敗率高的樣本,提高了環境agent采樣的平衡性。環境agent學習分類器agent失敗率高的分類,然后增加這些樣本的出現頻率。設計了兩個不同的Q()函數:Qc(s,a)函數負責分類器的優化,Qe(s,a)函數負責環境的優化。兩個函數均評估了s狀態下a動作所產生的益處,差別在于兩個函數的可選動作數量不同。
算法1所示是基于強化學習的流量分類程序。該程序分為以下的步驟:
步驟1 環境agent和分類器agent的Q()函數均初始化為隨機值。
步驟2 環境agent基于策略和當前狀態選擇一個動作aet。
步驟3 環境從數據集st隨機選擇當前的狀態,其動作對應環境agent的選擇樣本。
步驟4 確定了環境agent的狀態,分類器agent嘗試分配一個動作act。
步驟5 動作act被發送到環境agent,并與正定標記比較,如果兩者相同,則分類正確,并且向分類器agent返回一個正反饋,如果不同,則向環境agent返回一個正反饋。
步驟6 環境agent基于其動作函數和策略選擇下一個特征-標簽對(st+1,aet+1)。獎賞函數的取值為1或0,1表示正獎賞,0表示負獎賞。
算法中實現了3個優化機制:①采用了兩個獨立的網絡選擇和評價動作的質量。②采用Huber損失作為損失函數,Huber損失是魯棒回歸的損失函數,對數據游離點的敏感度低。③采用兩個神經網絡實現了兩個不同的agent,環境agent的Q-learning epsilon值設為0.8,分類器agent的Q-learning epsilon值設為0.01。
算法1:基于強化學習的流量分類算法。
隨機初始化Qc(s,act)和Qe(s,aet);
foreach 流量窗口:
初始化狀態s0; //隨機采樣流量數據
使用策略Qe(st,aet)選擇環境的初始動作aet;
將st替換為random(S(aet));//S(aet)表示標簽為aet的樣本,random()表示隨機采樣。
foreach 時間t=0 toT:
使用策略Qc(st,act)選擇agent的動作act;
運行強化學習程序,獲得(rct,ret,st+1);
/*獲取下一個狀態*/
使用策略Qe(st,aet)選擇環境的下一個動作aet+1;
將st+1替換為random(S(aet+1));//S(aet+1)表示標簽為aet+1的樣本,random()表示隨機采樣。
/*運用梯度下降法更新Q()函數*/


圖2是強化學習的結構,環境agent和分類器agent均為神經網絡,如圖3所示。環境agent和分類器agent的神經網絡隱層分別為1層和3層,隱層均為100個節點。神經網絡的結構簡單,響應時間較短,通過強化學習調節神經網絡的權重和偏差。分類器agent的輸出是預測的攻擊類型,而環境agent的輸出是23個所有可能的攻擊類型。分類器agent的神經網絡是分類器,環境agent的神經網絡不是分類器,而是攻擊類型的產生器。

圖2 強化學習的結構

圖3 強化學習兩個agent的神經網絡結構
如果系統發現一個異常事件,系統收集該事件的相關信息,例如:攻擊的IP地址、攻擊主機和端口,然后運用一些策略放棄異常的流量。主要設計了報文轉發和報文丟棄兩個異常處理策略,報文轉發策略處理良性流量,報文丟棄策略處理惡意流量。將兩個異常處理策略通過控制層傳至交換機,異常處理機制如算法2所示。
算法2:異常處理程序。
(1)識別被攻擊的目標和端口;
(2)產生一個阻塞流量的入口;
(3)將流量的目標IP設為被攻擊目標的IP;
(4)將流量的目標端口設為被攻擊目標的端口;
(5)交換機中設置惡意處理策略;
(6)為異常流量分配高優先級(SDN中為65535);
(7)設置流量的空閑期限為61 s;
(8)通過OpenFlow協議將良性流量發送到數據平面。
采用Mininet仿真平臺模擬真實的SDN網絡,創建一個虛擬網絡,網絡由虛擬主機、交換機、控制器和網絡連接組成。選擇Mininet模擬器的原因主要有:①Mininet是一個開源軟件,該軟件的更新頻率較高。②Mininet支持常見的SDN協議,例如:OpenFlow協議。③在Mininet平臺開發的應用經過微小的修改即可在實際場景下運行。④Mininet支持配置網絡的不同參數,并能夠實時監控網絡的參數變化。
在OpenFlow模擬平臺創建一個深度為2的樹狀SDN網絡,根交換機連接4個葉交換機(編號為2,3,4,5),圖4是在Mininet上模擬的SDN網絡拓撲結構。

圖4 Mininet平臺模擬的SDN網絡拓撲結構
仿真實驗采用Open vSwitch作為網絡交換機,該交換機支持OpenFlow協議。在POX控制層實現了DWT算法、異常檢測程序和異常處理程序。基于Python語言開發了SDN應用程序的框架。
采用可編程工具Scapy發送報文序列作為歷史流量(滑動窗口),基于歷史流量創建一個標準的網絡配置文件。仿真實驗模仿真實環境的情況,正常流量的構成為85%的TCP流量、10%的UDP流量和5%的ICMP流量。報文的大小和流量速率均服從正態分布。
通過合成的異常流量模擬各種攻擊行為,采用的工具為hping3軟件。合成的DDoS攻擊對流量的4個網絡屬性產生影響:報文數量、目標端口熵、源IP地址和目標IP地址。hping3向目標主機發送SYN報文,源IP地址和端口為隨機值,總體的流量數據包括了正常流量和攻擊流量。將圖4中的交換機5設為被攻擊的目標,其IP地址設為10.0.0.78。異常流量出現在下午1∶00-2∶00和7∶00-8∶00。
采用5個常用的網絡安全性能指標,分別為:精度P、準確率A、F-measure、召回率RC和AUC指標,精度P、準確率A、召回率RC、F-measure分別定義為
P=TP/(TP+FP)
(8)
A=(TP+TN)/(TP+TN+FP+FN)
(9)
RC=TP/(TP+FN)
(10)
F-measure=2×(P×RC)/(P+RC)
(11)
式中:TP表示預測為正實際也為正的比例,TN表示預測為負實際也為負的比例,FP表示預測為正而實際為負的比例,FN表示預測為負而實際為正的比例。
為了從不同的角度評估本算法的效果,選擇了5個不同類型的SDN安全方案,分別為:DWTNN、DWTkNN、ATLANTIC[19]、ADSAN[11]、SADMA[20]、DLF[21]。DWTNN是離散小波變換和一般神經網絡組合的方案,該方案與本方案的主要區別在于未使用強化學習技術,從而觀察本文強化學習機制的有效性。DWTkNN是離散小波變換和k-近鄰分類器組合的方案,觀察不同分類器對于安全性能的影響。ATLANTIC、ADSAN和SADMA是3個異常SDN的異常分類和處理方案,這兩個方案通過流量的中值作為正常流量的中心,與本文采用的正態分布統計思想存在差異,由此評估本文統計分布思想的有效性。DLF是一種基于深度學習技術的異常流量自適應檢測算法,將該算法與本方案比較,評估本文強化學習的優劣。
圖5是各個安全方案對于異常事件的處理結果。ATLANTIC取得了較好的檢測效果,與DWT方法較為接近,DWTNN、DWTkNN、本方案與ATLANTIC的結果較為接近,但DWT方案明顯優于ADSAN、SADMA和DLF這3個安全方案。可以總結出基于正態分布分析正常流量和異常流量具有明顯的優勢。DLF算法的檢測性能較弱,該算法采用了多層神經網絡,但是在網絡流量動態變化過程中難以確定精確的超參數,因此DLF的深度神經網絡穩定性較低,導致其檢測的性能較低。將本算法與其它兩個DWT算法相比,本算法依然具有一定的優勢,主要原因在于本方案通過強化學習和神經網絡并行的學習策略,有效地提高了動態分類的效果。

圖5 不同安全方案的實驗結果
實驗主要測試了DDoS和端口掃描攻擊的檢測效果,分別統計了本方案對于正常流量、DDoS攻擊和端口掃描攻擊的檢測結果,觀察檢測的檢測率、漏檢率、誤檢率和查全率,結果如圖6所示。圖中結果顯示,DWTNN對于DDoS攻擊的檢測效果較好,但是將36個正常流量檢測為了掃描端口攻擊,這是DWTNN的一個不足之處。本方案的混淆矩陣優于其它兩個安全方案。

采用強化學習作為監督學習方法,強化學習一般和真實的在線環境進行交互,而非預記錄的數據集,所以本文將在線環境替換為訓練集模擬的環境。最終將強化學習的策略函數作為神經網絡的分類函數,實現了較強的分類能力。實驗結果表明,本方案對于SDN的異常流量實現了較高的檢測準確率,并且提供了攻擊行為的處理機制。

圖6 3個基于DWT算法的混淆矩陣
本文在SDN的控制層提取了6個流量屬性,分別為比特流長度、報文數量、源IP熵、目標IP熵、源端口熵、目標端口熵。未來將考慮引入其它的SDN網絡流量屬性,分析不同流量屬性和不同網絡攻擊之間的相關性,增加對網絡攻擊行為的判別能力。