《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Docker的漏洞驗(yàn)證框架的設(shè)計(jì)與實(shí)現(xiàn)
基于Docker的漏洞驗(yàn)證框架的設(shè)計(jì)與實(shí)現(xiàn)
2018年電子技術(shù)應(yīng)用第11期
陳一鳴,寇小強(qiáng),,王永利
華北計(jì)算機(jī)系統(tǒng)工程研究所,,北京100083
摘要: 漏洞是信息安全研究的重要對(duì)象,但目前漏洞種類繁多,,驗(yàn)證方法復(fù)雜,。針對(duì)搭建安全漏洞環(huán)境困難、復(fù)現(xiàn)漏洞困難的問題,,基于Docker虛擬化技術(shù),,設(shè)計(jì)了一種將漏洞環(huán)境部署在容器中,并使用相應(yīng)漏洞利用腳本實(shí)現(xiàn)驗(yàn)證的框架系統(tǒng),。此框架系統(tǒng)驗(yàn)證過程需要提供Dockerfile文件或Docker鏡像以及相匹配的漏洞驗(yàn)證腳本,。首先,系統(tǒng)運(yùn)行一個(gè)擁有漏洞程序的Docker容器,。然后,,框架再調(diào)用與此漏洞相匹配的驗(yàn)證或攻擊腳本來驗(yàn)證漏洞可用性。經(jīng)過測(cè)試,,此系統(tǒng)可以大幅提高漏洞復(fù)現(xiàn)速度,,同時(shí)降低了漏洞復(fù)現(xiàn)難度與技術(shù)門檻。
中圖分類號(hào): TP311
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.180753
中文引用格式: 陳一鳴,,寇小強(qiáng),,王永利. 基于Docker的漏洞驗(yàn)證框架的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2018,,44(11):99-101,,106.
英文引用格式: Chen Yiming,Kou Xiaoqiang,,Wang Yongli. Design and implementation of vulnerability verification framework based on Docker[J]. Application of Electronic Technique,,2018,44(11):99-101,,106.
Design and implementation of vulnerability verification framework based on Docker
Chen Yiming,,Kou Xiaoqiang,,Wang Yongli
National Computer System Engineering Reasearch Institute of China,Beijing 100083,,China
Abstract: Vulnerability is an important object in the research of information security, but there are many kinds of vulnerabilities at present, and the verification is complex. In view of the difficulties of building security vulnerabilities and the difficulties of vulnerabilities reappearing, a framework system is designed to deploy vulnerabilities in containers based on Docker virtualization technology, and the corresponding verification script is used to implement the framework system. The framework system verification process needs to provide Dockerfile file or Docker mirrors, as well as matching vulnerability verification scripts. Firstly, the system runs a Docker container with a vulnerability program. The framework then calls the verification or attack scripts that match the vulnerability to verify the availability. After testing, the system can greatly improve the speed of the vulnerabilities recovery, and reduce the difficulty and the technical threshold for the reappearing of the vulnerabilities.
Key words : information security,;vulnerability verification;Docker,;virtualization

