文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.180753
中文引用格式: 陳一鳴,,寇小強,王永利. 基于Docker的漏洞驗證框架的設計與實現(xiàn)[J].電子技術應用,,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.
0 引言
隨著信息技術的發(fā)展,,信息安全問題也愈演愈烈,,漏洞的存在可以使攻擊者在未授權的情況下訪問或破壞系統(tǒng)[1]。每天都會有新的漏洞被挖掘出來,,研究這些漏洞的成因或利用方法是安全人員必須完成的工作之一[2]?,F(xiàn)階段的漏洞種類繁多,按照產(chǎn)生漏洞的程序分類,,包括Web漏洞,、系統(tǒng)漏洞、應用程序漏洞,、Web中間件漏洞等[3],。按照漏洞利用方式分類,包括遠程利用漏洞,、本地利用漏洞,,再往下細分又可以分為命令執(zhí)行、溢出,、提權等漏洞[4],。不同的漏洞所依靠的運行環(huán)境也不相同,有些漏洞甚至需要多個軟件或系統(tǒng)的組合才能順利復現(xiàn)成功[5],。為簡化漏洞復現(xiàn)過程,,本文研究了使用Docker容器技術來進行漏洞場景的打包和發(fā)布技術,并且通過漏洞驗證模塊來驗證此漏洞場景,。
關于漏洞驗證程序的編寫格式,,現(xiàn)階段已經(jīng)有數(shù)個漏洞驗證框架:Beebeeto、Pocsuite,、Bugscan,、Tangscan等。Beebeeto是由眾多安全研究人員所共同維護的一個規(guī)范化觀點證明(Proof of Concept,,POC)/漏洞利用(Exploit,,EXP)平臺,安全研究人員可以在互聯(lián)網(wǎng)上獲取漏洞信息,,然后按照BB2開發(fā)標準編寫出相應的POC或EXP提交到平臺,。Pocsuite是由知道創(chuàng)宇安全研究團隊打造的一款開源的遠程漏洞測試框架。BugScan是西安四葉草信息技術有限公司旗下BugScan社區(qū)出品的國內(nèi)首款基于社區(qū)的分布式漏洞掃描框架,。TangScan是一款在線安全漏洞檢測服務,,一個由眾多安全研究人員維護的企業(yè)在線安全體檢平臺,。上述框架都擁有一套自己的驗證程序腳本的編寫規(guī)范。對此,,文中也研究了將這些不同的編寫規(guī)范相兼容的方法,,以達到快速編寫驗證程序的目的。
1 系統(tǒng)結構
系統(tǒng)整體結構分為Docker管理模塊,、POC驗證模塊和數(shù)據(jù)庫,。
如圖1所示,Docker管理模塊分為容器,、鏡像,、倉庫三個部分[6]。容器模塊負責本地容器的創(chuàng)建,、運行,、終止和刪除。鏡像模塊負責從倉庫中獲取鏡像,、添加標簽,、上傳鏡像和刪除鏡像。倉庫模塊負責存儲制作好的鏡像和提供鏡像的下載服務,。驗證模塊分為執(zhí)行,、框架和庫三個部分,執(zhí)行模塊是驗證過程的入口,,所有的驗證程序都由執(zhí)行模塊執(zhí)行,,為了兼容不同類型的POC,執(zhí)行模塊會根據(jù)不同類型的POC來調(diào)取相應的框架來解析執(zhí)行,,具體的驗證代碼則是存放在POC庫中,。最后如果驗證通過,證明漏洞存在并且POC有效,,就會將相應的鏡像,、容器啟動的參數(shù)、倉庫的地址和驗證代碼等具體信息存放到數(shù)據(jù)庫中[7],。
系統(tǒng)的使用者需要提供給系統(tǒng)所需的資源來啟動處理過程,,包括搭建環(huán)境所需要的Docker鏡像、漏洞的詳細信息,、漏洞利用程序等資源,。
如圖2所示,系統(tǒng)首先會加載漏洞所需要的資源,,一個完整的漏洞資源包括Docker鏡像或Dockerfile,、漏洞的詳細信息、漏洞的種類,、漏洞的危害程度,、漏洞的評分,、漏洞的利用程序等資源。
判斷資源完整性后,,如果資源完整,說明可以產(chǎn)生一個Docker容器,,并且提供了相應的驗證程序,。接下來,框架會根據(jù)提供的驗證程序信息調(diào)用不同的驗證框架來嘗試驗證Docker容器中運行的有漏洞的程序,。在驗證程序驗證完成后,,系統(tǒng)會根據(jù)驗證的結果來判斷漏洞提交者所提交的資源是否有效,若有效,,則將相關的信息存入數(shù)據(jù)庫中,;否則終止驗證過程,重新調(diào)整資源,。
2 Docker容器虛擬化技術
Docker是PaaS提供商dotCloud開源的一個基于LXC(Linux Container)的應用容器引擎,,讓開發(fā)者可以將應用程序、依賴的運行庫文件打包并移植到一個新的容器中,,然后發(fā)布到任何系統(tǒng)為Linux的機器上,,也可以實現(xiàn)虛擬化解決方案[8]。
Docker的三大核心概念是鏡像,、容器和倉庫,。Docker鏡像類似于虛擬機鏡像,可以理解為創(chuàng)建Docker容器的模板,,它是創(chuàng)建容器的基礎,。Docker鏡像是必須向此漏洞驗證系統(tǒng)所提交的資源之一。
容器是完全沙箱機制的實現(xiàn)方式,,任意容器之間不會有任何接口,,具有安全訪問資源的特性,而且容器的運行資源開銷小,,可以很容易地在機器和數(shù)據(jù)中心中運行,。容器是從鏡像創(chuàng)建的應用運行實例,可以將其啟動,、開始,、停止、刪除[9],。
Docker倉庫是Docker集中存放鏡像文件的場所,,倉庫可以分為共有倉庫和私有倉庫兩種形式。漏洞驗證框架驗證后的Docker鏡像就會存放在私有倉庫中,。
如圖3所示,,鏡像是容器的前提,,鏡像可以通過Pull操作從Docker倉庫中下載,完整制作的鏡像也可以通過Push操作向Docker倉庫中推送,。下載鏡像到本地后,,就可以使用鏡像來創(chuàng)建容器了,容器不同于鏡像,,容器擁有運行時需要的可讀寫層,,而鏡像只是靜態(tài)的只讀文件。通過run命令啟動的容器處于運行狀態(tài),,對于運行狀態(tài)的容器可以使用stop來終止,,終止狀態(tài)的容器并沒有消失,可以使用start操作來重新啟動,。如果希望容器暫停工作一段時間,,可以使用pause操作將容器切換到暫停狀態(tài),處于暫停狀態(tài)的容器不會占用CPU資源,,直到通過unpause操作恢復運行,。
2.1 Docker容器與傳統(tǒng)虛擬化的不同
傳統(tǒng)的服務器虛擬化解決的核心問題是計算資源的調(diào)配,而Docker容器解決的核心問題是應用開發(fā),、測試和部署,。如圖4所示,虛擬機技術通過Hypervisor層抽象底層基礎設施資源提供相互隔離的虛擬機,,通過統(tǒng)一配置,、統(tǒng)一管理,計算資源的可運維性,,資源利用率能夠得到有效的提升,。同時,虛擬機提供客戶機操作系統(tǒng),,客戶機變化不會影響宿主機,,能夠提供可控的測試環(huán)境,更能夠屏蔽底層硬件甚至基礎軟件的差異性,,讓應用做到廣泛兼容,。然而虛擬化技術因為要多模擬出一層操作系統(tǒng),都不可避免地出現(xiàn)計算,、IO,、網(wǎng)絡性能的損失[10]。而容器技術嚴格來說并不是虛擬化,,沒有客戶機操作系統(tǒng),,是共享內(nèi)核的。容器可以視為軟件供應鏈的集裝箱,,能夠把應用需要的運行環(huán)境,、緩存環(huán)境,、數(shù)據(jù)庫環(huán)境等封裝起來,以最簡潔的方式支持應用運行,,輕裝上陣,,性能更佳[11]。
Docker鏡像特性則讓這種方式簡單易行,。當然,,因為Docker共享內(nèi)核的特性,所以容器隔離性沒有虛擬機那么好[12],。
2.2 獲取Docker鏡像
Docker鏡像可以通過pull操作直接從倉庫中下載,,也可以通過Dockerfile來創(chuàng)建,。
Dockerfile是由一系列命令和參數(shù)構成的腳本,,這些命令應用于基礎鏡像并最終創(chuàng)建一個新的鏡像。它們簡化了從頭到尾的流程并極大地簡化了部署工作,。
如圖5所示,,Dockerfile從FROM命令開始,緊接著跟隨者各種方法,、命令和參數(shù),,其產(chǎn)出為一個新的可以用于創(chuàng)建容器的鏡像。
3 POC驗證模塊
為了提高驗證模塊的兼容度,、降低驗證程序編寫的學習成本,,此系統(tǒng)采用插件式的驗證框架設計,驗證過程由驗證引擎啟動,根據(jù)驗證程序的類型說明,,由分類器來決定輸入的參數(shù)和使用哪種框架來執(zhí)行程序[13],,Docker容器的啟動所產(chǎn)生的屬于漏洞環(huán)境的IP地址將作為參數(shù)輸入到驗證系統(tǒng)中[14],在經(jīng)過相應的框架執(zhí)行完成后,,不同的框架會產(chǎn)生不同的返回值,,甚至返回一個布爾值,這些返回值都將交給結果處理器來匯總處理,。在驗證程序驗證成功后,,在數(shù)據(jù)庫中就會將相應的漏洞信息標記為有效。
4 框架測試
測試漏洞為已經(jīng)公布的couchdb數(shù)據(jù)庫漏洞,,漏洞編號為CVE-2017-12635,,漏洞于2017年11月15日被披露,任意用戶通過此漏洞可以創(chuàng)建管理員賬戶,,造成垂直權限提升,。向此系統(tǒng)提交漏洞的相關信息,提交的Dockerfile主要內(nèi)容為:(1)從鏡像庫中以Debian系統(tǒng)來作為基礎鏡像,;(2)獲得CouchDB相關的運行腳本,;(3)更新軟件源中的所有軟件列表,;(4)從軟件源中安裝cURL軟件;(5)運行從第二步獲得的腳本,,設置參數(shù)來添加CouchDB普通權限用戶,;(6)運行CouchDB服務。
在以Dockerfile生成的鏡像的基礎上啟動容器,,啟動容器時設置相關的端口映射使Docker容器中的CouchDB服務端口映射到本地主機上,。
在容器啟動后,就可以調(diào)用相關的驗證程序進行驗證,。編寫驗證程序時,,可以使用任何一種驗證框架來實現(xiàn)。此漏洞的驗證程序的內(nèi)容為發(fā)送一個經(jīng)過特殊構造的HTTP請求包,,目的是創(chuàng)建一個管理員賬戶,。請求包中包含JSON數(shù)據(jù),而此漏洞的形成原因就是由于Erlang和JavaScript對JSON解析方式的不同,,使得語句執(zhí)行產(chǎn)生差異性導致的,。在數(shù)據(jù)包發(fā)送之后,驗證程序會自動以剛剛創(chuàng)建的管理員賬戶進行登錄,,如果登錄成功,,就會返回漏洞存在的結果。確認返回結果后,,系統(tǒng)將相關的漏洞信息存放到了數(shù)據(jù)庫中,,并關閉了容器,漏洞驗證完畢,。
5 結論
本文通過對Docker系統(tǒng)和漏洞驗證系統(tǒng)的研究和設計,,利用Docker容器和多框架的漏洞驗證系統(tǒng),設計了一種提供Dockerfile文件或者鏡像后,,可以快速地對漏洞環(huán)境進行驗證的漏洞驗證框架,。通過向系統(tǒng)提供具體的漏洞和驗證程序的測試,結果表明,,本框架大大簡化了漏洞環(huán)境的搭建過程,,同時也提升了漏洞驗證的速度。綜上所述,,本框架為需要頻繁驗證不同的漏洞提供了較有參考價值的解決方案,。
參考文獻
[1] 陳春玲,張凡,,余瀚.Web應用程序漏洞檢測系統(tǒng)設計[J].計算機技術與發(fā)展,,2017,27(8):101-105.
[2] 陳峰,羅養(yǎng)霞,,陳曉江,,等.網(wǎng)絡攻擊技術研究進展[J].西北大學學報(自然科學版),2007,,37(2):208-212.
[3] 羅玉斌.網(wǎng)絡安全漏洞掃描系統(tǒng)的設計與實現(xiàn)[D].長沙:國防科學技術大學,,2007.
[4] 趙智勇.網(wǎng)絡攻擊過程剖析[J].計算機與現(xiàn)代化,2012,,8(8):55-56.
[5] 竇文超.網(wǎng)絡攻擊模擬器及其關鍵技術研究[D].天津:天津理工大學,,2011.
[6] 董博,王雪,,索菲,,等.基于Docker的虛擬化技術研究[J].遼寧大學學報(自然科學版),2016,,43(4):327-330.
[7] 肖小芳,,宋建新.Docker網(wǎng)絡通信研究與實現(xiàn)[J].通訊世界,2017(22):1-2.
[8] 鐘良侃.Docker技術在Web服務系統(tǒng)中的應用研究[J].電腦知識與技術,,2016,,12(26):123-126.
[9] 鄒保平,,黃文思,,張文晉,等.基于Docker的應用部署管理平臺研究[J].電子設計工程,,2017,,25(12):41-44,48.
[10] 陳清金,,陳存香,,張巖.Docker技術實現(xiàn)分析[J].信息通信技術,2015(2):37-40.
[11] 張遙,,王森林.Docker安全性研究[J].網(wǎng)絡安全技術與應用,,2017(8):32-33.
[12] 伍陽.基于Docker的虛擬化技術研究[J].信息技術,2016(1):121-123.
[13] 吳倩倩.綜合型漏洞掃描系統(tǒng)的研究與設計[D].北京:華北電力大學(北京),,2015.
[14] 王良.基于插件技術的漏洞掃描系統(tǒng)設計與應用[D].上海:上海交通大學,,2012.
作者信息:
陳一鳴,寇小強,,王永利
(華北計算機系統(tǒng)工程研究所,,北京100083)