李俊強(qiáng),陳 悅,韓 晗,王 晨,胡訊沛,張?chǎng)蝿偅菁t芳
(1.電子科技大學(xué) 信息與通信工程學(xué)院, 成都 611731;2.國(guó)家計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心, 北京 100000)
軟件定義網(wǎng)絡(luò)(software defined networking,SDN)是針對(duì)傳統(tǒng)網(wǎng)絡(luò)的缺陷而提出的一種新型網(wǎng)絡(luò)架構(gòu)。2009年,美國(guó)MIT主辦的《技術(shù)評(píng)論》網(wǎng)站將SDN技術(shù)評(píng)選為年度十大前沿技術(shù)之一[1]。自此,SDN技術(shù)開(kāi)始被學(xué)術(shù)界和工業(yè)界廣泛關(guān)注,得到了迅速發(fā)展。SDN最大的特點(diǎn)就是將控制平面和數(shù)據(jù)平面分離,讓2個(gè)平面具有松耦合度,同時(shí)可以通過(guò)軟件編程來(lái)對(duì)網(wǎng)絡(luò)資源進(jìn)行集中控制。
由于控制平面和數(shù)據(jù)平面的分離以及網(wǎng)絡(luò)配置具有的定制化、精細(xì)化等特點(diǎn),使得SDN具有跟傳統(tǒng)網(wǎng)絡(luò)不一樣的時(shí)間特征和行為特征。傳統(tǒng)網(wǎng)絡(luò)下的探測(cè)技術(shù)并不能直接移植到SDN網(wǎng)絡(luò),需要開(kāi)展面向SDN網(wǎng)絡(luò)的新探測(cè)技術(shù)。本文主要介紹的是基于SDN網(wǎng)絡(luò)的探測(cè),這對(duì)深入理解SDN網(wǎng)絡(luò)架構(gòu)、提升SDN網(wǎng)絡(luò)性能以及增強(qiáng)SDN安全性能有重要作用。
具體來(lái)講,在SDN中,網(wǎng)絡(luò)策略(如訪問(wèn)控制列表、防火墻規(guī)則),網(wǎng)絡(luò)應(yīng)用(如負(fù)載均衡),新型的防御機(jī)制(如移動(dòng)目標(biāo)防御)均可以通過(guò)SDN交換機(jī)上的流表來(lái)實(shí)現(xiàn)。對(duì)于攻擊者而言,如果能探測(cè)出網(wǎng)絡(luò)中節(jié)點(diǎn)之間的流表規(guī)則,就可以制定出有針對(duì)性的攻擊策略,進(jìn)而對(duì)網(wǎng)絡(luò)實(shí)施進(jìn)一步的攻擊。同樣,對(duì)于防御者來(lái)說(shuō),需要做的也是通過(guò)SDN探測(cè)來(lái)發(fā)現(xiàn)自身存在的安全隱患和漏洞,從而在遭受攻擊之前提前進(jìn)行防范,以此達(dá)到防御威脅的目的。
需要注意的是,與網(wǎng)絡(luò)探測(cè)很相似的一個(gè)概念是網(wǎng)絡(luò)測(cè)量,但它們之間有一定的差別。網(wǎng)絡(luò)探測(cè)的原理是指通過(guò)探測(cè)主機(jī)主動(dòng)發(fā)送探測(cè)包來(lái)探測(cè)出網(wǎng)絡(luò)的內(nèi)部信息,類(lèi)似于網(wǎng)絡(luò)測(cè)量中的主動(dòng)測(cè)量。而且,在進(jìn)行網(wǎng)絡(luò)探測(cè)前,探測(cè)方是不知道網(wǎng)絡(luò)內(nèi)部情況的,把探測(cè)的網(wǎng)絡(luò)當(dāng)做一個(gè)“黑盒”來(lái)處理。因此,探測(cè)的環(huán)境是站在攻擊者或者說(shuō)“黑客”的角度來(lái)進(jìn)行的,探測(cè)者無(wú)法直接對(duì)探測(cè)網(wǎng)絡(luò)內(nèi)部的設(shè)備進(jìn)行操作。如果想獲取這個(gè)網(wǎng)絡(luò)的信息,只能根據(jù)網(wǎng)絡(luò)的理論知識(shí)找到相應(yīng)的漏洞從而進(jìn)行探測(cè)。
目前針對(duì)SDN的探測(cè)才剛剛起步,相關(guān)的論文、資料還比較少。通過(guò)對(duì)現(xiàn)有的資料進(jìn)行整理,從3個(gè)方面對(duì)現(xiàn)在的SDN探測(cè)技術(shù)進(jìn)行綜述,分別是:SDN網(wǎng)絡(luò)類(lèi)型探測(cè)、SDN流表規(guī)則探測(cè)、SDN流表容量探測(cè)。
SDN架構(gòu)與傳統(tǒng)網(wǎng)絡(luò)架構(gòu)最大的不同就是控制平面與轉(zhuǎn)發(fā)平面分離,讓其具有低耦合度。而在傳統(tǒng)網(wǎng)絡(luò)下,無(wú)論是2層交換設(shè)備交換機(jī),還是3層交換設(shè)備路由器,都同時(shí)具有轉(zhuǎn)發(fā)平面和控制平面。因此,可以說(shuō)SDN架構(gòu)是一種大的創(chuàng)新。
ONF(open networking foundation,開(kāi)發(fā)網(wǎng)絡(luò)基金會(huì))從用戶(hù)角度出發(fā)定義的SDN架構(gòu)如圖1所示。該SDN架構(gòu)分為3層:應(yīng)用層、控制層和基礎(chǔ)設(shè)施層。除了這3個(gè)層次之外,還包括連接它們之間通信的接口:北向接口和南向接口。北向接口是指連接控制層與應(yīng)用層之間的接口,南向接口是指連接控制層與基礎(chǔ)設(shè)施層的接口。其中,北向和南向是相對(duì)于控制器而言的,這也能夠說(shuō)明SDN架構(gòu)的核心就是控制器。值得一提的是,目前北向接口還沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),而南向接口已經(jīng)有了統(tǒng)一的標(biāo)準(zhǔn)協(xié)議OpenFlow。
基礎(chǔ)設(shè)施層位于SDN架構(gòu)的最底層,它是由不同的網(wǎng)絡(luò)設(shè)備組成的。這里的網(wǎng)絡(luò)設(shè)備主要是進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)功能的設(shè)備,比如交換機(jī)或者路由器。但在SDN網(wǎng)絡(luò)中,這些設(shè)備統(tǒng)稱(chēng)為SDN交換機(jī)。與傳統(tǒng)網(wǎng)絡(luò)不同的是,這些交換設(shè)備只有數(shù)據(jù)轉(zhuǎn)發(fā)功能,并沒(méi)有控制功能?;A(chǔ)設(shè)施層之上的是控制層,它可以提供整個(gè)網(wǎng)絡(luò)的全局視圖。由于處于整個(gè)架構(gòu)的中間,它既要負(fù)責(zé)為應(yīng)用層提供服務(wù)接口,也需要處理基礎(chǔ)設(shè)施層的數(shù)據(jù)轉(zhuǎn)發(fā)工作。應(yīng)用層位于最上層,其包括各自不同功能的SDN應(yīng)用,例如:安全服務(wù)、網(wǎng)絡(luò)管理和策略實(shí)現(xiàn)。
ONF提出的SDN架構(gòu)以及OpenFlow標(biāo)準(zhǔn),目前得到了廣泛的應(yīng)用和支持,極大地促進(jìn)了SDN的發(fā)展。
圖1 基于OpenFlow的SDN架構(gòu)
OpenFlow的概念最早是由斯坦福大學(xué)的Nick McKeown教授等于2008年4月提出。OpenFlow將控制邏輯從網(wǎng)絡(luò)設(shè)備盒子中分離出來(lái),供研究者對(duì)其進(jìn)行任意的編程從而實(shí)現(xiàn)其創(chuàng)新的網(wǎng)絡(luò)拓?fù)洹f(xié)議,而無(wú)需改動(dòng)網(wǎng)絡(luò)設(shè)備本身。OpenFlow的提出得到各界的廣泛關(guān)注,目前成為SDN南向接口協(xié)議的主流標(biāo)準(zhǔn)之一。
2009年12月31日,OpenFlow v1.0正式發(fā)布。作為協(xié)議的第1個(gè)規(guī)范標(biāo)準(zhǔn),OpenFlow v1.0中的很多思想都非常重要,是OpenFlow后續(xù)版本的重要基礎(chǔ)。
OpenFlow v1.0中有3個(gè)核心組成部分:流表、安全通道和OpenFlow協(xié)議。其整體架構(gòu)如圖2所示。流表負(fù)責(zé)數(shù)據(jù)包的高速查詢(xún)和轉(zhuǎn)發(fā),相當(dāng)于傳統(tǒng)網(wǎng)絡(luò)中的轉(zhuǎn)發(fā)表;安全通道提供一個(gè)安全的數(shù)據(jù)傳輸通道,方便OpenFlow交換機(jī)與控制器進(jìn)行安全可靠的通信;OpenFlow協(xié)議是控制器與OpenFlow交換機(jī)進(jìn)行通信的標(biāo)準(zhǔn),它在安全通道進(jìn)行傳輸,其定義的通信消息類(lèi)型有3種:Asynchronous、Controller-to-switch、Symmetric。其中,Asynchronous消息由OpenFlow交換機(jī)發(fā)起,用來(lái)將網(wǎng)絡(luò)事件或交換機(jī)狀態(tài)變化更新到控制器;Controller-to-switch消息由控制器發(fā)起,用來(lái)管理或獲取OpenFlow交換機(jī)的狀態(tài);Symmetric消息可由交換機(jī)或者控制器發(fā)起?;谶@3種消息類(lèi)型,控制器與交換機(jī)之間的通信便可以有序進(jìn)行。
圖2 OpenFlow的整體架構(gòu)
OpenFlow協(xié)議作為一種重要的南向接口協(xié)議,它的作用就是讓網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)轉(zhuǎn)發(fā)功能與控制功能進(jìn)行分離。為了實(shí)現(xiàn)這一目標(biāo),OpenFlow使用了流表這個(gè)結(jié)構(gòu)。在傳統(tǒng)網(wǎng)絡(luò)設(shè)備中,數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層其各自的轉(zhuǎn)發(fā)依據(jù)分別為MAC地址表和IP地址路由表。而在OpenFlow中,流表將傳統(tǒng)網(wǎng)絡(luò)中的所有轉(zhuǎn)發(fā)表進(jìn)行了整合。因此,其支持的協(xié)議字段更加豐富。
流表的結(jié)構(gòu)如圖3所示。流表由3部分組成:包頭域、計(jì)數(shù)器、動(dòng)作。包頭域相當(dāng)于傳統(tǒng)網(wǎng)絡(luò)中的數(shù)據(jù)包頭,負(fù)責(zé)記錄源、目的主機(jī)的IP地址、MAC地址等等信息。計(jì)數(shù)器用于統(tǒng)計(jì)匹配數(shù)據(jù)包個(gè)數(shù),方便流量流量監(jiān)管;動(dòng)作的作用是告知匹配到數(shù)據(jù)包后應(yīng)該進(jìn)行的動(dòng)作,分為必備動(dòng)作和可選動(dòng)作。必備動(dòng)作是指所有OpenFlow交換機(jī)默認(rèn)支持的,可選動(dòng)作是指部分交換機(jī)支持的動(dòng)作。必備動(dòng)作有兩種:轉(zhuǎn)發(fā)和丟棄;可選動(dòng)作有3種:轉(zhuǎn)發(fā)、排隊(duì)和修改域。
包頭域計(jì)數(shù)器動(dòng)作
圖3 流表的結(jié)構(gòu)
隨著SDN的迅速發(fā)展,它的安全問(wèn)題受到了越來(lái)越多的研究者關(guān)注。而SDN探測(cè)是研究SDN安全問(wèn)題中不可或缺的一部分。一般來(lái)說(shuō),要想發(fā)動(dòng)一次成功的攻擊,先決條件就是探測(cè)出目標(biāo)網(wǎng)絡(luò)的相關(guān)信息,因此SDN探測(cè)的重要性是不言而喻的。
由于SDN中控制平面與數(shù)據(jù)平面分離的特性,使得SDN具有跟傳統(tǒng)網(wǎng)絡(luò)不一樣的時(shí)間特征和行為特征。傳統(tǒng)網(wǎng)絡(luò)下的探測(cè)技術(shù)并不能直接移植到SDN網(wǎng)絡(luò),需要開(kāi)展面向SDN網(wǎng)絡(luò)的新探測(cè)技術(shù)??偟膩?lái)說(shuō),在SDN環(huán)境下進(jìn)行探測(cè)存在如下的許多挑戰(zhàn):
1) 如何提高探測(cè)的精度,例如在探測(cè)路徑上可能存在多臺(tái)交換機(jī),如何確定探測(cè)信息的實(shí)際擁有者。
2) 如何降低探測(cè)的開(kāi)銷(xiāo),使用較小的探測(cè)代價(jià)獲得對(duì)多個(gè)匹配字段的較精確的探測(cè)結(jié)果。
3) 如何減少不穩(wěn)定因素,如多次探測(cè)可能會(huì)改變流表內(nèi)容等情況,因時(shí)延抖動(dòng)、網(wǎng)絡(luò)擁塞等偶然因素可能影響探測(cè)和分析結(jié)果。
在軟件定義網(wǎng)絡(luò)中,SDN網(wǎng)絡(luò)類(lèi)型探測(cè)是指探測(cè)所屬網(wǎng)絡(luò)是否為SDN網(wǎng)絡(luò)。許多的研究者都提出了自己的探測(cè)方法。
Shin S等[2]首次提出了一種基于時(shí)間的指紋識(shí)別方法,以確定目標(biāo)網(wǎng)絡(luò)是否為SDN。由于在SDN中,控制平面與數(shù)據(jù)平面分離,因此當(dāng)數(shù)據(jù)平面收到不知道如何處理的數(shù)據(jù)包時(shí),數(shù)據(jù)平面通常會(huì)向控制平面進(jìn)行相應(yīng)的請(qǐng)求以獲得相應(yīng)的處理方法。利用這個(gè)關(guān)鍵屬性便可以確定目的網(wǎng)絡(luò)是否使用SDN/OpenFlow交換機(jī),最終判斷出網(wǎng)絡(luò)類(lèi)型。
為了證明這種攻擊的可行性,筆者設(shè)計(jì)了一種名為SDN Scanner的SDN網(wǎng)絡(luò)類(lèi)型探測(cè)工具進(jìn)行驗(yàn)證。該工具的總體探測(cè)思路是:通過(guò)構(gòu)造不同的數(shù)據(jù)包,將其發(fā)送到網(wǎng)絡(luò)當(dāng)中,如果該數(shù)據(jù)包是交換機(jī)中沒(méi)有出現(xiàn)的類(lèi)型,交換機(jī)無(wú)法對(duì)其匹配,便會(huì)將其發(fā)送給控制器;反之,如果出現(xiàn)過(guò),則交換機(jī)可以直接轉(zhuǎn)發(fā)。假設(shè)前一個(gè)過(guò)程經(jīng)過(guò)的時(shí)間為T(mén)1、后一個(gè)過(guò)程為T(mén)2,那么可以通過(guò)收集T1和T2的值,然后對(duì)T1和T2的值進(jìn)行區(qū)分進(jìn)而判斷該網(wǎng)絡(luò)是否為SDN網(wǎng)絡(luò)。SDN Scanner的具體工作流程如圖4所示,其探測(cè)步驟如下:
1) 首先,SDN Scanner構(gòu)造具有不同頭部的數(shù)據(jù)包。每一次將2個(gè)(或更多)特定的數(shù)據(jù)包發(fā)送到目標(biāo)網(wǎng)絡(luò)。
2) 其次,收集每個(gè)數(shù)據(jù)包的響應(yīng)時(shí)間。SDN Scanner判定第1個(gè)數(shù)據(jù)包的響應(yīng)時(shí)間T1,第2個(gè)數(shù)據(jù)包的響應(yīng)時(shí)間為T(mén)2。
3) 然后,SDN Scanner將此次循環(huán)更新,重新構(gòu)造具有不同頭部的數(shù)據(jù)包,重復(fù)前兩步的過(guò)程。
4) 最后,當(dāng)循環(huán)的次數(shù)到達(dá)指定值時(shí),退出掃描。
圖4 SDN Scanner探測(cè)流程
在Shin S等第1次提出SDN網(wǎng)絡(luò)類(lèi)型探測(cè)可行性的基礎(chǔ)上,不久Bifulco R等[3]在真實(shí)的網(wǎng)絡(luò)測(cè)試平臺(tái)上實(shí)施了指紋攻擊。通過(guò)利用2個(gè)特征的信息,即RTT值和交換分組的分組對(duì)分散度,可以非常精確地判斷出SDN交換機(jī)是否與SDN控制器進(jìn)行了交互,從而以極大的概率成功對(duì)SDN網(wǎng)絡(luò)進(jìn)行指紋攻擊。
筆者使用的實(shí)驗(yàn)平臺(tái)如圖5所示。整個(gè)測(cè)試平臺(tái)由3個(gè)NEC PF5240[4]OpenFlow交換機(jī)組成,它們通過(guò)100 Mbit/s數(shù)據(jù)通道連接到數(shù)據(jù)平面。傳統(tǒng)的數(shù)據(jù)中心網(wǎng)絡(luò)通常由3層交換機(jī)組成:接入層、匯聚層和核心層[5]。每個(gè)數(shù)據(jù)包經(jīng)過(guò)數(shù)據(jù)中心時(shí),通常由每一層中的至多1個(gè)交換機(jī)處理,即每個(gè)數(shù)據(jù)包在數(shù)據(jù)中心的網(wǎng)絡(luò)中遍歷(最多)3個(gè)躍點(diǎn)。因此,這3個(gè)交換機(jī)便可以大致模擬在實(shí)際數(shù)據(jù)中心數(shù)據(jù)包的處理過(guò)程。測(cè)試平臺(tái)的交換機(jī)與Floodlight v0.9控制器連接,該控制器在具有6核Intel Xeon L5640 2.26 GHz CPU和24 GB RAM的計(jì)算機(jī)上運(yùn)行。傳統(tǒng)以太網(wǎng)交換機(jī)橋接OpenFlow交換機(jī),然后和控制器進(jìn)行連接。為了模擬控制信道上的實(shí)際網(wǎng)絡(luò)負(fù)載,Bifulco R等將交換機(jī)的控制接口限制為100 Mbit/s。接著,通過(guò)在AMD Athlon雙核處理器3800+機(jī)器上運(yùn)行的防火墻,使用100 Mbit/s鏈路將SDN網(wǎng)絡(luò)連接到Internet。最后,搭建了遍布全球的20個(gè)遠(yuǎn)程客戶(hù)端,使得整個(gè)系統(tǒng)更具有真實(shí)性。
圖5 實(shí)驗(yàn)平臺(tái)結(jié)構(gòu)
通過(guò)部署,Bifulco R等收集到了很多真實(shí)的SDN數(shù)據(jù)信息。結(jié)果表明:通過(guò)利用來(lái)自交換分組的分組對(duì)分散度的信息,對(duì)SDN網(wǎng)絡(luò)的指紋攻擊能極大的概率成功。例如,攻擊者可以正確識(shí)別探測(cè)包是否在3個(gè)交換機(jī)上觸發(fā)規(guī)則安裝,準(zhǔn)確度為98.54%。而且,這種指紋探測(cè)精度僅受到路徑上需要配置的SDN交換機(jī)數(shù)量的輕微影響。因此,盡管搭建的環(huán)境只有3個(gè)OpenFlow交換機(jī),結(jié)果仍具有代表性。
Minjian Zhang等[6]提出了一種細(xì)粒度指紋探測(cè)方法,并沒(méi)有采用先前的兩種粗粒度的方案,具體地說(shuō),并不是簡(jiǎn)單地通過(guò)構(gòu)造數(shù)據(jù)包然后研究網(wǎng)絡(luò)中是否觸發(fā)與控制器的交互來(lái)判斷網(wǎng)絡(luò)類(lèi)型,而是通過(guò)確定SDN中流規(guī)則的匹配域來(lái)進(jìn)行判斷。首先根據(jù)SDN的基本特征,提出了獲取匹配字段信息的方法,并在模擬和物理環(huán)境中進(jìn)行了實(shí)驗(yàn)。
Minjian Zhang等假設(shè)在同一個(gè)SDN網(wǎng)絡(luò)中有2個(gè)主機(jī),一個(gè)主機(jī)作為發(fā)送者向另一個(gè)主機(jī)發(fā)送數(shù)據(jù)包。
1) 接收方接收到數(shù)據(jù)包的情況
① 交換機(jī)已經(jīng)安裝了相應(yīng)的流規(guī)則,因此,報(bào)文成功匹配規(guī)則,交換機(jī)直接轉(zhuǎn)發(fā)該報(bào)文。
② 交換機(jī)未找到匹配項(xiàng),因此它會(huì)將此數(shù)據(jù)包發(fā)送給控制器。控制器分析該數(shù)據(jù)包并在交換機(jī)上安裝相應(yīng)的規(guī)則來(lái)處理此流表。
③ 交換機(jī)未找到相應(yīng)的流規(guī)則,同樣交換機(jī)會(huì)與控制器進(jìn)行交互??刂破髦甘窘粨Q機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)包,而不是下發(fā)相應(yīng)的流表。
在情況②和情況③中,數(shù)據(jù)包從發(fā)送方到接收方的時(shí)間明顯長(zhǎng)于情況①,因?yàn)樵撨^(guò)程觸發(fā)了控制器和交換機(jī)之間的交互。
① 如果流表中沒(méi)有相應(yīng)的規(guī)則,交換機(jī)將要求控制器決定處理該數(shù)據(jù)包。如果控制器未向交換機(jī)提供轉(zhuǎn)發(fā)指令或流規(guī)則,則數(shù)據(jù)包將丟失。
② 交換機(jī)根據(jù)相應(yīng)的規(guī)則丟棄數(shù)據(jù)包。
③ 由于網(wǎng)絡(luò)擁塞或其他偶然原因,數(shù)據(jù)包丟失。
筆者在上述分析的基礎(chǔ)上設(shè)計(jì)了指紋探測(cè)匹配字段的方案。假設(shè)發(fā)送者和接收者在同一網(wǎng)絡(luò)(LAN)上并且能夠正常地相互通信,忽略偶然情況(2-c)。對(duì)于給定的頭字段,以特定的時(shí)間間隔發(fā)送具有相同頭部值的多個(gè)數(shù)據(jù)包。
在接收方接收到所有數(shù)據(jù)包的情況下,通過(guò)分析發(fā)送到接收之間的時(shí)間長(zhǎng)短來(lái)確定該報(bào)頭字段是否是匹配字段。通過(guò)不同時(shí)間之間的差異可以區(qū)分出1)中①~③三種情況,便可以推斷出交換機(jī)對(duì)同一數(shù)據(jù)流的報(bào)文采取了不同的動(dòng)作。所以這個(gè)頭部字段是匹配字段。
在所有數(shù)據(jù)包都無(wú)法到達(dá)接收方的情況下,便可以推斷出交換機(jī)對(duì)給定字段中具有不同值的不同流采取了不同的操作。所以,該頭部字段是匹配字段,因?yàn)樵诎l(fā)送這組測(cè)試數(shù)據(jù)之前,這對(duì)主機(jī)是可以相互通信的。
Shin S等[2]的研究暗示了指紋識(shí)別SDN網(wǎng)絡(luò)的可行性。然而,他們的研究并不是基于真實(shí)的網(wǎng)絡(luò)世界進(jìn)行評(píng)估的,也沒(méi)有提供任何量化指紋探測(cè)精確度的指標(biāo)。就連作者自己也在論文當(dāng)中提到:“我們提供了這種攻擊的第一次可行性研究,并希望激發(fā)SDN安全領(lǐng)域的進(jìn)一步研究?!?/p>
在Shin S等[2]的方案下,Bifulco R等在現(xiàn)實(shí)世界的測(cè)試平臺(tái)上實(shí)施了這種探測(cè),而且精度也達(dá)到了98%。但是,他們的方法需要在每個(gè)測(cè)試流程之前清除交換機(jī)中的流表,這在真正的實(shí)踐中,攻擊者往往很難做到。而且他們的工作也沒(méi)有考慮到流規(guī)則失效、優(yōu)先級(jí)不同的處理情況。所以他們的工作往往是一種驗(yàn)證。
鹽脅迫會(huì)抑制植物的生長(zhǎng)發(fā)育。當(dāng)土壤含鹽量過(guò)高時(shí),會(huì)嚴(yán)重影響冰葉日中花的生理生化反應(yīng),造成其減產(chǎn),甚至導(dǎo)致植株死亡。
Minjian Zhang等[6]的研究又更進(jìn)了一步,實(shí)現(xiàn)了一種細(xì)粒度指紋攻擊方法。通過(guò)對(duì)流表的匹配字段進(jìn)行探測(cè)來(lái)確定某網(wǎng)絡(luò)是否為SDN網(wǎng)絡(luò)。但是其方法也有一定的局限性,作者僅僅使用了1個(gè)或2個(gè)OpenFlow交換機(jī)進(jìn)行實(shí)驗(yàn)。但是真實(shí)的網(wǎng)絡(luò)中拓?fù)浣Y(jié)構(gòu)并不是這么簡(jiǎn)單,因此真正應(yīng)用到現(xiàn)實(shí)網(wǎng)絡(luò)中還需要進(jìn)一步的工作。
SDN網(wǎng)絡(luò)中,流規(guī)則是最關(guān)鍵的部分,它確保網(wǎng)絡(luò)單元在任何網(wǎng)絡(luò)入口以適當(dāng)細(xì)粒度控制流量和部署策略,網(wǎng)絡(luò)策略的實(shí)現(xiàn)細(xì)節(jié)同樣會(huì)在流規(guī)則中體現(xiàn)。因此,若能探測(cè)并推斷網(wǎng)絡(luò)中節(jié)點(diǎn)間的流規(guī)則,就可制定出有針對(duì)性的攻擊策略。
針對(duì)流表規(guī)則探測(cè),Po-Ching Lin等[7]提出一種“INSPIRE”(INferring SDN by probIng and rule extraction)方法來(lái)發(fā)現(xiàn)SDN的流規(guī)則,這種方法的設(shè)計(jì)思路來(lái)源于防火墻規(guī)則探測(cè)[8-9]。
INSPIRE方法包括4個(gè)步驟:
1) 時(shí)延值的獲取。獲取方式是通過(guò)探測(cè)主機(jī)主動(dòng)發(fā)送一個(gè)探測(cè)包給目的主機(jī)。其中,探測(cè)包的源IP地址是虛假的,但是與目的IP地址共存于同一個(gè)子網(wǎng)中。同時(shí)探測(cè)包的有效載荷中需要包含一個(gè)發(fā)送的時(shí)間戳,這樣時(shí)間差就等于接收的時(shí)間減去有效載荷中的發(fā)送時(shí)間。而流表的下發(fā)方式有兩種:主動(dòng)與被動(dòng)兩種模式。主動(dòng)式的數(shù)據(jù)包的處理時(shí)間將會(huì)比被動(dòng)式的更短,因?yàn)樵谥鲃?dòng)模式下控制器已經(jīng)提前下發(fā)了對(duì)應(yīng)流表。通過(guò)這個(gè)時(shí)間差可以幫助推斷一條流規(guī)則是否存儲(chǔ)在交換機(jī)流表中。
2) 構(gòu)建探測(cè)包。探測(cè)包的構(gòu)造方法來(lái)源于傳統(tǒng)網(wǎng)絡(luò)中防火墻規(guī)則探測(cè)的構(gòu)造數(shù)據(jù)包的方法,作用是通過(guò)構(gòu)造少量的探測(cè)包就能達(dá)到較高的探測(cè)精度。文中,作者選擇使用線掃描法。這種方法能在一個(gè)大的區(qū)塊中快速發(fā)現(xiàn)規(guī)則,將會(huì)產(chǎn)生比分裂合并法更多的探測(cè)包,減少了數(shù)據(jù)集中的因網(wǎng)絡(luò)擁塞而產(chǎn)生的異常值。
3) 聚類(lèi)和分類(lèi)。在探測(cè)過(guò)程完成后,INSPIRE將會(huì)對(duì)探測(cè)包進(jìn)行分類(lèi)。對(duì)于捕獲到的報(bào)文,分為主動(dòng)式和被動(dòng)式兩類(lèi),基于接收時(shí)間和發(fā)送時(shí)間的差值即時(shí)延值來(lái)進(jìn)行K-Means聚類(lèi)。如果該探測(cè)路徑上有n個(gè)交換機(jī),后者將會(huì)被劃分為n個(gè)子類(lèi)。每個(gè)交換機(jī)都會(huì)觸發(fā)Packet-in,所以總時(shí)延取決于多少個(gè)交換機(jī)會(huì)與控制機(jī)進(jìn)行交互。
4) 流規(guī)則的推測(cè)。INSPIRE使用Apriori算法來(lái)推斷出流規(guī)則。該算法是一種挖掘關(guān)聯(lián)規(guī)則的頻繁項(xiàng)集算法,它的主要任務(wù)就是設(shè)法發(fā)現(xiàn)事物之間的內(nèi)在聯(lián)系。該算法統(tǒng)計(jì)頭部字段的出現(xiàn)頻率的同時(shí)搜尋高頻度出現(xiàn)的頭部字段的組合來(lái)當(dāng)做流規(guī)則的一部分。該算法在字段組合的出現(xiàn)概率低于預(yù)先設(shè)定的值或者沒(méi)有更多的字段可以組合時(shí),就會(huì)退出。
對(duì)于OpenFlow流表具體字段的探測(cè)上,Stefan Achleitner等[10]提出了一種方法,并基于此方法設(shè)計(jì)了一個(gè)開(kāi)源的工具SDNMap。下面介紹其中部分字段的探測(cè)方法。
3.2.1 MAC地址的探測(cè)
SDNMap會(huì)先產(chǎn)生一個(gè)探測(cè)包,使用TCP報(bào)文或者ICMP報(bào)文,其中源MAC地址頭部是虛假的。
在目的主機(jī)接收到探測(cè)報(bào)文后,會(huì)先尋找源IP地址對(duì)應(yīng)的MAC地址,如果查詢(xún)到,則在其本地緩存中生成帶有MAC目標(biāo)地址的探測(cè)答復(fù)消息,并發(fā)送回源主機(jī)。反之,便會(huì)發(fā)送一個(gè)ARP請(qǐng)求報(bào)文來(lái)解析收到的源IP地址。如果收到回復(fù),目的主機(jī)會(huì)更新其本地ARP緩存中的條目,并將探測(cè)應(yīng)答包發(fā)送回源主機(jī)。
在收到探測(cè)應(yīng)答或ARP請(qǐng)求數(shù)據(jù)包后,掃描器就可以推測(cè)出MAC源地址字段并未用于將探測(cè)數(shù)據(jù)包發(fā)送到目標(biāo)主機(jī)。如幾次沒(méi)收到,則重復(fù)該過(guò)程。如多次沒(méi)有收到,則推出源MAC地址被用作將數(shù)據(jù)包傳送到目標(biāo)主機(jī)的匹配標(biāo)準(zhǔn)。
如圖6中的消息3、4和5所示,首先向目標(biāo)主機(jī)發(fā)送應(yīng)答消息,該消息將其探測(cè)主機(jī)的IP地址的高速緩存條目更新為虛構(gòu)的MAC地址。之后,發(fā)送一個(gè)正確的探測(cè)請(qǐng)求數(shù)據(jù)包到目的地。到達(dá)后,目的主機(jī)會(huì)查找與接收到的IP源地址對(duì)應(yīng)的MAC地址。目的主機(jī)會(huì)將探測(cè)回復(fù)消息發(fā)送給請(qǐng)求者。如果在SDNMap主機(jī)處接收到探測(cè)回復(fù)數(shù)據(jù)包,得出結(jié)論:在傳輸規(guī)則匹配過(guò)程中,目的MAC地址未被用作傳送數(shù)據(jù)包的標(biāo)準(zhǔn)。如在定義的超時(shí)時(shí)限后沒(méi)有收到回復(fù)數(shù)據(jù)包,SDNMap會(huì)斷定流規(guī)則使用了正確的MAC目的地址標(biāo)準(zhǔn)來(lái)傳輸數(shù)據(jù)包。
3.2.2 IP地址的探測(cè)
IP地址的探測(cè)過(guò)程如圖7所示。首先探測(cè)主機(jī)會(huì)發(fā)送一個(gè)探測(cè)報(bào)文,其中IP源地址是虛假的。收到探測(cè)報(bào)文后,目的主機(jī)無(wú)法查找到該IP地址對(duì)應(yīng)的MAC地址,于是發(fā)送一個(gè)ARP請(qǐng)求報(bào)文給探測(cè)主機(jī)。若幾次未收到ARP請(qǐng)求數(shù)據(jù)包,則重復(fù)該過(guò)程。若仍沒(méi)有收到,則得出結(jié)論:流規(guī)則將匹配特定IP源地址的數(shù)據(jù)包,具有虛假I(mǎi)P源地址的數(shù)據(jù)包將不會(huì)傳送到目的地主機(jī)。
圖6 探測(cè)MAC地址的步驟
圖7 探測(cè)IP地址的步驟
在接收到上述過(guò)程中的ARP請(qǐng)求報(bào)文后,SDNMap將發(fā)送一個(gè)ARP應(yīng)答消息,告訴目的主機(jī)該虛假I(mǎi)P地址對(duì)應(yīng)的MAC地址。這時(shí)會(huì)觸發(fā)目的主機(jī)生成一個(gè)回復(fù)數(shù)據(jù)包,該數(shù)據(jù)包信息包括探測(cè)主機(jī)虛假的IP地址和目的主機(jī)的IP地址,這樣就能夠出探測(cè)出目的主機(jī)的IP地址。
如果接收到1個(gè)探測(cè)回復(fù)數(shù)據(jù)包,則它會(huì)得出結(jié)論:IP目的地址不被用作流規(guī)則匹配域的一部分。如果在多次嘗試后沒(méi)有收到回復(fù)數(shù)據(jù)包,SDNMap會(huì)得出結(jié)論,匹配過(guò)程需要正確的IP目的地址,控制器會(huì)依據(jù)該字段執(zhí)行“轉(zhuǎn)發(fā)” “丟棄”還是其他動(dòng)作。
3.2.3 協(xié)議和端口的探測(cè)
SDNMap根據(jù)不同協(xié)議的特點(diǎn)來(lái)對(duì)各種協(xié)議類(lèi)型的報(bào)文是否會(huì)被轉(zhuǎn)發(fā)進(jìn)行判別。確定ARP報(bào)文是否會(huì)被轉(zhuǎn)發(fā),通過(guò)發(fā)送一個(gè)ARP請(qǐng)求的數(shù)據(jù)包來(lái)判斷。確定ICMP報(bào)文是否會(huì)被轉(zhuǎn)發(fā),通過(guò)發(fā)送一個(gè)ICMP請(qǐng)求報(bào)文,看是否收到ICMP應(yīng)答報(bào)文來(lái)進(jìn)行判斷。探測(cè)TCP,UDP數(shù)據(jù)包和其端口的做法是:探測(cè)方發(fā)送一個(gè)UDP數(shù)據(jù)包至目的主機(jī)的指定端口,如果隨后收到ICMP端口不可達(dá)的錯(cuò)誤消息,就表明該數(shù)據(jù)包是UDP報(bào)文但是該端口是關(guān)閉的;否則,表明該端口是開(kāi)放的。
INSPIRE方法的缺點(diǎn)是探測(cè)的信息不夠全面,能夠探測(cè)出的流表字段較少。而且,局限性較大,因?yàn)樗羌俣ㄌ綔y(cè)主機(jī)和目的主機(jī)的權(quán)限都能獲取到。這在實(shí)際探測(cè)或者攻擊環(huán)境中很難做到。該方案的優(yōu)點(diǎn)是推理的準(zhǔn)確性很高,原作者經(jīng)過(guò)仿真測(cè)試,結(jié)果表明準(zhǔn)確率高達(dá)98.41%。
SDNMap方法的優(yōu)點(diǎn)是可以推測(cè)出流規(guī)則具體的字段,比如MAC地址、IP地址等,而且相比于INSPIRE方法,它并不需要同時(shí)獲取探測(cè)主機(jī)和目的主機(jī)的權(quán)限,只需要能夠獲取到探測(cè)主機(jī)權(quán)限即可,而且精度也非常高。但是其也存在一定的缺點(diǎn):首先,SDNMap探測(cè)開(kāi)銷(xiāo)一般較大,是通過(guò)暴力方式構(gòu)造探測(cè)包,這樣導(dǎo)致整個(gè)工具包使用效率較低;其次,SDNMap探測(cè)的信息不夠全面和精細(xì),探測(cè)流表的字段數(shù)也較少;最后,該方法無(wú)法保證探測(cè)包響應(yīng)能夠順利到達(dá)源主機(jī),具有一定的局限性。
SDN/OpenFlow交換機(jī)的流表容量是一個(gè)容易被忽略的網(wǎng)絡(luò)參數(shù),然而流表容量在SDN網(wǎng)絡(luò)安全問(wèn)題中也是重要的一環(huán)。流表容量問(wèn)題已在許多以前的工作中提出過(guò)[11-13],他們都指出了交換機(jī)流表內(nèi)存的限制以及潛在的可擴(kuò)展性和安全性問(wèn)題。
由于硬件和軟件的限制,SDN網(wǎng)絡(luò)的OpenFlow交換機(jī)一般都具有流表容量的限制。具體而言,大多數(shù)商用SDN/OpenFlow交換機(jī)的流表容量有限,從數(shù)百到數(shù)千[14]。當(dāng)流表中的流表項(xiàng)數(shù)目達(dá)到上限,交換機(jī)和控制器之間就會(huì)進(jìn)行交互,對(duì)流表進(jìn)行相應(yīng)操作來(lái)維持SDN網(wǎng)絡(luò)交換機(jī)的正常工作,而這個(gè)事件也可以被用戶(hù)捕捉到,通過(guò)觀察該事件,用戶(hù)可以推斷交換機(jī)的流表容量和流表使用情況。J.Leng等[15]提出了一種針對(duì)SDN/OpenFlow網(wǎng)絡(luò)的推理攻擊模型,這是SDN領(lǐng)域的首次針對(duì)流表容量的探測(cè)。
在傳統(tǒng)網(wǎng)絡(luò)中,交換機(jī)和路由器是自治的,這意味著可以在本地維護(hù)其路由表而無(wú)需與外部設(shè)備交互。但由于SDN/OpenFlow的分離性質(zhì),維護(hù)交換機(jī)流表需要交換機(jī)和控制器之間的頻繁交互,使攻擊者可以利用感知的性能變化來(lái)推斷SDN網(wǎng)絡(luò)的內(nèi)部狀態(tài)。
SDN交換機(jī)上的流表匹配過(guò)程如下:① 首先查找流表以搜索與數(shù)據(jù)包匹配的流表項(xiàng),若存在直接執(zhí)行該流表項(xiàng)的動(dòng)作;② 若不存在相匹配的流表項(xiàng),則與控制器交互,下發(fā)新流表;③ 在插入新流表之前,首先檢查流表狀態(tài)是否有足夠的空間。當(dāng)流表已滿(mǎn),就需要控制器和交換機(jī)之間的額外交互來(lái)移除某些現(xiàn)有的流條目以為新生成的流表項(xiàng)騰出空間。這3種情況中,當(dāng)流表中存在匹配時(shí),處理時(shí)間最短; 當(dāng)流表中沒(méi)有匹配且流表未滿(mǎn)時(shí),由于交互下發(fā)新流表規(guī)則,處理時(shí)間會(huì)更長(zhǎng); 當(dāng)流表中沒(méi)有匹配且流表滿(mǎn)時(shí),處理時(shí)間最長(zhǎng),因?yàn)楸仨氼~外再執(zhí)行流表替換操作。因此,作為直接受處理時(shí)間影響的網(wǎng)絡(luò)參數(shù),探測(cè)包的RTT可以用作流表狀態(tài)和流表項(xiàng)狀態(tài)的指示符。
首先需要確定RTT的閾值,如圖8所示。圖中的2個(gè)子圖表示2個(gè)協(xié)作線程,x軸表示數(shù)據(jù)包,y軸表示每個(gè)探測(cè)包的RTT。首先,在上層線程中,生成一個(gè)包含特定源目IP,源目MAC的數(shù)據(jù)包,稱(chēng)之為Pkt1。將Pkt1發(fā)送到目標(biāo)OpenFlow交換機(jī)并將相應(yīng)的RTT記錄為T(mén)2。由于Pkt1是一個(gè)新的數(shù)據(jù)包,OpenFlow交換機(jī)中沒(méi)有相應(yīng)的流表項(xiàng)。在時(shí)間跨度TS1之后,再次將Pkt1發(fā)送到目標(biāo)OpenFlow交換機(jī)并將相應(yīng)的RTT記錄為T(mén)1。如果正確選擇TS1(流表沒(méi)有因超時(shí)而被刪除),則剛下發(fā)的與Pkt1匹配的流表項(xiàng)應(yīng)該仍然存在于OpenFlow交換機(jī)中。接著,在下層線程中,不斷地生成Pkt2、Pkt3…Pktn數(shù)據(jù)包,每個(gè)數(shù)據(jù)包都有不同的源目IP、MAC組合,并以TS2的時(shí)間間隔發(fā)送到目標(biāo)OpenFlow交換機(jī)。剛開(kāi)始OpenFlow交換機(jī)中流表還有存儲(chǔ)空間,因此記錄的RTT將與T2或T1大致相同。繼續(xù)生成和發(fā)送數(shù)據(jù)包,直到觀察到RTT的突然增加,這表明流表已滿(mǎn)。然后在上線程中,再次發(fā)送Pkt1并將RTT記錄為T(mén)3。為了提高精度,可以重復(fù)這個(gè)過(guò)程,并使用T1、T2和T3的平均值作為最終結(jié)果。
圖8 不同流表狀態(tài)的RTT測(cè)量
得到RTT的閾值后,通過(guò)向交換機(jī)發(fā)送探測(cè)數(shù)據(jù)包,就可以依據(jù)T1、T2和T3這3個(gè)檢測(cè)標(biāo)志與得到的RTT進(jìn)行比較,進(jìn)而分析流表狀態(tài):當(dāng)測(cè)量的RTT在T1附近時(shí),可以推斷流表中有相應(yīng)的流表項(xiàng); 當(dāng)測(cè)量的RTT在T2左右時(shí),可以推斷流表中沒(méi)有相應(yīng)的流表項(xiàng),流表不滿(mǎn); 當(dāng)測(cè)量的RTT在T3附近時(shí),可以推斷出流表中沒(méi)有相應(yīng)的流條目,流表已滿(mǎn)。
推斷流表容量的關(guān)鍵就在于流表變滿(mǎn)時(shí)進(jìn)行的流表替換操作,流表替換算法決定了SDN網(wǎng)絡(luò)的內(nèi)部狀態(tài)轉(zhuǎn)換,因此它是推理模型的重要組成部分。流表類(lèi)似操作系統(tǒng)和Web代理服務(wù)器中的“緩存”,所以作者使用的流表替換算法是一些常見(jiàn)的緩存替代算法的變體,比如FIFO[16],LRU[17]。
4.2.1 FIFO推測(cè)算法
FIFO算法的推測(cè)過(guò)程如下:通過(guò)生成并發(fā)送大量的探測(cè)數(shù)據(jù)包,每個(gè)探測(cè)包源目IP、MAC都不同,新插入的匹配流表項(xiàng)將其他用戶(hù)的流表項(xiàng)推出流表。結(jié)合記錄的插入流表項(xiàng)數(shù)目,就可以推斷流表容量和流表使用情況。流表狀態(tài)轉(zhuǎn)換的過(guò)程如圖9所示。
圖9 FIFO推斷原則
圖9中:A表示流表在實(shí)驗(yàn)開(kāi)始之前,OpenFlow交換機(jī)中其他用戶(hù)的流表項(xiàng)數(shù)目;B表示開(kāi)始發(fā)送生成的數(shù)據(jù)包,新的流表項(xiàng)被插入流表;灰色矩形表示新插入的流表項(xiàng),新插入的流表項(xiàng)不斷將其他用戶(hù)的流表項(xiàng)推到FIFO隊(duì)列的前面,在實(shí)驗(yàn)中,應(yīng)當(dāng)記錄生成的數(shù)據(jù)包,包括它們的屬性和序列號(hào);C表示流表已經(jīng)變滿(mǎn),此時(shí),新下發(fā)的流表和其他用戶(hù)的流表項(xiàng)相加,剛好填滿(mǎn)整個(gè)流表;D表示檢測(cè)到插入的1個(gè)流表項(xiàng)已被刪除,這意味著現(xiàn)在流表中都是剛剛下發(fā)的流表項(xiàng),沒(méi)有來(lái)自其他用戶(hù)的任何流表項(xiàng)。在時(shí)間點(diǎn)C和D分別記錄發(fā)送的探測(cè)包數(shù)量:m和n,則流表容量C=n。A時(shí)刻即剛開(kāi)始流表中的流表項(xiàng)數(shù)目為n-m,則流表使用率為(n-m)/n。
推測(cè)算法的主要誤差來(lái)自其他用戶(hù)在插入過(guò)程中插入的流表項(xiàng)。作者的假設(shè)是:流表項(xiàng)插入速度足夠快,以便在實(shí)驗(yàn)期間,新插入的流表項(xiàng)全部來(lái)自作者的操作。但這只是理想模型,不是事實(shí)。忽略其他用戶(hù)插入的可能的流表項(xiàng)將會(huì)使作者推測(cè)的流表容量略小于實(shí)際值。
4.2.2 LRU推測(cè)算法
LRU算法的實(shí)驗(yàn)原理與FIFO算法的實(shí)驗(yàn)原理有一些共同點(diǎn),因?yàn)樵谶@兩種情況下都可以使用某些操作保持流表項(xiàng)保持在緩存隊(duì)列的后面。但是,流表項(xiàng)維護(hù)過(guò)程存在差異。
FIFO算法的性質(zhì)確保流表項(xiàng)的位置僅取決于插入它們的時(shí)間。與后面插入的流條目相比,前面插入的流條目肯定更接近緩存隊(duì)列的前端。但是在LRU算法中,流表項(xiàng)的位置不僅取決于插入它們的時(shí)間,而且還取決于最后訪問(wèn)它們的時(shí)間。為了使流表項(xiàng)保持在緩存隊(duì)列的后面,需要不斷地訪問(wèn)先前插入的流表項(xiàng)。在維護(hù)過(guò)程中,每次插入一個(gè)新的流條目時(shí),都需要訪問(wèn)所有先前插入的流條目一次,以將它們“提升”到緩存隊(duì)列的后面。作者將這種過(guò)程稱(chēng)之為“滾動(dòng)”維護(hù)過(guò)程。
LRU算法的可行性和誤差分析與FIFO算法相似。由于忽略了其他用戶(hù)在實(shí)驗(yàn)過(guò)程中插入的流項(xiàng),所以推斷出的流表使用和推斷出的流表容量都略小于實(shí)際值。
本文通過(guò)對(duì)SDN網(wǎng)絡(luò)類(lèi)型探測(cè)、SDN流表規(guī)則探測(cè)、SDN流表容量探測(cè)進(jìn)行詳細(xì)的技術(shù)綜述,來(lái)對(duì)目前的SDN探測(cè)技術(shù)做一個(gè)整理。面向SDN網(wǎng)絡(luò)的探測(cè)技術(shù)才剛剛起步,之前的研究做了有益的探索,但仍然存在部分局限性,如何打破上述局限性,高效、準(zhǔn)確、精細(xì)地探測(cè)SDN網(wǎng)絡(luò)是未來(lái)的一個(gè)重要的研究方向。