0 引言

    隨著信息技術(shù)的發(fā)展,,信息安全問題也愈演愈烈,漏洞的存在可以使攻擊者在未授權(quán)的情況下訪問或破壞系統(tǒng)[1],。每天都會(huì)有新的漏洞被挖掘出來,,研究這些漏洞的成因或利用方法是安全人員必須完成的工作之一[2]。現(xiàn)階段的漏洞種類繁多,,按照產(chǎn)生漏洞的程序分類,,包括Web漏洞、系統(tǒng)漏洞,、應(yīng)用程序漏洞,、Web中間件漏洞等[3]。按照漏洞利用方式分類,,包括遠(yuǎn)程利用漏洞,、本地利用漏洞,再往下細(xì)分又可以分為命令執(zhí)行,、溢出,、提權(quán)等漏洞[4]。不同的漏洞所依靠的運(yùn)行環(huán)境也不相同,,有些漏洞甚至需要多個(gè)軟件或系統(tǒng)的組合才能順利復(fù)現(xiàn)成功[5],。為簡(jiǎn)化漏洞復(fù)現(xiàn)過程,本文研究了使用Docker容器技術(shù)來進(jìn)行漏洞場(chǎng)景的打包和發(fā)布技術(shù),,并且通過漏洞驗(yàn)證模塊來驗(yàn)證此漏洞場(chǎng)景,。

    關(guān)于漏洞驗(yàn)證程序的編寫格式,現(xiàn)階段已經(jīng)有數(shù)個(gè)漏洞驗(yàn)證框架:Beebeeto,、Pocsuite,、Bugscan、Tangscan等,。Beebeeto是由眾多安全研究人員所共同維護(hù)的一個(gè)規(guī)范化觀點(diǎn)證明(Proof of Concept,,POC)/漏洞利用(Exploit,EXP)平臺(tái),,安全研究人員可以在互聯(lián)網(wǎng)上獲取漏洞信息,,然后按照BB2開發(fā)標(biāo)準(zhǔn)編寫出相應(yīng)的POC或EXP提交到平臺(tái),。Pocsuite是由知道創(chuàng)宇安全研究團(tuán)隊(duì)打造的一款開源的遠(yuǎn)程漏洞測(cè)試框架,。BugScan是西安四葉草信息技術(shù)有限公司旗下BugScan社區(qū)出品的國(guó)內(nèi)首款基于社區(qū)的分布式漏洞掃描框架,。TangScan是一款在線安全漏洞檢測(cè)服務(wù),一個(gè)由眾多安全研究人員維護(hù)的企業(yè)在線安全體檢平臺(tái),。上述框架都擁有一套自己的驗(yàn)證程序腳本的編寫規(guī)范,。對(duì)此,文中也研究了將這些不同的編寫規(guī)范相兼容的方法,,以達(dá)到快速編寫驗(yàn)證程序的目的,。

1 系統(tǒng)結(jié)構(gòu)

    系統(tǒng)整體結(jié)構(gòu)分為Docker管理模塊、POC驗(yàn)證模塊和數(shù)據(jù)庫(kù),。

    如圖1所示,,Docker管理模塊分為容器、鏡像,、倉(cāng)庫(kù)三個(gè)部分[6],。容器模塊負(fù)責(zé)本地容器的創(chuàng)建、運(yùn)行,、終止和刪除,。鏡像模塊負(fù)責(zé)從倉(cāng)庫(kù)中獲取鏡像、添加標(biāo)簽,、上傳鏡像和刪除鏡像,。倉(cāng)庫(kù)模塊負(fù)責(zé)存儲(chǔ)制作好的鏡像和提供鏡像的下載服務(wù)。驗(yàn)證模塊分為執(zhí)行,、框架和庫(kù)三個(gè)部分,,執(zhí)行模塊是驗(yàn)證過程的入口,所有的驗(yàn)證程序都由執(zhí)行模塊執(zhí)行,,為了兼容不同類型的POC,,執(zhí)行模塊會(huì)根據(jù)不同類型的POC來調(diào)取相應(yīng)的框架來解析執(zhí)行,具體的驗(yàn)證代碼則是存放在POC庫(kù)中,。最后如果驗(yàn)證通過,,證明漏洞存在并且POC有效,就會(huì)將相應(yīng)的鏡像,、容器啟動(dòng)的參數(shù),、倉(cāng)庫(kù)的地址和驗(yàn)證代碼等具體信息存放到數(shù)據(jù)庫(kù)中[7]

jsj1-t1.gif

    系統(tǒng)的使用者需要提供給系統(tǒng)所需的資源來啟動(dòng)處理過程,,包括搭建環(huán)境所需要的Docker鏡像,、漏洞的詳細(xì)信息、漏洞利用程序等資源,。

    如圖2所示,,系統(tǒng)首先會(huì)加載漏洞所需要的資源,一個(gè)完整的漏洞資源包括Docker鏡像或Dockerfile,、漏洞的詳細(xì)信息,、漏洞的種類,、漏洞的危害程度、漏洞的評(píng)分,、漏洞的利用程序等資源,。

jsj1-t2.gif

    判斷資源完整性后,如果資源完整,,說明可以產(chǎn)生一個(gè)Docker容器,,并且提供了相應(yīng)的驗(yàn)證程序。接下來,,框架會(huì)根據(jù)提供的驗(yàn)證程序信息調(diào)用不同的驗(yàn)證框架來嘗試驗(yàn)證Docker容器中運(yùn)行的有漏洞的程序,。在驗(yàn)證程序驗(yàn)證完成后,系統(tǒng)會(huì)根據(jù)驗(yàn)證的結(jié)果來判斷漏洞提交者所提交的資源是否有效,,若有效,,則將相關(guān)的信息存入數(shù)據(jù)庫(kù)中;否則終止驗(yàn)證過程,,重新調(diào)整資源,。

