肖媛娥
(井岡山大學(xué)網(wǎng)絡(luò)信息中心 江西 吉安 343009)
傳統(tǒng)的蜂窩式網(wǎng)絡(luò)架構(gòu)實(shí)現(xiàn)了基于水平層面的網(wǎng)絡(luò)資源共享,各水平網(wǎng)絡(luò)之間的資源是開(kāi)放且互通的,例如網(wǎng)絡(luò)硬件設(shè)施、軟件接口、操作系統(tǒng)、應(yīng)用程序等資源,而垂直層面是封閉的狀態(tài),基于網(wǎng)絡(luò)鏈路的軟硬控制都集成在網(wǎng)絡(luò)底層設(shè)施上,極大地限制了網(wǎng)絡(luò)垂直層面的功能拓展與部署的靈活性[1]。隨著軟件定義網(wǎng)絡(luò)(software defined network,SDN)架構(gòu)的興起與快速普及,SDN將網(wǎng)絡(luò)資源實(shí)現(xiàn)了垂直解耦,將網(wǎng)絡(luò)流量資源虛擬化??刂破矫嫱ㄟ^(guò)軟件編程實(shí)現(xiàn)網(wǎng)絡(luò)流量的鏈路分配、路由選擇等資源控制;數(shù)據(jù)平面集合了物理鏈路層的網(wǎng)絡(luò)交互設(shè)備,通過(guò)虛擬映射實(shí)現(xiàn)網(wǎng)絡(luò)流量的路徑轉(zhuǎn)發(fā),大大地提高了網(wǎng)絡(luò)的資源利用率和開(kāi)放共享性,但也帶來(lái)了新的網(wǎng)絡(luò)安全問(wèn)題。
SDN架構(gòu)是在傳統(tǒng)網(wǎng)絡(luò)架構(gòu)基礎(chǔ)上,結(jié)合網(wǎng)絡(luò)虛擬技術(shù)構(gòu)建的分層式邏輯架構(gòu),包括應(yīng)用層、控制層和數(shù)據(jù)層3個(gè)邏輯層[2],見(jiàn)圖1。其主要目的是將網(wǎng)絡(luò)資源的調(diào)度管理與網(wǎng)絡(luò)物理設(shè)備進(jìn)行分離,通過(guò)可編程的方式靈活調(diào)度網(wǎng)絡(luò)資源。物理網(wǎng)絡(luò)設(shè)備不需要再單獨(dú)配置軟件協(xié)議,大大提高了網(wǎng)絡(luò)設(shè)備的功能可擴(kuò)展性與網(wǎng)絡(luò)兼容性,但相應(yīng)的各個(gè)邏輯層上也存在很多安全問(wèn)題。
(1)應(yīng)用平面是SDN架構(gòu)中直接面向用戶提供應(yīng)用級(jí)服務(wù)的邏輯層,集合了各類(lèi)網(wǎng)絡(luò)應(yīng)用程序。主要的安全隱患包括應(yīng)用程序自帶的惡意代碼、身份驗(yàn)證的潛在風(fēng)險(xiǎn)以及業(yè)務(wù)邏輯的配置缺陷等。
(2)控制平面是SDN架構(gòu)的核心層,由核心組件SDN控制器構(gòu)成。SDN控制器同時(shí)負(fù)責(zé)應(yīng)用層的業(yè)務(wù)響應(yīng)與數(shù)據(jù)層的鏈路控制,提供有北向與南向兩個(gè)接口,北向接口負(fù)責(zé)與應(yīng)用層交互,接收應(yīng)用層消息和解析業(yè)務(wù)需求;南向接口負(fù)責(zé)與數(shù)據(jù)層的OpenFlow交換機(jī)通信,采集網(wǎng)絡(luò)拓?fù)湫畔?,依?jù)頂層業(yè)務(wù)需求和底層鏈路狀態(tài)構(gòu)建流表,進(jìn)行網(wǎng)絡(luò)資源的分配與調(diào)度。SDN控制層的安全問(wèn)題主要集中在SDN控制器上,包括流表的惡意篡改、數(shù)據(jù)請(qǐng)求惡意攻擊等。例如DoS/DDoS攻擊,攻擊者通過(guò)非法訪問(wèn)短時(shí)間內(nèi)向SDN控制器發(fā)送大量的網(wǎng)絡(luò)請(qǐng)求,導(dǎo)致SDN控制器負(fù)荷超載過(guò)大而癱瘓,繼而引發(fā)網(wǎng)絡(luò)的單點(diǎn)故障問(wèn)題。
(3)數(shù)據(jù)平面是SDN架構(gòu)的物理鏈路層,通過(guò)網(wǎng)絡(luò)虛擬技術(shù)構(gòu)建物理設(shè)備與邏輯控制的映射關(guān)系,并依據(jù)控制層指令完成實(shí)際的網(wǎng)絡(luò)資源調(diào)度和數(shù)據(jù)轉(zhuǎn)發(fā)。數(shù)據(jù)層的安全問(wèn)題主要是針對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)備和通信鏈路的網(wǎng)絡(luò)攻擊,SDN網(wǎng)絡(luò)通信采用的主要協(xié)議是傳輸層安全協(xié)議(transport layer security,TLS)和安全套接字協(xié)議(secure sockets layer,SSL),用于提供通信數(shù)據(jù)的完整性驗(yàn)證和網(wǎng)絡(luò)連接加密功能。在此前提下為了簡(jiǎn)化交換設(shè)備的協(xié)議配置,提高傳輸效率,SDN鏈路通信不再進(jìn)行額外的安全驗(yàn)證,也就存在一定的安全漏洞和被攻擊的風(fēng)險(xiǎn),例如惡意交換機(jī)的身份偽造、竊聽(tīng)、欺騙等問(wèn)題。
區(qū)塊鏈技術(shù)將網(wǎng)絡(luò)中傳輸?shù)男畔⒁暈樾畔㈡?,一個(gè)信息鏈由若干帶有時(shí)間順序標(biāo)識(shí)的區(qū)塊構(gòu)成,每個(gè)區(qū)塊僅保存部分信息。信息鏈會(huì)廣播到網(wǎng)絡(luò)中的所有節(jié)點(diǎn)上進(jìn)行分布式保存,因此信息很難被篡改,如需要修改區(qū)塊鏈中的信息,需獲得半數(shù)以上節(jié)點(diǎn)的授權(quán)。區(qū)塊鏈技術(shù)具有以下特點(diǎn)。
(1)去中心化。區(qū)塊鏈信息不歸屬于任何單一主體控制,而是分布在多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)中,由所有的網(wǎng)絡(luò)節(jié)點(diǎn)對(duì)其共同進(jìn)行管理[3],并通過(guò)共識(shí)機(jī)制實(shí)現(xiàn)各節(jié)點(diǎn)之間的信息一致。
(2)數(shù)據(jù)防篡改性。區(qū)塊鏈技術(shù)通過(guò)哈希算法為信息鏈中的每個(gè)區(qū)塊生成唯一標(biāo)識(shí)的哈希值,然后依據(jù)哈希值的排列順序?qū)⒏鱾€(gè)區(qū)塊按指定序列進(jìn)行關(guān)聯(lián),其中任意區(qū)塊被修改,都會(huì)使整個(gè)信息鏈的區(qū)塊序列發(fā)生改變,且哈希值計(jì)算過(guò)程具有不可逆特性,因此篡改者很難在不改動(dòng)哈希值的情況下篡改數(shù)據(jù)內(nèi)容,也很難偽造哈希值。
共識(shí)機(jī)制主要用來(lái)解決區(qū)塊鏈信息分布式管理的數(shù)據(jù)一致性問(wèn)題,由于區(qū)塊鏈具有去中心化的技術(shù)特性,數(shù)據(jù)鏈區(qū)塊由網(wǎng)絡(luò)中所有的節(jié)點(diǎn)共同管理,當(dāng)數(shù)據(jù)發(fā)生變化時(shí),需要所有的節(jié)點(diǎn)都能夠同步,這種為多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)提供數(shù)據(jù)一致性合法性驗(yàn)證的機(jī)制就是共識(shí)機(jī)制[4]。共識(shí)機(jī)制的實(shí)現(xiàn)方法主要有3種。
(1)基于工作量的合法驗(yàn)證(PoW)。通過(guò)哈希散列計(jì)算獲取隨機(jī)哈希值,當(dāng)隨機(jī)哈希值的計(jì)算達(dá)到一定工作量后才能滿足系統(tǒng)預(yù)設(shè)的條件,就可以通過(guò)節(jié)點(diǎn)的合法性認(rèn)證,并以該哈希值為標(biāo)識(shí)生成新的區(qū)塊加入?yún)^(qū)塊鏈中。PoW機(jī)制是完全去中心化的一種驗(yàn)證機(jī)制,網(wǎng)絡(luò)中的節(jié)點(diǎn)都可以自由加入或退出,在此前提下攻擊者要掌握網(wǎng)絡(luò)半數(shù)以上的資源并發(fā)起攻擊幾乎是不可能的。
(2)基于權(quán)益的合法驗(yàn)證(PoS)。以擁有幣齡的權(quán)益占比作為合法性驗(yàn)證的評(píng)判標(biāo)準(zhǔn),持有的幣齡越長(zhǎng),通過(guò)節(jié)點(diǎn)合法性驗(yàn)證的概率就越高[5]。幣齡是指用戶持有的代幣數(shù)與持有時(shí)長(zhǎng)的乘積,代幣可以通過(guò)區(qū)塊鏈系統(tǒng)的無(wú)差別隨機(jī)分發(fā)獲取,也可以通過(guò)網(wǎng)絡(luò)的虛擬幣交易獲取。與PoW機(jī)制相比PoS機(jī)制減少了計(jì)算開(kāi)銷(xiāo)和大量的網(wǎng)絡(luò)資源占用,但代幣的分發(fā)機(jī)制要做到完全中立還需要匹配完整的監(jiān)督機(jī)制才行。
(3)基于授權(quán)的合法驗(yàn)證(DPoS)。該機(jī)制仍然沿用了PoS的驗(yàn)證模式,不同的是不再需要所有節(jié)點(diǎn)都參與到代幣的分發(fā)和驗(yàn)證當(dāng)中,而是通過(guò)所有節(jié)點(diǎn)的投票選舉,授權(quán)部分代表節(jié)點(diǎn)來(lái)完成機(jī)制的驗(yàn)證工作。為了進(jìn)一步確保機(jī)制的公平性,DPoS機(jī)制設(shè)置了實(shí)時(shí)的投票選舉機(jī)制,允許鏈中的所有節(jié)點(diǎn)隨時(shí)選舉、罷免和更換節(jié)點(diǎn)代表。由于DPoS機(jī)制減少了參與驗(yàn)證的節(jié)點(diǎn)數(shù)量,因此在執(zhí)行效率上要明顯高于前兩種機(jī)制。
哈希二叉樹(shù)(Merkle)用于實(shí)現(xiàn)數(shù)據(jù)的完整性驗(yàn)證。Merkle樹(shù)結(jié)構(gòu)包括根節(jié)點(diǎn)、分叉節(jié)點(diǎn)和葉節(jié)點(diǎn)3個(gè)層級(jí),其中葉節(jié)點(diǎn)位于Merkle樹(shù)結(jié)構(gòu)的末端,負(fù)責(zé)收集區(qū)塊內(nèi)的所有數(shù)據(jù)操作的哈希值[6];分叉節(jié)點(diǎn)位于Merkle樹(shù)結(jié)構(gòu)的中間層級(jí),用于歸納所屬分叉的兩個(gè)葉節(jié)點(diǎn)上的哈希值,并生成新的關(guān)聯(lián)哈希值;根節(jié)點(diǎn)位于Merkle樹(shù)結(jié)構(gòu)的頂端,且是唯一節(jié)點(diǎn),所有的分叉節(jié)點(diǎn)哈希值將最終匯集于根節(jié)點(diǎn),并生成一個(gè)關(guān)聯(lián)樹(shù)內(nèi)全局的哈希值。Merkle樹(shù)內(nèi)任意節(jié)點(diǎn)的數(shù)據(jù)變動(dòng)都會(huì)重新計(jì)算哈希值,根節(jié)點(diǎn)的哈希值也會(huì)跟著改變。通過(guò)對(duì)根節(jié)點(diǎn)哈希值的檢測(cè)就可以動(dòng)態(tài)掌握數(shù)據(jù)變化情況,以確保數(shù)據(jù)的完整性,防止數(shù)據(jù)被非法篡改。
SDN的3層架構(gòu)中,基于控制層和數(shù)據(jù)層的網(wǎng)絡(luò)安全問(wèn)題是本文重點(diǎn)關(guān)注的問(wèn)題,包括控制層的流表數(shù)據(jù)篡改、SDN控制器的單點(diǎn)攻擊和數(shù)據(jù)層的鏈路節(jié)點(diǎn)攻擊等。為了有效解決上述問(wèn)題,本文充分結(jié)合區(qū)塊鏈技術(shù)的去中心化與防篡改技術(shù)特性,構(gòu)建SDN網(wǎng)絡(luò)的安全驗(yàn)證機(jī)制,以預(yù)防SDN控制器單點(diǎn)攻擊、數(shù)據(jù)篡改和網(wǎng)絡(luò)節(jié)點(diǎn)身份仿冒的潛在網(wǎng)絡(luò)風(fēng)險(xiǎn)。
融合了區(qū)塊鏈技術(shù)的SDN網(wǎng)絡(luò)架構(gòu)總體設(shè)計(jì)見(jiàn)圖2。
由圖2可知,一個(gè)區(qū)塊鏈系統(tǒng)可以為多個(gè)SDN子網(wǎng)提供服務(wù),在單個(gè)SDN子網(wǎng)中通過(guò)進(jìn)一步組網(wǎng)形成一個(gè)私有鏈主體,由一個(gè)核心SDN控制器集中實(shí)現(xiàn)私有鏈內(nèi)部的安全機(jī)制的部署與管理,多個(gè)SDN子網(wǎng)又可以組成一個(gè)共享鏈,單個(gè)子網(wǎng)被視為一個(gè)區(qū)塊鏈節(jié)點(diǎn),對(duì)于公開(kāi)在共享鏈上的信息則由多個(gè)SDN子網(wǎng)共同進(jìn)行管理。區(qū)塊鏈系統(tǒng)接入私有鏈需要通過(guò)SDN子網(wǎng)的安全網(wǎng)關(guān),安全網(wǎng)關(guān)由SDN子網(wǎng)的核心SDN控制器指定,其主要作用有3個(gè):(1)對(duì)區(qū)塊鏈節(jié)點(diǎn)進(jìn)行驗(yàn)證并頒發(fā)有效證書(shū);(2)為SDN子網(wǎng)中的區(qū)塊鏈節(jié)點(diǎn)生成和下發(fā)對(duì)應(yīng)的加密私鑰,并負(fù)責(zé)管理當(dāng)前子網(wǎng)的公鑰,通過(guò)公鑰與私鑰的加解密匹配驗(yàn)證,來(lái)確定區(qū)塊鏈節(jié)點(diǎn)身份的合法性,這個(gè)過(guò)程也稱(chēng)為簽名;(3)為區(qū)塊鏈系統(tǒng)創(chuàng)建一個(gè)創(chuàng)始區(qū)塊,之后會(huì)在創(chuàng)始區(qū)塊之上創(chuàng)建新的區(qū)塊用于保存數(shù)據(jù)。下面將重點(diǎn)針對(duì)SDN子網(wǎng)私有鏈的網(wǎng)絡(luò)安全策略實(shí)現(xiàn)的具體過(guò)程和關(guān)鍵機(jī)制展開(kāi)深入研究。
SDN子網(wǎng)內(nèi)區(qū)塊私有鏈策略實(shí)現(xiàn)過(guò)程包括以下幾個(gè)步驟。
(1)SDN主控制器通過(guò)鏈路層發(fā)現(xiàn)協(xié)議(link layer discovery protocol,LLDP)獲取網(wǎng)絡(luò)節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu),向其鏈接的網(wǎng)絡(luò)交換機(jī)分發(fā)數(shù)字簽名。
(2)交換機(jī)將接收到的數(shù)據(jù)包從其入口以外的所有端口廣播出去,如果接收數(shù)據(jù)包的是普通交換機(jī),例如OpenFlow交換機(jī),此類(lèi)交換機(jī)不具備流規(guī)則解析的功能,就將數(shù)據(jù)包繼續(xù)向外轉(zhuǎn)發(fā)而不進(jìn)行任何處理。如果是被選舉為區(qū)塊鏈代表的節(jié)點(diǎn),則開(kāi)始對(duì)數(shù)據(jù)包進(jìn)行解析和簽名。
(3)區(qū)塊鏈節(jié)點(diǎn)交換機(jī)將解析后流表信息保存在自己的鏈路表中,調(diào)用哈希函數(shù)計(jì)算哈希值標(biāo)識(shí),并作為區(qū)頭與簽名證書(shū)、加密私鑰等信息一起封裝為區(qū)塊。
(4)當(dāng)區(qū)塊鏈節(jié)點(diǎn)完成對(duì)新增區(qū)塊的哈希標(biāo)識(shí)后,會(huì)將哈希摘要提取到Merkle樹(shù)中作為一個(gè)葉節(jié)點(diǎn)進(jìn)行保存。每當(dāng)新增一個(gè)區(qū)塊,就需要更新一遍Merkle結(jié)構(gòu)樹(shù),通過(guò)Merkle樹(shù)可以動(dòng)態(tài)掌握SDN子網(wǎng)的全局網(wǎng)絡(luò)拓?fù)淝闆r和節(jié)點(diǎn)的安全狀態(tài)。
為了有效解決SDN控制器單點(diǎn)攻擊所造成的全局網(wǎng)絡(luò)癱瘓問(wèn)題,首先從全局視角將網(wǎng)絡(luò)劃分為多個(gè)SDN子網(wǎng),每個(gè)子網(wǎng)都選舉出一個(gè)SDN主控制器配合多個(gè)區(qū)塊鏈節(jié)點(diǎn)來(lái)保障單個(gè)子網(wǎng)的鏈路安全,一個(gè)子網(wǎng)受到攻擊不會(huì)波及全網(wǎng)安全;其次基于單個(gè)子網(wǎng)視角,在子網(wǎng)內(nèi)部采用分層式的多節(jié)點(diǎn)部署,由主控制器與分布式區(qū)塊節(jié)點(diǎn)共同構(gòu)建一條主鏈,所有的數(shù)據(jù)信息需要經(jīng)過(guò)區(qū)塊創(chuàng)建、驗(yàn)證才能進(jìn)行上鏈存儲(chǔ)。一旦主控制器受到攻擊,主鏈上其他節(jié)點(diǎn)可以隨時(shí)罷免該節(jié)點(diǎn)的主控制權(quán),重新選舉主控制器。
SDN主控制器的選舉采用的是DPoS共識(shí)機(jī)制,在主鏈上區(qū)塊節(jié)點(diǎn)都具有參與選舉和被選舉的權(quán)益,選舉主控制器依據(jù)的是主鏈上各個(gè)節(jié)點(diǎn)的信任值,信任值最高者會(huì)當(dāng)選為主控制器。信任值的確定包括靜態(tài)與動(dòng)態(tài)兩種方式,靜態(tài)方式是由網(wǎng)絡(luò)監(jiān)管者手動(dòng)設(shè)置信任值參數(shù),前提是監(jiān)管者能夠結(jié)合自身經(jīng)驗(yàn)對(duì)當(dāng)前網(wǎng)絡(luò)狀態(tài)做出較為準(zhǔn)確的判斷;動(dòng)態(tài)方式是通過(guò)實(shí)時(shí)算法對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)當(dāng)前的時(shí)延、帶寬等指標(biāo)參數(shù)進(jìn)行間隔采樣和權(quán)重計(jì)算[7],并將計(jì)算結(jié)果作為節(jié)點(diǎn)信任值更新的重要參考依據(jù)。
被選舉為主控制器的節(jié)點(diǎn)負(fù)責(zé)管理整個(gè)子網(wǎng),為主鏈上所有的交換機(jī)節(jié)點(diǎn)生成簽名,交換機(jī)節(jié)點(diǎn)將主控制器發(fā)來(lái)的驗(yàn)證信息轉(zhuǎn)換為哈希值并封裝為區(qū)塊,再將區(qū)頭信息提取到Merkle樹(shù)的葉節(jié)點(diǎn)上,主控制器作為Merkle樹(shù)的根節(jié)點(diǎn),負(fù)責(zé)所有葉節(jié)點(diǎn)的信息安全驗(yàn)證,當(dāng)節(jié)點(diǎn)轉(zhuǎn)發(fā)數(shù)據(jù)時(shí)會(huì)向主控制器提出流表申請(qǐng),主控制器通過(guò)簽名即可驗(yàn)證節(jié)點(diǎn)的身份合法性。
區(qū)塊是區(qū)塊鏈最基礎(chǔ)的數(shù)據(jù)單元,由區(qū)塊頭部和區(qū)塊主體兩部分組成。其中區(qū)塊頭部包括了3組元數(shù)據(jù),即前一區(qū)塊的哈希值、自身的哈希值和后一區(qū)塊的哈希值,通過(guò)這3組元數(shù)據(jù)即可將所有的區(qū)塊按照指定的順序關(guān)聯(lián)起來(lái),并構(gòu)成一條主鏈;區(qū)塊主體用于記錄所有的轉(zhuǎn)發(fā)數(shù)據(jù),當(dāng)數(shù)據(jù)被惡意篡改獲取,都會(huì)改變區(qū)塊頭部的哈希值,而無(wú)法通過(guò)主控制器的簽名驗(yàn)證。區(qū)塊創(chuàng)建機(jī)制的實(shí)現(xiàn)過(guò)程包括以下5個(gè)步驟。
(1)等待接收主控制器分發(fā)的數(shù)字簽名,獲取到簽名數(shù)據(jù)包后進(jìn)行解析,這個(gè)過(guò)程稱(chēng)為背書(shū)。
(2)向主控制器申請(qǐng)轉(zhuǎn)發(fā)數(shù)據(jù)分組的流規(guī)則和流表信息,將轉(zhuǎn)發(fā)數(shù)據(jù)進(jìn)行封裝保存至區(qū)塊主體,并記錄當(dāng)前時(shí)間到指定的時(shí)間戳字段中。
(3)調(diào)用哈希函數(shù)計(jì)算哈希值,與前后關(guān)聯(lián)節(jié)點(diǎn)的哈希值一并封裝到區(qū)塊頭部,關(guān)聯(lián)節(jié)點(diǎn)的哈希值由上一步驟中申請(qǐng)的流規(guī)則提供。
(4)將區(qū)塊頭部信息提取到Merkle樹(shù)中,更新Merkle樹(shù)的關(guān)聯(lián)中間節(jié)點(diǎn)和根節(jié)點(diǎn)的哈希值。
(5)計(jì)算一段時(shí)間內(nèi)創(chuàng)建區(qū)塊的平均時(shí)間,平均時(shí)間越長(zhǎng),區(qū)塊創(chuàng)建的難度標(biāo)識(shí)值越大,則認(rèn)為區(qū)塊創(chuàng)建的計(jì)算總量開(kāi)銷(xiāo)在增大,需要區(qū)塊鏈系統(tǒng)做出整體的動(dòng)態(tài)調(diào)整。
隨著SDN架構(gòu)在網(wǎng)絡(luò)中的廣泛應(yīng)用,也引起了一些新的網(wǎng)絡(luò)安全問(wèn)題,例如控制層的控制器單點(diǎn)攻擊、數(shù)據(jù)層的交換機(jī)身份冒用以及網(wǎng)絡(luò)數(shù)據(jù)的篡改問(wèn)題,都對(duì)網(wǎng)絡(luò)安全產(chǎn)生了嚴(yán)重影響。為了有效解決上述問(wèn)題,本文對(duì)區(qū)塊鏈技術(shù)展開(kāi)了全面研究,在此基礎(chǔ)上提出了一種基于區(qū)塊鏈技術(shù)的網(wǎng)絡(luò)安全解決策略,通過(guò)區(qū)塊鏈選舉機(jī)制解決了SDN控制器單點(diǎn)攻擊的問(wèn)題,通過(guò)區(qū)塊鏈創(chuàng)建機(jī)制實(shí)現(xiàn)了交換機(jī)身份的合法性驗(yàn)證,并確保了交換數(shù)據(jù)的完整性與可靠性。