周啟釗,于俊清,,李冬
(1.華中科技大學計算機學院,湖北 武漢 430074;2.華中科技大學網絡與計算中心,湖北 武漢 430074)
隨著互聯網的資源管理需求日益多元化,軟件定義網絡(SDN,software defined network)[1]作為一種新興的轉控分離的架構為網絡資源的管理帶來了新的思路。SDN 通過將網絡核心控制邏輯與底層路由器和交換機架構進行分離,打破了傳統的垂直集成網絡控制和轉發的模式,克服了網絡基礎設施部署局限性的關鍵問題。部署SDN 架構的網絡具備靈活性、可編程性和集中化管理等諸多優點[2]。OpenFlow 是當前最常用的SDN 南向協議,它提供了標準化的控制層與數據層的通信指令:數據轉發規則以流表項的形式進行表示,流表項則組合成為數據層的流表,SDN 架構的網絡環境以流表更新及控制器反饋的形式完成通信指令交互。由于控制層為了維持與數據平面之間的高效通信引入了諸如Packet-In 的快速信息流指令,利用現有的控制層信息指令漏洞對網絡發起攻擊的案例層出不窮,其中對SDN 影響最嚴重的就是控制層欺騙式泛洪攻擊。包括SDN 控制層信息指令Packet-In、通信交互TCP/SYN 報文在內的信息流均可能被利用并以泛洪的形式發起攻擊[3-4]。攻擊者通過偽造源地址技術創造新的源地址或數據通道,并利用偽造控制層交互信息來與SDN 控制器進行通信,擾亂控制層對全網的認知,進而間接對數據層的轉發產生影響。根據OpenFlow 協議的規定,控制器下發的流表項規則被交換機完全信任,若存在偽造源地址的流規則篡改行為,SDN 數據中心接入層交換機的安全保護性能將面臨嚴重威脅。
現有基于目的地址轉發的網絡路由機制導致控制層泛洪中偽造源地址欺騙的現象層出不窮,其關鍵特點為攻擊流量巨大、難以追溯和難以防御等,若缺乏高效的泛洪攻擊檢測機制,SDN 的控制層將存在巨大安全隱患。另一方面,由于SDN 基于目的地址的轉發模式并未涉及對源地址的檢查和認證過程,控制層泛洪所造成的網絡管理擾亂了接入層交換機的認證與身份識別,若缺乏合理的泛洪攻擊緩解機制,攻擊者可實現對SDN 數據的竊取和網絡狀態的探測,對SDN 架構的安全性產生重大影響。
OpenFlow 協議提供了控制器和交換機之間的安全通信指令,其規定的標準化機構使各模塊網絡通信間的互操作性增強,但針對控制層的欺騙式泛洪攻擊仍然層出不窮。典型的控制層欺騙式泛洪攻擊的類型主要包括Packet-In 泛洪和SYN(synchronize sequence numbers)泛洪2 類。
每當有新的數據包進入數據層進行匹配,會在流表中尋找對應的流表項進行匹配:若直接匹配成功,則轉發數據報文;否則,該數據包信息通過OpenFlow 協議規定的控制器與數據層交互信息流Packet-In 進行上報,由控制器進行進一步分析。當控制層和數據層建立連接后,控制器即處理來自數據層的各種OpenFlow 協議通信指令,如圖1 所示,并分發指令給監聽此通信指令的所有數據層交換機。在此過程中,由于控制器的集中特性,攻擊者通過創造大量偽造源地址的Packet-In 包觸發控制器處理進程,產生Packet-In泛洪[4]。該Packet-In 泛洪是一類新型的針對SDN控制層的攻擊,將直接造成SDN 的單點故障。在極端情況下,Packet-In 泛洪持續時間過長使得控制層的性能完全失效,進而使控制器無法處理正常消息,南向數據層網絡管理混亂,SDN 的合法流量轉發滯塞。
由于控制層針對傳統TCP 漏洞仍然存在缺陷,依靠TCP 建立連接時3 次握手存在的缺陷可發起SYN 泛洪攻擊,該泛洪的形成借助TCB(即TCP傳輸控制塊)的缺失和在SYN 包中偽裝合法的源IP 地址發起,可對SDN 控制層造成巨大安全隱患,如圖2 所示。TCB 是一種連接所有信息的傳輸協議數據結構,其分配空間的大小取決于接收的SYN包,在控制層連接成功前或發起源被驗證前該空間大小均可變[3]。攻擊者可借此漏洞輕易發起欺騙式SYN 泛洪,使到達的SYN 包被控制層分配過多的TCB 而導致其內核內存被耗盡。此外,攻擊者通過在SYN 包中偽裝合法的源IP 地址,使SYN-ACK包無法被有效響應,進而無法觸發對應控制層通信指令,使主機將已分配的TCB 從SYN-RECEVIED狀態隊列中移除,最終導致SDN 控制層的安全通信指令管控混亂,無法繼續響應數據層其他正常設備的請求。
現有針對SDN 控制層欺騙式泛洪的解決方案主要分為基于終端的SYN 泛洪防御和基于網絡的Packet-In 泛洪防御2 類。針對SYN 泛洪,基于終端的對策包括SYN Cookies 和SYN 緩存等方法[4-6]。由于欺騙式SYN 泛洪依賴于終端主機連接套接字的日志溢出,增加其日志隊列大小可初步緩解SYN泛洪的攻擊強度。此外,縮短一個TCB 從進入SYN-RECEIVED 狀態到因未進入下一個狀態而被回收的時間,也是一類有效的基于終端主機的解決方法[7-8]。為了緩解ACK(acknowledge character)包丟包而產生的泛洪攻擊問題,基于SYN 緩存和SYN Cookies 實現的方案均提供了針對控制層的防御思路:在已部署SYN 緩存和SYN Cookies 的控制器中,添加一個被限制大小的Hash 表空間用于存放被分配給TCB 的數據的指令子集,該空間能提升SYN 泛洪發生時SDN 控制層的容錯率,在一定時間內維持控制層的全局視野和管理性能。然而,此類基于終端的SYN 泛洪防御機制需要對其底層TCP/IP 棧實現進行修改,而中間件如防火墻或入侵檢測系統(IDS,intrusion detection system)[9]需要通過網關實現,其在SDN 中的可擴展性相對不足。
基于網絡的泛洪防御方案通常以RFC2827 為基礎實現欺騙數據包過濾,采取輸入源過濾的方式執行泛洪防御。TopoGuard[10]是一種針對拓撲欺騙攻擊的工具。通過驗證SDN 通信信令從出現到執行的合法性確保主機遷移的真實性。然而,該模式還缺乏對控制層泛洪尤其是Packet-In 泛洪的測試,控制層泛洪防御模式并不全面。ISP 方案[11]直接阻斷了源IP 地址不屬于源子網的包的傳遞,該方案提出了在網絡層篩選欺騙式泛洪數據包并進行輸入源過濾的模式,實驗結果表明其部署能有效地過濾SYN 泛洪攻擊包,但該方法依然未考慮大量Packet-In 消息注入的情況。為了提升控制器Packet-In 泛洪對應的防御性能,文獻[4]提出了一種基于Packet-In 合法性檢測的防御策略,通過驗證Packet-In 消息是否由偽造源地址方式生成來決定其向控制器的轉發功能。然而,該方法的攻擊緩解部分缺乏對控制層泛洪攻擊中偽造MAC 地址的情況的分析,其偽造源地址包過濾的精度還不夠。此外,一些針對解決SDN 控制層泛洪攻擊問題提出的統計分析及閾值檢測、特征檢測及深度學習等方法的防御機制[12-14]彌補了現有泛洪防御模型在分類攻擊主機和數據包方面精度不高的問題。其中統計分析及閾值檢測方法能初步對SDN 控制層泛洪的發生進行預警,但該類方法無法及時并有效地區分網絡轉發正常突發大流和欺騙式泛洪攻擊,針對控制層泛洪檢測問題容易發生誤報。特征檢測及深度學習的方法[12]通過集合分析SDN 中交換機、控制器及流量數據等多維特征,結合輕量級的機器學習或深度學習方法進行泛洪檢測,該類型的方法由于特征維度爆炸或特征關聯性問題通常需要進行大量計算,在SDN 控制層泛洪攻擊實際環境下,尤其針對Packet-In 泛洪及SYN 泛洪的檢測效果不理想。此外,大量特征的采集和處理也增加了控制器的負載,對數據層的正常數據包轉發產生了負面的影響。
針對現有基于終端的SYN 泛洪防御和基于網絡的Packet-In 泛洪防御存在的可擴展性不足、特征維度爆炸和帶來額外負載的問題,本文提出了一種低開銷、高精度的SDN 控制器防御機制(CDM,controller defense mechanism)。該方法具有以下優點。
1) 低開銷的流量采集。結合sFlow與OpenFlow交互信令的共性,提出了一種輕量級、低開銷的特征采集方案,使控制器以多線程的方式周期性地從接入層交換機獲取針對性的特征條目,而不需要多次遍歷和輪詢。
2) 高精度的特征解析和攻擊檢測。將與SDN控制層泛洪攻擊密切相關的特征進行組合,從多維流表項匹配域及流量特征中篩選排除低效特征,并結合梯度決策分類算法訓練模型,該模型可高精度地區分正常突發流量和惡意泛洪流量。
3) 高安全性的差異化泛洪緩解。結合源地址驗證綁定模式,針對欺騙式泛洪和正常突發流量的特征提出差異化的SAVI(source address validation improvement)泛洪緩解機制,該方法不僅可有效抵御Packet-In 泛洪和SYN 泛洪攻擊,也能有效提升緩解控制層在泛洪發生時的響應效率。
由于SDN 提供了靈活的網絡全局跟蹤機制,同時具備交換機信息持續監控的能力,本節針對控制層泛洪攻擊檢測低開銷的關鍵特征采集需求,結合sFlow 與OpenFlow 交互信令的共性,實現了一個輕量級的泛洪特征采集模塊。sFlow(RFC3176)[15]是一種網絡導出協議,通常用于網絡性能和數據的測量,協議提供了對數據包進行檢測的各類信息采集協議,并嵌入專用集成芯片(ASIC)中對數據包進行轉發和收集。如圖3 所示,基于sFlow 的數據采集系統主要由ASIC 中的sFlow 服務端(sFlow agent)和遠程的sFlow 采集端(sFlow collector)2 部分組成。其中,sFlow 服務端用于獲取交換機或路由器的網絡數據測量結果,當特定時間窗口結束或者緩沖區滿后,將數據測量結果打包封裝為sFlow 的報文發送到sFlow 采集端。隨后,sFlow 采集端對sFlow 的報文進行解析,分析并輸出對應的網絡統計數據[16]。
而在OpenFlow 協議中,SDN 控制器通過OFPT_STATS_REQUEST 對交換機進行請求。交換機將所請求的統計數據信息通過OFPT_ MULTIPART_ REPLY 消息回復給SDN 控制器。結合sFlow服務端的采集特性,該模塊將現有OFPT_MULTIPART_REPLY 消息可獲取的部分進行保留,利用控制器定期通過交互信息OFPT_STATS_REQUEST/REPLY 與OpenFlow 交換機進行通信的特性,將sFlow 服務端IP/UDP 頭與OFPT_STATS_REQUEST 消息返回流表匹配域信息重合的部分進行整合。sFlow 服務端整合流表匹配域數據采集示例如圖4 所示,IP/UDP 頭包括數據包長、數據包緩存字節、流表空間大小等,為每個接入層交換機單獨創建一個數據收集線程并開始執行,這縮減了現有SDN 接入層交換機遍歷采集模式的冗余數據特征處理流程[16]。采用Java/Python實現基于信令交互的多線程特征采集,其中OFPT_STATS_REQUEST 主要負責查詢流表的最大存儲量和活躍流表項的數目,另一線程的sFlow服務端主要用于獲取流表對應數據流量基本信息。基于sFlow 的多線程信息采集與整合模型流程如圖5 所示,通過動態的參數控制獲取交換機流表和流量2 方面的信息,為了確保兩者的兼容性,sFlow服務端僅接收SDN 數據中心接入層交換機流表對應的數據流信息采集和存儲。
3.2.1 控制層負載單位階躍函數
針對SDN 控制層的SYN 泛洪攻擊可利用因擁塞而丟包的ACK-SYN 或者握手完成的ACK 包單獨發起,此時由于SYN-RECEIVED 的響應時間減少,合法連接的TCB 空間也會因控制器繁忙無法重傳失配包,最終導致數據包丟棄。為了解決控制層SYN 泛洪攻擊問題,現有常見的防御機制通過優化系統設置實現[8],典型的如降低對應的SYN 時延[17],使主機盡快釋放半連接的占用。該模式存在的主要問題是無法根據數據流狀態衡量控制層負載,因此為了量化SDN 突發大流或泛洪攻擊發生時控制層的負載狀態,結合現有OpenFlow 協議中順序的匹配模式,本節基于數據流對應流表項時延idle_timeout(Tinit)對控制層負載進行建模[18]。SDN 流表時延與控制器狀態模型如圖6 所示,其中{p1,p2,…,pi,…,pn}表示SDN數據流傳輸的數據包長度,此處認為數據包是獨立分布并服從Pareto 分布的[19],分布公式如式(1)所示,其中,k,τ,α是Pareto 分布的參數。以此數據流分布為基礎,可從理論角度分析數據流分布與控制層負載之間的關系。假設SDN 數據流數目為無窮大,若用{t1,t2,…,ti,…,tn}分割數據包之間的傳輸間隔,則該間隔服從負指數分布,如式(2)所示。
若數據包的空閑時間間隔較大,則OpenFlow交換機此段間隔時間內必然會被控制器重新調度,此數據流所對應配置的流表項也會隨之到期刪除。當后續的數據包需要進行流表匹配時,由于找不到對應的流表項,交換機會立即向控制器發送Packet-In 消息請求流表項的下發。在此期間,控制層泛洪造成的安全問題主要可表征為2 個關鍵的特征:控制層異常發生時的負載高低與實際連接的端口數目有關,如式(3)所示;由于匹配失敗產生的Packet-In 消息會耗費控制器大量的計算資源,以控制器處理Packet-In 消息的性能為依據,可引入單位階躍函數H(·)對控制器的負載狀態即處理Packet-In 消息的數量進行量化,如式(4)所示。
單位階躍函數代表控制器的負載與Packet-In消息的數量呈正相關,假設SDN 控制器處理一條Packet-In 消息的負載為cost,為了同時降低流表的失配率,總負載值可通過多個數據包匹配流表初始時延值累加進行估算。根據數據流切割傳輸模式的特性,設多個數據包對應數據流切割分批處理過程中被分成了n個數據包,每轉發一個數據包,其對應流表項均需要與數據包進行一次完整匹配,故數據流切割傳輸模式下東西向數據包傳輸平均造成的SDN 控制器負載關鍵特征可由式(5)計算。
3.2.2 數據層端口流量差及信息熵
現有研究表明,針對控制層的欺騙式泛洪具有2 個重要特征:突發性流量大和流量速率傾斜[3]。因此通過對SDN 接入層交換機端口流量信息的分析,可初步鑒別SDN 大流量的異常狀態。端口出入流量差的絕對值常常被用于表征影響SDN 控制層流量的關鍵因子,其計算方法如式(6)所示。
現有方法以接入層交換機端口的出入流量差的絕對值為標準進行數據流鑒別,其模型判定依賴流量閾值的選擇,而該流量閾值通常隨著網絡應用需求、底層拓撲和設備性能的變化而差異極大,在不同的拓撲規模和設備性能狀態下對異常流量的判定和端口的定位均會存在嚴重偏差,其可擴展性不足。為了更好地確定異常流警報的閾值,通過流量差和熵值和轉化模型可定性流量的隨機程度,而結合φ-熵對流量差進行表示也有助于量化閾值,提升其穩定性。假設SDN 接入層交換機端口流量差為x,其取值集合可用X={x1,x2,…,xn}表示,針對每個流量差取值的概率分布可用P={p1,p2,…,pn}表示,且每個取值之間互不影響。其中,,變量x的信息熵為
對于SDN 接入層交換機端口流量差集合X,其φ-熵可表示為
φ-熵可用于更加精確量化主機各維度的出入流量差的絕對值與Packet-In 泛洪攻擊之間的關系。本節模型多維度φ-熵特征包括源IP 地址信息(sIP)、源端口信息(sPort)、目的IP 地址信息(dIP)和目的端口信息(dPort)。為了對異常流量進行判定,需要保存前幾個連續時間窗口的多維度φ-熵。如圖7所示,若主機h1對應的端口突然產生了異常大流量,此時該模型應該對s1對應h1的端口p1實時的流量差熵值進行計算,通過出入流量標準差值轉化φ-熵評估,判定h1發出的流量是正常通信大流量或泛洪攻擊流量。當該流量為欺騙式泛洪異常大流量時,即出入流量標準差值轉化φ-熵超過閾值,對應出入端口流量失衡,則判定為疑似泛洪攻擊流量;而若h1主機屬于正常的流量密集型應用,即出入流量標準差值轉化φ-熵未超過閾值,對應出入端口流量平衡,則不會被判定為疑似泛洪攻擊流量。
3.2.3 欺騙式泛洪指令流狀態
分析控制層欺騙式SYN 泛洪攻擊的特征,通常在一定的時間間隔內,攻擊者在SYN 包中偽裝合法的源IP 地址,而這個IP 地址將不能響應SYN-ACK 包,此時就無法觸發控制層通信指令使主機將已分配的TCB 從SYN-RECEVIED 狀態隊列中移除。分析該SYN-RECEVIED 狀態隊列對應流表項與數據流中包間隔大小的關系,發現數據包間隔較大的數據流往往需要占用更多的轉發時間和更大的網絡帶寬,實際的突發大流占總流量的比例較低[17]。由于SDN 數據流的切割傳輸模式,數據包間隔較大的數據流分割得到的數據包對應流表項包含的轉發目的地址通常極為相似。此時,數據包間隔較大的數據流占有的流表資源雖十分有限,但對應流表項的地位卻十分關鍵。該攻擊的一個主要特征是源IP 地址欺騙,若關鍵流表項被欺騙式泛洪數據包影響導致頻繁被更新或刪除,大間隔數據包正常的傳輸會持續被間斷,對應交換機向SDN 控制器頻繁發送Packet-In 消息查詢,最終導致控制器不堪重負,降低控制器對其他網絡數據包的響應能力[20]。在此過程中,生成泛洪包的過程與普通數據流的顯著差別在于單指令流包含較少的數據包個數,因此,通過對指令流包含數據包中位數特征的計算,如式(9)所示,能反映出控制層欺騙式泛洪的存在。
在突發大流和欺騙式攻擊2 類網絡狀態下,SDN數據層東西向均存在大規模的數據包和流量傳輸情況。然而,以接入層交換機端口為基準,2 類大規模數據包和流量傳輸狀態存在明顯的差別:偽造源地址的入流量無法得到交換機流表和控制器的有效響應,故對應的端口出入流量比例會產生嚴重的失衡;而流量密集型應用的大流量傳輸均為合法操作,接入層交換機端口流量并不會產生明顯的失衡。在此2 類狀態下,僅僅通過檢測數據流包含數據包中位數特征判定泛洪攻擊在極端多數據包狀態下誤報率較高。因此為了實現可靠的檢測,控制層欺騙式泛洪關鍵特征還包括成對流狀態,如式(10)所示。正常通信的數據流所產生的成對通信指令通常標記著相同的通信協議,同時其源IP 和目的IP 也有著對應的源地址與目的地址。由于欺騙式泛洪攻擊大量增加了外部流量,例如在SYN 泛洪狀態下,通過偽造源地址發起的外部大流量將產生大量無效SYN-ACK 指令,這導致欺騙式泛洪發生時也存在大量包含失配流信息的SYN-ACK 指令。以此特征為基礎,通過對SYN-ACK 指令包含流信息中成對流的數量的檢測也能反映出欺騙式泛洪的存在,如式(11)所示。
為了檢測與分類針對SDN 控制層的泛洪攻擊,本節以各控制層泛洪解析關鍵特征為基礎,提出了基于XGBoost(eXtreme gradient boosting)算法的控制層攻擊檢測模型。符號說明如表1 所示。