2 Docker容器虛擬化技術(shù)

    Docker是PaaS提供商dotCloud開源的一個(gè)基于LXC(Linux Container)的應(yīng)用容器引擎,讓開發(fā)者可以將應(yīng)用程序,、依賴的運(yùn)行庫(kù)文件打包并移植到一個(gè)新的容器中,,然后發(fā)布到任何系統(tǒng)為L(zhǎng)inux的機(jī)器上,也可以實(shí)現(xiàn)虛擬化解決方案[8],。

    Docker的三大核心概念是鏡像,、容器和倉(cāng)庫(kù)。Docker鏡像類似于虛擬機(jī)鏡像,,可以理解為創(chuàng)建Docker容器的模板,,它是創(chuàng)建容器的基礎(chǔ)。Docker鏡像是必須向此漏洞驗(yàn)證系統(tǒng)所提交的資源之一,。

    容器是完全沙箱機(jī)制的實(shí)現(xiàn)方式,,任意容器之間不會(huì)有任何接口,具有安全訪問資源的特性,,而且容器的運(yùn)行資源開銷小,,可以很容易地在機(jī)器和數(shù)據(jù)中心中運(yùn)行。容器是從鏡像創(chuàng)建的應(yīng)用運(yùn)行實(shí)例,,可以將其啟動(dòng),、開始、停止,、刪除[9],。

    Docker倉(cāng)庫(kù)是Docker集中存放鏡像文件的場(chǎng)所,倉(cāng)庫(kù)可以分為共有倉(cāng)庫(kù)和私有倉(cāng)庫(kù)兩種形式,。漏洞驗(yàn)證框架驗(yàn)證后的Docker鏡像就會(huì)存放在私有倉(cāng)庫(kù)中,。

    如圖3所示,,鏡像是容器的前提,鏡像可以通過Pull操作從Docker倉(cāng)庫(kù)中下載,,完整制作的鏡像也可以通過Push操作向Docker倉(cāng)庫(kù)中推送,。下載鏡像到本地后,,就可以使用鏡像來創(chuàng)建容器了,,容器不同于鏡像,容器擁有運(yùn)行時(shí)需要的可讀寫層,,而鏡像只是靜態(tài)的只讀文件,。通過run命令啟動(dòng)的容器處于運(yùn)行狀態(tài),對(duì)于運(yùn)行狀態(tài)的容器可以使用stop來終止,,終止?fàn)顟B(tài)的容器并沒有消失,,可以使用start操作來重新啟動(dòng)。如果希望容器暫停工作一段時(shí)間,,可以使用pause操作將容器切換到暫停狀態(tài),,處于暫停狀態(tài)的容器不會(huì)占用CPU資源,直到通過unpause操作恢復(fù)運(yùn)行,。

jsj1-t3.gif

2.1 Docker容器與傳統(tǒng)虛擬化的不同

    傳統(tǒng)的服務(wù)器虛擬化解決的核心問題是計(jì)算資源的調(diào)配,,而Docker容器解決的核心問題是應(yīng)用開發(fā)、測(cè)試和部署,。如圖4所示,,虛擬機(jī)技術(shù)通過Hypervisor層抽象底層基礎(chǔ)設(shè)施資源提供相互隔離的虛擬機(jī),通過統(tǒng)一配置,、統(tǒng)一管理,,計(jì)算資源的可運(yùn)維性,資源利用率能夠得到有效的提升,。同時(shí),,虛擬機(jī)提供客戶機(jī)操作系統(tǒng),客戶機(jī)變化不會(huì)影響宿主機(jī),,能夠提供可控的測(cè)試環(huán)境,,更能夠屏蔽底層硬件甚至基礎(chǔ)軟件的差異性,讓應(yīng)用做到廣泛兼容,。然而虛擬化技術(shù)因?yàn)橐嗄M出一層操作系統(tǒng),,都不可避免地出現(xiàn)計(jì)算、IO,、網(wǎng)絡(luò)性能的損失[10],。而容器技術(shù)嚴(yán)格來說并不是虛擬化,沒有客戶機(jī)操作系統(tǒng),,是共享內(nèi)核的,。容器可以視為軟件供應(yīng)鏈的集裝箱,,能夠把應(yīng)用需要的運(yùn)行環(huán)境、緩存環(huán)境,、數(shù)據(jù)庫(kù)環(huán)境等封裝起來,,以最簡(jiǎn)潔的方式支持應(yīng)用運(yùn)行,輕裝上陣,,性能更佳[11],。

