肖 敏
(綿陽師范學(xué)院信息工程學(xué)院,四川綿陽 621006)
隨著技術(shù)的進(jìn)步,云計(jì)算使得服務(wù)提供商可以按需將基礎(chǔ)設(shè)施、平臺(tái)和軟件等預(yù)期服務(wù)租賃給云用戶.云用戶可以從云上租賃服務(wù),并在需求得到滿足后將其釋放回云.與傳統(tǒng)數(shù)據(jù)中心相比,云計(jì)算帶來了許多好處,如高靈活性(按需、自助服務(wù))、快速響應(yīng)、資源彈性伸縮、更高的資源利用率和更低運(yùn)營成本等.
根據(jù)IDC(國際數(shù)據(jù)公司)的一項(xiàng)相關(guān)調(diào)查,安全問題是采用云計(jì)算的首要挑戰(zhàn)[1].作為當(dāng)今最常見的互聯(lián)網(wǎng)攻擊之一DoS(拒絕服務(wù))和DDoS(分布式拒絕服務(wù))的主要攻擊目的是通過耗盡系統(tǒng)資源來損害其提供預(yù)期服務(wù)的能力.Cisco 2014年度安全報(bào)告將DDoS攻擊的影響程度認(rèn)定為嚴(yán)重[2].DDoS攻擊大致可分為三類[3]:
1)基于卷的DDoS攻擊:當(dāng)大量此類流量被指向服務(wù)器時(shí),這些攻擊會(huì)影響服務(wù)器.例如ICMP Flood和UDP Flood攻擊.
2)基于協(xié)議的DDoS攻擊:這些攻擊使用特定的Internet協(xié)議來消耗服務(wù)器的資源.例如TCP-SYN Flood攻擊和Ping死亡攻擊.
3)基于應(yīng)用程序的DDoS攻擊:這些攻擊針對(duì)Internet應(yīng)用程序的弱點(diǎn).它也被稱為應(yīng)用層攻擊.例如Slowloris攻擊和DNS放大攻擊.
其中TCP-SYN Flood是最常見的DDoS攻擊,根據(jù)卡巴斯基2018年第四季度的統(tǒng)計(jì)報(bào)告,TCP-SYN Flood占總攻擊的50%以上[4].TCP-SYN Flood攻擊同時(shí)也是云上最常見的三種攻擊之一[5].
TCP-SYN Flood是一種基于協(xié)議的DDoS攻擊,TCP連接是由導(dǎo)致漏洞的三次握手TCP技術(shù)啟動(dòng)的.攻擊者向目標(biāo)系統(tǒng)發(fā)送連續(xù)的SYN請(qǐng)求,試圖消耗足夠的服務(wù)器資源,使系統(tǒng)對(duì)合法流量無法響應(yīng).正常的TCP連接需要三次握手.首先,客戶端通過向服務(wù)器發(fā)送SYN包來請(qǐng)求連接.然后,服務(wù)器通過將SYN-ACK發(fā)送回客服端來確認(rèn)此請(qǐng)求.最后,客戶端用ACK報(bào)響應(yīng)并完成連接的建立[6].如果客戶端沒有用預(yù)期的ACK消息響應(yīng)服務(wù)器,比如惡意客戶端可以簡(jiǎn)單地不發(fā)送預(yù)期的ACK,或者通過欺騙SYN中的源IP地址導(dǎo)致服務(wù)器將SYN-ACK發(fā)送到偽造的IP地址.那么服務(wù)器沒有收到ACK消息,則等待超時(shí).在等待超時(shí)的過程中,半連接狀態(tài)保持在[7]一個(gè)空間有限的緩沖隊(duì)列中.如果發(fā)送到服務(wù)器的大量SYN包沒有響應(yīng),則會(huì)持續(xù)消耗服務(wù)器上的資源,最終可能超過服務(wù)器的能力,從而導(dǎo)致服務(wù)器無法連接到合法的客戶端,甚至導(dǎo)致服務(wù)器系統(tǒng)崩潰[8].
R.Shea和J.Liu在虛擬化方面的研究表明[9],虛擬機(jī)的性能在DDoS攻擊下比在具有相同資源量的非虛擬化系統(tǒng)上的性能下降更嚴(yán)重.由于虛擬化是云計(jì)算的核心,這意味著云中的虛擬機(jī)和相關(guān)服務(wù)比傳統(tǒng)系統(tǒng)更容易受到DDoS攻擊.在多租戶環(huán)境中,攻擊者不僅可以來自外部也可能從云中租用資源對(duì)其他租戶的虛擬機(jī)發(fā)起攻擊.特別是部署為IaaS的云環(huán)境中內(nèi)部惡意租戶的攻擊可能導(dǎo)致同一共享環(huán)境中的所有虛擬機(jī)都會(huì)受到影響[10].因此,檢測(cè)并阻止此類攻擊變得極為重要.
本文重點(diǎn)研究了基于異常檢測(cè)器的虛擬云環(huán)境下SYN Flood攻擊的檢測(cè)方法,嘗試通過流表編程實(shí)現(xiàn)流表引導(dǎo),通過插入分析器、探頭和限速器嘗試根據(jù)預(yù)定義策略模板和包統(tǒng)計(jì)數(shù)據(jù)觸發(fā)啟動(dòng)防御系統(tǒng),針對(duì)性限速以削弱DDoS攻擊對(duì)于系統(tǒng)性能的影響.在實(shí)驗(yàn)系統(tǒng)中使用模擬攻擊初步測(cè)試評(píng)價(jià)該方案的作用效果.
為了檢測(cè)網(wǎng)絡(luò)中的DoS攻擊,通常使用入侵檢測(cè)系統(tǒng)(IDS).IDS是部署在網(wǎng)絡(luò)或主機(jī)上的高級(jí)安全機(jī)制,用于檢測(cè)DoS攻擊、特洛伊木馬和Internet蠕蟲等惡意活動(dòng).IDS在檢測(cè)過程中使用基于簽名或異常的方法.基于特征的IDS需要一個(gè)已知攻擊特征和模式的數(shù)據(jù)庫才能檢測(cè)到攻擊.開源Snort[11]是一種常見的基于簽名的IDS,Lonua等人對(duì)此進(jìn)行了實(shí)驗(yàn)[12].然而,這些方法通常應(yīng)用于傳統(tǒng)非云化的網(wǎng)絡(luò)中,在云計(jì)算等具有動(dòng)態(tài)資源的大型網(wǎng)絡(luò)中,存在檢測(cè)延遲大、計(jì)算成本高等缺點(diǎn),很難具有部署成本優(yōu)勢(shì).
另一方面,基于異常的IDS使用統(tǒng)計(jì)或機(jī)器學(xué)習(xí)方法來檢測(cè)攻擊,并且與基于特征的IDS相比具有優(yōu)勢(shì),因?yàn)樗鼈兡軌蛟跊]有攻擊信息和經(jīng)驗(yàn)的情況下檢測(cè)新的攻擊.Gupta等人[13]提出了一個(gè)基于概要文件的網(wǎng)絡(luò)入侵防御系統(tǒng)(NIPS)來保護(hù)云環(huán)境.相關(guān)研究應(yīng)用了基于TCP SYN包數(shù)檢測(cè)SYN Flood攻擊的方法[14],將特定間隔內(nèi)超過預(yù)定義閾值的SYN包數(shù)被視為攻擊.其研究結(jié)果表明,該方法能夠很好地檢測(cè)SYN Flood攻擊.然而,這種靜態(tài)方式不具備動(dòng)態(tài)調(diào)節(jié)能力,會(huì)導(dǎo)致不同規(guī)格的云主機(jī)受到相等的對(duì)待.
DongHyuk Kim等人[15]針對(duì)這一問題,提出了一種利用TCP超時(shí)機(jī)制和分組往返時(shí)間(RTT)來更簡(jiǎn)單有效地防御SYN洪泛攻擊的技術(shù).其思想是,如果正常的TCP發(fā)送方在超時(shí)之前沒有從接收方接收到SYN/ACK包,則它會(huì)重新傳輸SYN包,而攻擊者通常不會(huì)重新傳輸SYN包.其方案采用丟棄來自任何TCP發(fā)送方的第一個(gè)SYN包.如果交換機(jī)接收到重新傳輸?shù)腟YN,則認(rèn)為SYN是從普通用戶發(fā)送的,并將SYN轉(zhuǎn)發(fā)給預(yù)期的接收方.但這種方式需要預(yù)先啟動(dòng)而非按一定的系統(tǒng)指標(biāo)來觸發(fā),在無攻擊的場(chǎng)景下并不友好.
虛擬化改變了目前的計(jì)算方式,許多數(shù)據(jù)中心完全虛擬化,以便在災(zāi)難恢復(fù)期間提供快速資源調(diào)配、向云端溢出并提高可用性.在2013年虛擬機(jī)的數(shù)量已經(jīng)超過了服務(wù)器的數(shù)量,并且進(jìn)一步的虛擬化沒有停止的跡象[16].服務(wù)器虛擬化的興起帶來了數(shù)據(jù)中心網(wǎng)絡(luò)的根本轉(zhuǎn)變.一個(gè)新的網(wǎng)絡(luò)訪問層已經(jīng)出現(xiàn),其中大多數(shù)網(wǎng)絡(luò)端口是虛擬的,而不是物理的[17],這就導(dǎo)致數(shù)據(jù)包轉(zhuǎn)發(fā)的第一級(jí)交換機(jī)越來越多地駐留在Hypervisor中.在早期,這些Hypervisor的虛擬交換機(jī)(vSwitches)主要負(fù)責(zé)提供基本的網(wǎng)絡(luò)連接.但隨著虛擬化負(fù)載的激增,這種方法的局限性也變得越來越明顯:虛擬化的負(fù)載與物理網(wǎng)絡(luò)的耦合嚴(yán)重限制了其移動(dòng)性、擴(kuò)展性和快速資源調(diào)配能力.
隨著以O(shè)penstack為代表的開源云平臺(tái)的廣泛部署,其默認(rèn)使用的虛擬交換機(jī)組件Openvswitch在虛擬化的數(shù)據(jù)中心網(wǎng)絡(luò)中承擔(dān)了狀態(tài)防火墻等更為復(fù)雜的功能[18].在這種虛擬交換機(jī)中,主要由兩個(gè)組件構(gòu)成:第一個(gè)是ovs-vswitchd,它是一個(gè)用戶空間守護(hù)進(jìn)程,它也是處理數(shù)據(jù)包的慢速通道;另一個(gè)組件則是負(fù)責(zé)Datapath的內(nèi)核模塊(Kernel Module),它是處理數(shù)據(jù)包的快速通道.圖1描述了這兩個(gè)主要組件如何協(xié)同工作來轉(zhuǎn)發(fā)數(shù)據(jù)包.內(nèi)核模塊首先從物理NIC或VM的虛擬NIC接收數(shù)據(jù)包,ovs-vswitchd已經(jīng)明確指示內(nèi)核模塊如何處理這種類型的數(shù)據(jù)包時(shí),內(nèi)核模塊只需遵循ovs-vswitchd給出的稱為actions的指令完成轉(zhuǎn)發(fā).該指令列出了傳輸數(shù)據(jù)包的物理端口,虛擬端口或者隧道,同時(shí)actions還可以指定修改、抽樣或丟棄數(shù)據(jù)包等動(dòng)作.如果內(nèi)核模塊沒有被告知如何處理數(shù)據(jù)包,它會(huì)將其傳遞給ovs-vswitchd組件.在用戶空間中,ovs-vswitchd確定如何處理數(shù)據(jù)包,然后將數(shù)據(jù)包以及所需的處理方式傳遞回內(nèi)核模塊.通常,ovs-vswitchd還會(huì)通知內(nèi)核模塊緩存actions,以處理類似的未來數(shù)據(jù)包[19].
圖1 Openvswitch數(shù)據(jù)包轉(zhuǎn)發(fā)示意圖
復(fù)雜的帶有狀態(tài)的網(wǎng)絡(luò)應(yīng)用需要可以實(shí)現(xiàn)連接跟蹤的狀態(tài)機(jī).它需要匹配到更精細(xì)的報(bào)文字段,包括源和目的IP地址,協(xié)議號(hào),源和目的端口號(hào),TCP標(biāo)記位,以完成所需的連接跟蹤.在這種模式下,任何TCP-SYN Flood攻擊的數(shù)據(jù)包都會(huì)被快速通道的內(nèi)核模塊認(rèn)為是一條新流,而需要上送到用戶態(tài)ovs-vswitchd進(jìn)行轉(zhuǎn)發(fā)規(guī)則計(jì)算,因此在發(fā)生SYN Flood攻擊時(shí),openvswitch會(huì)因攻擊產(chǎn)生過多的資源消耗而難以響應(yīng)其他正常虛擬機(jī)的業(yè)務(wù)請(qǐng)求.
本文所研究的系統(tǒng)在相關(guān)研究的基礎(chǔ)上,在云環(huán)境中實(shí)現(xiàn)了動(dòng)態(tài)的TCP-SYN Flood防御,其核心思想包括IP/MAC地址欺騙防護(hù)以及基于預(yù)定義閥值的SYN包攻擊防護(hù),目標(biāo)是既能夠有效的防御修改源IP/MAC地址的SYN Flood攻擊,也能夠?qū)崿F(xiàn)根據(jù)系統(tǒng)指標(biāo)和閥值進(jìn)行動(dòng)態(tài)防護(hù).如圖2所示,該系統(tǒng)部署于Hypervisor,利用Openvswitch、分析器、探頭和限速器三個(gè)組件的聯(lián)動(dòng).通過對(duì)Openvswitch的多級(jí)流表編程實(shí)現(xiàn)SYN包的統(tǒng)計(jì)和IP/MAC源地址欺騙的防護(hù).分析器負(fù)責(zé)根據(jù)SYN包統(tǒng)計(jì)信息和防護(hù)閥值以及Openvswitch的資源使用率等信息決策是否觸發(fā)探頭采樣,分析器也負(fù)責(zé)對(duì)采樣結(jié)果進(jìn)行分析并根據(jù)分析結(jié)果決定是否觸發(fā)限速器進(jìn)行限速.
圖2 實(shí)驗(yàn)系統(tǒng)結(jié)構(gòu)
我們使用Openvswitch的多級(jí)流表來實(shí)現(xiàn)相關(guān)的轉(zhuǎn)發(fā)業(yè)務(wù)、SYN包統(tǒng)計(jì)、以及IP/MAC欺騙防護(hù).圖4為Openvswitch的流表設(shè)計(jì).
圖4 分析器的工作流程
SYN包統(tǒng)計(jì)位于Openvswitch Table 8中,針對(duì)每個(gè)虛擬機(jī)端口增加一條用來匹配TCP SYN包的流表,如下所示:
ovs-ofctl add-flow br0 "table=8,priority=100,in_port= tap4a2f334c-03,eth,ip,tcp,tcp_flags=+syn,actions=resubmit(,9)"
當(dāng)虛擬機(jī)SYN包進(jìn)入Openvswitch并命中此流表后,就可以獲取到此流表被命中的統(tǒng)計(jì)值,從而得到該虛擬機(jī)發(fā)送的SYN包數(shù)量.
其中IP/MAC欺騙防護(hù)位于table7,流表將檢查虛擬機(jī)的IP,MAC地址和入接口的匹配關(guān)系,如果不匹配則會(huì)丟棄數(shù)據(jù)包,從而可以防止虛擬機(jī)內(nèi)部通過IP或MAC欺騙產(chǎn)生大量的TCP SYN數(shù)據(jù)包.其流表實(shí)例如下:
ovs-ofctl add-flow br0 "table=7,priority=32 769,in_port=tap4a2f334c-03,dl_src=fa:16:3e:f6:a8:5a,nw_src=192.168.100.10,actions=resubmit(,8)"
ovs-ofctl add-flow br0 "table=7,priority=32 768,in_port==tap4a2f334c-03,actions=drop
分析器在系統(tǒng)中主要根據(jù)預(yù)定義的策略模板,Openvswitch中端口的TCP SYN統(tǒng)計(jì)信息,以及探頭Probe采集的數(shù)據(jù)包樣本,來決策是否需要進(jìn)行SYN包限速.分析器的工作流程如圖3所示.
圖3 Openvswitch的流表設(shè)計(jì)
目前策略模板中主要針對(duì)兩個(gè)統(tǒng)計(jì)因子來決策是否進(jìn)行限速:TCP SYN Packet/s以及TCP Half Open Connection/s,其中TCP SYN Packet/s通過openvswitch的流表統(tǒng)計(jì)信息獲取,TCP Half Open Connection/s通過探頭Probe獲取的采樣在分析器中進(jìn)行計(jì)算.
探頭模塊用于根據(jù)分析器指令來捕獲指定虛擬機(jī)端口的數(shù)據(jù)包,并生成pcap文件以供分析器解析和計(jì)算.探頭基于gopacket庫實(shí)現(xiàn),其捕獲數(shù)據(jù)包和存儲(chǔ)pcap文件的代碼片段如下:
func ondemand_probe() {
//Open output pcap file and write header
f,_:=os.Create(deviceName_pcap)
w:=pcapgo.NewWriter(f)
w.WriteFileHeader(snapshotLen,layers.LinkTypeEthernet)
defer f.Close()
//Open the device for capturing
handle,err=pcap.OpenLive(deviceName,snapshotLen,promiscuous,timeout)
if err!=nil{
…
os.Exit(1)
}
defer handle.Close()
//Start processing packets
packetSource:=gopacket.NewPacketSource(handle,handle.LinkType())
for packet:=range packetSource.Packets(){
//Process packet here
w.WritePacket(packet.Metadata().CaptureInfo,packet.Data())
packetCount++
//Only capture 1000
if packetCount>1000{
break
}}}
限速器使用TC實(shí)現(xiàn),通過u32分類器指定偏移量來匹配SYN數(shù)據(jù)包,其匹配過程和限速如下所示:
tc filter add dev tap4a2f334c-03 parent ffff:protocol ip prio 130 u32 match u8 0x02 0x02 at 33 police rate 10 bit burst 10 b drop
圖5 實(shí)驗(yàn)攻擊數(shù)據(jù)包統(tǒng)計(jì)信息
本次測(cè)試驗(yàn)證嘗試在攻擊虛擬機(jī)內(nèi)部使用hping3攻擊模擬TCP SYN Flood攻擊,并在攻擊虛擬機(jī)的虛擬網(wǎng)卡上使用tcpdump抓包來統(tǒng)計(jì)攻擊包的數(shù)量信息.其中虛線為對(duì)照組的攻擊包數(shù)量,實(shí)線為測(cè)試組的攻擊包數(shù)量.在兩輪測(cè)試中,使用hping3均產(chǎn)生了約50 Kpps的TCP SYN包,強(qiáng)度基本相當(dāng).使用這樣的實(shí)驗(yàn)環(huán)境我們兩次測(cè)試了攻擊對(duì)Openvswitch的性能影響,以及對(duì)同Hypervisor的其他虛擬機(jī)網(wǎng)絡(luò)業(yè)務(wù)的影響.第一次測(cè)試是在沒有使用防御策略的情況下獲取系統(tǒng)性能在被攻擊狀態(tài)下的對(duì)照數(shù)據(jù),第二次則是測(cè)試應(yīng)用防御策略后系統(tǒng)性能的響應(yīng)數(shù)據(jù).
ovs-vswitchd的CPU和內(nèi)存使用率表示了Openvswitch用戶態(tài)進(jìn)程對(duì)計(jì)算資源的消耗.通過統(tǒng)計(jì)ovs-vswitchd的CPU和內(nèi)存使用率能夠評(píng)估防御系統(tǒng)對(duì)Openvswitch的保護(hù)的效果.圖6顯示了保護(hù)前后ovs-vswitchd的CPU使用率對(duì)比,可以發(fā)現(xiàn)在系統(tǒng)探測(cè)到可能存在TCP SYN Flood攻擊并啟動(dòng)保護(hù)后,ovs-vswitchd的CPU使用率可保持到正常水平.
圖6 CPU使用率對(duì)比
往返時(shí)間RTT(Round-Trip Time)在計(jì)算機(jī)網(wǎng)絡(luò)中它是一個(gè)重要的性能指標(biāo).表示從發(fā)送端發(fā)送數(shù)據(jù)開始,到發(fā)送端收到來自接收端的確認(rèn)(接收端收到數(shù)據(jù)后便立即發(fā)送確認(rèn),不包含數(shù)據(jù)傳輸時(shí)間)總共經(jīng)歷的時(shí)間.圖7顯示了一個(gè)與攻擊虛擬機(jī)在同一Openvswitch下的正常虛擬機(jī)在兩輪攻擊時(shí)使用ping工具測(cè)試到出口設(shè)備的往返時(shí)間.從圖8可以看到,在攻擊發(fā)生、觸發(fā)探頭并啟動(dòng)系統(tǒng)防護(hù)后,往返時(shí)間可在短時(shí)間內(nèi)恢復(fù)到正常水平.而未防護(hù)時(shí),則持續(xù)在8 ms到135 ms區(qū)間波動(dòng).
圖7 往返時(shí)間RTT對(duì)比
在本次嘗試和實(shí)驗(yàn)中,通過使用一個(gè)試驗(yàn)臺(tái),實(shí)現(xiàn)了本文所提出的在Openvswitch環(huán)境下對(duì)的TCP-SYN Flood攻擊的防御策略算法,多維度的評(píng)估了其對(duì)于受攻擊系統(tǒng)性能的影響,初步驗(yàn)證了的其有效性.結(jié)果顯示該算法能有效地抵御測(cè)試數(shù)據(jù)集模擬的TCP-SYN Flood攻擊.