陳 曄
(常州紡織服裝職業技術學院信息服務中心,江蘇 常州 213164)
傳統網絡設備的控制和轉發是緊密結合的,一般是由同一臺設備實現控制和轉發,軟件定義網絡(SDN)已經成為一種新型的網絡架構,其核心內容是控制平面與數據平面分離[1]。 SDN 的架構如圖1所示,通常由3 層平面組成:數據平面、控制平面和應用平面[2]。 其中,數據平面一般是指負責數據轉發的交換機。 控制平面包含一個或多個SDN 控制器,集中管理網絡中的轉發設備。 應用平面主要是面向業務應用API。 在交換機和控制器之間使用開放的接口協議:OpenFlow 協議。 這種網絡集中管理方式不僅簡化了網絡架構,而且使網絡具有靈活性、可編程性。 OpenFlow 協議主要解決轉發設備(如OpenFlow 交換機)和控制器之間的通信問題[3]。OpenFlow 交換機包含一個或多個由匹配規則、計數器和動作字段組成的流表,再根據指定流量的匹配規則(控制信令)完成數據轉發,如圖2 所示。

圖1 SDN 的基本架構Fig. 1 The basic architecture of SDN

圖2 數據和控制分離Fig. 2 Separation of data and control
SDN 因為架構原因,自身存在如劫持、中毒、配置錯誤、拒絕服務和跳板攻擊等安全隱患。 跳板攻擊因為非常容易執行,又很難被發現,所以被黑客所青睞,黑客只要通過wireshark 之類的抓包工具,監聽網絡流量,很容易就能將控制器和OpenFlow 交換機之間的控制信令捕獲到。
OpenFlow 協議最初是在2008年作為斯坦福大學的一個研究項目部署在校園網,研究OpenFlow 的目的是對傳統網絡進行變革,通過一個或多個控制器對多個交換機進行靈活控制,可按規則進行端口轉發,簡化了網絡配置與管理,并通過可編程性實現網絡層及應用層的創新。 目前OpenFlow 協議標準已經發布到最新的1.5 版本,國內很多數通廠商在使用更為穩定的1.3 版本(如銳捷、華三),OpenFlow 協議所控制的交換機有2 種運行模式:主動模式和反應模式。 其中,主動模式是指,匹配規則在業務流量到達之前提前部署到交換機,而反應模式是指先有流量,在流量無匹配規則的情況下,交換器向控制器請求匹配規則再轉發數據,所以整個過程控制器都參與其中,反應模式更智能,這個過程被稱為“OpenFlow 轉發”。 圖3 用一系列的步驟說明這個過程。 參照圖3,對比流程步驟可詳述如下。

圖3 OpenFlow 協議轉發(反應模式)Fig. 3 OpenFlow protocol forwarding (reactive mode)
(1)源主機“A”將數據包轉發到交換機(S1)的通信端口port1。
(2) 在收到數據包后,交換機在其流表中進行查找該數據包的匹配規則。 如果數據包在交換機(S1) 中沒有匹配的流條目,那么根據默認,交換機通過OpenFlow(南向)接口把OF_PACKET_IN消息轉發給控制器。
(3) 控制器收到OF_PACKET_IN消息后,根據自定義程序,把匹配規則OF_PACKET_OUT消息發回給交換機(S1)。
(4)交換機(S1) 更新流表,將數據包從指定端口轉發到下一個節點交換機(S2)。
(5)同樣,交換機(S2) 收到數據包后,也會在流表中進行查找,如果沒有找到匹配規則,也會把OF_PACKET_IN 消息轉發給控制器。
(6)控制器根據自定義程序向交換機(S2) 回復OF_PACKET_OUT消息。 交換機(S2) 更新流表后,按規則把數據從port2 送到port1。
(7)源主機“B”收到數據包。
(8)源主機“A”到“B”的數據交換過程都是由控制器和交換機完成,數據包前后各字段不做改變,除非是網絡發生拓撲變化,對應目的地址、MAC 發生變化。
反應模式雖然更智能,但是缺點是OpenFlow 交換機及控制器極易受到DDoS 攻擊。 比如應用層DDoS 攻擊中會使用大量欺騙性OF_PACKET_IN報文占用交換機和控制器之間的OpenFlow 通道的帶寬,降低回復效率,造成合法的規則匹配請求被拒絕。
本節對在SDN 架構下的應用層DDoS 攻擊進行分類,并說明了SDN 架構的各種組件遭受攻擊的原因。 研究可知,分類則包括針對交換機漏洞的分類,以及按不同的攻擊類型進行分類。
基于SDN 架構的DDos 攻擊分類如圖4 所示。由圖4 可知,基于SDN 架構的DDos 攻擊主要包括:攻擊數據平面的交換機;攻擊交換機橫向數據通道;攻擊交換機的控制單元;攻擊交換機的流表;攻擊交換機的數據包緩沖器;攻擊南向OpenFlow 接口;攻擊SDN 控制器;攻擊控制器橫向接口;攻擊北向API 接口。