jsj1-t4.gif

    Docker鏡像特性則讓這種方式簡(jiǎn)單易行。當(dāng)然,,因?yàn)镈ocker共享內(nèi)核的特性,,所以容器隔離性沒有虛擬機(jī)那么好[12]

2.2 獲取Docker鏡像

    Docker鏡像可以通過pull操作直接從倉(cāng)庫(kù)中下載,,也可以通過Dockerfile來創(chuàng)建,。

    Dockerfile是由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應(yīng)用于基礎(chǔ)鏡像并最終創(chuàng)建一個(gè)新的鏡像,。它們簡(jiǎn)化了從頭到尾的流程并極大地簡(jiǎn)化了部署工作,。

    如圖5所示,Dockerfile從FROM命令開始,,緊接著跟隨者各種方法,、命令和參數(shù),其產(chǎn)出為一個(gè)新的可以用于創(chuàng)建容器的鏡像,。

jsj1-t5.gif

3 POC驗(yàn)證模塊

    為了提高驗(yàn)證模塊的兼容度,、降低驗(yàn)證程序編寫的學(xué)習(xí)成本,此系統(tǒng)采用插件式的驗(yàn)證框架設(shè)計(jì),驗(yàn)證過程由驗(yàn)證引擎啟動(dòng),,根據(jù)驗(yàn)證程序的類型說明,,由分類器來決定輸入的參數(shù)和使用哪種框架來執(zhí)行程序[13],Docker容器的啟動(dòng)所產(chǎn)生的屬于漏洞環(huán)境的IP地址將作為參數(shù)輸入到驗(yàn)證系統(tǒng)中[14],,在經(jīng)過相應(yīng)的框架執(zhí)行完成后,,不同的框架會(huì)產(chǎn)生不同的返回值,甚至返回一個(gè)布爾值,,這些返回值都將交給結(jié)果處理器來匯總處理,。在驗(yàn)證程序驗(yàn)證成功后,在數(shù)據(jù)庫(kù)中就會(huì)將相應(yīng)的漏洞信息標(biāo)記為有效,。

4 框架測(cè)試

    測(cè)試漏洞為已經(jīng)公布的couchdb數(shù)據(jù)庫(kù)漏洞,,漏洞編號(hào)為CVE-2017-12635,漏洞于2017年11月15日被披露,,任意用戶通過此漏洞可以創(chuàng)建管理員賬戶,,造成垂直權(quán)限提升。向此系統(tǒng)提交漏洞的相關(guān)信息,提交的Dockerfile主要內(nèi)容為:(1)從鏡像庫(kù)中以Debian系統(tǒng)來作為基礎(chǔ)鏡像,;(2)獲得CouchDB相關(guān)的運(yùn)行腳本,;(3)更新軟件源中的所有軟件列表;(4)從軟件源中安裝cURL軟件,;(5)運(yùn)行從第二步獲得的腳本,,設(shè)置參數(shù)來添加CouchDB普通權(quán)限用戶;(6)運(yùn)行CouchDB服務(wù),。

    在以Dockerfile生成的鏡像的基礎(chǔ)上啟動(dòng)容器,,啟動(dòng)容器時(shí)設(shè)置相關(guān)的端口映射使Docker容器中的CouchDB服務(wù)端口映射到本地主機(jī)上。

    在容器啟動(dòng)后,,就可以調(diào)用相關(guān)的驗(yàn)證程序進(jìn)行驗(yàn)證,。編寫驗(yàn)證程序時(shí),,可以使用任何一種驗(yàn)證框架來實(shí)現(xiàn),。此漏洞的驗(yàn)證程序的內(nèi)容為發(fā)送一個(gè)經(jīng)過特殊構(gòu)造的HTTP請(qǐng)求包,目的是創(chuàng)建一個(gè)管理員賬戶,。請(qǐng)求包中包含JSON數(shù)據(jù),,而此漏洞的形成原因就是由于Erlang和JavaScript對(duì)JSON解析方式的不同,使得語(yǔ)句執(zhí)行產(chǎn)生差異性導(dǎo)致的,。在數(shù)據(jù)包發(fā)送之后,,驗(yàn)證程序會(huì)自動(dòng)以剛剛創(chuàng)建的管理員賬戶進(jìn)行登錄,如果登錄成功,,就會(huì)返回漏洞存在的結(jié)果,。確認(rèn)返回結(jié)果后,系統(tǒng)將相關(guān)的漏洞信息存放到了數(shù)據(jù)庫(kù)中,,并關(guān)閉了容器,,漏洞驗(yàn)證完畢。

