劉世嘉,王 勇,+,劉玉明
(1.桂林電子科技大學(xué) 計(jì)算機(jī)與信息安全學(xué)院,廣西 桂林 541004;2.桂林電子科技大學(xué) 廣西云計(jì)算與復(fù)雜系統(tǒng)高校重點(diǎn)實(shí)驗(yàn)室,廣西 桂林 541004;3.桂林電子科技大學(xué) 廣西云計(jì)算與大數(shù)據(jù)協(xié)同創(chuàng)新中心,廣西 桂林 541004)
近年來(lái)云計(jì)算技術(shù)受到各大廠商追捧,其高速發(fā)展的背后,安全問(wèn)題日顯嚴(yán)重[1]。傳統(tǒng)數(shù)據(jù)中心多為南北向流量,而隨著云計(jì)算技術(shù)的到來(lái),云存儲(chǔ)、并行計(jì)算等需要大規(guī)模集群協(xié)同的業(yè)務(wù)產(chǎn)生了大量的東西向流量,推動(dòng)了南北向流量往云平臺(tái)內(nèi)部虛擬機(jī)間產(chǎn)生的東西向流量轉(zhuǎn)變[2]。傳統(tǒng)安全設(shè)備和流量采集方法[3]對(duì)東西向流量的安全防護(hù)無(wú)能為力,因此東西向流量的接觸盲區(qū),無(wú)疑為云安全態(tài)勢(shì)分析提出了新的難題。為了實(shí)現(xiàn)云環(huán)境中東西向流量的可視可控,近年來(lái)相繼出現(xiàn)了多種流量捕獲方案[4],而現(xiàn)有的絕大數(shù)方案都是以SDN流量牽引[5]為基礎(chǔ),通過(guò)SDN將所有虛擬機(jī)產(chǎn)生的東西向流量牽引進(jìn)軟件安全檢測(cè)系統(tǒng)進(jìn)行檢測(cè)[6],從而實(shí)現(xiàn)東西向流量的監(jiān)控。但是,軟件防護(hù)系統(tǒng)的性能受制于宿主物理機(jī)性能,所有東西向流量的匯入檢測(cè)會(huì)帶來(lái)巨大的負(fù)載,可能會(huì)造成單點(diǎn)失效的問(wèn)題,導(dǎo)致流量無(wú)法轉(zhuǎn)發(fā),用戶業(yè)務(wù)開(kāi)展受到影響?;谏鲜龅膯?wèn)題,本文提出一種的高效的流量采集與檢測(cè)方法來(lái)監(jiān)控流量,通過(guò)SDN控制器對(duì)流量進(jìn)行自適應(yīng)采樣,避免因密集的固定周期采樣給控制器帶來(lái)額外負(fù)載,之后提取出特征信息,經(jīng)常用分類算法的類別劃分處理后,再下發(fā)不同級(jí)別的流表策略,先快速過(guò)濾掉可被識(shí)別的正常流量,牽引需要檢測(cè)的東西向流量進(jìn)入軟件安全檢測(cè)系統(tǒng),以此減小需要捕獲的流量的規(guī)模。在既不影響控制器性能,也不影響檢測(cè)率的同時(shí),避免占用過(guò)多流表項(xiàng),有效降低了帶寬的占用,減小了軟件安全檢測(cè)系統(tǒng)的負(fù)載。
為了能夠獲取東西向流量,Giotis K等[7]提出一種將sFlow與Openflow交換機(jī)結(jié)合的方法來(lái)提升異常檢測(cè)的效率和擴(kuò)展性,該方法分為3個(gè)階段:流量捕獲、異常檢測(cè)、攻擊緩解,其中流量捕獲部分采用了SDN流表統(tǒng)計(jì)信息采集與sFlow插件主動(dòng)采集結(jié)合的方法,保證了處理效率。但是,在云環(huán)境多租戶應(yīng)用場(chǎng)景下,sFlow無(wú)法識(shí)別不同租戶產(chǎn)生的相同地址且不易大規(guī)模部署。Peng H等[8]利用SDN進(jìn)行流量采集,方法是固定10 s輪詢周期對(duì)交換機(jī)收取流表統(tǒng)計(jì)信息,提取出特征以構(gòu)建多維流特征向量交由DPTCM-KNN算法進(jìn)行異常流量的分類檢測(cè)。該方案使用的固定輪詢周期,在周期設(shè)定的長(zhǎng)短上會(huì)對(duì)測(cè)量精度與設(shè)備負(fù)載產(chǎn)生影響,需要平衡三者的關(guān)系,否則會(huì)加重交換機(jī)的負(fù)載。Zanna P等[9]提出一種在控制器集成IDS模塊的方法,利用控制器下發(fā)流表的方式動(dòng)態(tài)阻止入侵。該方案通過(guò)Packet In消息上送所有待檢測(cè)流量至SDN控制器,當(dāng)流量規(guī)模增大時(shí),會(huì)加重控制器負(fù)載,容易造成單點(diǎn)失效。Ha T等[10]提出一種利用SDN將流量鏡像到多臺(tái)IDS中進(jìn)行檢測(cè)的方法,將同類型攻擊統(tǒng)計(jì)成組后鏡像到同一臺(tái)IDS,借此提升檢測(cè)率并負(fù)載均衡被檢測(cè)流量。該方案的流量采集仍然是先匯集到一臺(tái)交換機(jī)后再進(jìn)行分發(fā)檢測(cè),且方案在傳統(tǒng)三層網(wǎng)絡(luò)架構(gòu)下實(shí)施,云環(huán)境的多計(jì)算節(jié)點(diǎn)網(wǎng)絡(luò)架構(gòu)難以依此進(jìn)行部署。池亞平等[11]提出一種IDS與控制器聯(lián)動(dòng)的入侵防御方案,通過(guò)將所有流量重定向到Snort進(jìn)行檢測(cè),在檢測(cè)到入侵后通過(guò)控制器下發(fā)策略阻止入侵。該方案Snort部署于計(jì)算節(jié)點(diǎn)上,所有流量的匯入會(huì)增加負(fù)載,影響計(jì)算節(jié)點(diǎn)性能,同時(shí)也會(huì)對(duì)其上的虛擬機(jī)性能造成影響,并且會(huì)產(chǎn)生大量過(guò)期的重定向流表項(xiàng)。邵國(guó)林等[12]利用OpenFlow技術(shù)將所有虛擬機(jī)流量重定向至外部IDS檢測(cè),檢測(cè)完成后需要將合規(guī)流量重新注入。該方案因需要將流量在IDS進(jìn)行二次轉(zhuǎn)發(fā),當(dāng)流量規(guī)模增大時(shí),IDS的轉(zhuǎn)發(fā)性能成為瓶頸,會(huì)造成單點(diǎn)失效,影響正常業(yè)務(wù)流量的轉(zhuǎn)發(fā)。
上述方法雖然都將SDN技術(shù)運(yùn)用到流量的捕獲中,但多數(shù)是欠考慮地牽引所有流量到軟件防護(hù)/檢測(cè)系統(tǒng),因其工作重點(diǎn)在入侵檢測(cè)上,并沒(méi)有考慮到云環(huán)境中產(chǎn)生的大規(guī)模流量對(duì)其負(fù)載產(chǎn)生的影響。為此,本文設(shè)計(jì)的方案提出通過(guò)自適應(yīng)流量采樣并分級(jí)別預(yù)處理的方法,有效緩解軟件檢測(cè)系統(tǒng)的負(fù)載,降低安全控制信道的占用和對(duì)控制器性能的影響。
本文提出的基于SDN的高效流量監(jiān)控方案由3個(gè)主要模塊組成:一是自適應(yīng)流量采樣模塊,提供可根據(jù)各條流的帶寬占用情況,動(dòng)態(tài)調(diào)整采樣頻率的功能;二是包處理模塊,提供對(duì)采樣來(lái)的流量提取特征信息并轉(zhuǎn)存至通用存儲(chǔ)識(shí)別模塊待檢測(cè)分類的功能;三是策略響應(yīng)模塊,提供分級(jí)別響應(yīng)不同流表策略對(duì)流量進(jìn)行具體牽引控制的功能。方案的總體架構(gòu)如圖1所示。
圖1 本文設(shè)計(jì)的方案總體架構(gòu)
為了實(shí)現(xiàn)對(duì)流量的后續(xù)識(shí)別處理,首先需要通過(guò)OpenFlow交換機(jī)將流量上送至控制器,也即對(duì)流量進(jìn)行采樣。通過(guò)觸發(fā)Packet-In消息,OpenFlow交換機(jī)可以將指定流量封裝后上送至RYU控制器處理,而觸發(fā)Packet-In消息的方法分為兩種:匹配到流表項(xiàng)中的行動(dòng)主動(dòng)上送;不存在與流表項(xiàng)一致的條目被動(dòng)上送。需要注意的是,上送控制器的過(guò)程需要占用交換機(jī)與控制器間的安全信道帶寬。目前,控制器多以固定頻率的方式進(jìn)行輪詢以采集交換機(jī)的流量統(tǒng)計(jì)信息,高頻率的輪詢能夠提升流量統(tǒng)計(jì)信息的精度,但也會(huì)擠占過(guò)多交換機(jī)與控制器間的安全信道帶寬,同時(shí)也會(huì)給控制器造成過(guò)大負(fù)載。因此,需要一個(gè)合適的方案來(lái)平衡采樣精度與性能負(fù)載間的關(guān)系。
本文設(shè)計(jì)的方案的自適應(yīng)流量采集模塊,通過(guò)動(dòng)態(tài)操作FlowMod構(gòu)造流表的hard_timeout參數(shù),使流表在到達(dá)指定的時(shí)間后實(shí)現(xiàn)超時(shí)自動(dòng)刪除,從而讓該條流的后續(xù)流量在沒(méi)有下發(fā)新的流表前觸發(fā)流表項(xiàng)中的被動(dòng)Packet-In消息,將流量封裝后上送至控制器,實(shí)現(xiàn)流量的采樣操作。為了平衡采樣精度與性能負(fù)載之間的關(guān)系,還需要通過(guò)FlowMod為流表設(shè)置FlowRemoved標(biāo)記,該標(biāo)記在每條流表超時(shí)刪除后能夠上報(bào)其持續(xù)時(shí)間內(nèi)的流量統(tǒng)計(jì)信息,根據(jù)回收各條流表超時(shí)后的統(tǒng)計(jì)信息計(jì)算出其持續(xù)時(shí)間內(nèi)的帶寬占用情況,以此動(dòng)態(tài)規(guī)劃下一次的hard_timeout超時(shí)時(shí)間。當(dāng)帶寬占用小時(shí),通過(guò)降低超時(shí)時(shí)間提高采樣的頻率保證精度,反之則增加超時(shí)時(shí)間減小采樣頻率降低性能負(fù)載。
流表hard_timeout的超時(shí)時(shí)間(T)的計(jì)算過(guò)程如式1所示
T=(byte_count/duration_sec)*τ+
(1)
其中,byte_count為流表存活期間匹配的流量大小、duration_sec為流表存活時(shí)間,兩者通過(guò)回收的流表統(tǒng)計(jì)信息中獲取;τ為在30 s的時(shí)間區(qū)間內(nèi)劃分出的時(shí)間窗口間隔;為 [1,2,…,τ] 上等概率取值的隨機(jī)變量,引入該變量可以避免因超時(shí)時(shí)間相同而在某一相同時(shí)刻出現(xiàn)峰值流量增加控制器負(fù)載,而造成控制器單點(diǎn)失效的情況。在計(jì)算流表超時(shí)時(shí)間時(shí),取10 Mbps~100 Mbps的帶寬范圍,τ取 3 s 為間隔進(jìn)行實(shí)驗(yàn),在本文的實(shí)驗(yàn)中表現(xiàn)較好。由上述設(shè)計(jì)實(shí)現(xiàn)的偽代碼見(jiàn)表1。
包處理模塊的作用是對(duì)前一步采集的流量進(jìn)行解析并
表1 自適應(yīng)流量采樣算法
提取特征信息轉(zhuǎn)存后待分析,經(jīng)過(guò)Packet_In消息封裝后的數(shù)據(jù)包到達(dá)RYU控制器,由Packet_In消息處理模塊進(jìn)行解包,通過(guò)引入隊(duì)列操作將獲得的數(shù)據(jù)包依次送入包處理模塊,以此緩解當(dāng)控制器遇到峰值負(fù)載而造成丟包的問(wèn)題。
包處理模塊通過(guò)get_protocols方法對(duì)數(shù)據(jù)包進(jìn)行層層解析,從數(shù)據(jù)包中可獲得的字段見(jiàn)表2,將這些信息連同時(shí)間戳按不同數(shù)據(jù)包組織成一一對(duì)應(yīng)的鍵值對(duì)存入特征字典,之后轉(zhuǎn)存至通用存儲(chǔ)識(shí)別模塊的Redis內(nèi)存數(shù)據(jù)庫(kù)待后續(xù)分類,此處根據(jù)存儲(chǔ)需求,選用了Redis常用數(shù)據(jù)存儲(chǔ)類型中的隊(duì)列類型,通過(guò)使用PUSH、POP等操作可以快速的將任務(wù)按FIFO順序依次進(jìn)行出入隊(duì)列操作。
表2 數(shù)據(jù)包提取的字段
將所有由包處理模塊組織好的特征字典依次存入Redis隊(duì)列后,可方便地提供兼容接口被常用檢測(cè)分類方法如Snort、AC自動(dòng)機(jī)、DFA算法等提取檢測(cè)過(guò)濾部分威脅低的正常流量,本文中利用建立的白名單規(guī)則進(jìn)行快速分類,經(jīng)分類后再分別存放入不同的Redis隊(duì)列以供后續(xù)的策略響應(yīng)模塊調(diào)用下發(fā)流表策略。
方案中策略響應(yīng)模塊完成對(duì)檢測(cè)后流量的具體控制,利用RYU靈活的FlowMod流表構(gòu)造能力,從Redis隊(duì)列中取回分類好的結(jié)果進(jìn)行解析并構(gòu)造出不同的流表規(guī)則后下發(fā)給交換機(jī)。策略響應(yīng)模塊還預(yù)留了擴(kuò)展接口,可以根據(jù)需求觸發(fā)更多級(jí)別的控制事件,提供更加細(xì)粒度的流量控制能力。本文設(shè)計(jì)的方案根據(jù)流量不同的類型,將風(fēng)險(xiǎn)級(jí)別劃分為3個(gè)等級(jí),實(shí)現(xiàn)不同粒度的控制,針對(duì)風(fēng)險(xiǎn)級(jí)別,給出以下劃分依據(jù)。
(1)正常級(jí)別的流量,確定正常的流量不需要轉(zhuǎn)送至軟件安全檢測(cè)系統(tǒng)進(jìn)行進(jìn)一步的檢測(cè),直接下發(fā)去往目的地的正常轉(zhuǎn)發(fā)流表,優(yōu)先級(jí)最低;
(2)端口級(jí)檢測(cè)級(jí)別的流量,在被檢測(cè)出某個(gè)端口存在風(fēng)險(xiǎn)后,構(gòu)造流表的action方法將目標(biāo)端口規(guī)則的流量牽引至同節(jié)點(diǎn)最鄰近的軟件安全檢測(cè)系統(tǒng)進(jìn)行進(jìn)一步的檢測(cè),優(yōu)先級(jí)高于正常級(jí)別;
(3)完全檢測(cè)級(jí)別的流量,通過(guò)構(gòu)造流表的action方法直接牽引至同節(jié)點(diǎn)最鄰近的軟件安全檢測(cè)系統(tǒng),優(yōu)先級(jí)最高。
通過(guò)上述分級(jí),實(shí)現(xiàn)了不同類型流量響應(yīng)不同級(jí)別的流表規(guī)則,過(guò)濾掉可先被識(shí)別的正常流量,減少牽引至軟件安全檢測(cè)系統(tǒng)的流量規(guī)模,降低其檢測(cè)負(fù)載,避免因負(fù)載過(guò)高造成單點(diǎn)失效。
方案采用RYU控制器,并在現(xiàn)有的模塊上進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)系統(tǒng)各模塊間的整體調(diào)度;另外通過(guò)Redis內(nèi)存數(shù)據(jù)庫(kù)實(shí)現(xiàn)定制的消息中間件及處理方法,促成控制器與通用存儲(chǔ)識(shí)別模塊之間數(shù)據(jù)存取與檢測(cè)識(shí)別任務(wù)的快速解耦和高效處理;在控制流表的設(shè)計(jì)上,充分利用RYU API的特性,在一條流表實(shí)現(xiàn)多種功能的同時(shí),避免因重復(fù)調(diào)用業(yè)務(wù)邏輯而造成SDN控制器額外的處理負(fù)載;此外,策略響應(yīng)模塊還預(yù)留了通用接口,提高了控制功能的可擴(kuò)展性,能夠接入更多對(duì)流量的控制邏輯。
為了驗(yàn)證本文設(shè)計(jì)的方案的性能和檢測(cè)率差異,通過(guò)Mininet、Openvswitch和RYU控制器構(gòu)建的實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)拓?fù)淙鐖D2所示,采用的軟硬件測(cè)試平臺(tái)見(jiàn)表3。
圖2 實(shí)驗(yàn)平臺(tái)網(wǎng)絡(luò)拓?fù)鋱D
名稱版本CPUIntel Core i7-4790內(nèi)存16 G操作系統(tǒng)Ubuntu 16.04Mininet版本2.3.0d1Openvswitch版本2.5.4OpenFlow協(xié)議版本1.3
首先,為了驗(yàn)證本文所提出的方案對(duì)控制器的性能和負(fù)載產(chǎn)生的影響更小,提煉以文獻(xiàn)[10]和文獻(xiàn)[11]為代表的流量牽引方案(簡(jiǎn)稱方案α),去除其入侵防御的業(yè)務(wù)邏輯并僅保留核心轉(zhuǎn)發(fā)邏輯(將所有流量復(fù)制并牽引到軟件安全檢測(cè)系統(tǒng))。利用上述實(shí)驗(yàn)平臺(tái),在一臺(tái)虛擬機(jī)上開(kāi)啟Iperf服務(wù)端,在另一臺(tái)虛擬機(jī)上用Iperf客戶端發(fā)送以10 Mbps~100 Mbps逐級(jí)遞增的帶寬測(cè)試丟包率,發(fā)送的流量均視為正常流量轉(zhuǎn)發(fā)處理。方案α與本文方案β的丟包率和時(shí)延對(duì)比如圖3和圖4所示。
圖3 丟包率對(duì)比
圖4 時(shí)延對(duì)比
從上圖的實(shí)驗(yàn)結(jié)果可以看到,方案β的時(shí)延與方案α相差不大,浮動(dòng)在正常的范圍內(nèi)。而丟包率對(duì)比中,40 Mbps 帶寬前由于本文方案的采樣邏輯會(huì)給SDN控制器性能造成一些影響,丟包率會(huì)略高于方案α。當(dāng)超過(guò)40 Mbps 帶寬時(shí),方案α因負(fù)載增加丟包率逐漸加大,本文方案的丟包數(shù)量上升緩慢,隨著總包數(shù)的激增,整體丟包率要略優(yōu)于方案α,以上說(shuō)明本文設(shè)計(jì)的方案β不會(huì)給控制器增加過(guò)多負(fù)載,且避免了控制器峰值負(fù)載給性能帶來(lái)的不良影響。
另外,為了論證本文方案能夠保持更高的檢測(cè)率,添加方案α和β的入侵防御業(yè)務(wù)邏輯,利用上述實(shí)驗(yàn)平臺(tái)部署了一臺(tái)基于Snort的軟件安全檢測(cè)系統(tǒng)用于檢測(cè)牽引而來(lái)的東西向流量,在一臺(tái)虛擬機(jī)上利用Scapy構(gòu)造并發(fā)送正常的網(wǎng)絡(luò)數(shù)據(jù)包以模擬實(shí)際的網(wǎng)絡(luò)通信環(huán)境,在另一臺(tái)虛擬機(jī)上構(gòu)造并發(fā)送攻擊流量以模擬攻擊環(huán)境。正常流量以10 000至40 000個(gè)逐級(jí)遞增的數(shù)量模擬不同規(guī)模下的網(wǎng)絡(luò)負(fù)載,攻擊流量固定發(fā)送5000個(gè),采取10次實(shí)驗(yàn)數(shù)據(jù)取平均值的方法對(duì)比了兩種方案對(duì)攻擊流量的檢測(cè)率,兩者的檢測(cè)率結(jié)果如圖5所示。
圖5 檢測(cè)率對(duì)比
實(shí)驗(yàn)結(jié)果表明,隨著正常流量數(shù)量的逐級(jí)遞增,Snort的檢測(cè)負(fù)載驟然提升系統(tǒng)出現(xiàn)嚴(yán)重的丟包現(xiàn)象,導(dǎo)致方案α的檢測(cè)率在正常流量超過(guò)20 000個(gè)后下降明顯,到達(dá)40 000個(gè)后甚至降至64.2%。而本文方案能夠讓Snort的檢測(cè)負(fù)載保持在一個(gè)正常的水平,正常流量數(shù)量達(dá)到40 000個(gè)時(shí)仍然能保持90%以上的檢測(cè)率,效果的提升上顯著優(yōu)于方案α。
以上的實(shí)驗(yàn)結(jié)果表明,本文提出的一種云環(huán)境下基于SDN的高效流量監(jiān)控方案,通過(guò)自適應(yīng)流量采樣模塊、包處理模塊、策略響應(yīng)模塊對(duì)需要監(jiān)控的東西向流量進(jìn)行預(yù)處理,識(shí)別并放行可確定的流量,有效降低了安全控制信道和安全檢測(cè)系統(tǒng)的負(fù)載,能夠使安全檢測(cè)系統(tǒng)的檢測(cè)率保持在90%以上,遠(yuǎn)高于被對(duì)比的方案,說(shuō)明本文設(shè)計(jì)的方案不會(huì)對(duì)檢測(cè)率產(chǎn)生負(fù)面影響。同時(shí),對(duì)比實(shí)驗(yàn)結(jié)果表明本文設(shè)計(jì)的方案在帶寬超過(guò)40 Mbps后,丟包率和時(shí)延表現(xiàn)均優(yōu)于被對(duì)比的方案,避免了控制器峰值負(fù)載給性能帶來(lái)的影響。