表1 XGBoost 增強型分類器符號說明
XGBoost 是一種基于梯度Boosting 的集成學習算法[21],具有高準確度和可擴展性的特點。Boosting 算法將各個弱分類器加權疊加形成增強型分類器,通過不斷降低計算中的殘差,使之前的模型殘差向梯度方向進一步降低,從而有效降低分類誤差,達到更準確的分類的效果。XGBoost對分類模型的目標函數的損失函數生成二階泰勒展開,并在損失函數之外對正則項求導。其在優化分類的目標函數的同時,對用于分類的決策樹模型進行了預剪枝,從而得到分類的最優參數,使分類結果更準確。基于 XGBoost 算法實現Boosting 的步驟可表述如下。
1) 目標函數
2) 訓練目標函數
3) 目標函數二階泰勒展開近似
4) 去掉常數項
5) 求出目標函數最優解
其中,目標函數ζ(Φ)代表由多維特征構成的控制層泛洪檢測目標數據包,這個目標函數分為誤差函數和正則化項2 部分。時間窗口內特征集合的正則化定義復雜度,其值越小,復雜度越低,泛化能力越強。以此為基礎訓練輸出泛洪檢測目標累加函數,T表示泛洪檢測特征葉子節點的個數,w表示節點的數值。接下來訓練目標函數及求解最優解的過程則是XGBoost 梯度下降分裂節點的標準訓練流程。本文模型采用基于SDN 的入侵檢測數據集InSDN[22]進行線下模型訓練,而線上部分數據由輕量級流量采集模塊實現。針對控制層泛洪攻擊為SDN 帶來的安全問題,在時間與輪數不斷遞增的基礎上進行交叉驗證生成欺騙式泛洪檢測模型,模型性能及參數測試結果將展示于5.2 節。
若泛洪攻擊僅通過重復偽裝單一的源地址進行,該地址將立即被檢測出并被過濾。由于OpenFlow 協議提供了控制器和交換機之間的安全通信指令,其規定的標準化機構使各模塊網絡通信間的互操作性增強,為了達到欺騙通信指令攻擊控制層的效果,現有控制層泛洪的發起往往運用許多不同源地址偽裝,這將使SDN 控制層欺騙式泛洪的防御更加困難[3,23],此時最好的泛洪緩解方法則是盡可能過濾與源地址相近的數據包。
以RFC7513[24]協議為例,SAVI 以綁定?驗證模式為基礎執行路徑過濾,過濾的粒度則取決于IP前綴的粒度。綁定規則的構建是將源IP 地址信息和MAC 地址信息等一些難以冒用的屬性進行關聯,再進行統一的驗證和過濾。典型的綁定關聯表項包括主機端口、主機源地址及MAC 地址,可記為
在執行SDN 控制層泛洪攻擊檢測模塊后,整合模型分類結果,可基于SDN-SAVI(靜態源地址驗證)[28]與D-SAVI(動態源地址驗證)[23]實現差異化的安全管理。從網絡安全管理的時間維度上來說,控制層泛洪緩解措施執行于正常網絡流量和惡意網絡行為的行為建模后,并根據網絡流量分析、異常行為分析等結果進行動態分類處理。SDN 控制層差異化泛洪緩解模型如圖8 所示。在檢測到SDN 正常大流數據傳輸狀態下,將持續進行交換機數據采集和sFlow 流量數據采集。當主機初次請求接入SDN 時,控制器會向其對應的交換機下發偵聽網絡地址分配報文狀態的請求。針對不同的交換機地址分配機制(無狀態自動配置機制和動態變化配置機制),控制器為了獲取主機對應的交換機接入網絡的目的和實時狀態,下發不同的AAM 報文對其進行偵聽和請求查詢泛洪檢測模塊持續運行。
在普通泛洪發生時,執行動態源地址驗證(D-SAVI)方案,交換機將接收的AAM 報文進行預處理,并和部署在OpenFlow 交換機中的偵聽規則進行匹配。根據匹配結果,主機對應的交換機將AAM 報文所包含的主機狀態信息進行封裝,以Packet-In 包的形式與控制器進行通信。控制器成功接收AAM 報文后,會從Packet-In 包中解析出主機相關的地址信息和交換機狀態信息,構建并更新綁定關系,限制疑似泛洪發起節點的流量,使其無法影響控制層信令發布及有效連接建立;在偽造源地址泛洪發生時,所有偽造源地址數據包均經過靜態源地址驗證(SDN-SAVI)方案篩選,通過將綁定表的構建和更新完全部署于控制器,利用SDN 的全局視野維持SAVI 的安全性標準,保證控制層通信的安全性。在現有的SAVI 綁定機制下,為了維持SAVI 絕對安全的標準,該綁定關系不會隨著網絡狀態的變化而產生任何變化。根據三元組綁定信息的維護,控制器隨后將持續執行源地址驗證和路徑過濾。
為了維持基于SAVI 的泛洪緩解機制的安全性,控制層泛洪緩解模塊主要以窗口輪詢的模式進行。控制器會為所有SDN 數據層主機均維護一個歷史狀態列表,以控制層泛洪特征構建的泛洪檢測模型為基礎,可推導每個主機隨時間推移的時序狀態列表。為了使D-SAVI 進行安全保障的隨機輪詢更具針對性,本節提出了控制層泛洪安全保障的隨機輪詢算法,其流程如圖9 所示。該算法對所有正常主機遍歷完畢后,根據主機時序狀態列表的異常狀態比例排序進行逆序輪詢和檢測,對其進行臨時數據采集與分析,并部署源地址驗證規則。因此,每次挑選的主機個數直接影響安全保障的隨機輪詢模塊發現有控制層泛洪攻擊安全隱患的主機的及時性,間接影響基于SAVI 的泛洪緩解機制為控制器帶來的負載:若每次挑選主機個數越少,則控制器和交換機資源消耗也越少,其安全性指標則會相應降低;反之則能更快發現控制層泛洪攻擊異常主機,降低網絡的安全威脅,但對SDN 資源消耗也更多。因此,在SDN 的不同拓撲結構中,選擇合適數量實現安全保障的隨機輪詢模塊是重要的平衡性指標。安全保障的隨機輪詢模塊基于3.2.2節的流量差和信息熵實現。
本節在多臺服務器和基于 Vmware 安裝的Ubuntu 16.04.2 虛擬機系統上搭建了模擬的SDN 環境。圖10 是經典的數據中心實驗拓撲,本實驗拓撲以Fat-Tree 為基礎搭建。安裝Floodlight 控制器作為SDN 的控制平面,采用Mininet 仿真對底層SDN 拓撲進行差異化的仿真。SDN 拓撲中的SDN交換機由開源的虛擬交換機(OVS,OpenvSwitch)實現。在 Mininet 中實現軟件定義網絡的交換機可選擇多種模式,其中最常見的就是OVS 實現。該實驗網絡主要包含14 臺OVS,其中,S1和S2為核心層交換機,S3~S6為匯聚層交換機,S7~S14為接入層交換機。實驗網絡共包含40 臺主機接入網絡,本實驗在模擬SDN 數據中心網絡拓撲采用分布式流量生成器(D-ITG,distributed Internet traffic generator)模擬發送正常背景流量和流量密集型應用“大象流”,同時通過腳本控制Fat-Tree 拓撲的數據層主機隨機組成多對進行相互通信,產生正常的數據中心東西向周期性網絡通信流量。
SDN 控制層泛洪攻擊流量由Python 的Scapy工具模擬發出,通過模擬不同速率和比例的Packet-In 泛洪和SYN 泛洪攻擊,致使SDN 數據中心數據層目標主機的正常通信受到影響。控制器持續收集30 min 流量數據。將上述攻擊流量和正常SDN 數據中心背景流量進行混合發包。在網絡拓撲內分別啟動靜態與動態的源地址動態驗證系統,在網絡穩定后選定H1、H6、H11、H16、H21、H26、H31和H36為偽造源地址攻擊主機,其中,H1和H2連接于同一接入層交換機S1的不同端口,而其余主機分別連接于其他交換機。
本節對泛洪攻擊檢測算法的性能進行分析和比較,將本文的控制層攻擊檢測算法與其他基于特征的決策分類算法包括決策樹(DT)[29]、隨機森林(RF)[30]、k近鄰(KNN)[31]、樸素貝葉斯(NB)[32]和支持向量機(SVM)[33]進行性能比較。由表2 的結果得出,基于XGBoost 的控制層攻擊檢測與分類算法具備在檢測準確率和召回率方面最強的綜合性能,其各個弱分類器加權疊加形成增強型分類器,通過不斷降低計算中的殘差,使之前的模型殘差向梯度方向進一步降低,從而有效降低分類誤差,達到更準確的分類效果。

