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