如今越來(lái)越多的企業(yè)開始考慮部署軟件定義網(wǎng)絡(luò)[注](SDN),但是安全問(wèn)題成為了他們的最大顧慮。企業(yè)希望了解SDN產(chǎn)品是如何確保他們的應(yīng)用、數(shù)據(jù)和基礎(chǔ)設(shè)施免受攻擊的。在引入SDN時(shí)必須要制定出能夠確??刂茖恿髁堪踩男虏呗?。本文將評(píng)估對(duì)SDN系統(tǒng)的攻擊途徑,分享一些能夠確保具有SDN功能的虛擬網(wǎng)絡(luò)基礎(chǔ)設(shè)施安全的方法。此外,本文還將就一些被認(rèn)為能夠保證SDN部署安全的方法進(jìn)行探討。
SDN 攻擊途徑多多
SDN是一種連網(wǎng)方式,為了支持虛擬化其將控制層從轉(zhuǎn)發(fā)層中分離出來(lái)。SDN是網(wǎng)絡(luò)虛擬化[注]的一個(gè)新范式。大部分SDN架構(gòu)模型都有三個(gè)層:底層是具有SDN功能的網(wǎng)絡(luò)設(shè)備,中間層是SDN控制器,上層包括請(qǐng)求或配置SDN的應(yīng)用與服務(wù)。雖然許多SDN系統(tǒng)相對(duì)較新,并且仍然沒(méi)有走出早期部署者的小圈子,但是可能肯定的是,隨著技術(shù)的不斷成熟,SDN將會(huì)被廣泛部署,并將成為攻擊者的目標(biāo)。
我們預(yù)測(cè)了幾種對(duì)SDN系統(tǒng)的攻擊途徑。SDN的安全顧慮主要集中在對(duì)不同SDN架構(gòu)層的攻擊。讓我們看一下每一層可能會(huì)發(fā)生的攻擊。下圖展示了一個(gè)典型的SDN架構(gòu)和攻擊者可能的方向。
對(duì)數(shù)據(jù)層(平面)的攻擊
攻擊者可能會(huì)將攻擊目標(biāo)鎖定為網(wǎng)絡(luò)中的網(wǎng)元。理論上,攻擊者能夠非法獲取對(duì)網(wǎng)絡(luò)的物理或虛擬訪問(wèn)權(quán),或是威脅到已與SDN連接的主機(jī),然后發(fā)動(dòng)攻擊破壞網(wǎng)元的穩(wěn)定性。這種攻擊類似于拒絕服務(wù)(DoS)攻擊,或是一種企圖攻擊網(wǎng)元的模糊攻擊。
目前控制器與網(wǎng)元之間的通信使用了大量的南向API(應(yīng)用程序編程接口)和通信協(xié)議。SDN南向通信可能會(huì)用到OpenFlow (OF)、Open vSwitch 數(shù)據(jù)庫(kù)管理協(xié)議 (OVSDB)、路徑計(jì)算單元通信協(xié)議 (PCEP)、路由系統(tǒng)接口(I2RS)、 BGP-LS、OpenStack Neutron、開放管理基礎(chǔ)設(shè)施(OMI)、Puppet、Chef、Diameter、Radius、NETCONF、可擴(kuò)展消息處理現(xiàn)場(chǎng)協(xié)議(XMPP)、定位/標(biāo)識(shí)分離協(xié)議(LISP)、簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)、CLI、嵌入式事件管理器(EEM)、 思科onePK、應(yīng)用中心基礎(chǔ)設(shè)施(ACI)、Opflex等協(xié)議。這些協(xié)議各自都有著一些確保與網(wǎng)絡(luò)單元通信安全的方法法。盡管如此,許多協(xié)議都非常新,部署者們可能并沒(méi)有以最安全的方式設(shè)置它們。
攻擊者可以利用這些協(xié)議嘗試著將一些新流實(shí)例化至設(shè)備的流表中。攻擊者會(huì)企圖偽造一些新流,以讓不應(yīng)當(dāng)通過(guò)網(wǎng)絡(luò)的流量被允許通過(guò)。盡管流量定向負(fù)責(zé)指導(dǎo)流量通過(guò)防火墻,但如果攻擊者能夠創(chuàng)建一個(gè)可繞開流量定向的流,那么攻擊者無(wú)疑將獲勝。如果攻擊者能夠控制流量轉(zhuǎn)向自己設(shè)定的方向,那么他們可能會(huì)嘗試?yán)眠@一功能對(duì)流量進(jìn)行嗅探,然后發(fā)動(dòng)“中間人(MITM)”攻擊。
此外,攻擊者還可以對(duì)流進(jìn)行竊聽,查找到哪些流正在被使用,哪些流量被允許通過(guò)網(wǎng)絡(luò)。同時(shí)他們會(huì)嘗試竊聽網(wǎng)元與控制器之間的南向通信。這些信息對(duì)于重播攻擊或是偵察都非常有用。
許多SDN系統(tǒng)被部署在數(shù)據(jù)中心內(nèi),而數(shù)據(jù)中心則通常使用數(shù)據(jù)中心互聯(lián)協(xié)議(DCI)。這些協(xié)議包括使用基本路由封裝的網(wǎng)絡(luò)虛擬化(NVGRE)、無(wú)狀態(tài)傳輸通道(STT)、虛擬可擴(kuò)展局域網(wǎng)(VXLAN)、思科OTV、二層多路徑(L2MP)、基于TRILL的協(xié)議(如思科FabricPath、瞻博QFabric、博科VCS Fabric)、最短路徑橋接(SPB)等協(xié)議。這些協(xié)議有的缺乏身份認(rèn)證,有的沒(méi)有采用加密技術(shù),因而無(wú)法保證數(shù)據(jù)包內(nèi)容的安全。此外一些新協(xié)議由于協(xié)議設(shè)計(jì)或是廠商和客戶在部署協(xié)議時(shí)的方式不當(dāng)?shù)葐?wèn)題導(dǎo)致存在弱點(diǎn)。攻擊者可以自己偽造流量,并讓它們通過(guò)DCI連接或是對(duì)DCI連接發(fā)動(dòng)DoS攻擊。
對(duì)控制器層的攻擊
SDN控制器肯定是攻擊的目標(biāo)。攻擊者會(huì)出于多種目的對(duì)SDN控制器進(jìn)行攻擊。他們可能會(huì)通過(guò)偽造發(fā)往網(wǎng)絡(luò)設(shè)備的北向API信息或是南向信息從而實(shí)例化新的流。如果攻擊者能夠成功偽造來(lái)自合法控制器的流,那么將能夠隨心所欲地讓流量通過(guò)SDN,并可能繞開為確保安全所制定的策略。
攻擊者可能會(huì)嘗試對(duì)控制器發(fā)動(dòng)DoS攻擊,或是使用其他方法使控制器發(fā)生故障。此外,攻擊者還會(huì)嘗試對(duì)控制器發(fā)動(dòng)一些資源消耗型攻擊,以癱瘓控制器,讓控制器對(duì)反應(yīng)遲鈍并降低它們發(fā)送和接收數(shù)據(jù)包的速度。
很多時(shí)候,SDN控制器是運(yùn)行在在某種Linux操作系統(tǒng)上的。如果SDN控制器是在通用操作系統(tǒng)上運(yùn)行,那么該操作系統(tǒng)的弱點(diǎn)就是控制器的弱點(diǎn)。通??刂破魇褂玫亩际悄J(rèn)密碼,且沒(méi)有對(duì)安全設(shè)置進(jìn)行配置,SDN工程師往往只讓這些控制器能工作就行,由于擔(dān)心搞壞它們,SDN工程師往往不愿意去碰它們,這會(huì)導(dǎo)致最終產(chǎn)品很脆弱。
最后,如果攻擊者創(chuàng)建了自己的控制器,并讓單元信任那些來(lái)自“流氓”控制器的流,那么情況將非常糟糕。攻擊者隨后可以在網(wǎng)元的流表中創(chuàng)建條目,如此一來(lái)SDN工程師將無(wú)法在控制器中發(fā)現(xiàn)這些流。如此一來(lái),攻擊者將會(huì)徹底控制網(wǎng)絡(luò)。
對(duì)SDN 層的攻擊
對(duì)北向協(xié)議進(jìn)行攻擊可能也是一條途徑。目前SDN控制器也在使用許多北向API。北向API通常使用Python、Java、C、REST、XML、JSON等語(yǔ)言。如果攻擊者能夠利用北向API的弱點(diǎn),那么他們將可通過(guò)控制器的控制整個(gè)SDN網(wǎng)絡(luò)。如果控制器對(duì)北向API缺乏安全防護(hù)措施,那么攻擊者則可創(chuàng)建他們自己的SDN策略,并從而獲得SDN環(huán)境的控制權(quán)。
很多時(shí)候,REST API使用的都是默認(rèn)密碼,這個(gè)細(xì)節(jié)至關(guān)重要。如果SDN部署沒(méi)有修改默認(rèn)密碼,那么攻擊者則能夠創(chuàng)建針對(duì)控制器管理接口的數(shù)據(jù)包,隨后可以查詢到SDN環(huán)境的配置并修改成自己的配置。
如何提升SDN 系統(tǒng)的安全性?
隨著SDN的部署,確??刂破矫媪髁康陌踩孕枰碌淖龇?。在傳統(tǒng)的IP網(wǎng)絡(luò)中(+本站微信networkworldweixin),控制平面的安全是以路由協(xié)議安全措施的形式得以保證的,這包括使用針對(duì)EIGRP、IS-IS或OSPFv2的 MD5(信息摘要算法5)加密技術(shù),或針對(duì)OSPFv3的IPsec AH,或針對(duì)MP-BGP的GTSM/ACL/密碼。然而一些人甚至DPI沒(méi)有使用這些針對(duì)傳統(tǒng)IP網(wǎng)絡(luò)的簡(jiǎn)單技術(shù)。如果他們?cè)诓渴餝DN時(shí)依然以同樣的態(tài)度漠視安全,那么無(wú)疑會(huì)讓機(jī)構(gòu)暴露在攻擊危險(xiǎn)之中。下面讓我們來(lái)看下如何通過(guò)強(qiáng)化上述三個(gè)層面的安全來(lái)確保整個(gè)SDN系統(tǒng)的安全。
確保數(shù)據(jù)平面安全
典型的SDN系統(tǒng)通常使用的是x86處理器和TLS(前身為SSL)保護(hù)控制平面安全。這些使用已久的HTTP會(huì)話易于遭受危及數(shù)據(jù)平面安全的攻擊。機(jī)構(gòu)應(yīng)當(dāng)使用TLS來(lái)認(rèn)證和加密網(wǎng)絡(luò)設(shè)備端與控制器之間的流量。使用TLS可幫助驗(yàn)證控制器和網(wǎng)絡(luò)設(shè)備/ SDN端,防止竊聽和偽造南向通信。
根據(jù)所使用南向協(xié)議的不同類型,確保南向通信的安全有許多種選擇。一些協(xié)議可像之前所說(shuō)的那樣應(yīng)用到TLS對(duì)話。一些協(xié)議可使用共享密鑰和/或隨機(jī)密碼阻止重播攻擊。SNMPv3協(xié)議遠(yuǎn)勝SNMPv2c, SSH遠(yuǎn)勝于Telnet。一些專有南向協(xié)議可能有著自己的方法阻止攻擊者的竊聽和偽造行為。
同樣,根據(jù)所使用的數(shù)據(jù)中心互聯(lián)(DCI)協(xié)議,認(rèn)證隧道端點(diǎn)和保護(hù)隧道流量安全方面也有著不同的配置選項(xiàng)。密碼/共享密鑰同樣是一種選擇。盡管如此,部分DCI協(xié)議可能沒(méi)有任何安全選項(xiàng)。
有的機(jī)構(gòu)可能會(huì)認(rèn)為專用網(wǎng)絡(luò)具有一些與生俱來(lái)的安全特性。但是隨著機(jī)構(gòu)將虛擬網(wǎng)絡(luò)和SDN擴(kuò)展至云服務(wù)和遠(yuǎn)程數(shù)據(jù)中心上,對(duì)物理路徑進(jìn)行驗(yàn)證可能并非易事。當(dāng)機(jī)構(gòu)用戶控制著物理訪問(wèn)權(quán)時(shí),阻止未經(jīng)授權(quán)的訪問(wèn)更為容易,但是隨著網(wǎng)絡(luò)的虛擬化,實(shí)際的物理路徑正變得越來(lái)越模糊,使得保護(hù)自己無(wú)法看見的東西的安全變得非常困難。
確??刂破鲗影踩?/strong>
控制器是一個(gè)關(guān)鍵的攻擊目標(biāo),因此必須要強(qiáng)化其安全。提升控制器和網(wǎng)元的安全通常需要強(qiáng)化主機(jī)操作系統(tǒng)的安全性。所有關(guān)于提升面向公公共Linux服務(wù)器安全性的最佳實(shí)踐都非常適用。此外,機(jī)構(gòu)仍然需要嚴(yán)密監(jiān)視其控制器,防范任何可疑行為。
機(jī)構(gòu)還需要阻止對(duì)SDN控制網(wǎng)絡(luò)的非授權(quán)訪問(wèn)。SDN系統(tǒng)應(yīng)當(dāng)考慮到安全配置,并驗(yàn)證訪問(wèn)控制器的管理員。對(duì)于控制器管理員來(lái)說(shuō),基于角色的訪問(wèn)控制(RBAC)策略可能是必須的。記錄和檢查跟蹤對(duì)于查找由管理員或攻擊者所做出的非授權(quán)修改非常有用。
如果出現(xiàn)了針對(duì)控制器的DoS攻擊,高可用性(HA)控制器架構(gòu)可有效應(yīng)對(duì)這類攻擊。使用冗余控制器的SDN可承受一個(gè)控制器的損失并繼續(xù)工作。這相當(dāng)于提升了攻擊者對(duì)系統(tǒng)中所有控制器發(fā)動(dòng)DoS攻擊的門檻。雖然這種攻擊是無(wú)法隱藏的,但是我們無(wú)法察覺攻擊者的下一個(gè)目標(biāo)。
確保SDN層安全
另一個(gè)保護(hù)措施是使用針對(duì)控制流量的帶外(OOB)網(wǎng)絡(luò)。在數(shù)據(jù)中心內(nèi)創(chuàng)建一個(gè)OOB網(wǎng)絡(luò)比在整個(gè)企業(yè)廣域網(wǎng)中創(chuàng)建一個(gè)OOB網(wǎng)絡(luò)要容易且成本較低。使用北向和南向通信專用OOB網(wǎng)絡(luò)可幫助確??刂破鞴芾韰f(xié)議的安全。
使用TLS或SSH等方式確保北向通信和控制器管理的安全被認(rèn)為是最佳實(shí)踐。來(lái)自應(yīng)用的通信以及由控制器發(fā)起的請(qǐng)求服務(wù)或數(shù)據(jù)服務(wù)應(yīng)當(dāng)通過(guò)認(rèn)證和加密方式確保安全。
針對(duì)所有請(qǐng)求SDN資源的北向應(yīng)用的安全代碼也應(yīng)當(dāng)是一個(gè)最佳實(shí)踐。安全代碼實(shí)踐不僅有利用確保面向公眾的互聯(lián)網(wǎng)應(yīng)用安全,而且還適用于北向SDN連接。
部分SDN系統(tǒng)能夠檢驗(yàn)網(wǎng)絡(luò)設(shè)備表單中的流是否違反控制器策略。這類檢查(類似FlowChecker)能夠幫助識(shí)別出正常流與攻擊流之間的差別。
結(jié)語(yǔ)
我們僅能夠預(yù)測(cè)哪些攻擊者可能會(huì)將SDN變?yōu)楣裟繕?biāo)。部署、協(xié)議、控制器軟件都是新的,以往對(duì)SDN發(fā)動(dòng)的攻擊也還不為人知。根據(jù)SDN架構(gòu),我們能夠預(yù)測(cè)出攻擊者可能會(huì)發(fā)動(dòng)進(jìn)攻的地方。如果我們站在攻擊者的角度考慮問(wèn)題,我們應(yīng)該能夠找到SDN網(wǎng)絡(luò)的弱點(diǎn),并可提前提升其安全性。
在SDN部署項(xiàng)目之前,用戶應(yīng)當(dāng)在早期設(shè)計(jì)階段就考慮如何確保系統(tǒng)安全。不要將安全問(wèn)題留到最后收尾階段再著手解決,否則可能會(huì)追悔莫及。