表2 異常檢測算法比較
為了降低偽造源地址主機異常分類模型的在特征方面的復雜度,增強異常流警報時發現異常主機的效率,并減少對SDN 系統資源的占用,對多維符合特征進行解析與評估是必要的流程。通過對每個特征目標函數最優解的遍歷計算,選擇XGBoost 算法中損失函數的量化計算值作為分裂點,并用GetScore()函數計算增益損失。在遍歷所有特征后,增益損失的最值通常可有效衡量一個特征是否具有最大的信息增益和卡方統計量,該統計量可直接反映出特征對分類模型的貢獻程度。以控制層泛洪多維解析特征為基礎,分別評估其檢測泛洪攻擊的準確率與召回率,結果如圖11 和圖12 所示。從圖11 和圖12 可以看出,在Packet-In 泛洪攻擊環境下,EPF、DTB 和MPF 具備更好的分類性能,這是由于Packet-In 泛洪攻擊場景下突發性流量大和流量速率傾斜。通過對SDN 接入層交換機端口流量信息的分析,可初步鑒別SDN 大流量的異常狀態。而在SYN 泛洪攻擊的狀態下,PPF、GFF和EPF 具備相對更好的分類性能。由于欺騙式泛洪攻擊大量增加了外部流量,通過偽造源地址發起的外部大流量將產生大量無效SYN-ACK 指令,即控制層欺騙式泛洪發生時存在大量包含失配流信息的SYN-ACK 指令,這使成對性特征PPF 和GFF具備更好的分類性能。
準確率與召回率存在差異的原因在于準確率和召回率在控制層異常檢測樣本定義方面的差別:召回率是所有分類異常樣本結果中包含的偽造樣本數量占總偽造數的比例,而準確率則是對任意樣本分類并定位偽造樣本的準確比例。由于控制器泛洪場景涉及的表項特征通常都是高維的、稀疏的,并且樣本量巨大,以XGBoost 算法為基礎的控制層攻擊檢測模型的本質是多個表項特征弱分類器的訓練和組合,通過熵、信息增益、基尼指數等方法,各個特征弱分類器在每次分裂時選取最優的分裂節點,然后配置多維簡單的弱分類器,可以迅速提高識別速度。該組合分類器能夠廣泛地檢索識別疑似攻擊樣本,召回率相對可觀,但各個弱分類器由于樣本結果輸出多,其實際分類準確率較低。
綜合來看,EPF 在兩類控制層泛洪場景下有著穩定的性能,這主要是由于φ-熵可用于更加精確的量化主機當前端口多維度的出入流量差的絕對值與Packet-In 泛洪攻擊之間的關系。因此,本節對數據層端口信息φ-熵用于建立數據層泛洪攻擊分類模型的參數進行測試,結果如表3 和表4所示。結果表明,基于熵的泛洪攻擊流分類模型需要計算出合理的閾值以達到更好的分類效果。根據SDN 拓撲的狀態,本文實驗以φ=0.3 為基礎[34]進行閾值測試,并且基于Type A 攻擊類型進行了50 次閾值測試,分別計算了基于泛洪攻擊流量和普通背景流量狀態下的熵值,如表5 和表6 所示。結果表明,最大攻擊熵明顯大于最小背景熵(maxA>minN),最大背景熵明顯大于最小攻擊熵(maxN>minA),這符合在控制層泛洪攻擊場景下熵值變化的特點。