圖4 基于SDN 架構的DDos 攻擊分類Fig. 4 Classification of DDos attacks based on SDN architecture
(1)控制單元過載。 交換機的轉發由控制器控制,這依賴于交換機控制單元。 因為交換機控制單元處理和轉發數據包的數量是有限的,當DDoS 攻擊發送Packet_In消息的速度超過控制單元可以轉發到控制器的速度,那么就會造成控制單元過載。所以一旦泛洪,交換機的整體性能就會下降,甚至當機。
(2)數據包緩沖區溢出。 當交換機收到新數據包時,就會加載到數據包緩沖區,而后使用Packet_In message 將數據包的頭轉發給控制器。 在DDoS 攻擊下,緩沖區很快就會溢出,根據OpenFlow 協議,ofp_action_output 中的max_len 字段要轉換成OFPCML_NO_BUFFER,因此交換機必須將數據包完整地轉發給控制器,由此南向接口會產生大量的數據包,造成控制信道的帶寬和控制器的資源枯竭,使控制器的匹配規則無法及時送達,造成交換機處理數據轉發時間增加,最后引起合法用戶丟包。
(3)流條目持續時間。 OpenFlow 交換機對每個流表都會設置流條目的超時機制、即流條目的在交換機內的持續時間。當idle_timeout非零時,如果沒有收到流量,流條目會在指定的idle_timeout值之后過期; 當hard_timeout為非零時,流條目在指定hard_time out值之后過期,與入口的數據包是否到達無關。 有一種應用層DDos 攻擊以最小的持續時間連續發送攻擊流量,造成交換機流條目超時溢出,合法的流表被覆蓋,使交換機數據包轉發失敗。
應用層DDoS 攻擊主要分為2 種類型:帶寬飽和攻擊和資源飽和攻擊。 其中,帶寬飽和攻擊的目的是通過發送大量的欺騙性數據包,消耗其通道的帶寬能力,攻擊SDN 架構的控制通道(南向API)、交換機橫向數據通道、控制器橫向通道和北向通道。另外,資源飽和攻擊消耗的是SDN 網絡設備的性能資源,如CPU、內存。
(1)交換機的資源飽和度。 交換機是轉發設備,使用 OpenFlow 通道與控制器進行通信。OpenFlow 交換機最多支持幾百到幾千個流條目。與控制器每秒可處理的流量請求數量相比,交換機的處理能力也是一個瓶頸。 DDoS 攻擊者可以利用流條目的反應性規則安裝機制瞬間使交換機流條目達到峰值。
(2)控制器的資源飽和度。 因為控制器的包處理能力遠高于交換機,所以黑客往往優先攻擊交換機,當交換機的數據包緩沖區溢出,因為OFPCML_NO_BUFFER 的原因,同步攻擊控制器,就會大量消耗控制器的處理能力(CPU)和物理內存(RAM)。當主控制器的資源耗盡出現問題,就會影響整個網絡,造成高延遲和長響應時間,使合法的網絡服務完全退化和不可用。 現在成熟的SDN 網絡都會部署多個控制器做負載均衡,從而提高控制器的處理能力。
(3)控制通道飽和度。 南向API,也被稱為“控制通道”,用于連接交換機和控制器。 通過OpenFlow 協議在交換機和控制器之間提供了一個接口。 控制器實時與交換機保持連接,為交換機提供路由和控制網絡流量(Qos)的決策。 黑客可以利用OpenFlow 在數據平面和控制平面之間的這種可擴展性缺陷,發起基于新流表的分布式拒絕服務攻擊,也就是通過發送大量的欺騙性IP 地址攻擊數據包,使交換機和控制器之間的OpenFlow 協議接口飽和,導致控制器無法控制交換機。
(4) 交換機橫向數據通道飽和度。 交換機橫向數據通道是指2 個以上OpenFlow 交換機之間的通信鏈接。 是在交換機之間轉發網絡流量,受到DDos攻擊后,交換機之間的一些數據通道或鏈接將被惡意數據包占據,那么交換機之間將中斷連接。 一旦數據通道存在瓶頸,交換機根本無法轉發任何數據包,這種情況也會造成整個網絡的癱瘓。
(5)控制器橫向通道飽和度。 在SDN 架構中,橫向通道指的多個控制器之間的接口通道。 當單一的集中式控制器由于網絡交換機數量的增加而無法處理網絡流量時,多個控制器通過橫向綁定的API接口提供負載均衡以保證整個網絡可靠性,DDos 可以從任何一個方向攻擊控制器,導致橫向通道的接口被大量進入的攻擊數據包所占用,控制器如果無法及時解決負載問題,也會造成整個網絡癱瘓。
(6)北向通道飽和度。 控制器依靠可編程應用的北向API 來保證整個網絡系統靈活度。 軟件開發人員使用這個接口對網絡控制實現可編程。 與南向API 不同,每個平臺都有自己的北向API,缺少統一的標準。 這種標準化的缺失也是一種安全威脅,所以黑客也可以通過北向API 針對控制器進行攻擊,導致北向接口的擁堵。
SDN 網絡一直受到DDoS 攻擊,研究者掌握了許多檢測DDoS 攻擊的方法:
(1)一種基于時間特征的DDoS 攻擊檢測方法,提取攻擊的時間并記錄,使用時間特征快速有效地檢測和防御DDoS 攻擊。 有的黑客利用控制器處理新網絡數據包的反應時間差,在這個時間窗口內向控制器發送大量的請求,從而對SDN 控制器發起攻擊,利用這個特點,可以迅速發現此類攻擊并定位到源IP 進行有效阻斷,這個檢測方法的缺點是僅針對長快頻的攻擊有效,對低速低頻攻擊無效。
(2)一種過濾請求的新方法可以通過OpenFlow主動模式將所有的新數據包直接發送到安全網關,而不是使用控制器來降低熵值(參見圖5),通過熵值法來檢測DDoS 攻擊,及時生成新規則更新交換機流表,交換機對符合規則的源目地址做丟包處理,這種方法必須抓取3 個特征值:協議、源IP 地址和目的IP 地址。 該檢測方法需要消耗時間來處理新的數據流,同時也會消耗系統性能。

