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