表3 背景流量下異常流警報模型φ-熵值

表4 泛洪攻擊下異常流警報模型φ-熵值

表5 φ-熵值異常流警報模型最小熵閾值測定

表6 φ-熵值異常流警報模型最大熵閾值測定
本節SDN 控制層泛洪緩解模塊基于SAVI 實現,將對該模塊在泛洪緩解及安全性方面的性能進行測試與分析。圖13 是部署了基于SAVI 的泛洪攻擊緩解模塊的SDN 中泛洪攻擊數據包的實時數目測試值。在差異化的狀態分組驗證體系之下,基于SAVI 的泛洪攻擊緩解模塊能顯著降低欺騙式泛洪攻擊數據包的數目,差異化的動態輪詢模式相比于D-SAVI 具備更快的響應速度。這符合控制層泛洪攻擊檢測與緩解在時延方面的需求,符合SAVI 源地址綁定?驗證體系的基本的安全性能標準[26]。
響應時間是控制器對一個Packet-In 請求作出反饋的時延,圖14 展示了在泛洪攻擊狀態下控制器響應時間測試結果,結果表明當SDN 中激活泛洪攻擊主機的數目增多時,控制器的響應時間也將相應增加。在無泛洪攻擊檢測與防御部署的狀態下,控制器的性能將受到嚴重的影響,數據層的基礎通信和與控制層的交互指令的完整性受到極大的破壞。通過控制層泛洪攻擊檢測與防御機制CDM的部署,控制器的響應效率能恢復近似于無攻擊狀態下的性能。這表明CDM 能有效檢測與緩解控制層欺騙式泛洪,維護SDN 控制層的安全運行。
本文提出了一種輕量級、高精度的控制層泛洪檢測與緩解機制,該方法將泛洪防御問題分為檢測和緩解2 個步驟,分別解決了泛洪攻擊主機分類、泛洪攻擊數據包路徑過濾和負載優化問題。在泛洪檢測方面,提出了輕量級的控制層泛洪關鍵特征解析模塊,利用Boosting 算法將各個特征弱分類器加權疊加形成增強型分類器,通過不斷降低計算中的殘差,達到了高精度的欺騙式泛洪攻擊檢測效果。在泛洪緩解方面,CDM 部署了基于SAVI 的泛洪數據包過濾機制,以綁定?驗證的模式為基礎執行控制層泛洪數據包的路徑過濾,同時以動態輪詢的模式實現安全保障和泛洪關鍵特征實時更新。所提方法要求泛洪特征更新的實時性,暫未考慮SDN 鏈路動態變化的情況,若面向更復雜的拓撲變化狀態實施差異化的泛洪主機源地址驗證模式,其動態輪詢安全保障模塊負載將會較大,如何在CDM 中解決這個問題將是下一步工作的重點。