陳 曄
(常州紡織服裝職業(yè)技術(shù)學院信息服務中心,江蘇 常州 213164)
傳統(tǒng)網(wǎng)絡設(shè)備的控制和轉(zhuǎn)發(fā)是緊密結(jié)合的,一般是由同一臺設(shè)備實現(xiàn)控制和轉(zhuǎn)發(fā),軟件定義網(wǎng)絡(SDN)已經(jīng)成為一種新型的網(wǎng)絡架構(gòu),其核心內(nèi)容是控制平面與數(shù)據(jù)平面分離[1]。 SDN 的架構(gòu)如圖1所示,通常由3 層平面組成:數(shù)據(jù)平面、控制平面和應用平面[2]。 其中,數(shù)據(jù)平面一般是指負責數(shù)據(jù)轉(zhuǎn)發(fā)的交換機。 控制平面包含一個或多個SDN 控制器,集中管理網(wǎng)絡中的轉(zhuǎn)發(fā)設(shè)備。 應用平面主要是面向業(yè)務應用API。 在交換機和控制器之間使用開放的接口協(xié)議:OpenFlow 協(xié)議。 這種網(wǎng)絡集中管理方式不僅簡化了網(wǎng)絡架構(gòu),而且使網(wǎng)絡具有靈活性、可編程性。 OpenFlow 協(xié)議主要解決轉(zhuǎn)發(fā)設(shè)備(如OpenFlow 交換機)和控制器之間的通信問題[3]。OpenFlow 交換機包含一個或多個由匹配規(guī)則、計數(shù)器和動作字段組成的流表,再根據(jù)指定流量的匹配規(guī)則(控制信令)完成數(shù)據(jù)轉(zhuǎn)發(fā),如圖2 所示。
圖1 SDN 的基本架構(gòu)Fig. 1 The basic architecture of SDN
圖2 數(shù)據(jù)和控制分離Fig. 2 Separation of data and control
SDN 因為架構(gòu)原因,自身存在如劫持、中毒、配置錯誤、拒絕服務和跳板攻擊等安全隱患。 跳板攻擊因為非常容易執(zhí)行,又很難被發(fā)現(xiàn),所以被黑客所青睞,黑客只要通過wireshark 之類的抓包工具,監(jiān)聽網(wǎng)絡流量,很容易就能將控制器和OpenFlow 交換機之間的控制信令捕獲到。
OpenFlow 協(xié)議最初是在2008年作為斯坦福大學的一個研究項目部署在校園網(wǎng),研究OpenFlow 的目的是對傳統(tǒng)網(wǎng)絡進行變革,通過一個或多個控制器對多個交換機進行靈活控制,可按規(guī)則進行端口轉(zhuǎn)發(fā),簡化了網(wǎng)絡配置與管理,并通過可編程性實現(xiàn)網(wǎng)絡層及應用層的創(chuàng)新。 目前OpenFlow 協(xié)議標準已經(jīng)發(fā)布到最新的1.5 版本,國內(nèi)很多數(shù)通廠商在使用更為穩(wěn)定的1.3 版本(如銳捷、華三),OpenFlow 協(xié)議所控制的交換機有2 種運行模式:主動模式和反應模式。 其中,主動模式是指,匹配規(guī)則在業(yè)務流量到達之前提前部署到交換機,而反應模式是指先有流量,在流量無匹配規(guī)則的情況下,交換器向控制器請求匹配規(guī)則再轉(zhuǎn)發(fā)數(shù)據(jù),所以整個過程控制器都參與其中,反應模式更智能,這個過程被稱為“OpenFlow 轉(zhuǎn)發(fā)”。 圖3 用一系列的步驟說明這個過程。 參照圖3,對比流程步驟可詳述如下。
圖3 OpenFlow 協(xié)議轉(zhuǎn)發(fā)(反應模式)Fig. 3 OpenFlow protocol forwarding (reactive mode)
(1)源主機“A”將數(shù)據(jù)包轉(zhuǎn)發(fā)到交換機(S1)的通信端口port1。
(2) 在收到數(shù)據(jù)包后,交換機在其流表中進行查找該數(shù)據(jù)包的匹配規(guī)則。 如果數(shù)據(jù)包在交換機(S1) 中沒有匹配的流條目,那么根據(jù)默認,交換機通過OpenFlow(南向)接口把OF_PACKET_IN消息轉(zhuǎn)發(fā)給控制器。
(3) 控制器收到OF_PACKET_IN消息后,根據(jù)自定義程序,把匹配規(guī)則OF_PACKET_OUT消息發(fā)回給交換機(S1)。
(4)交換機(S1) 更新流表,將數(shù)據(jù)包從指定端口轉(zhuǎn)發(fā)到下一個節(jié)點交換機(S2)。
(5)同樣,交換機(S2) 收到數(shù)據(jù)包后,也會在流表中進行查找,如果沒有找到匹配規(guī)則,也會把OF_PACKET_IN 消息轉(zhuǎn)發(fā)給控制器。
(6)控制器根據(jù)自定義程序向交換機(S2) 回復OF_PACKET_OUT消息。 交換機(S2) 更新流表后,按規(guī)則把數(shù)據(jù)從port2 送到port1。
(7)源主機“B”收到數(shù)據(jù)包。
(8)源主機“A”到“B”的數(shù)據(jù)交換過程都是由控制器和交換機完成,數(shù)據(jù)包前后各字段不做改變,除非是網(wǎng)絡發(fā)生拓撲變化,對應目的地址、MAC 發(fā)生變化。
反應模式雖然更智能,但是缺點是OpenFlow 交換機及控制器極易受到DDoS 攻擊。 比如應用層DDoS 攻擊中會使用大量欺騙性O(shè)F_PACKET_IN報文占用交換機和控制器之間的OpenFlow 通道的帶寬,降低回復效率,造成合法的規(guī)則匹配請求被拒絕。
本節(jié)對在SDN 架構(gòu)下的應用層DDoS 攻擊進行分類,并說明了SDN 架構(gòu)的各種組件遭受攻擊的原因。 研究可知,分類則包括針對交換機漏洞的分類,以及按不同的攻擊類型進行分類。
基于SDN 架構(gòu)的DDos 攻擊分類如圖4 所示。由圖4 可知,基于SDN 架構(gòu)的DDos 攻擊主要包括:攻擊數(shù)據(jù)平面的交換機;攻擊交換機橫向數(shù)據(jù)通道;攻擊交換機的控制單元;攻擊交換機的流表;攻擊交換機的數(shù)據(jù)包緩沖器;攻擊南向OpenFlow 接口;攻擊SDN 控制器;攻擊控制器橫向接口;攻擊北向API 接口。
圖4 基于SDN 架構(gòu)的DDos 攻擊分類Fig. 4 Classification of DDos attacks based on SDN architecture
(1)控制單元過載。 交換機的轉(zhuǎn)發(fā)由控制器控制,這依賴于交換機控制單元。 因為交換機控制單元處理和轉(zhuǎn)發(fā)數(shù)據(jù)包的數(shù)量是有限的,當DDoS 攻擊發(fā)送Packet_In消息的速度超過控制單元可以轉(zhuǎn)發(fā)到控制器的速度,那么就會造成控制單元過載。所以一旦泛洪,交換機的整體性能就會下降,甚至當機。
(2)數(shù)據(jù)包緩沖區(qū)溢出。 當交換機收到新數(shù)據(jù)包時,就會加載到數(shù)據(jù)包緩沖區(qū),而后使用Packet_In message 將數(shù)據(jù)包的頭轉(zhuǎn)發(fā)給控制器。 在DDoS 攻擊下,緩沖區(qū)很快就會溢出,根據(jù)OpenFlow 協(xié)議,ofp_action_output 中的max_len 字段要轉(zhuǎn)換成OFPCML_NO_BUFFER,因此交換機必須將數(shù)據(jù)包完整地轉(zhuǎn)發(fā)給控制器,由此南向接口會產(chǎn)生大量的數(shù)據(jù)包,造成控制信道的帶寬和控制器的資源枯竭,使控制器的匹配規(guī)則無法及時送達,造成交換機處理數(shù)據(jù)轉(zhuǎn)發(fā)時間增加,最后引起合法用戶丟包。
(3)流條目持續(xù)時間。 OpenFlow 交換機對每個流表都會設(shè)置流條目的超時機制、即流條目的在交換機內(nèi)的持續(xù)時間。當idle_timeout非零時,如果沒有收到流量,流條目會在指定的idle_timeout值之后過期; 當hard_timeout為非零時,流條目在指定hard_time out值之后過期,與入口的數(shù)據(jù)包是否到達無關(guān)。 有一種應用層DDos 攻擊以最小的持續(xù)時間連續(xù)發(fā)送攻擊流量,造成交換機流條目超時溢出,合法的流表被覆蓋,使交換機數(shù)據(jù)包轉(zhuǎn)發(fā)失敗。
應用層DDoS 攻擊主要分為2 種類型:帶寬飽和攻擊和資源飽和攻擊。 其中,帶寬飽和攻擊的目的是通過發(fā)送大量的欺騙性數(shù)據(jù)包,消耗其通道的帶寬能力,攻擊SDN 架構(gòu)的控制通道(南向API)、交換機橫向數(shù)據(jù)通道、控制器橫向通道和北向通道。另外,資源飽和攻擊消耗的是SDN 網(wǎng)絡設(shè)備的性能資源,如CPU、內(nèi)存。
(1)交換機的資源飽和度。 交換機是轉(zhuǎn)發(fā)設(shè)備,使用 OpenFlow 通道與控制器進行通信。OpenFlow 交換機最多支持幾百到幾千個流條目。與控制器每秒可處理的流量請求數(shù)量相比,交換機的處理能力也是一個瓶頸。 DDoS 攻擊者可以利用流條目的反應性規(guī)則安裝機制瞬間使交換機流條目達到峰值。
(2)控制器的資源飽和度。 因為控制器的包處理能力遠高于交換機,所以黑客往往優(yōu)先攻擊交換機,當交換機的數(shù)據(jù)包緩沖區(qū)溢出,因為OFPCML_NO_BUFFER 的原因,同步攻擊控制器,就會大量消耗控制器的處理能力(CPU)和物理內(nèi)存(RAM)。當主控制器的資源耗盡出現(xiàn)問題,就會影響整個網(wǎng)絡,造成高延遲和長響應時間,使合法的網(wǎng)絡服務完全退化和不可用。 現(xiàn)在成熟的SDN 網(wǎng)絡都會部署多個控制器做負載均衡,從而提高控制器的處理能力。
(3)控制通道飽和度。 南向API,也被稱為“控制通道”,用于連接交換機和控制器。 通過OpenFlow 協(xié)議在交換機和控制器之間提供了一個接口。 控制器實時與交換機保持連接,為交換機提供路由和控制網(wǎng)絡流量(Qos)的決策。 黑客可以利用OpenFlow 在數(shù)據(jù)平面和控制平面之間的這種可擴展性缺陷,發(fā)起基于新流表的分布式拒絕服務攻擊,也就是通過發(fā)送大量的欺騙性IP 地址攻擊數(shù)據(jù)包,使交換機和控制器之間的OpenFlow 協(xié)議接口飽和,導致控制器無法控制交換機。
(4) 交換機橫向數(shù)據(jù)通道飽和度。 交換機橫向數(shù)據(jù)通道是指2 個以上OpenFlow 交換機之間的通信鏈接。 是在交換機之間轉(zhuǎn)發(fā)網(wǎng)絡流量,受到DDos攻擊后,交換機之間的一些數(shù)據(jù)通道或鏈接將被惡意數(shù)據(jù)包占據(jù),那么交換機之間將中斷連接。 一旦數(shù)據(jù)通道存在瓶頸,交換機根本無法轉(zhuǎn)發(fā)任何數(shù)據(jù)包,這種情況也會造成整個網(wǎng)絡的癱瘓。
(5)控制器橫向通道飽和度。 在SDN 架構(gòu)中,橫向通道指的多個控制器之間的接口通道。 當單一的集中式控制器由于網(wǎng)絡交換機數(shù)量的增加而無法處理網(wǎng)絡流量時,多個控制器通過橫向綁定的API接口提供負載均衡以保證整個網(wǎng)絡可靠性,DDos 可以從任何一個方向攻擊控制器,導致橫向通道的接口被大量進入的攻擊數(shù)據(jù)包所占用,控制器如果無法及時解決負載問題,也會造成整個網(wǎng)絡癱瘓。
(6)北向通道飽和度。 控制器依靠可編程應用的北向API 來保證整個網(wǎng)絡系統(tǒng)靈活度。 軟件開發(fā)人員使用這個接口對網(wǎng)絡控制實現(xiàn)可編程。 與南向API 不同,每個平臺都有自己的北向API,缺少統(tǒng)一的標準。 這種標準化的缺失也是一種安全威脅,所以黑客也可以通過北向API 針對控制器進行攻擊,導致北向接口的擁堵。
SDN 網(wǎng)絡一直受到DDoS 攻擊,研究者掌握了許多檢測DDoS 攻擊的方法:
(1)一種基于時間特征的DDoS 攻擊檢測方法,提取攻擊的時間并記錄,使用時間特征快速有效地檢測和防御DDoS 攻擊。 有的黑客利用控制器處理新網(wǎng)絡數(shù)據(jù)包的反應時間差,在這個時間窗口內(nèi)向控制器發(fā)送大量的請求,從而對SDN 控制器發(fā)起攻擊,利用這個特點,可以迅速發(fā)現(xiàn)此類攻擊并定位到源IP 進行有效阻斷,這個檢測方法的缺點是僅針對長快頻的攻擊有效,對低速低頻攻擊無效。
(2)一種過濾請求的新方法可以通過OpenFlow主動模式將所有的新數(shù)據(jù)包直接發(fā)送到安全網(wǎng)關(guān),而不是使用控制器來降低熵值(參見圖5),通過熵值法來檢測DDoS 攻擊,及時生成新規(guī)則更新交換機流表,交換機對符合規(guī)則的源目地址做丟包處理,這種方法必須抓取3 個特征值:協(xié)議、源IP 地址和目的IP 地址。 該檢測方法需要消耗時間來處理新的數(shù)據(jù)流,同時也會消耗系統(tǒng)性能。
圖5 主動模式下的DDos 防御Fig. 5 DDos defence in active mode
(3)在OpenFlow 中采用基于熵的輕量級DDoS泛濫攻擊檢測方法,減少對控制器的流量收集負載,減輕控制器因為頻繁的流量收集帶來性能消耗,使交換機更智能地主動檢測交換機上的DDoS 攻擊,這種方式缺點就是會降低控制器和交換機之間的通信頻率。
Mininet 是一個基于Linux 的輕量級虛擬化工具,本文使用Mininet 快速創(chuàng)建SDN 網(wǎng)絡模型(見圖6),該軟件可以虛擬添加交換機、主機和控制器,也可以改變或修改網(wǎng)絡結(jié)構(gòu)和連接。 創(chuàng)建步驟如下:
圖6 簡單SDN 網(wǎng)絡模型Fig. 6 Simple SDN network model
(1)將Mininet 安裝在Ubuntu Linux 上。
(2)命令行:
mn -topo single,3 -mac -switch ovsk -controller remote
創(chuàng)建3 個虛擬主機,在內(nèi)核中創(chuàng)建1 個具有3個端口的OpenFlow 交換機,為每個主機設(shè)置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
創(chuàng)建一個規(guī)則,所有到達交換機端口0 的數(shù)據(jù)包將被轉(zhuǎn)發(fā)到端口1。
(5)安裝開源的Floodlight OpenFlow 控制器。
(6)安裝網(wǎng)絡分析軟件sFlowRT,該軟件內(nèi)嵌在OpenFlow 控制器中,可以實時監(jiān)控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,設(shè)置完成后,手動啟動sFlow 分析器,通過./sFlow-rt/start 命令收集的數(shù)據(jù)樣本,同時設(shè)置訪問地址:http:/ /localhost:8080/ui/pages/index.html。
(9)安裝WEKA 機器學習軟件。
(10)測試期間控制器不可人為斷開,否則測試將失敗。
本次測試使用了2 臺主機、2 臺OpenFlow 交換機和1 個控制器。 WEKA 是一款開源的機器學習以及數(shù)據(jù)挖掘軟件,該軟件可以在同一數(shù)據(jù)集上建立多個機器學習模型,本文使用WEKA 機器學習軟件建立模型并測試模型的準確性,同時對正常和Dos攻擊的數(shù)據(jù)建立數(shù)據(jù)集,包括TCP、UDP、ICMP、ARP、IPv4 和SSH 等6 種協(xié)議。 在DDos 攻擊期間,1 臺主機作為受害者,1 臺主機作為攻擊者,主動采集每個交換機及控制器上的流量情況。 正常情況下控制器上數(shù)據(jù)流量如圖7 所示,DDos 環(huán)境下控制器數(shù)據(jù)流量如圖8 所示。
圖7 正常情況下控制器上數(shù)據(jù)流量Fig. 7 Data traffic on the controller under normal conditions
圖8 DDos 環(huán)境下控制器數(shù)據(jù)流量Fig. 8 Controller data traffic in the DDos environment
由于數(shù)據(jù)集實例不是很大,為了減少偏差,在數(shù)據(jù)集中加入了25% 的噪聲數(shù)據(jù)。 本文使用AdaBoosting 機器學習算法,將決策樹作為一個弱分類器來建立網(wǎng)絡的分類器模型。
為了降低復雜性,減少了特征的數(shù)量,使用遞歸特征消除(RFE)進行遞歸刪除特征,并在剩余的特征上構(gòu)建模型。 RFE 根據(jù)數(shù)據(jù)集中所有特征在實例分類中對重要特征進行排序。 RFE 算法需要2 個參數(shù),一是要保留的特征數(shù)量,二是在評估特征重要性的過程中要使用的模型,經(jīng)測試選擇的特征數(shù)量最終確定為7 個,分別是:目的地端口;Bwd 包長度平均值;Bwd 包長度標準;Bwd 包/s;包長度平均值;最大包長度;平均Bwd 段大小。
(1)AdaBoost 是自適應模型,這個模型從弱分類器中自我學習,性能隨著后續(xù)的分類器而提高。分類方程為:
(2)決策樹評估了特征的重要性和準確性。 推得的公式為:
(3)多層感知器模型。 模型公式可寫為:
模型建立后,該模型與SDN 控制器相連接,控制器只轉(zhuǎn)發(fā)那些被分類器模型過濾的流量,涉及2次網(wǎng)絡流量過濾,第一次由SDN 控制器本身執(zhí)行,利用自定義網(wǎng)絡配置過濾掉普通的攻擊流量;第二次,由SDN 控制器通過機器學習分類器再次過濾掉攻擊流量,該分類器只通過機器學習算法中被標記為良性的數(shù)據(jù)流量。 WEKA 數(shù)據(jù)集概述見圖9。
圖9 WEKA 數(shù)據(jù)集概述Fig. 9 WEKA dataset overview
(1)真陽性(TP):攻擊時產(chǎn)生的異常數(shù)據(jù);假陽性(FP):將正常數(shù)據(jù)分類為攻擊;假陰性(FN):異常數(shù)據(jù)被分類為正常數(shù)據(jù);真陰性(TN):被分類為正常的數(shù)據(jù)。
(2)指標定義及計算公式
①精度。 是指正確分類為攻擊的數(shù)據(jù)與分類為攻擊的總數(shù)據(jù)之比。 具體數(shù)學公式為:
②召回。 是指正確分類數(shù)據(jù)的比率。 具體數(shù)學公式為:
③F -衡量。 是指精確度和召回率的加權(quán)平均值。 具體數(shù)學公式為:
(3)對多個機器學習模型計算得出結(jié)果進行比較,AdaBoost 精度相對更準確些,多層感知器模型,屬于人工神經(jīng)網(wǎng)絡,但是執(zhí)行效率非常低,見表1。
表1 不同機器學習技術(shù)的性能指標分析Tab. 1 Analysis of performance metrics of different machine learning techniques
綜上所述,SDN 將控制平面與數(shù)據(jù)平面分離,使管理更加便捷,同時實現(xiàn)可編程[4-6]。 盡管國內(nèi)外學者在SDN 環(huán)境下針對DDoS 攻擊方面的研究有了很多成果,但DDoS 攻擊面仍在擴大,而且技術(shù)更新迭代很快。 以下是SDN 環(huán)境下檢測DDoS 攻擊所面臨一些實際困難。
大多數(shù)DDoS 攻擊檢測技術(shù)需要從OpenFlow交換機中收集數(shù)據(jù)構(gòu)建規(guī)則,例如提取數(shù)據(jù)報頭的特征來檢測異常行為的方法。 但是在低速率DDoS攻擊時,從流量中收集統(tǒng)計數(shù)據(jù)就很困難,另外采用負載均衡技術(shù)用多個分布式交換機來收集數(shù)據(jù),所收集的數(shù)據(jù)精度達不到要求,同時收集難度也會加大。
DDoS 攻擊行為的多樣化使SDN 環(huán)境中的異常流量檢測變得復雜。 因此,許多算法已經(jīng)轉(zhuǎn)向人工神經(jīng)網(wǎng)絡、貝葉斯分類法、模糊邏輯等來檢測DDoS攻擊行為。 但是沒有一種算法能夠真正應對所有DDoS 攻擊。
及時響應是SDN 控制器的關(guān)鍵,被DDoS 攻擊后,控制器要處理大量的流量,這會耗盡其性能,從而削弱響應合法用戶請求的能力。 現(xiàn)有的DDoS 攻擊檢測方法存在許多問題,包括控制器在短時間內(nèi)處理大量入口數(shù)據(jù)包的響應速度;無法檢測低速率的DDoS 攻擊;高網(wǎng)絡帶寬的消耗;無效的數(shù)據(jù)包帶來的處理負擔等都會導致攻擊檢測的延遲或無效。
本文使用Adaboost 和決策樹作為弱分類器,發(fā)現(xiàn)數(shù)據(jù)集的DDoS 攻擊檢測準確率可以達到94%。用機器學習模型的優(yōu)點是SDN 控制器通過自定義規(guī)則,利用分類器的輸出,可以有效阻斷那些特定的攻擊類型,在一定程度上增加了安全性。 但是隨著DDoS 攻擊的復雜程度不斷提高,尤其針對數(shù)據(jù)中心和網(wǎng)絡基礎(chǔ)設(shè)施的攻擊級別不斷提高,基于應用層的DDoS 攻擊給SDN 架構(gòu)帶來了許多安全挑戰(zhàn)和威脅,研究人員希望使用一種檢測防御方法來解決所有的DDos 的攻擊問題顯然是不可能的。 個人認為SDN 中集中控制的特性應該是DDoS 攻擊的核心,而分布式控制器的設(shè)計可以提供更好的負載分配、處理能力和可靠性,最大限度地降低因為單個控制器的通信故障而造成整網(wǎng)癱瘓的風險,同時機器學習在未來的網(wǎng)絡應用中具有很大的研究潛力,如何提高檢測精度,使檢測過程完全自動化,減少人為干預也是未來的研究方向。