圖5 主動模式下的DDos 防御Fig. 5 DDos defence in active mode
(3)在OpenFlow 中采用基于熵的輕量級DDoS泛濫攻擊檢測方法,減少對控制器的流量收集負載,減輕控制器因為頻繁的流量收集帶來性能消耗,使交換機更智能地主動檢測交換機上的DDoS 攻擊,這種方式缺點就是會降低控制器和交換機之間的通信頻率。
Mininet 是一個基于Linux 的輕量級虛擬化工具,本文使用Mininet 快速創建SDN 網絡模型(見圖6),該軟件可以虛擬添加交換機、主機和控制器,也可以改變或修改網絡結構和連接。 創建步驟如下:

圖6 簡單SDN 網絡模型Fig. 6 Simple SDN network model
(1)將Mininet 安裝在Ubuntu Linux 上。
(2)命令行:
mn -topo single,3 -mac -switch ovsk -controller remote
創建3 個虛擬主機,在內核中創建1 個具有3個端口的OpenFlow 交換機,為每個主機設置MAC和IP 地址,配置交換機連接到控制器。 控制器在本地運行,與模擬器Mininet 所運行的硬件相同。
(3)命令行:
dpctl dump-flows tcp:127.0.0.1:6634
連接到交換機并顯示安裝的流量表。
(4)命令行:
dpctl add-flow tcp:127.0.0.1:6634 in_port =0,actions=output:1
創建一個規則,所有到達交換機端口0 的數據包將被轉發到端口1。
(5)安裝開源的Floodlight OpenFlow 控制器。
(6)安裝網絡分析軟件sFlowRT,該軟件內嵌在OpenFlow 控制器中,可以實時監控OpenFlow 交換機和控制器之間的通信流量。
(7)安裝sFlow-RT 分析器的命令:
sudo mn-controller=remote,ip =172.0.0.1,port =6653-topo =single,3。
(8)連接OpenFlow 到sFlow-RT 分析器的命令:
sudo ovs-vsctl--id =@sflow create sflow agent =eth0 target = 172.0.0.1:6643,ampling =10 polling =20--set bridge s1 sflow =@ sflow,設置完成后,手動啟動sFlow 分析器,通過./sFlow-rt/start 命令收集的數據樣本,同時設置訪問地址:http:/ /localhost:8080/ui/pages/index.html。
(9)安裝WEKA 機器學習軟件。
(10)測試期間控制器不可人為斷開,否則測試將失敗。
本次測試使用了2 臺主機、2 臺OpenFlow 交換機和1 個控制器。 WEKA 是一款開源的機器學習以及數據挖掘軟件,該軟件可以在同一數據集上建立多個機器學習模型,本文使用WEKA 機器學習軟件建立模型并測試模型的準確性,同時對正常和Dos攻擊的數據建立數據集,包括TCP、UDP、ICMP、ARP、IPv4 和SSH 等6 種協議。 在DDos 攻擊期間,1 臺主機作為受害者,1 臺主機作為攻擊者,主動采集每個交換機及控制器上的流量情況。 正常情況下控制器上數據流量如圖7 所示,DDos 環境下控制器數據流量如圖8 所示。

