Docker安全風(fēng)險,原來有這么多
Docker是一種開源的基于LXC的應(yīng)用容器引擎,因其輕量、彈性伸縮、快速部署、可移植等優(yōu)勢,在大型互聯(lián)網(wǎng)企業(yè)中被廣泛應(yīng)用。隨著Docker技術(shù)的發(fā)展與普及,其帶來安全問題不容忽視。本文通過介紹Docker實現(xiàn)原理,對Docker所引入的安全脆弱性問題分析總結(jié),對使用者在容器安全問題方面提供指導(dǎo)性建議。
簡介
Docker的設(shè)計理念是“Build,ShipandRunAnyApp,Anywhere”,可實現(xiàn)對應(yīng)用的封裝、部署、運行等生命周期管理。應(yīng)用通過鏡像的方式部署于任何環(huán)境中,可避免各團隊之間因溝通不暢產(chǎn)生的協(xié)作問題,Docker現(xiàn)已成為企業(yè)實現(xiàn)DevOps目標(biāo)的重要工具。
基本概念
01.Docker鏡像(Image)
Docker鏡像是動態(tài)容器的靜態(tài)表示,包括容器所要運行時所需的程序、庫、資源以及相關(guān)配置。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后不會被改變。一個運行著的Docker容器是一個鏡像的實例,多個容器可以共用一個鏡像。
Dockerfile是Docker用來構(gòu)建鏡像的腳本文件,包含自定義的指令和格式。用戶可以用統(tǒng)一的語法命令來根據(jù)需求進行配置,在不同的平臺上進行分發(fā),簡化開發(fā)人員構(gòu)建鏡像的復(fù)雜過程。
倉庫(Repository)
倉庫是集中存放鏡像文件的場所,每個倉庫中可包含多個具備不同標(biāo)簽的鏡像。倉庫類似于Git工具,當(dāng)用戶創(chuàng)建自己的鏡像后可以上傳到公有或私有的倉庫,當(dāng)需要使用時,從倉庫下載過來即可。
容器(Container)
容器是Docker鏡像創(chuàng)建的實例,是靜態(tài)鏡像的運行時的實體。其本質(zhì)是一個與宿主機系統(tǒng)共享內(nèi)核但與系統(tǒng)中的其他進程資源相隔離的進程,它可以被啟動、停止、刪除。容器中會運行特定的應(yīng)用,包含代碼和相關(guān)的依賴文件。每個運行著的容器都有一個可寫層(writablelayer,也稱為容器層containerlayer),它位于若干只讀層之上。運行時的所有變化,包括對文件的寫和更新,都會保存在這個層中。
02.Docker系統(tǒng)架構(gòu)
Docker使用了傳統(tǒng)的Client-Server架構(gòu),總架構(gòu)如圖1所示。用戶通過Dockerclient與Dockerdaemon建立通信。Dockerdaemon是Docker最核心的后臺進程,一般運行在宿主機之上,負責(zé)響應(yīng)來自Dockerclient的請求,根據(jù)請求類型創(chuàng)建出指定的Job,完成構(gòu)建、分發(fā)和運行Docker容器的工作。API負責(zé)提供進程交互的接口。Dockerdaemon、Dockerclient與API共同組成DockerEngine。Docker技術(shù)使用Docker鏡像來創(chuàng)建實例容器。鏡像可以從遠程的倉庫拉取,用戶也可以上傳鏡像到倉庫中。
圖1Docker容器系統(tǒng)架構(gòu)
容器技術(shù)風(fēng)險
容器技術(shù)是一種新型的技術(shù)革命,不僅存在傳統(tǒng)的主機安全問題,還帶來了新型的安全威脅。本文主要介紹Docker容器技術(shù)引發(fā)的有別于傳統(tǒng)安全的脆弱性。
01.鏡像
容器基于容器鏡像文件啟動,鏡像的安全將影響到整個容器的安全,為此RuiShu等人對鏡像的安全漏洞進行調(diào)研,并在其《DockerHub安全漏洞分析》一文中給出了一份鏡像的統(tǒng)計數(shù)據(jù)[2],數(shù)據(jù)如表1所示。
表1鏡像中所含漏洞數(shù)量統(tǒng)計[2]
由數(shù)據(jù)可以看出,無論是社區(qū)鏡像或官方鏡像都有較多的漏洞?,F(xiàn)總結(jié)容器鏡像安全脆弱性如下:
表2鏡像安全脆弱性
02.容器
基于鏡像文件運行的容器是整個容器技術(shù)的核心,提供對外服務(wù),與用戶進行交互,此部分如不安全,將會對整個平臺造成安全威脅,經(jīng)調(diào)研其安全脆弱性如下:
表3容器安全脆弱性
03.容器網(wǎng)絡(luò)
為了節(jié)約ip地址,Docker技術(shù)中網(wǎng)絡(luò)多使用橋接方式進行連接。其在宿主機上創(chuàng)建一個虛擬的網(wǎng)橋Dokcer0,扮演了傳統(tǒng)交換機的角色,在各個網(wǎng)絡(luò)接口間自動的進行包轉(zhuǎn)發(fā),每創(chuàng)建一個新的容器,就為其增加一個虛擬網(wǎng)絡(luò)接口,并將該網(wǎng)絡(luò)接口連接到網(wǎng)橋Docker0,其脆弱性將會導(dǎo)致平臺上其他用戶的信息被泄漏甚至可用性被影響??赡艽嬖诘拇嗳跣匀缦拢?/p>
表4容器網(wǎng)絡(luò)安全脆弱性
04.容器機制
容器技術(shù)為容器的安全運行提供保障,如果此技術(shù)機制不安全,那么容器作為其中的一部分,則是在不知不覺中將所有信息暴露在外了。
表5容器機制安全脆弱性
總結(jié)
Docker技術(shù)帶來的技術(shù)革命是讓人驚喜的,運維人員利用Docker可以在隔離容器中并行運行和管理應(yīng)用,獲得更好的計算密度。企業(yè)利用Docker可以構(gòu)建敏捷的軟件交付管道,以更快的速度為Linux和WindowsServer應(yīng)用發(fā)布新功能,但安全性是重要方面,是不得不考慮的問題。本文主要介紹了Docker技術(shù)存在的安全脆弱點,意欲拋磚引玉。Docker技術(shù)安全能力還有很大的改進空間。
參考文獻
[1]浙江大學(xué)SEL實驗室.Docker容器與容器云(第二版)[M].北京郵電大學(xué)出版社北京,2016(10):28
[2]ShuR,GuX,EnckW.AStudyofSecurityVulnerabilitiesonDockerHub[C]//ACMonConferenceonDataandApplicationSecurityandPrivacy.ACM,2017:269-280.
[3]CombeT,MartinA,PietroRD.ToDockerorNottoDocker:ASecurityPerspective[J].IEEECloudComputing,2016,3(5):54-62.
[4]GrattafioriA.UnderstandingandhardeningLinuxcontainers[J].Whitepaper,NCCGroup,2016.
[5]魯濤,陳杰,史軍.Docker安全性研究[J/OL].計算機技術(shù)與發(fā)展,2018(06):1-6[2018-05-09].http://kns.cnki.net/kcms/detail/61.1450.TP.20180224.1521.064.html.
[6]GaoX,GuZ,KayaalpM,etal.ContainerLeaks:EmergingSecurityThreatsofInformationLeakagesinContainerClouds[C]//Ieee/ifipInternationalConferenceonDependableSystemsandNetworks.IEEE,2017:237-248.
[7]LippM,SchwarzM,GrussD,etal.Meltdown.arXivpreprint[J].arXivpreprintarXiv:1801.01207,2018.
【本文為51CTO專欄作者“中國保密協(xié)會科學(xué)技術(shù)分會”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】