◆唐俊曉
基于Docker的面向網(wǎng)絡(luò)空間的漏洞靶場設(shè)計與實現(xiàn)
◆唐俊曉
(周口師范學(xué)院計算機(jī)科學(xué)與技術(shù)學(xué)院 河南 466000)
在網(wǎng)絡(luò)空間安全研究、網(wǎng)絡(luò)安全人才培養(yǎng)和攻防演練中,靶場對于理論原理與實踐技術(shù)的結(jié)合起著重要作用。為解決資源有限的條件下靶場部署難度大、資源利用效率低的問題,基于Docker虛擬化技術(shù),設(shè)計了一種可按需調(diào)配資源,構(gòu)建用戶靶機(jī)相互獨立的漏洞測試靶場。實踐測試表明,此系統(tǒng)可以通過構(gòu)建虛擬網(wǎng)絡(luò)空間,快速部署動態(tài)靶機(jī),便于應(yīng)用在高校網(wǎng)絡(luò)攻防平臺建設(shè)及各類網(wǎng)絡(luò)安全賽事中。
網(wǎng)絡(luò)安全;Docker容器;網(wǎng)絡(luò)虛擬化;漏洞靶場
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,網(wǎng)絡(luò)安全形勢愈發(fā)復(fù)雜多變。網(wǎng)絡(luò)空間已成為公認(rèn)的第五空間,網(wǎng)絡(luò)安全人才是網(wǎng)絡(luò)安全發(fā)展第一資源,而漏洞是網(wǎng)絡(luò)安全重要的研究對象,各類的網(wǎng)絡(luò)安全競賽成為選拔和培養(yǎng)網(wǎng)絡(luò)安全領(lǐng)域人才的重要手段[1]?!拔粗パ芍?,未知防焉知攻”,構(gòu)建漏洞靶場系統(tǒng),通過對漏洞進(jìn)行測試,以攻擊者的角度進(jìn)行模擬攻擊過程,從而學(xué)習(xí)漏洞成因,了解相關(guān)技術(shù)原理,是當(dāng)前網(wǎng)絡(luò)安全學(xué)習(xí)的基本方法。在構(gòu)建網(wǎng)絡(luò)攻防平臺過程中也存在著許多種制約因素,主要包括:在有限資源條件下部署實驗環(huán)境難度大,需要良好的物理設(shè)備支撐,管理困難。其次,網(wǎng)絡(luò)攻防過程本身具有一定破壞性,盡管其目的不是破壞系統(tǒng),任何不當(dāng)?shù)牟僮鞫伎赡軐χ鳈C(jī)、系統(tǒng)、應(yīng)用軟件,甚至對整個計算機(jī)網(wǎng)絡(luò)都會產(chǎn)生一定危害和影響。虛擬化技術(shù)能較大程度上緩解以上問題,基于虛擬化技術(shù)的方式又具備有應(yīng)用場景廣、破壞性小、擴(kuò)展性強(qiáng)的特點,使之成了高校網(wǎng)絡(luò)攻防平臺建設(shè)及各類網(wǎng)絡(luò)安全賽事中比較理想的實現(xiàn)手段[2]。
本文希望設(shè)計實現(xiàn)的虛擬化漏洞靶場系統(tǒng)能夠真實再現(xiàn)漏洞存在環(huán)境,在攻防的過程中能保持系統(tǒng)穩(wěn)定性,實現(xiàn)資源動態(tài)分配,節(jié)省物理設(shè)備資源。這樣的系統(tǒng)滿足以下幾個條件:(1)系統(tǒng)可以快速部署漏洞環(huán)境;(2)不同用戶創(chuàng)建的靶機(jī)環(huán)境相互獨立;(3)虛擬的網(wǎng)絡(luò)環(huán)境能真實再現(xiàn)生產(chǎn)環(huán)境下漏洞的存在條件;(4)系統(tǒng)按需分配云計算資源,測試中系統(tǒng)能抵御較為劇烈的攻擊,既能達(dá)到滲透測試演練的目的,又能維持物理主機(jī)(運(yùn)行環(huán)境)的穩(wěn)定性,從而實現(xiàn)系統(tǒng)穩(wěn)定、安全的運(yùn)行,有效滿足培訓(xùn)練習(xí)的要求[3]。
在高校、網(wǎng)絡(luò)安全賽事等的學(xué)習(xí)和訓(xùn)練中,一個靶場環(huán)境往往會分配給很多學(xué)員,若多個學(xué)員都使用同一個環(huán)境,從攻防的角度來看,培訓(xùn)的過程必然會受到影響。如果學(xué)員獨享靶場環(huán)境,又需要考慮到服務(wù)器承載能力和平臺運(yùn)行的穩(wěn)定性。此類網(wǎng)絡(luò)靶場的實現(xiàn)需要做到靶機(jī)環(huán)境獨享,且高效利用系統(tǒng)資源。
圖1 靶場架構(gòu)設(shè)計
基于上述分析,系統(tǒng)整體結(jié)構(gòu)分為靶場系統(tǒng)模塊、Docker管理模塊和漏洞庫。如圖1所示,靶場系統(tǒng)模塊分為靶場平臺和靶機(jī)控制兩個部分,靶場平臺負(fù)責(zé)展示用戶數(shù)據(jù)和靶機(jī)信息,使用者可以通過靶場平臺開啟靶機(jī),靶機(jī)控制模塊對使用者開啟的靶機(jī)數(shù)量進(jìn)行控制,限定每個用戶可以同時開啟的靶機(jī)數(shù)量,在用戶啟動靶機(jī)時會對靶機(jī)持續(xù)時間進(jìn)行限制,超過時間將靶機(jī)資源回收,使用者也可以自主選擇銷毀靶機(jī)環(huán)境,具體的靶機(jī)環(huán)境由Docker管理模塊對鏡像實例化后以容器的形式存儲在漏洞庫里。Docker管理模塊分為倉庫、容器、鏡像三個部分。倉庫模塊負(fù)責(zé)存儲制作好的漏洞環(huán)境鏡像,鏡像模塊負(fù)責(zé)從倉庫中獲取漏洞環(huán)境鏡像以及對鏡像添加標(biāo)簽、刪除操作,容器模塊負(fù)責(zé)本地容器的創(chuàng)建、運(yùn)行、終止和刪除,創(chuàng)建的容器的生成由鏡像實例化得到[4]。
復(fù)現(xiàn)的漏洞環(huán)境通常需要幾個服務(wù)組織在一起,Docker的核心思想就是如何將應(yīng)用整合到容器中,并且能在容器中實際運(yùn)行,將應(yīng)用整合到容器中并且運(yùn)行起來的過程稱為“容器化”(Containerizing)。Docker網(wǎng)絡(luò)是容器應(yīng)用之間通信的核心,也是實現(xiàn)靶場對靶機(jī)控制的核心。CNM規(guī)定了Docker網(wǎng)絡(luò)的基礎(chǔ)組成要素,CNM中3個基本要素為:沙盒(Sanbox)、終端(Endpoint)和網(wǎng)絡(luò)(Network),組件連接如下圖2所示,三個組件連接組成了Docker環(huán)境中最小的調(diào)度單位容器。系統(tǒng)搭建在Docker之上,容器之間、容器與外部網(wǎng)絡(luò)和VLAN之間的連接都依賴于不同的網(wǎng)絡(luò),Docker封裝的一系列本地驅(qū)動,為系統(tǒng)網(wǎng)絡(luò)設(shè)計提供了解決方案。其中bridge是使用最多的也是Docker默認(rèn)的網(wǎng)絡(luò)驅(qū)動[5]。
在搭建虛擬化漏洞環(huán)境時,多數(shù)漏洞應(yīng)用由一些小的服務(wù)相互協(xié)同來組成完整可用的應(yīng)用,系統(tǒng)需要復(fù)現(xiàn)漏洞的存在環(huán)境,并不需要再現(xiàn)完整的生產(chǎn)環(huán)境。以部署靶場平臺為例,靶場平臺是由多種服務(wù)組織在一起實現(xiàn)的,其架構(gòu)如下圖3所示,應(yīng)用容器化的過程中,Dockerfile定義了如何構(gòu)建應(yīng)用服務(wù)所使用的鏡像,Compose.yml是compose文件,主要包括Services,Volumes,Network等設(shè)置,Services定義了Docker服務(wù)的信息,Services用于配置對應(yīng)服務(wù)掛載的外部目錄,Networks通過定義不同的虛擬網(wǎng)絡(luò)實現(xiàn)了容器網(wǎng)絡(luò)之間的隔離。通過Docker Compose編排工具將應(yīng)用啟動,它會構(gòu)建和配置所需要的鏡像,并創(chuàng)建Docker網(wǎng)絡(luò),實現(xiàn)統(tǒng)一編排,統(tǒng)一部署[5]。
圖2 CNM組件連接
圖3 部署系統(tǒng)平臺流程
部署靶機(jī)環(huán)境時,將編寫好的Dockerfile和Compose文件,進(jìn)行圖3所示的容器編排部署過程,生成的應(yīng)用即為完整的漏洞環(huán)境,將其存放到漏洞庫中。為了實現(xiàn)使用時能快速啟動靶機(jī)環(huán)境,可以批量進(jìn)行此過程,預(yù)先在系統(tǒng)上部署大量漏洞環(huán)境鏡像,在實際使用中可以提供大量靶機(jī)環(huán)境供使用者選擇,使用者在開啟靶機(jī)的時候,系統(tǒng)只需通過Compose編排組件將漏洞環(huán)境進(jìn)行容器化過程即可,在系統(tǒng)使用人數(shù)較多的情況下,有效節(jié)省了靶機(jī)啟動時的資源消耗,也縮短了使用者開啟靶機(jī)的等待時間。
在實例化的過程中,靶機(jī)鏡像會存在很多相同的組件,如數(shù)據(jù)庫、Web中間件等,Docker會對要拉取的鏡像分層檢測,識別出本地已經(jīng)存在的鏡像層并直接使用,被多個鏡像共用的鏡像稱為共享鏡像,對于相似度很高的靶機(jī)鏡像,也會共享很多鏡像層。這種方式可以有
效地節(jié)省系統(tǒng)空間,提升系統(tǒng)性能。由于靶機(jī)并不是同時開啟的,此時環(huán)境鏡像作為靜態(tài)只讀文件保存在系統(tǒng)中,只占用系統(tǒng)的存儲資源。使用時系統(tǒng)按用戶的需求啟動相應(yīng)的靶機(jī),因此可以在一臺低配置的機(jī)器上部署大量靶機(jī),占用的只是系統(tǒng)的存儲資源。
在實際測試中,用戶開啟的靶機(jī)都是由靜態(tài)鏡像通過容器化生產(chǎn)動態(tài)靶機(jī)的過程,而不是將靶機(jī)直接部署到系統(tǒng)中,為所有使用者共享。從使用者的角度來看,不同使用者打開靶機(jī)都需要進(jìn)行容器化的過程,開啟的靶機(jī)之間都是相互獨立的,使用者可以獨享一個靶機(jī),在漏洞測試中能更有效滿足測試需求,得到更好的用戶體驗。
在本系統(tǒng)中,系統(tǒng)所有模塊以及動態(tài)靶機(jī)均以容器的形式存在,容器之間是資源相互隔離的,為了實現(xiàn)系統(tǒng)對靶機(jī)的控制和管理,通過Docker網(wǎng)絡(luò)構(gòu)造了系統(tǒng)網(wǎng)絡(luò)空間,容器作為網(wǎng)絡(luò)節(jié)點,實現(xiàn)了靶場系統(tǒng)模塊之間的連通與隔離,是部署動態(tài)靶場的關(guān)鍵技術(shù)[6]。這種網(wǎng)絡(luò)上的連通與隔離主要體現(xiàn)在靶場系統(tǒng)上,論文對系統(tǒng)的靶場平臺網(wǎng)絡(luò)和靶機(jī)控制模塊網(wǎng)絡(luò)實現(xiàn)進(jìn)行闡述。
靶場平臺部署流程如圖3所示,為了實現(xiàn)靶場平臺基本組件之間的通信,系統(tǒng)設(shè)置了一個internal網(wǎng)絡(luò),網(wǎng)絡(luò)模式為默認(rèn)的bridge模式,圖3所示的ctfd、mariadb、redis分別作為系統(tǒng)平臺、數(shù)據(jù)庫和系統(tǒng)緩存,并通過compose文件定義了虛擬網(wǎng)絡(luò)internal,通過Docker Compose統(tǒng)一部署,組件之間將處于這一網(wǎng)絡(luò)。使用docker network inspect internal命令查看組件之間的網(wǎng)絡(luò),如下圖4所示,三個組件IP處于同一C段,可以相互通信。靶場平臺是一個包含三個組件的容器,通過docker網(wǎng)絡(luò)連接,容器ctfd_ctfd_1即系統(tǒng)平臺,用戶的個人信息和實驗結(jié)果存到容器ctfd_db_1(mariadb)中,中間數(shù)據(jù)由緩存容器ctfd_cache_1(redis)存儲[7]。
圖4 平臺基本組件之間的網(wǎng)絡(luò)關(guān)聯(lián)
靶機(jī)控制模塊是實現(xiàn)系統(tǒng)資源高效利用的關(guān)鍵部分,靶機(jī)控制模塊以插件的形式連接到靶場平臺,利用靶場平臺提供插件接口,控制模塊可以在靶場平臺上對容器進(jìn)行管理。
如下圖5中,靶場平臺接入的網(wǎng)絡(luò)B用于平臺組件之間的聯(lián)系,也就是internal網(wǎng)絡(luò),在此基礎(chǔ)上,使用docker network create ctfd-containers系統(tǒng)默認(rèn)創(chuàng)建一個bridge模式的網(wǎng)絡(luò),也就是網(wǎng)絡(luò)B,用于靶機(jī)平臺對靶機(jī)容器進(jìn)行管理。啟動的靶機(jī)容器都會加入到ctfd-containers網(wǎng)絡(luò)中,網(wǎng)絡(luò)A和網(wǎng)絡(luò)B都是bridge模式,沙盒被放置在容器內(nèi)部,為容器提供網(wǎng)絡(luò)連接,靶機(jī)的一個終端(接口)連接到了網(wǎng)絡(luò)A。靶場平臺容器有兩個終端(接口)并且分別與網(wǎng)絡(luò) A 和網(wǎng)絡(luò)B相連。因為網(wǎng)絡(luò)A的存在,此時靶場平臺與靶機(jī)之間是可以相互通信的,由于沒有三層路由器的支持,靶場平臺容器的兩個終端之間將不能進(jìn)行通信。
圖5 靶場系統(tǒng)核心網(wǎng)絡(luò)模塊
在資源隔離方面,由于沙盒機(jī)制的存在,容器之間還是處于資源相互隔離的狀態(tài)。靶場平臺啟動靶機(jī)控制插件后,通過使用命令docker network inspect ctfd-containers,查看兩個模塊是否已經(jīng)加入到同一網(wǎng)絡(luò)模塊下,加入成功后,網(wǎng)絡(luò)內(nèi)容器IP處于同一C段,可以進(jìn)行通信。
靶場控制模塊由一系列的腳本文件構(gòu)成,以插件的形式運(yùn)行在靶場平臺,通過靶場平臺可視化管理界面對靶機(jī)進(jìn)行集中控制和管理,無須使用Docker命令工具,很大程度上提高了系統(tǒng)使用效率,降低了系統(tǒng)維護(hù)的難度[8]。
靶場平臺是整個系統(tǒng)的核心,開啟靶機(jī)環(huán)境前,需要準(zhǔn)備好靶機(jī)環(huán)境的Dockerfile或者Docker鏡像倉庫的地址,將獲取到的鏡像存放在漏洞庫中,便于系統(tǒng)獲取靶機(jī)環(huán)境鏡像。
靶機(jī)啟動流程如圖6所示,系統(tǒng)首先會啟動靶場平臺,這是系統(tǒng)的基礎(chǔ)和核心,靶場啟動后,接著啟動靶場控制插件,靶場平臺調(diào)用靶場控制插件來對容器進(jìn)行管理。
圖6 靶機(jī)啟動流程
靶場控制插件啟動完成后,首先對靶機(jī)鏡像完整性進(jìn)行判斷,漏洞庫中已經(jīng)存在靶機(jī)鏡像,對靶機(jī)鏡像進(jìn)行實例化,如果沒有此鏡像,通過Dockerfile或Docker鏡像倉庫獲取靶機(jī)鏡像。系統(tǒng)繼續(xù)對靶機(jī)環(huán)境實例化結(jié)果進(jìn)行判斷,一個可成功實例化的鏡像,配置文件中組件之間的聯(lián)系必須是Compose能正常處理的,組件的組網(wǎng)方式也要符合Docker的網(wǎng)絡(luò)設(shè)計,否則啟動結(jié)束,提示靶機(jī)開啟失敗。最后,會將啟動的靶機(jī)實例加入到靶機(jī)控制網(wǎng)絡(luò),用于控制用戶可以開啟靶機(jī)的數(shù)量,并根據(jù)系統(tǒng)限定的到期時限開始計時,準(zhǔn)備對開啟時間超時的靶機(jī)進(jìn)行銷毀,經(jīng)過以上的流程,靶機(jī)啟動結(jié)束[9]。
通過對Docker虛擬化技術(shù)的研究,本文設(shè)計實現(xiàn)了一種面向網(wǎng)絡(luò)空間的漏洞靶場。在靶場實現(xiàn)方面,靶場預(yù)先部署大量漏洞環(huán)境鏡像,通過Docker的鏡像共享技術(shù),減小了系統(tǒng)存儲開銷,使用時系統(tǒng)按需求實例化相應(yīng)漏洞鏡像,節(jié)省了靶機(jī)啟動時的資源消耗,也縮短了使用者的等待時間。在資源分配方面,利用Docker豐富的網(wǎng)絡(luò)模式,可以降低網(wǎng)絡(luò)虛擬化過程中額外的設(shè)備性能損失,很好地使容器和網(wǎng)絡(luò)信息進(jìn)行直接的轉(zhuǎn)換,實現(xiàn)了靶場對靶機(jī)的統(tǒng)一管理,同時也提升了系統(tǒng)的性能。綜上所述,此靶場系統(tǒng)為高校網(wǎng)絡(luò)攻防平臺建設(shè)和各類網(wǎng)絡(luò)安全賽事提供了較有效的解決方案,為建設(shè)一個能夠靈活組網(wǎng)并支持多樣化的網(wǎng)絡(luò)空間靶場打下了良好的基礎(chǔ)。
[1]章秀,劉寶旭,龔曉銳,等.Explore-Exploit:一種模擬真實網(wǎng)絡(luò)滲透場景的安全競賽[J].信息安全學(xué)報,2020,5(04):55-71.
[2]李春林,劉正軍,王冶,等.一種改進(jìn)的基于Docker的網(wǎng)絡(luò)安全實驗平臺構(gòu)建方法[J].通信技術(shù),2019,52(04):927-932.
[3]吳怡晨.網(wǎng)絡(luò)空間攻防靶場的設(shè)計和構(gòu)建技術(shù)研究[D].上海:上海交通大學(xué),2018.
[4][英]Nigel Poulton.深入淺出Docker[M].李瑞豐,等,譯.北京:人民郵電出版社,2019.
[5]董博,王雪,索菲,等.基于Docker的虛擬化技術(shù)研究[J].遼寧大學(xué)學(xué)報(自然科學(xué)版),2016,43(04):327-330.
[6]肖小芳,宋建新.Docker網(wǎng)絡(luò)通信研究與實現(xiàn)[J].通訊世界,2017,(22):1-2.
[7]馮一凡,朱文龍,楊雙雙.基于Docker的分布式網(wǎng)絡(luò)安全攻防平臺設(shè)計與實現(xiàn)[J].計算機(jī)產(chǎn)品與流通,2020,(03):47.
[8]徐維波.基于SDN和Docker容器的網(wǎng)絡(luò)虛擬化研究[D].重慶市:重慶大學(xué),2017.
[9]陳一鳴,寇小強(qiáng),王永利.基于Docker的漏洞驗證框架的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2018,(11):99-101+106.
周口師范學(xué)院大學(xué)生科研創(chuàng)新基金項目(ZKNUD2020020)