周啟釗,于俊清,,李冬
(1.華中科技大學(xué)計算機學(xué)院,湖北 武漢 430074;2.華中科技大學(xué)網(wǎng)絡(luò)與計算中心,湖北 武漢 430074)
隨著互聯(lián)網(wǎng)的資源管理需求日益多元化,軟件定義網(wǎng)絡(luò)(SDN,software defined network)[1]作為一種新興的轉(zhuǎn)控分離的架構(gòu)為網(wǎng)絡(luò)資源的管理帶來了新的思路。SDN 通過將網(wǎng)絡(luò)核心控制邏輯與底層路由器和交換機架構(gòu)進行分離,打破了傳統(tǒng)的垂直集成網(wǎng)絡(luò)控制和轉(zhuǎn)發(fā)的模式,克服了網(wǎng)絡(luò)基礎(chǔ)設(shè)施部署局限性的關(guān)鍵問題。部署SDN 架構(gòu)的網(wǎng)絡(luò)具備靈活性、可編程性和集中化管理等諸多優(yōu)點[2]。OpenFlow 是當前最常用的SDN 南向協(xié)議,它提供了標準化的控制層與數(shù)據(jù)層的通信指令:數(shù)據(jù)轉(zhuǎn)發(fā)規(guī)則以流表項的形式進行表示,流表項則組合成為數(shù)據(jù)層的流表,SDN 架構(gòu)的網(wǎng)絡(luò)環(huán)境以流表更新及控制器反饋的形式完成通信指令交互。由于控制層為了維持與數(shù)據(jù)平面之間的高效通信引入了諸如Packet-In 的快速信息流指令,利用現(xiàn)有的控制層信息指令漏洞對網(wǎng)絡(luò)發(fā)起攻擊的案例層出不窮,其中對SDN 影響最嚴重的就是控制層欺騙式泛洪攻擊。包括SDN 控制層信息指令Packet-In、通信交互TCP/SYN 報文在內(nèi)的信息流均可能被利用并以泛洪的形式發(fā)起攻擊[3-4]。攻擊者通過偽造源地址技術(shù)創(chuàng)造新的源地址或數(shù)據(jù)通道,并利用偽造控制層交互信息來與SDN 控制器進行通信,擾亂控制層對全網(wǎng)的認知,進而間接對數(shù)據(jù)層的轉(zhuǎn)發(fā)產(chǎn)生影響。根據(jù)OpenFlow 協(xié)議的規(guī)定,控制器下發(fā)的流表項規(guī)則被交換機完全信任,若存在偽造源地址的流規(guī)則篡改行為,SDN 數(shù)據(jù)中心接入層交換機的安全保護性能將面臨嚴重威脅。
現(xiàn)有基于目的地址轉(zhuǎn)發(fā)的網(wǎng)絡(luò)路由機制導(dǎo)致控制層泛洪中偽造源地址欺騙的現(xiàn)象層出不窮,其關(guān)鍵特點為攻擊流量巨大、難以追溯和難以防御等,若缺乏高效的泛洪攻擊檢測機制,SDN 的控制層將存在巨大安全隱患。另一方面,由于SDN 基于目的地址的轉(zhuǎn)發(fā)模式并未涉及對源地址的檢查和認證過程,控制層泛洪所造成的網(wǎng)絡(luò)管理擾亂了接入層交換機的認證與身份識別,若缺乏合理的泛洪攻擊緩解機制,攻擊者可實現(xiàn)對SDN 數(shù)據(jù)的竊取和網(wǎng)絡(luò)狀態(tài)的探測,對SDN 架構(gòu)的安全性產(chǎn)生重大影響。
OpenFlow 協(xié)議提供了控制器和交換機之間的安全通信指令,其規(guī)定的標準化機構(gòu)使各模塊網(wǎng)絡(luò)通信間的互操作性增強,但針對控制層的欺騙式泛洪攻擊仍然層出不窮。典型的控制層欺騙式泛洪攻擊的類型主要包括Packet-In 泛洪和SYN(synchronize sequence numbers)泛洪2 類。
每當有新的數(shù)據(jù)包進入數(shù)據(jù)層進行匹配,會在流表中尋找對應(yīng)的流表項進行匹配:若直接匹配成功,則轉(zhuǎn)發(fā)數(shù)據(jù)報文;否則,該數(shù)據(jù)包信息通過OpenFlow 協(xié)議規(guī)定的控制器與數(shù)據(jù)層交互信息流Packet-In 進行上報,由控制器進行進一步分析。當控制層和數(shù)據(jù)層建立連接后,控制器即處理來自數(shù)據(jù)層的各種OpenFlow 協(xié)議通信指令,如圖1 所示,并分發(fā)指令給監(jiān)聽此通信指令的所有數(shù)據(jù)層交換機。在此過程中,由于控制器的集中特性,攻擊者通過創(chuàng)造大量偽造源地址的Packet-In 包觸發(fā)控制器處理進程,產(chǎn)生Packet-In泛洪[4]。該Packet-In 泛洪是一類新型的針對SDN控制層的攻擊,將直接造成SDN 的單點故障。在極端情況下,Packet-In 泛洪持續(xù)時間過長使得控制層的性能完全失效,進而使控制器無法處理正常消息,南向數(shù)據(jù)層網(wǎng)絡(luò)管理混亂,SDN 的合法流量轉(zhuǎn)發(fā)滯塞。
由于控制層針對傳統(tǒng)TCP 漏洞仍然存在缺陷,依靠TCP 建立連接時3 次握手存在的缺陷可發(fā)起SYN 泛洪攻擊,該泛洪的形成借助TCB(即TCP傳輸控制塊)的缺失和在SYN 包中偽裝合法的源IP 地址發(fā)起,可對SDN 控制層造成巨大安全隱患,如圖2 所示。TCB 是一種連接所有信息的傳輸協(xié)議數(shù)據(jù)結(jié)構(gòu),其分配空間的大小取決于接收的SYN包,在控制層連接成功前或發(fā)起源被驗證前該空間大小均可變[3]。攻擊者可借此漏洞輕易發(fā)起欺騙式SYN 泛洪,使到達的SYN 包被控制層分配過多的TCB 而導(dǎo)致其內(nèi)核內(nèi)存被耗盡。此外,攻擊者通過在SYN 包中偽裝合法的源IP 地址,使SYN-ACK包無法被有效響應(yīng),進而無法觸發(fā)對應(yīng)控制層通信指令,使主機將已分配的TCB 從SYN-RECEVIED狀態(tài)隊列中移除,最終導(dǎo)致SDN 控制層的安全通信指令管控混亂,無法繼續(xù)響應(yīng)數(shù)據(jù)層其他正常設(shè)備的請求。
現(xiàn)有針對SDN 控制層欺騙式泛洪的解決方案主要分為基于終端的SYN 泛洪防御和基于網(wǎng)絡(luò)的Packet-In 泛洪防御2 類。針對SYN 泛洪,基于終端的對策包括SYN Cookies 和SYN 緩存等方法[4-6]。由于欺騙式SYN 泛洪依賴于終端主機連接套接字的日志溢出,增加其日志隊列大小可初步緩解SYN泛洪的攻擊強度。此外,縮短一個TCB 從進入SYN-RECEIVED 狀態(tài)到因未進入下一個狀態(tài)而被回收的時間,也是一類有效的基于終端主機的解決方法[7-8]。為了緩解ACK(acknowledge character)包丟包而產(chǎn)生的泛洪攻擊問題,基于SYN 緩存和SYN Cookies 實現(xiàn)的方案均提供了針對控制層的防御思路:在已部署SYN 緩存和SYN Cookies 的控制器中,添加一個被限制大小的Hash 表空間用于存放被分配給TCB 的數(shù)據(jù)的指令子集,該空間能提升SYN 泛洪發(fā)生時SDN 控制層的容錯率,在一定時間內(nèi)維持控制層的全局視野和管理性能。然而,此類基于終端的SYN 泛洪防御機制需要對其底層TCP/IP 棧實現(xiàn)進行修改,而中間件如防火墻或入侵檢測系統(tǒng)(IDS,intrusion detection system)[9]需要通過網(wǎng)關(guān)實現(xiàn),其在SDN 中的可擴展性相對不足。
基于網(wǎng)絡(luò)的泛洪防御方案通常以RFC2827 為基礎(chǔ)實現(xiàn)欺騙數(shù)據(jù)包過濾,采取輸入源過濾的方式執(zhí)行泛洪防御。TopoGuard[10]是一種針對拓撲欺騙攻擊的工具。通過驗證SDN 通信信令從出現(xiàn)到執(zhí)行的合法性確保主機遷移的真實性。然而,該模式還缺乏對控制層泛洪尤其是Packet-In 泛洪的測試,控制層泛洪防御模式并不全面。ISP 方案[11]直接阻斷了源IP 地址不屬于源子網(wǎng)的包的傳遞,該方案提出了在網(wǎng)絡(luò)層篩選欺騙式泛洪數(shù)據(jù)包并進行輸入源過濾的模式,實驗結(jié)果表明其部署能有效地過濾SYN 泛洪攻擊包,但該方法依然未考慮大量Packet-In 消息注入的情況。為了提升控制器Packet-In 泛洪對應(yīng)的防御性能,文獻[4]提出了一種基于Packet-In 合法性檢測的防御策略,通過驗證Packet-In 消息是否由偽造源地址方式生成來決定其向控制器的轉(zhuǎn)發(fā)功能。然而,該方法的攻擊緩解部分缺乏對控制層泛洪攻擊中偽造MAC 地址的情況的分析,其偽造源地址包過濾的精度還不夠。此外,一些針對解決SDN 控制層泛洪攻擊問題提出的統(tǒng)計分析及閾值檢測、特征檢測及深度學(xué)習等方法的防御機制[12-14]彌補了現(xiàn)有泛洪防御模型在分類攻擊主機和數(shù)據(jù)包方面精度不高的問題。其中統(tǒng)計分析及閾值檢測方法能初步對SDN 控制層泛洪的發(fā)生進行預(yù)警,但該類方法無法及時并有效地區(qū)分網(wǎng)絡(luò)轉(zhuǎn)發(fā)正常突發(fā)大流和欺騙式泛洪攻擊,針對控制層泛洪檢測問題容易發(fā)生誤報。特征檢測及深度學(xué)習的方法[12]通過集合分析SDN 中交換機、控制器及流量數(shù)據(jù)等多維特征,結(jié)合輕量級的機器學(xué)習或深度學(xué)習方法進行泛洪檢測,該類型的方法由于特征維度爆炸或特征關(guān)聯(lián)性問題通常需要進行大量計算,在SDN 控制層泛洪攻擊實際環(huán)境下,尤其針對Packet-In 泛洪及SYN 泛洪的檢測效果不理想。此外,大量特征的采集和處理也增加了控制器的負載,對數(shù)據(jù)層的正常數(shù)據(jù)包轉(zhuǎn)發(fā)產(chǎn)生了負面的影響。
針對現(xiàn)有基于終端的SYN 泛洪防御和基于網(wǎng)絡(luò)的Packet-In 泛洪防御存在的可擴展性不足、特征維度爆炸和帶來額外負載的問題,本文提出了一種低開銷、高精度的SDN 控制器防御機制(CDM,controller defense mechanism)。該方法具有以下優(yōu)點。
1) 低開銷的流量采集。結(jié)合sFlow與OpenFlow交互信令的共性,提出了一種輕量級、低開銷的特征采集方案,使控制器以多線程的方式周期性地從接入層交換機獲取針對性的特征條目,而不需要多次遍歷和輪詢。
2) 高精度的特征解析和攻擊檢測。將與SDN控制層泛洪攻擊密切相關(guān)的特征進行組合,從多維流表項匹配域及流量特征中篩選排除低效特征,并結(jié)合梯度決策分類算法訓(xùn)練模型,該模型可高精度地區(qū)分正常突發(fā)流量和惡意泛洪流量。
3) 高安全性的差異化泛洪緩解。結(jié)合源地址驗證綁定模式,針對欺騙式泛洪和正常突發(fā)流量的特征提出差異化的SAVI(source address validation improvement)泛洪緩解機制,該方法不僅可有效抵御Packet-In 泛洪和SYN 泛洪攻擊,也能有效提升緩解控制層在泛洪發(fā)生時的響應(yīng)效率。
由于SDN 提供了靈活的網(wǎng)絡(luò)全局跟蹤機制,同時具備交換機信息持續(xù)監(jiān)控的能力,本節(jié)針對控制層泛洪攻擊檢測低開銷的關(guān)鍵特征采集需求,結(jié)合sFlow 與OpenFlow 交互信令的共性,實現(xiàn)了一個輕量級的泛洪特征采集模塊。sFlow(RFC3176)[15]是一種網(wǎng)絡(luò)導(dǎo)出協(xié)議,通常用于網(wǎng)絡(luò)性能和數(shù)據(jù)的測量,協(xié)議提供了對數(shù)據(jù)包進行檢測的各類信息采集協(xié)議,并嵌入專用集成芯片(ASIC)中對數(shù)據(jù)包進行轉(zhuǎn)發(fā)和收集。如圖3 所示,基于sFlow 的數(shù)據(jù)采集系統(tǒng)主要由ASIC 中的sFlow 服務(wù)端(sFlow agent)和遠程的sFlow 采集端(sFlow collector)2 部分組成。其中,sFlow 服務(wù)端用于獲取交換機或路由器的網(wǎng)絡(luò)數(shù)據(jù)測量結(jié)果,當特定時間窗口結(jié)束或者緩沖區(qū)滿后,將數(shù)據(jù)測量結(jié)果打包封裝為sFlow 的報文發(fā)送到sFlow 采集端。隨后,sFlow 采集端對sFlow 的報文進行解析,分析并輸出對應(yīng)的網(wǎng)絡(luò)統(tǒng)計數(shù)據(jù)[16]。
而在OpenFlow 協(xié)議中,SDN 控制器通過OFPT_STATS_REQUEST 對交換機進行請求。交換機將所請求的統(tǒng)計數(shù)據(jù)信息通過OFPT_ MULTIPART_ REPLY 消息回復(fù)給SDN 控制器。結(jié)合sFlow服務(wù)端的采集特性,該模塊將現(xiàn)有OFPT_MULTIPART_REPLY 消息可獲取的部分進行保留,利用控制器定期通過交互信息OFPT_STATS_REQUEST/REPLY 與OpenFlow 交換機進行通信的特性,將sFlow 服務(wù)端IP/UDP 頭與OFPT_STATS_REQUEST 消息返回流表匹配域信息重合的部分進行整合。sFlow 服務(wù)端整合流表匹配域數(shù)據(jù)采集示例如圖4 所示,IP/UDP 頭包括數(shù)據(jù)包長、數(shù)據(jù)包緩存字節(jié)、流表空間大小等,為每個接入層交換機單獨創(chuàng)建一個數(shù)據(jù)收集線程并開始執(zhí)行,這縮減了現(xiàn)有SDN 接入層交換機遍歷采集模式的冗余數(shù)據(jù)特征處理流程[16]。采用Java/Python實現(xiàn)基于信令交互的多線程特征采集,其中OFPT_STATS_REQUEST 主要負責查詢流表的最大存儲量和活躍流表項的數(shù)目,另一線程的sFlow服務(wù)端主要用于獲取流表對應(yīng)數(shù)據(jù)流量基本信息?;趕Flow 的多線程信息采集與整合模型流程如圖5 所示,通過動態(tài)的參數(shù)控制獲取交換機流表和流量2 方面的信息,為了確保兩者的兼容性,sFlow服務(wù)端僅接收SDN 數(shù)據(jù)中心接入層交換機流表對應(yīng)的數(shù)據(jù)流信息采集和存儲。
3.2.1 控制層負載單位階躍函數(shù)
針對SDN 控制層的SYN 泛洪攻擊可利用因擁塞而丟包的ACK-SYN 或者握手完成的ACK 包單獨發(fā)起,此時由于SYN-RECEIVED 的響應(yīng)時間減少,合法連接的TCB 空間也會因控制器繁忙無法重傳失配包,最終導(dǎo)致數(shù)據(jù)包丟棄。為了解決控制層SYN 泛洪攻擊問題,現(xiàn)有常見的防御機制通過優(yōu)化系統(tǒng)設(shè)置實現(xiàn)[8],典型的如降低對應(yīng)的SYN 時延[17],使主機盡快釋放半連接的占用。該模式存在的主要問題是無法根據(jù)數(shù)據(jù)流狀態(tài)衡量控制層負載,因此為了量化SDN 突發(fā)大流或泛洪攻擊發(fā)生時控制層的負載狀態(tài),結(jié)合現(xiàn)有OpenFlow 協(xié)議中順序的匹配模式,本節(jié)基于數(shù)據(jù)流對應(yīng)流表項時延idle_timeout(Tinit)對控制層負載進行建模[18]。SDN 流表時延與控制器狀態(tài)模型如圖6 所示,其中{p1,p2,…,pi,…,pn}表示SDN數(shù)據(jù)流傳輸?shù)臄?shù)據(jù)包長度,此處認為數(shù)據(jù)包是獨立分布并服從Pareto 分布的[19],分布公式如式(1)所示,其中,k,τ,α是Pareto 分布的參數(shù)。以此數(shù)據(jù)流分布為基礎(chǔ),可從理論角度分析數(shù)據(jù)流分布與控制層負載之間的關(guān)系。假設(shè)SDN 數(shù)據(jù)流數(shù)目為無窮大,若用{t1,t2,…,ti,…,tn}分割數(shù)據(jù)包之間的傳輸間隔,則該間隔服從負指數(shù)分布,如式(2)所示。
若數(shù)據(jù)包的空閑時間間隔較大,則OpenFlow交換機此段間隔時間內(nèi)必然會被控制器重新調(diào)度,此數(shù)據(jù)流所對應(yīng)配置的流表項也會隨之到期刪除。當后續(xù)的數(shù)據(jù)包需要進行流表匹配時,由于找不到對應(yīng)的流表項,交換機會立即向控制器發(fā)送Packet-In 消息請求流表項的下發(fā)。在此期間,控制層泛洪造成的安全問題主要可表征為2 個關(guān)鍵的特征:控制層異常發(fā)生時的負載高低與實際連接的端口數(shù)目有關(guān),如式(3)所示;由于匹配失敗產(chǎn)生的Packet-In 消息會耗費控制器大量的計算資源,以控制器處理Packet-In 消息的性能為依據(jù),可引入單位階躍函數(shù)H(·)對控制器的負載狀態(tài)即處理Packet-In 消息的數(shù)量進行量化,如式(4)所示。
單位階躍函數(shù)代表控制器的負載與Packet-In消息的數(shù)量呈正相關(guān),假設(shè)SDN 控制器處理一條Packet-In 消息的負載為cost,為了同時降低流表的失配率,總負載值可通過多個數(shù)據(jù)包匹配流表初始時延值累加進行估算。根據(jù)數(shù)據(jù)流切割傳輸模式的特性,設(shè)多個數(shù)據(jù)包對應(yīng)數(shù)據(jù)流切割分批處理過程中被分成了n個數(shù)據(jù)包,每轉(zhuǎn)發(fā)一個數(shù)據(jù)包,其對應(yīng)流表項均需要與數(shù)據(jù)包進行一次完整匹配,故數(shù)據(jù)流切割傳輸模式下東西向數(shù)據(jù)包傳輸平均造成的SDN 控制器負載關(guān)鍵特征可由式(5)計算。
3.2.2 數(shù)據(jù)層端口流量差及信息熵
現(xiàn)有研究表明,針對控制層的欺騙式泛洪具有2 個重要特征:突發(fā)性流量大和流量速率傾斜[3]。因此通過對SDN 接入層交換機端口流量信息的分析,可初步鑒別SDN 大流量的異常狀態(tài)。端口出入流量差的絕對值常常被用于表征影響SDN 控制層流量的關(guān)鍵因子,其計算方法如式(6)所示。
現(xiàn)有方法以接入層交換機端口的出入流量差的絕對值為標準進行數(shù)據(jù)流鑒別,其模型判定依賴流量閾值的選擇,而該流量閾值通常隨著網(wǎng)絡(luò)應(yīng)用需求、底層拓撲和設(shè)備性能的變化而差異極大,在不同的拓撲規(guī)模和設(shè)備性能狀態(tài)下對異常流量的判定和端口的定位均會存在嚴重偏差,其可擴展性不足。為了更好地確定異常流警報的閾值,通過流量差和熵值和轉(zhuǎn)化模型可定性流量的隨機程度,而結(jié)合φ-熵對流量差進行表示也有助于量化閾值,提升其穩(wěn)定性。假設(shè)SDN 接入層交換機端口流量差為x,其取值集合可用X={x1,x2,…,xn}表示,針對每個流量差取值的概率分布可用P={p1,p2,…,pn}表示,且每個取值之間互不影響。其中,,變量x的信息熵為
對于SDN 接入層交換機端口流量差集合X,其φ-熵可表示為
φ-熵可用于更加精確量化主機各維度的出入流量差的絕對值與Packet-In 泛洪攻擊之間的關(guān)系。本節(jié)模型多維度φ-熵特征包括源IP 地址信息(sIP)、源端口信息(sPort)、目的IP 地址信息(dIP)和目的端口信息(dPort)。為了對異常流量進行判定,需要保存前幾個連續(xù)時間窗口的多維度φ-熵。如圖7所示,若主機h1對應(yīng)的端口突然產(chǎn)生了異常大流量,此時該模型應(yīng)該對s1對應(yīng)h1的端口p1實時的流量差熵值進行計算,通過出入流量標準差值轉(zhuǎn)化φ-熵評估,判定h1發(fā)出的流量是正常通信大流量或泛洪攻擊流量。當該流量為欺騙式泛洪異常大流量時,即出入流量標準差值轉(zhuǎn)化φ-熵超過閾值,對應(yīng)出入端口流量失衡,則判定為疑似泛洪攻擊流量;而若h1主機屬于正常的流量密集型應(yīng)用,即出入流量標準差值轉(zhuǎn)化φ-熵未超過閾值,對應(yīng)出入端口流量平衡,則不會被判定為疑似泛洪攻擊流量。
3.2.3 欺騙式泛洪指令流狀態(tài)
分析控制層欺騙式SYN 泛洪攻擊的特征,通常在一定的時間間隔內(nèi),攻擊者在SYN 包中偽裝合法的源IP 地址,而這個IP 地址將不能響應(yīng)SYN-ACK 包,此時就無法觸發(fā)控制層通信指令使主機將已分配的TCB 從SYN-RECEVIED 狀態(tài)隊列中移除。分析該SYN-RECEVIED 狀態(tài)隊列對應(yīng)流表項與數(shù)據(jù)流中包間隔大小的關(guān)系,發(fā)現(xiàn)數(shù)據(jù)包間隔較大的數(shù)據(jù)流往往需要占用更多的轉(zhuǎn)發(fā)時間和更大的網(wǎng)絡(luò)帶寬,實際的突發(fā)大流占總流量的比例較低[17]。由于SDN 數(shù)據(jù)流的切割傳輸模式,數(shù)據(jù)包間隔較大的數(shù)據(jù)流分割得到的數(shù)據(jù)包對應(yīng)流表項包含的轉(zhuǎn)發(fā)目的地址通常極為相似。此時,數(shù)據(jù)包間隔較大的數(shù)據(jù)流占有的流表資源雖十分有限,但對應(yīng)流表項的地位卻十分關(guān)鍵。該攻擊的一個主要特征是源IP 地址欺騙,若關(guān)鍵流表項被欺騙式泛洪數(shù)據(jù)包影響導(dǎo)致頻繁被更新或刪除,大間隔數(shù)據(jù)包正常的傳輸會持續(xù)被間斷,對應(yīng)交換機向SDN 控制器頻繁發(fā)送Packet-In 消息查詢,最終導(dǎo)致控制器不堪重負,降低控制器對其他網(wǎng)絡(luò)數(shù)據(jù)包的響應(yīng)能力[20]。在此過程中,生成泛洪包的過程與普通數(shù)據(jù)流的顯著差別在于單指令流包含較少的數(shù)據(jù)包個數(shù),因此,通過對指令流包含數(shù)據(jù)包中位數(shù)特征的計算,如式(9)所示,能反映出控制層欺騙式泛洪的存在。
在突發(fā)大流和欺騙式攻擊2 類網(wǎng)絡(luò)狀態(tài)下,SDN數(shù)據(jù)層?xùn)|西向均存在大規(guī)模的數(shù)據(jù)包和流量傳輸情況。然而,以接入層交換機端口為基準,2 類大規(guī)模數(shù)據(jù)包和流量傳輸狀態(tài)存在明顯的差別:偽造源地址的入流量無法得到交換機流表和控制器的有效響應(yīng),故對應(yīng)的端口出入流量比例會產(chǎn)生嚴重的失衡;而流量密集型應(yīng)用的大流量傳輸均為合法操作,接入層交換機端口流量并不會產(chǎn)生明顯的失衡。在此2 類狀態(tài)下,僅僅通過檢測數(shù)據(jù)流包含數(shù)據(jù)包中位數(shù)特征判定泛洪攻擊在極端多數(shù)據(jù)包狀態(tài)下誤報率較高。因此為了實現(xiàn)可靠的檢測,控制層欺騙式泛洪關(guān)鍵特征還包括成對流狀態(tài),如式(10)所示。正常通信的數(shù)據(jù)流所產(chǎn)生的成對通信指令通常標記著相同的通信協(xié)議,同時其源IP 和目的IP 也有著對應(yīng)的源地址與目的地址。由于欺騙式泛洪攻擊大量增加了外部流量,例如在SYN 泛洪狀態(tài)下,通過偽造源地址發(fā)起的外部大流量將產(chǎn)生大量無效SYN-ACK 指令,這導(dǎo)致欺騙式泛洪發(fā)生時也存在大量包含失配流信息的SYN-ACK 指令。以此特征為基礎(chǔ),通過對SYN-ACK 指令包含流信息中成對流的數(shù)量的檢測也能反映出欺騙式泛洪的存在,如式(11)所示。
為了檢測與分類針對SDN 控制層的泛洪攻擊,本節(jié)以各控制層泛洪解析關(guān)鍵特征為基礎(chǔ),提出了基于XGBoost(eXtreme gradient boosting)算法的控制層攻擊檢測模型。符號說明如表1 所示。
表1 XGBoost 增強型分類器符號說明
XGBoost 是一種基于梯度Boosting 的集成學(xué)習算法[21],具有高準確度和可擴展性的特點。Boosting 算法將各個弱分類器加權(quán)疊加形成增強型分類器,通過不斷降低計算中的殘差,使之前的模型殘差向梯度方向進一步降低,從而有效降低分類誤差,達到更準確的分類的效果。XGBoost對分類模型的目標函數(shù)的損失函數(shù)生成二階泰勒展開,并在損失函數(shù)之外對正則項求導(dǎo)。其在優(yōu)化分類的目標函數(shù)的同時,對用于分類的決策樹模型進行了預(yù)剪枝,從而得到分類的最優(yōu)參數(shù),使分類結(jié)果更準確?;?XGBoost 算法實現(xiàn)Boosting 的步驟可表述如下。
1) 目標函數(shù)
2) 訓(xùn)練目標函數(shù)
3) 目標函數(shù)二階泰勒展開近似
4) 去掉常數(shù)項
5) 求出目標函數(shù)最優(yōu)解
其中,目標函數(shù)ζ(Φ)代表由多維特征構(gòu)成的控制層泛洪檢測目標數(shù)據(jù)包,這個目標函數(shù)分為誤差函數(shù)和正則化項2 部分。時間窗口內(nèi)特征集合的正則化定義復(fù)雜度,其值越小,復(fù)雜度越低,泛化能力越強。以此為基礎(chǔ)訓(xùn)練輸出泛洪檢測目標累加函數(shù),T表示泛洪檢測特征葉子節(jié)點的個數(shù),w表示節(jié)點的數(shù)值。接下來訓(xùn)練目標函數(shù)及求解最優(yōu)解的過程則是XGBoost 梯度下降分裂節(jié)點的標準訓(xùn)練流程。本文模型采用基于SDN 的入侵檢測數(shù)據(jù)集InSDN[22]進行線下模型訓(xùn)練,而線上部分數(shù)據(jù)由輕量級流量采集模塊實現(xiàn)。針對控制層泛洪攻擊為SDN 帶來的安全問題,在時間與輪數(shù)不斷遞增的基礎(chǔ)上進行交叉驗證生成欺騙式泛洪檢測模型,模型性能及參數(shù)測試結(jié)果將展示于5.2 節(jié)。
若泛洪攻擊僅通過重復(fù)偽裝單一的源地址進行,該地址將立即被檢測出并被過濾。由于OpenFlow 協(xié)議提供了控制器和交換機之間的安全通信指令,其規(guī)定的標準化機構(gòu)使各模塊網(wǎng)絡(luò)通信間的互操作性增強,為了達到欺騙通信指令攻擊控制層的效果,現(xiàn)有控制層泛洪的發(fā)起往往運用許多不同源地址偽裝,這將使SDN 控制層欺騙式泛洪的防御更加困難[3,23],此時最好的泛洪緩解方法則是盡可能過濾與源地址相近的數(shù)據(jù)包。
以RFC7513[24]協(xié)議為例,SAVI 以綁定?驗證模式為基礎(chǔ)執(zhí)行路徑過濾,過濾的粒度則取決于IP前綴的粒度。綁定規(guī)則的構(gòu)建是將源IP 地址信息和MAC 地址信息等一些難以冒用的屬性進行關(guān)聯(lián),再進行統(tǒng)一的驗證和過濾。典型的綁定關(guān)聯(lián)表項包括主機端口、主機源地址及MAC 地址,可記為
在執(zhí)行SDN 控制層泛洪攻擊檢測模塊后,整合模型分類結(jié)果,可基于SDN-SAVI(靜態(tài)源地址驗證)[28]與D-SAVI(動態(tài)源地址驗證)[23]實現(xiàn)差異化的安全管理。從網(wǎng)絡(luò)安全管理的時間維度上來說,控制層泛洪緩解措施執(zhí)行于正常網(wǎng)絡(luò)流量和惡意網(wǎng)絡(luò)行為的行為建模后,并根據(jù)網(wǎng)絡(luò)流量分析、異常行為分析等結(jié)果進行動態(tài)分類處理。SDN 控制層差異化泛洪緩解模型如圖8 所示。在檢測到SDN 正常大流數(shù)據(jù)傳輸狀態(tài)下,將持續(xù)進行交換機數(shù)據(jù)采集和sFlow 流量數(shù)據(jù)采集。當主機初次請求接入SDN 時,控制器會向其對應(yīng)的交換機下發(fā)偵聽網(wǎng)絡(luò)地址分配報文狀態(tài)的請求。針對不同的交換機地址分配機制(無狀態(tài)自動配置機制和動態(tài)變化配置機制),控制器為了獲取主機對應(yīng)的交換機接入網(wǎng)絡(luò)的目的和實時狀態(tài),下發(fā)不同的AAM 報文對其進行偵聽和請求查詢泛洪檢測模塊持續(xù)運行。
在普通泛洪發(fā)生時,執(zhí)行動態(tài)源地址驗證(D-SAVI)方案,交換機將接收的AAM 報文進行預(yù)處理,并和部署在OpenFlow 交換機中的偵聽規(guī)則進行匹配。根據(jù)匹配結(jié)果,主機對應(yīng)的交換機將AAM 報文所包含的主機狀態(tài)信息進行封裝,以Packet-In 包的形式與控制器進行通信。控制器成功接收AAM 報文后,會從Packet-In 包中解析出主機相關(guān)的地址信息和交換機狀態(tài)信息,構(gòu)建并更新綁定關(guān)系,限制疑似泛洪發(fā)起節(jié)點的流量,使其無法影響控制層信令發(fā)布及有效連接建立;在偽造源地址泛洪發(fā)生時,所有偽造源地址數(shù)據(jù)包均經(jīng)過靜態(tài)源地址驗證(SDN-SAVI)方案篩選,通過將綁定表的構(gòu)建和更新完全部署于控制器,利用SDN 的全局視野維持SAVI 的安全性標準,保證控制層通信的安全性。在現(xiàn)有的SAVI 綁定機制下,為了維持SAVI 絕對安全的標準,該綁定關(guān)系不會隨著網(wǎng)絡(luò)狀態(tài)的變化而產(chǎn)生任何變化。根據(jù)三元組綁定信息的維護,控制器隨后將持續(xù)執(zhí)行源地址驗證和路徑過濾。
為了維持基于SAVI 的泛洪緩解機制的安全性,控制層泛洪緩解模塊主要以窗口輪詢的模式進行??刂破鲿樗蠸DN 數(shù)據(jù)層主機均維護一個歷史狀態(tài)列表,以控制層泛洪特征構(gòu)建的泛洪檢測模型為基礎(chǔ),可推導(dǎo)每個主機隨時間推移的時序狀態(tài)列表。為了使D-SAVI 進行安全保障的隨機輪詢更具針對性,本節(jié)提出了控制層泛洪安全保障的隨機輪詢算法,其流程如圖9 所示。該算法對所有正常主機遍歷完畢后,根據(jù)主機時序狀態(tài)列表的異常狀態(tài)比例排序進行逆序輪詢和檢測,對其進行臨時數(shù)據(jù)采集與分析,并部署源地址驗證規(guī)則。因此,每次挑選的主機個數(shù)直接影響安全保障的隨機輪詢模塊發(fā)現(xiàn)有控制層泛洪攻擊安全隱患的主機的及時性,間接影響基于SAVI 的泛洪緩解機制為控制器帶來的負載:若每次挑選主機個數(shù)越少,則控制器和交換機資源消耗也越少,其安全性指標則會相應(yīng)降低;反之則能更快發(fā)現(xiàn)控制層泛洪攻擊異常主機,降低網(wǎng)絡(luò)的安全威脅,但對SDN 資源消耗也更多。因此,在SDN 的不同拓撲結(jié)構(gòu)中,選擇合適數(shù)量實現(xiàn)安全保障的隨機輪詢模塊是重要的平衡性指標。安全保障的隨機輪詢模塊基于3.2.2節(jié)的流量差和信息熵實現(xiàn)。
本節(jié)在多臺服務(wù)器和基于 Vmware 安裝的Ubuntu 16.04.2 虛擬機系統(tǒng)上搭建了模擬的SDN 環(huán)境。圖10 是經(jīng)典的數(shù)據(jù)中心實驗拓撲,本實驗拓撲以Fat-Tree 為基礎(chǔ)搭建。安裝Floodlight 控制器作為SDN 的控制平面,采用Mininet 仿真對底層SDN 拓撲進行差異化的仿真。SDN 拓撲中的SDN交換機由開源的虛擬交換機(OVS,OpenvSwitch)實現(xiàn)。在 Mininet 中實現(xiàn)軟件定義網(wǎng)絡(luò)的交換機可選擇多種模式,其中最常見的就是OVS 實現(xiàn)。該實驗網(wǎng)絡(luò)主要包含14 臺OVS,其中,S1和S2為核心層交換機,S3~S6為匯聚層交換機,S7~S14為接入層交換機。實驗網(wǎng)絡(luò)共包含40 臺主機接入網(wǎng)絡(luò),本實驗在模擬SDN 數(shù)據(jù)中心網(wǎng)絡(luò)拓撲采用分布式流量生成器(D-ITG,distributed Internet traffic generator)模擬發(fā)送正常背景流量和流量密集型應(yīng)用“大象流”,同時通過腳本控制Fat-Tree 拓撲的數(shù)據(jù)層主機隨機組成多對進行相互通信,產(chǎn)生正常的數(shù)據(jù)中心東西向周期性網(wǎng)絡(luò)通信流量。
SDN 控制層泛洪攻擊流量由Python 的Scapy工具模擬發(fā)出,通過模擬不同速率和比例的Packet-In 泛洪和SYN 泛洪攻擊,致使SDN 數(shù)據(jù)中心數(shù)據(jù)層目標主機的正常通信受到影響??刂破鞒掷m(xù)收集30 min 流量數(shù)據(jù)。將上述攻擊流量和正常SDN 數(shù)據(jù)中心背景流量進行混合發(fā)包。在網(wǎng)絡(luò)拓撲內(nèi)分別啟動靜態(tài)與動態(tài)的源地址動態(tài)驗證系統(tǒng),在網(wǎng)絡(luò)穩(wěn)定后選定H1、H6、H11、H16、H21、H26、H31和H36為偽造源地址攻擊主機,其中,H1和H2連接于同一接入層交換機S1的不同端口,而其余主機分別連接于其他交換機。
本節(jié)對泛洪攻擊檢測算法的性能進行分析和比較,將本文的控制層攻擊檢測算法與其他基于特征的決策分類算法包括決策樹(DT)[29]、隨機森林(RF)[30]、k近鄰(KNN)[31]、樸素貝葉斯(NB)[32]和支持向量機(SVM)[33]進行性能比較。由表2 的結(jié)果得出,基于XGBoost 的控制層攻擊檢測與分類算法具備在檢測準確率和召回率方面最強的綜合性能,其各個弱分類器加權(quán)疊加形成增強型分類器,通過不斷降低計算中的殘差,使之前的模型殘差向梯度方向進一步降低,從而有效降低分類誤差,達到更準確的分類效果。
表2 異常檢測算法比較
為了降低偽造源地址主機異常分類模型的在特征方面的復(fù)雜度,增強異常流警報時發(fā)現(xiàn)異常主機的效率,并減少對SDN 系統(tǒng)資源的占用,對多維符合特征進行解析與評估是必要的流程。通過對每個特征目標函數(shù)最優(yōu)解的遍歷計算,選擇XGBoost 算法中損失函數(shù)的量化計算值作為分裂點,并用GetScore()函數(shù)計算增益損失。在遍歷所有特征后,增益損失的最值通??捎行Ш饬恳粋€特征是否具有最大的信息增益和卡方統(tǒng)計量,該統(tǒng)計量可直接反映出特征對分類模型的貢獻程度。以控制層泛洪多維解析特征為基礎(chǔ),分別評估其檢測泛洪攻擊的準確率與召回率,結(jié)果如圖11 和圖12 所示。從圖11 和圖12 可以看出,在Packet-In 泛洪攻擊環(huán)境下,EPF、DTB 和MPF 具備更好的分類性能,這是由于Packet-In 泛洪攻擊場景下突發(fā)性流量大和流量速率傾斜。通過對SDN 接入層交換機端口流量信息的分析,可初步鑒別SDN 大流量的異常狀態(tài)。而在SYN 泛洪攻擊的狀態(tài)下,PPF、GFF和EPF 具備相對更好的分類性能。由于欺騙式泛洪攻擊大量增加了外部流量,通過偽造源地址發(fā)起的外部大流量將產(chǎn)生大量無效SYN-ACK 指令,即控制層欺騙式泛洪發(fā)生時存在大量包含失配流信息的SYN-ACK 指令,這使成對性特征PPF 和GFF具備更好的分類性能。
準確率與召回率存在差異的原因在于準確率和召回率在控制層異常檢測樣本定義方面的差別:召回率是所有分類異常樣本結(jié)果中包含的偽造樣本數(shù)量占總偽造數(shù)的比例,而準確率則是對任意樣本分類并定位偽造樣本的準確比例。由于控制器泛洪場景涉及的表項特征通常都是高維的、稀疏的,并且樣本量巨大,以XGBoost 算法為基礎(chǔ)的控制層攻擊檢測模型的本質(zhì)是多個表項特征弱分類器的訓(xùn)練和組合,通過熵、信息增益、基尼指數(shù)等方法,各個特征弱分類器在每次分裂時選取最優(yōu)的分裂節(jié)點,然后配置多維簡單的弱分類器,可以迅速提高識別速度。該組合分類器能夠廣泛地檢索識別疑似攻擊樣本,召回率相對可觀,但各個弱分類器由于樣本結(jié)果輸出多,其實際分類準確率較低。
綜合來看,EPF 在兩類控制層泛洪場景下有著穩(wěn)定的性能,這主要是由于φ-熵可用于更加精確的量化主機當前端口多維度的出入流量差的絕對值與Packet-In 泛洪攻擊之間的關(guān)系。因此,本節(jié)對數(shù)據(jù)層端口信息φ-熵用于建立數(shù)據(jù)層泛洪攻擊分類模型的參數(shù)進行測試,結(jié)果如表3 和表4所示。結(jié)果表明,基于熵的泛洪攻擊流分類模型需要計算出合理的閾值以達到更好的分類效果。根據(jù)SDN 拓撲的狀態(tài),本文實驗以φ=0.3 為基礎(chǔ)[34]進行閾值測試,并且基于Type A 攻擊類型進行了50 次閾值測試,分別計算了基于泛洪攻擊流量和普通背景流量狀態(tài)下的熵值,如表5 和表6 所示。結(jié)果表明,最大攻擊熵明顯大于最小背景熵(maxA>minN),最大背景熵明顯大于最小攻擊熵(maxN>minA),這符合在控制層泛洪攻擊場景下熵值變化的特點。
表3 背景流量下異常流警報模型φ-熵值
表4 泛洪攻擊下異常流警報模型φ-熵值
表5 φ-熵值異常流警報模型最小熵閾值測定
表6 φ-熵值異常流警報模型最大熵閾值測定
本節(jié)SDN 控制層泛洪緩解模塊基于SAVI 實現(xiàn),將對該模塊在泛洪緩解及安全性方面的性能進行測試與分析。圖13 是部署了基于SAVI 的泛洪攻擊緩解模塊的SDN 中泛洪攻擊數(shù)據(jù)包的實時數(shù)目測試值。在差異化的狀態(tài)分組驗證體系之下,基于SAVI 的泛洪攻擊緩解模塊能顯著降低欺騙式泛洪攻擊數(shù)據(jù)包的數(shù)目,差異化的動態(tài)輪詢模式相比于D-SAVI 具備更快的響應(yīng)速度。這符合控制層泛洪攻擊檢測與緩解在時延方面的需求,符合SAVI 源地址綁定?驗證體系的基本的安全性能標準[26]。
響應(yīng)時間是控制器對一個Packet-In 請求作出反饋的時延,圖14 展示了在泛洪攻擊狀態(tài)下控制器響應(yīng)時間測試結(jié)果,結(jié)果表明當SDN 中激活泛洪攻擊主機的數(shù)目增多時,控制器的響應(yīng)時間也將相應(yīng)增加。在無泛洪攻擊檢測與防御部署的狀態(tài)下,控制器的性能將受到嚴重的影響,數(shù)據(jù)層的基礎(chǔ)通信和與控制層的交互指令的完整性受到極大的破壞。通過控制層泛洪攻擊檢測與防御機制CDM的部署,控制器的響應(yīng)效率能恢復(fù)近似于無攻擊狀態(tài)下的性能。這表明CDM 能有效檢測與緩解控制層欺騙式泛洪,維護SDN 控制層的安全運行。
本文提出了一種輕量級、高精度的控制層泛洪檢測與緩解機制,該方法將泛洪防御問題分為檢測和緩解2 個步驟,分別解決了泛洪攻擊主機分類、泛洪攻擊數(shù)據(jù)包路徑過濾和負載優(yōu)化問題。在泛洪檢測方面,提出了輕量級的控制層泛洪關(guān)鍵特征解析模塊,利用Boosting 算法將各個特征弱分類器加權(quán)疊加形成增強型分類器,通過不斷降低計算中的殘差,達到了高精度的欺騙式泛洪攻擊檢測效果。在泛洪緩解方面,CDM 部署了基于SAVI 的泛洪數(shù)據(jù)包過濾機制,以綁定?驗證的模式為基礎(chǔ)執(zhí)行控制層泛洪數(shù)據(jù)包的路徑過濾,同時以動態(tài)輪詢的模式實現(xiàn)安全保障和泛洪關(guān)鍵特征實時更新。所提方法要求泛洪特征更新的實時性,暫未考慮SDN 鏈路動態(tài)變化的情況,若面向更復(fù)雜的拓撲變化狀態(tài)實施差異化的泛洪主機源地址驗證模式,其動態(tài)輪詢安全保障模塊負載將會較大,如何在CDM 中解決這個問題將是下一步工作的重點。