圖7 正常情況下控制器上數據流量Fig. 7 Data traffic on the controller under normal conditions

圖8 DDos 環境下控制器數據流量Fig. 8 Controller data traffic in the DDos environment
由于數據集實例不是很大,為了減少偏差,在數據集中加入了25% 的噪聲數據。 本文使用AdaBoosting 機器學習算法,將決策樹作為一個弱分類器來建立網絡的分類器模型。
為了降低復雜性,減少了特征的數量,使用遞歸特征消除(RFE)進行遞歸刪除特征,并在剩余的特征上構建模型。 RFE 根據數據集中所有特征在實例分類中對重要特征進行排序。 RFE 算法需要2 個參數,一是要保留的特征數量,二是在評估特征重要性的過程中要使用的模型,經測試選擇的特征數量最終確定為7 個,分別是:目的地端口;Bwd 包長度平均值;Bwd 包長度標準;Bwd 包/s;包長度平均值;最大包長度;平均Bwd 段大小。
(1)AdaBoost 是自適應模型,這個模型從弱分類器中自我學習,性能隨著后續的分類器而提高。分類方程為:
(2)決策樹評估了特征的重要性和準確性。 推得的公式為:
(3)多層感知器模型。 模型公式可寫為:
模型建立后,該模型與SDN 控制器相連接,控制器只轉發那些被分類器模型過濾的流量,涉及2次網絡流量過濾,第一次由SDN 控制器本身執行,利用自定義網絡配置過濾掉普通的攻擊流量;第二次,由SDN 控制器通過機器學習分類器再次過濾掉攻擊流量,該分類器只通過機器學習算法中被標記為良性的數據流量。 WEKA 數據集概述見圖9。