5 結(jié)論

    本文通過對(duì)Docker系統(tǒng)和漏洞驗(yàn)證系統(tǒng)的研究和設(shè)計(jì),,利用Docker容器和多框架的漏洞驗(yàn)證系統(tǒng),,設(shè)計(jì)了一種提供Dockerfile文件或者鏡像后,可以快速地對(duì)漏洞環(huán)境進(jìn)行驗(yàn)證的漏洞驗(yàn)證框架,。通過向系統(tǒng)提供具體的漏洞和驗(yàn)證程序的測(cè)試,,結(jié)果表明,本框架大大簡(jiǎn)化了漏洞環(huán)境的搭建過程,,同時(shí)也提升了漏洞驗(yàn)證的速度,。綜上所述,本框架為需要頻繁驗(yàn)證不同的漏洞提供了較有參考價(jià)值的解決方案,。

參考文獻(xiàn)

[1] 陳春玲,,張凡,余瀚.Web應(yīng)用程序漏洞檢測(cè)系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2017,,27(8):101-105.

[2] 陳峰,,羅養(yǎng)霞,陳曉江,,等.網(wǎng)絡(luò)攻擊技術(shù)研究進(jìn)展[J].西北大學(xué)學(xué)報(bào)(自然科學(xué)版),,2007,37(2):208-212.

[3] 羅玉斌.網(wǎng)絡(luò)安全漏洞掃描系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),,2007.

[4] 趙智勇.網(wǎng)絡(luò)攻擊過程剖析[J].計(jì)算機(jī)與現(xiàn)代化,,2012,8(8):55-56.

[5] 竇文超.網(wǎng)絡(luò)攻擊模擬器及其關(guān)鍵技術(shù)研究[D].天津:天津理工大學(xué),,2011.

[6] 董博,,王雪,索菲,,等.基于Docker的虛擬化技術(shù)研究[J].遼寧大學(xué)學(xué)報(bào)(自然科學(xué)版),,2016,43(4):327-330.

[7] 肖小芳,,宋建新.Docker網(wǎng)絡(luò)通信研究與實(shí)現(xiàn)[J].通訊世界,,2017(22):1-2.

[8] 鐘良侃.Docker技術(shù)在Web服務(wù)系統(tǒng)中的應(yīng)用研究[J].電腦知識(shí)與技術(shù),2016,,12(26):123-126.

[9] 鄒保平,,黃文思,張文晉,,等.基于Docker的應(yīng)用部署管理平臺(tái)研究[J].電子設(shè)計(jì)工程,,2017,25(12):41-44,,48.

[10] 陳清金,,陳存香,張巖.Docker技術(shù)實(shí)現(xiàn)分析[J].信息通信技術(shù),,2015(2):37-40.

[11] 張遙,,王森林.Docker安全性研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017(8):32-33.

[12] 伍陽(yáng).基于Docker的虛擬化技術(shù)研究[J].信息技術(shù),,2016(1):121-123.

[13] 吳倩倩.綜合型漏洞掃描系統(tǒng)的研究與設(shè)計(jì)[D].北京:華北電力大學(xué)(北京),,2015.

[14] 王良.基于插件技術(shù)的漏洞掃描系統(tǒng)設(shè)計(jì)與應(yīng)用[D].上海:上海交通大學(xué),2012.



作者信息:

陳一鳴,,寇小強(qiáng),,王永利

(華北計(jì)算機(jī)系統(tǒng)工程研究所,北京100083)

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。