黃家瑋,李淑平,計(jì) 瑋,王疆盛,王偉平
(中南大學(xué) 信息科學(xué)與工程學(xué)院,湖南 長沙 410083)
網(wǎng)絡(luò)空間安全學(xué)科的課程主要講授網(wǎng)絡(luò)空間中的安全威脅和防護(hù)問題,其學(xué)科人才培養(yǎng)除了需要理論支持外,還需要大量的最新仿真實(shí)踐環(huán)境。相對(duì)于傳統(tǒng)的信息安全課程,網(wǎng)絡(luò)空間安全課程更關(guān)注于在網(wǎng)絡(luò)環(huán)境下的安全攻防技術(shù)。由于目前信息安全實(shí)驗(yàn)室大小和硬件條件等的限制,學(xué)生實(shí)驗(yàn)操作的時(shí)間非常有限,只能按照既定的實(shí)驗(yàn)流程機(jī)械式地在局域網(wǎng)內(nèi)操作,難以自主靈活地開展大規(guī)模的網(wǎng)絡(luò)空間安全實(shí)驗(yàn)學(xué)習(xí)。
軟件定義網(wǎng)絡(luò)(SDN)[1-3]作為一種新型網(wǎng)絡(luò)創(chuàng)新架構(gòu),其核心特點(diǎn)是控制與轉(zhuǎn)發(fā)的分離、設(shè)備資源的虛擬化以及具有開放的可編程接口,從而能夠靈活控制網(wǎng)絡(luò)流量,為網(wǎng)絡(luò)創(chuàng)新提供良好的平臺(tái)[4]。近年來,軟件定義網(wǎng)絡(luò)由于其靈活可編程的特點(diǎn),逐漸被引入計(jì)算機(jī)相關(guān)專業(yè)的課程教學(xué)中[5-6]。其中,輕量級(jí)網(wǎng)絡(luò)仿真工具M(jìn)ininet[7]是目前主要的軟件定義網(wǎng)絡(luò)實(shí)驗(yàn)搭建平臺(tái)。
本文基于軟件定義網(wǎng)絡(luò)SDN架構(gòu),選擇輕量級(jí)實(shí)驗(yàn)平臺(tái)Mininet,設(shè)計(jì)了BGP路徑挾持和ARP攻防的實(shí)驗(yàn)方案。通過實(shí)驗(yàn),學(xué)生可以熟悉軟件定義網(wǎng)絡(luò)架構(gòu),掌握BGP路徑挾持和ARP攻防的原理,學(xué)習(xí)網(wǎng)絡(luò)空間安全的核心知識(shí)。
Mininet是一個(gè)可以模擬SDN網(wǎng)絡(luò)的仿真系統(tǒng),由虛擬的終端節(jié)點(diǎn)(End-Host)、OpenFlow交換機(jī)和控制器組成[8]。Mininet使用Python語言進(jìn)行開發(fā)設(shè)計(jì),整體代碼包括運(yùn)行文件和Python庫文件兩大類。
在實(shí)現(xiàn)架構(gòu)上,Mininet是由斯坦福大學(xué)的Nick McKeown教授領(lǐng)導(dǎo)的研究小組基于Linux Container內(nèi)核虛擬化技術(shù)開發(fā)的進(jìn)程虛擬化平臺(tái),可以模擬真實(shí)網(wǎng)絡(luò),同時(shí)也可將虛擬化平臺(tái)下的代碼遷移到真實(shí)環(huán)境中。Mininet基于namespace機(jī)制,其總體架構(gòu)按照數(shù)據(jù)路徑的運(yùn)行權(quán)限可以分為kernel datapath和userspace datapath。其中kernel datapath主要作用是將分組轉(zhuǎn)發(fā)的邏輯進(jìn)行編譯并規(guī)整到Linux內(nèi)核中;而userspace datapath是將分組轉(zhuǎn)發(fā)邏輯實(shí)現(xiàn)為應(yīng)用程序,優(yōu)點(diǎn)是更為靈活且更容易重新編譯。Mininet的kernel datapath架構(gòu)和userspace datapath架構(gòu)分別如圖1和圖2所示。從圖中可以看出,kernel datapath架構(gòu)里控制器和交換機(jī)的網(wǎng)絡(luò)接口都在root命名空間中,每個(gè)主機(jī)都處于獨(dú)立的命名空間;而userspace datapath架構(gòu)下網(wǎng)絡(luò)的每個(gè)節(jié)點(diǎn)都擁有自己獨(dú)立的命名空間,同時(shí)還多出了一個(gè)叫ofdatapath的進(jìn)程。
圖1 kernel datapath架構(gòu)
功能上,Mininet能在有限資源的電腦上快速建立大規(guī)模仿真網(wǎng)絡(luò)。它的所有代碼幾乎可以無縫遷移到真實(shí)的硬件環(huán)境,方便為網(wǎng)絡(luò)添加新的功能并進(jìn)行相關(guān)的研發(fā)測試。Mininet不但可以對(duì)現(xiàn)有的傳統(tǒng)網(wǎng)絡(luò)協(xié)議和算法等進(jìn)行開發(fā)驗(yàn)證,還支持OpenFlow[9]和OpenvSwith[10]等軟件定義網(wǎng)絡(luò)協(xié)議。目前,Mininet已成為Openflow協(xié)議進(jìn)行演示和測試的官方平臺(tái)。
圖2 userspace datapath架構(gòu)
作為一個(gè)進(jìn)程虛擬化網(wǎng)絡(luò)仿真工具,Mininet主要特性包括以下5個(gè)方面:
1)支持OpenFlow、Open vSwitch等軟件定義網(wǎng)絡(luò)部件;
2)支持系統(tǒng)級(jí)的還原測試;
3)支持復(fù)雜拓?fù)洹⒆远x拓?fù)?支持上千臺(tái)主機(jī)的網(wǎng)絡(luò)結(jié)構(gòu);
4)提供python API,方便多人協(xié)同開發(fā);
5)高擴(kuò)展性與很好的硬件移植性,在Mininet上運(yùn)行的代碼可以輕松移植到支持Openflow的硬件設(shè)備[11-12]。
總而言之,Mininet提供了一個(gè)十分便捷、優(yōu)秀的軟件定義網(wǎng)絡(luò)研究與測試平臺(tái),而無須使用昂貴的專業(yè)硬件實(shí)驗(yàn)平臺(tái),避免了使用傳統(tǒng)虛擬機(jī)搭建復(fù)雜網(wǎng)絡(luò)環(huán)境的工作部署開銷。
Mininet網(wǎng)絡(luò)實(shí)驗(yàn)主要采用python腳本和linux命令行操作完成。首先編寫python腳本搭建拓?fù)?添加遠(yuǎn)程控制器、交換機(jī)、主機(jī)等,并連接相應(yīng)的鏈路。設(shè)置控制器參數(shù),完成實(shí)驗(yàn)部署。然后,執(zhí)行相應(yīng)腳本和linux命令進(jìn)一步開展實(shí)驗(yàn),實(shí)現(xiàn)BGP路徑挾持攻擊和ARP攻防實(shí)驗(yàn)。
互聯(lián)網(wǎng)包括無數(shù)個(gè)相互連接的自治系統(tǒng)AS,其中AS之間通過一個(gè)通用的邊界網(wǎng)關(guān)協(xié)議(BGP)進(jìn)行交互彼此的路由信息[13]。BGP是基于信任原則的協(xié)議,其在消息通告中把BGP鄰居作為完全可信的實(shí)體,并認(rèn)為所有從鄰居獲取到的路由信息都是當(dāng)前網(wǎng)絡(luò)的真實(shí)拓?fù)淝闆r。同時(shí),BGP的所有路由通告報(bào)文都是全明文的,并沒有相應(yīng)的加密機(jī)制或安全驗(yàn)證,很容易遭到惡意黑客的利用。
因此,如果一個(gè)攻擊者向其他AS通告一個(gè)不屬于自己的IP前綴,接收到通告的AS在沒有辦法驗(yàn)證通告信息是否屬實(shí)的情況下,只能根據(jù)自身的策略來判斷如何選擇到達(dá)該IP前綴的路徑。當(dāng)攻擊者AS被選擇作為到達(dá)該IP前綴的下一跳地址,所有到達(dá)該IP前綴的數(shù)據(jù)都會(huì)被成功劫持到攻擊者AS處,從而被攻擊者進(jìn)行不正當(dāng)?shù)氖褂?。并?受到感染的AS會(huì)把該攻擊信息繼續(xù)向其他的AS傳播,使得更多的AS受到感染,逐漸形成了BGP劫持攻擊。BGP路徑挾持攻擊的攻擊者往往通過廣播偽造擁有更短的路由來改變數(shù)據(jù)的傳輸路徑,從而攔截或者修改數(shù)據(jù)。
實(shí)驗(yàn)首先在Mininet環(huán)境下使用python腳本完成實(shí)驗(yàn)配置。在導(dǎo)入了功能和輔助模塊后,創(chuàng)建實(shí)驗(yàn)拓?fù)淙鐖D3所示。其中包括4個(gè)AS自治系統(tǒng)AS1~AS4及其各自的BGP邊界路由器R1~R4。路由器路由連接情況如下:R1和R2、R4相連,R2和R1、R3相連,R3和R2相連。在AS3和AS4中分別有1臺(tái)Web服務(wù)器,同時(shí)控制器可以控制各邊界路由器。
圖3 BGP攻擊實(shí)驗(yàn)拓?fù)?/p>
在攻擊之前,可以登錄AS1的邊界路由器R1查看路由信息,結(jié)果如圖4所示。從圖4中可以看出,要到達(dá)AS3的路由是 “2 3”(即通過AS2和AS3)。同時(shí),在AS1中客戶端主機(jī)上,用curl命令可以正常訪問AS3中Web服務(wù)器的主頁,這說明AS1的路由信息目前是正確的。
圖4 BGP攻擊前AS1的路由表信息
攻擊開始后,首先啟動(dòng)一個(gè)攻擊自治系統(tǒng)AS4,并向AS1通告AS4有一條更短路徑可以到達(dá)“13.0.0.0/8”,以欺騙AS1來選擇這條“更短”路徑向AS3發(fā)送數(shù)據(jù)。此時(shí),IP地址為13.0.0.0/8的合法路由器R3通過R2向R1通告的路由路徑為“2 3”,而攻擊者路由器R4構(gòu)造的虛假AS_PATH路徑信息為 “1 5”,路由器R1接收到這兩條到達(dá)IP地址13.0.0.0/8的路由通告報(bào)文,根據(jù)路徑最短原則,R1會(huì)優(yōu)先選擇攻擊者路由器R4作為下一跳路由器,由此造成路徑劫持攻擊。
此時(shí),登錄AS1的邊界路由器并查看路由信息,發(fā)現(xiàn)R1確實(shí)已經(jīng)選擇了AS4作為它向AS3發(fā)送數(shù)據(jù)的下一跳路由,結(jié)果如圖5所示。同時(shí),AS1中客戶端主機(jī)訪問的已經(jīng)變成位于作為攻擊者的AS4中的Web服務(wù)器,AS1客戶端主機(jī)使用curl命令打開了AS4中Web服務(wù)器的主頁,這說明BGP路徑挾持攻擊成功。
圖5 BGP攻擊后AS1的路由表信息
ARP,即地址解析協(xié)議,是根據(jù)IP地址獲取物理地址的一個(gè)網(wǎng)絡(luò)協(xié)議。ARP攻擊首先從偽造IP地址和MAC地址入手,在網(wǎng)絡(luò)中產(chǎn)生大量的ARP通信量使網(wǎng)絡(luò)阻塞,ARP攻擊方不斷地發(fā)出偽造的ARP響應(yīng)包,進(jìn)而更改目標(biāo)主機(jī)ARP緩存中的IP-MAC地址映射,最終實(shí)現(xiàn)網(wǎng)絡(luò)中斷或中間人攻擊的目的。
ARP攻擊主要存在于局域網(wǎng)網(wǎng)絡(luò)。如果某局域網(wǎng)中存在一臺(tái)感染了ARP欺騙木馬病毒的計(jì)算機(jī),那么該計(jì)算機(jī)會(huì)通過ARP欺騙的方式進(jìn)一步擴(kuò)大感染范圍,最終欺騙整個(gè)局域網(wǎng)的主機(jī)和交換機(jī),截獲上網(wǎng)流量,造成局域網(wǎng)內(nèi)的通信故障。總體上,ARP欺騙攻擊可分為兩種,一種是對(duì)路由器ARP表的欺騙;另一種是對(duì)內(nèi)網(wǎng)主機(jī)的網(wǎng)關(guān)欺騙。本實(shí)驗(yàn)實(shí)現(xiàn)第二種欺騙,其原理是建立虛假網(wǎng)關(guān),讓作為欺騙對(duì)象的主機(jī)向虛假網(wǎng)關(guān)發(fā)送數(shù)據(jù),而不是通過正常的路由器途徑來連接網(wǎng)絡(luò)。
實(shí)驗(yàn)首先開啟Mininet,通過python腳本建立如圖6所示的網(wǎng)絡(luò)拓?fù)?。其中包?臺(tái)主機(jī)、1臺(tái)充當(dāng)網(wǎng)關(guān)的三層交換機(jī)和1臺(tái)控制器。網(wǎng)關(guān)IP地址為192.168.0.1,主機(jī)PC1的 IP地址為192.168.0.120,主機(jī) PC2的 IP地址為192.168.0.200。先執(zhí)行pingall命令查看當(dāng)前的網(wǎng)絡(luò)配置情況,顯示網(wǎng)絡(luò)正常。
圖6 ARP攻防實(shí)驗(yàn)拓?fù)?/p>
本文選擇用PC1對(duì)PC2進(jìn)行ARP攻擊。利用ARP斷網(wǎng)攻擊工具arpspoof攻擊后,攻擊方不斷地發(fā)出偽造的ARP響應(yīng)包,通過偽造IP地址和MAC地址實(shí)現(xiàn)ARP欺騙,在網(wǎng)絡(luò)中產(chǎn)生大量的ARP通信量使網(wǎng)絡(luò)阻塞。登錄PC2的終端,利用 “arp-a”命令查看PC2的IP-MAC地址映射表,顯示其ARP緩存中對(duì)應(yīng)網(wǎng)關(guān)的IP-MAC條目被更改。此時(shí),PC2無法ping通網(wǎng)關(guān),說明ARP攻擊造成了PC2的網(wǎng)絡(luò)中斷。
接下來,防御ARP攻擊。目前對(duì)于ARP攻擊常用的防護(hù)方法主要有綁定IP地址和MAC地址、安裝ARP防護(hù)軟件和使用具有ARP防護(hù)功能的路由器。在本實(shí)驗(yàn)中通過靜態(tài)綁定網(wǎng)關(guān)的IP地址和MAC地址來實(shí)施ARP攻擊的防御,即在PC2上執(zhí)行 “arp-s網(wǎng)關(guān)IP地址網(wǎng)關(guān)MAC地址”命令,讓PC2可以達(dá)到防御ARP攻擊的效果。綁定之后,查看PC2的IP-MAC地址映射表,確定網(wǎng)關(guān)對(duì)應(yīng)的IP-MAC地址綁定成功。再次開啟PC1對(duì)PC2的ARP攻擊,此時(shí)發(fā)現(xiàn)PC2能夠ping通網(wǎng)關(guān),成功防御ARP攻擊。
基于軟件定義網(wǎng)絡(luò)SDN架構(gòu),以Mininet為輕量級(jí)實(shí)驗(yàn)平臺(tái),設(shè)計(jì)了BGP路徑挾持和ARP攻防實(shí)驗(yàn)的教學(xué)方案,以靈活快速的實(shí)驗(yàn)手段培養(yǎng)學(xué)生實(shí)踐動(dòng)手的能力,幫助學(xué)生掌握網(wǎng)絡(luò)空間安全的基本知識(shí)和工作原理。