圖9 WEKA 數據集概述Fig. 9 WEKA dataset overview
(1)真陽性(TP):攻擊時產生的異常數據;假陽性(FP):將正常數據分類為攻擊;假陰性(FN):異常數據被分類為正常數據;真陰性(TN):被分類為正常的數據。
(2)指標定義及計算公式
①精度。 是指正確分類為攻擊的數據與分類為攻擊的總數據之比。 具體數學公式為:
②召回。 是指正確分類數據的比率。 具體數學公式為:
③F -衡量。 是指精確度和召回率的加權平均值。 具體數學公式為:
(3)對多個機器學習模型計算得出結果進行比較,AdaBoost 精度相對更準確些,多層感知器模型,屬于人工神經網絡,但是執行效率非常低,見表1。

表1 不同機器學習技術的性能指標分析Tab. 1 Analysis of performance metrics of different machine learning techniques
綜上所述,SDN 將控制平面與數據平面分離,使管理更加便捷,同時實現可編程[4-6]。 盡管國內外學者在SDN 環境下針對DDoS 攻擊方面的研究有了很多成果,但DDoS 攻擊面仍在擴大,而且技術更新迭代很快。 以下是SDN 環境下檢測DDoS 攻擊所面臨一些實際困難。
大多數DDoS 攻擊檢測技術需要從OpenFlow交換機中收集數據構建規則,例如提取數據報頭的特征來檢測異常行為的方法。 但是在低速率DDoS攻擊時,從流量中收集統計數據就很困難,另外采用負載均衡技術用多個分布式交換機來收集數據,所收集的數據精度達不到要求,同時收集難度也會加大。
DDoS 攻擊行為的多樣化使SDN 環境中的異常流量檢測變得復雜。 因此,許多算法已經轉向人工神經網絡、貝葉斯分類法、模糊邏輯等來檢測DDoS攻擊行為。 但是沒有一種算法能夠真正應對所有DDoS 攻擊。
及時響應是SDN 控制器的關鍵,被DDoS 攻擊后,控制器要處理大量的流量,這會耗盡其性能,從而削弱響應合法用戶請求的能力。 現有的DDoS 攻擊檢測方法存在許多問題,包括控制器在短時間內處理大量入口數據包的響應速度;無法檢測低速率的DDoS 攻擊;高網絡帶寬的消耗;無效的數據包帶來的處理負擔等都會導致攻擊檢測的延遲或無效。
本文使用Adaboost 和決策樹作為弱分類器,發現數據集的DDoS 攻擊檢測準確率可以達到94%。用機器學習模型的優點是SDN 控制器通過自定義規則,利用分類器的輸出,可以有效阻斷那些特定的攻擊類型,在一定程度上增加了安全性。 但是隨著DDoS 攻擊的復雜程度不斷提高,尤其針對數據中心和網絡基礎設施的攻擊級別不斷提高,基于應用層的DDoS 攻擊給SDN 架構帶來了許多安全挑戰和威脅,研究人員希望使用一種檢測防御方法來解決所有的DDos 的攻擊問題顯然是不可能的。 個人認為SDN 中集中控制的特性應該是DDoS 攻擊的核心,而分布式控制器的設計可以提供更好的負載分配、處理能力和可靠性,最大限度地降低因為單個控制器的通信故障而造成整網癱瘓的風險,同時機器學習在未來的網絡應用中具有很大的研究潛力,如何提高檢測精度,使檢測過程完全自動化,減少人為干預也是未來的研究方向。