◆蘇軍
操作系統(tǒng)、網(wǎng)絡(luò)體系與服務(wù)器技術(shù)
Docker容器安全管控技術(shù)研究
◆蘇軍
(菏澤學(xué)院 山東 274000)
開發(fā)者可以利用Docker容器技術(shù)將應(yīng)用和運(yùn)行環(huán)境打包成鏡像,使應(yīng)用程序可以在宿主機(jī)中獨(dú)立運(yùn)行,具有更高的運(yùn)行效率和資源利用率。但是其在安全性方面還有很大的不足。本文對(duì)Docker容器在鏡像安全、運(yùn)行安全和入侵檢測(cè)等方面的風(fēng)險(xiǎn)進(jìn)行了分析,并探討了具有針對(duì)性的安全管控技術(shù)。
Docker;容器;虛擬化
Docker容器是一個(gè)開源的應(yīng)用容器引擎,可以讓開發(fā)人員將開發(fā)的應(yīng)用和依賴包打包在一起,然后發(fā)布到安裝有Docker引擎的服務(wù)器上[1]。Docker容器不依賴任何開發(fā)語(yǔ)言和操作系統(tǒng),解決了部署環(huán)境依賴問題,是一種輕量級(jí)的虛擬化技術(shù),性能開銷極低,極大地提高了開發(fā)者的工作效率,在數(shù)據(jù)中心等云部署領(lǐng)域中得到了廣泛的應(yīng)用。
由于Docker容器是應(yīng)用于基礎(chǔ)設(shè)施和運(yùn)行平臺(tái)之間的一種虛擬化技術(shù),容器的運(yùn)行需要設(shè)計(jì)從鏡像到運(yùn)行整個(gè)過程的安全方案[2],過程中存在鏡像源安全性、運(yùn)行安全、容器入侵等安全性問題,這是傳統(tǒng)的網(wǎng)絡(luò)安全方案不能解決的。
Docker官方鏡像倉(cāng)庫(kù)為Docker Hub,倉(cāng)庫(kù)內(nèi)有應(yīng)用的官方來源,同時(shí)也允許第三方組織和個(gè)人上傳已經(jīng)配置的應(yīng)用[3]。這在帶來便捷性的同時(shí),也存在一定的安全風(fēng)險(xiǎn)。如開發(fā)人員編寫的代碼存在漏洞,被植入木馬,Dockerfile添加惡意腳本等。當(dāng)入侵者攻擊并控制宿主機(jī)上的容器以后,可利用容器為跳板對(duì)宿主機(jī)進(jìn)行攻擊[4]。
除了鏡像自身安全性問題,不安全的運(yùn)行環(huán)境同樣會(huì)給Docker的使用帶來風(fēng)險(xiǎn)。如Linux或Windows系統(tǒng)存在漏洞等。另外Docker在平臺(tái)運(yùn)行時(shí)重要的系統(tǒng)文件并沒有實(shí)現(xiàn)平臺(tái)與容器完全隔離,容器可以獲取到這些信息并造成信息外露,被攻擊者所利用。
由于Docker采用橋接模式,和宿主機(jī)直接相連,容器內(nèi)部的數(shù)據(jù)可以通過橋接網(wǎng)絡(luò)到達(dá)容器的默認(rèn)網(wǎng)關(guān)。攻擊者可以利用有漏洞的或設(shè)置后門的容器對(duì)宿主機(jī)內(nèi)的其他容器進(jìn)行信息收集,發(fā)起容器入侵、DoS攻擊等。
(1)鏡像漏洞掃描
由于鏡像中的系統(tǒng)內(nèi)核和應(yīng)用可能包含漏洞,使用前需要對(duì)鏡像進(jìn)行漏洞掃描??蛻舳送瓿社R像制作,將鏡像上傳倉(cāng)庫(kù)以后,可以使用支持鏡像分析的開源項(xiàng)目Clair進(jìn)行漏洞掃描。
Clair針對(duì)用戶上傳鏡像的URL和客戶端的Token等參數(shù)向倉(cāng)庫(kù)下載鏡像層,校驗(yàn)每層的Parent Name,讀取鏡像層的文件內(nèi)容,遍歷文件目錄,查找操作系統(tǒng)的文件路徑,獲取系統(tǒng)版本信息,提取鏡像中已安裝的軟件包信息。
Clair將得到的鏡像層信息存入PostgreSQL數(shù)據(jù)庫(kù),然后將當(dāng)前鏡像系統(tǒng)和軟件包版本信息與保存有漏洞信息的CVE數(shù)據(jù)庫(kù)進(jìn)行比對(duì),輸出包含漏洞信息的結(jié)果。
(2)鏡像惡意代碼掃描
Clair可以利用CVE漏洞庫(kù)掃描Docker鏡像的漏洞,但是如果攻擊者使用無(wú)漏洞的官方鏡像,然后在鏡像安裝木馬和后門,Clair就不能檢測(cè)到安全威脅。針對(duì)這種情況,可以使用Anchore_Engine來對(duì)Docker鏡像進(jìn)行安全掃描。Anchore_Engine可以提供對(duì)Docker鏡像檢查、分析和認(rèn)證的服務(wù)。在運(yùn)行環(huán)境中部署Anchore_Engine,可以在容器注冊(cè)中心下載并分析容器鏡像,并可以根據(jù)用戶需求的策略對(duì)鏡像進(jìn)行評(píng)估,執(zhí)行安全性、合規(guī)性和最佳實(shí)踐檢查。
Anchore_Engine可以通過Docker容器鏡像的方式獨(dú)立或交互式運(yùn)行,也可以在Kubernetes、Docker Swarm和Amazon ECS等容器業(yè)務(wù)平臺(tái)上運(yùn)行,通過RESTful API為集成組件嵌入現(xiàn)有的容器監(jiān)控和控制框架。
與Clair不同的是,Anchore_Engine重點(diǎn)在于對(duì)鏡像的審計(jì),有著很強(qiáng)的鏡像解析能力,對(duì)鏡像提取盡量多的元數(shù)據(jù),并可對(duì)鏡像進(jìn)行自定義策略評(píng)估。
(3)鏡像人工檢測(cè)
Docker鏡像是容器的模板,涉及的攻擊范圍非常廣,而且有的安全風(fēng)險(xiǎn)很難被Clair和Anchore_Engine掃描器所發(fā)現(xiàn),所以Docker鏡像掃描不能完全保障Docker鏡像的安全性,可以結(jié)合人工檢測(cè)的方法,如使用“Docker inspect”和“Docker history”等命令查看鏡像的信息,對(duì)Dockerfile進(jìn)行分析等。
完成鏡像檢測(cè)以后,容器的運(yùn)行則需要安全控制,資源隔離在實(shí)現(xiàn)輕量級(jí)虛擬化的服務(wù)的同時(shí),也提高了容器之間的安全性,可通過namespace來實(shí)現(xiàn),包括Mount、UTS、IPC、PID、Network和User。
(1)Mount
Mount namespace通過隔離文件系統(tǒng)掛載點(diǎn)實(shí)現(xiàn)文件系統(tǒng)的隔離,不同的Mount namespace中的文件結(jié)構(gòu)即使發(fā)生變化也不會(huì)相互影響。在部署Mount namespace時(shí),會(huì)把當(dāng)前的文件結(jié)構(gòu)復(fù)制給新的namespace,里面的操作只影響內(nèi)部的文件系統(tǒng),實(shí)現(xiàn)了嚴(yán)格隔離。Mount在某些特殊情況下不能使用,比如父節(jié)點(diǎn)namespace中的進(jìn)程掛載外部存儲(chǔ)器,子節(jié)點(diǎn)namespace復(fù)制的目錄結(jié)構(gòu)就不能實(shí)現(xiàn)自動(dòng)掛載。
(2)UTS
UTS namespace用來實(shí)現(xiàn)對(duì)容器主機(jī)名和域名的隔離,同時(shí)保存內(nèi)核、版本和底層結(jié)構(gòu)類型等信息。用戶在容器中查看到的是當(dāng)前容器的系統(tǒng)信息,而不能查看宿主機(jī)的系統(tǒng)信息。宿主機(jī)的內(nèi)核通過UTS namespace對(duì)多個(gè)容器進(jìn)行統(tǒng)一管理,來實(shí)現(xiàn)容器之間主機(jī)域名等信息的隔離。
(3)IPC
IPC namespace用來隔離進(jìn)程間的資源,使容器進(jìn)程之間無(wú)法通過信號(hào)量、共享內(nèi)存和消息隊(duì)列方式進(jìn)行通信。容器進(jìn)程運(yùn)行時(shí)向宿主機(jī)申請(qǐng)IPC資源,包含系統(tǒng)IPC標(biāo)識(shí)符和實(shí)現(xiàn)POSIX消息隊(duì)列的文件系統(tǒng)。Docker利用IPC namespace可以實(shí)現(xiàn)容器和宿主機(jī)以及容器之間的IPC隔離。
(4)PID
PID namespace中的進(jìn)程有獨(dú)立的PID,包括容器中的PID和宿主機(jī)上的PID,namespace中的PID和宿主機(jī)無(wú)關(guān),每個(gè)PID namespace都有自己的計(jì)數(shù)程序,并形成一個(gè)層級(jí)體系。父節(jié)點(diǎn)可以查看子節(jié)點(diǎn)進(jìn)程,并可以通過信號(hào)等方式終止子節(jié)點(diǎn)的進(jìn)程,而子節(jié)點(diǎn)看不到父節(jié)點(diǎn)的內(nèi)容,從而實(shí)現(xiàn)了進(jìn)程隔離,并有利于資源控制。
(5)Network
Network namespace實(shí)現(xiàn)網(wǎng)絡(luò)資源的隔離,使得每個(gè)Docker容器擁有獨(dú)立的網(wǎng)絡(luò)設(shè)備、IP地址、IP路由表、/proc/net目錄和端口號(hào)等。一個(gè)物理網(wǎng)絡(luò)設(shè)備最多存在于一個(gè)Network namespace中,通過類似于管道的虛擬網(wǎng)絡(luò)設(shè)備實(shí)現(xiàn)不同Network namespace之間通信。
(6)User
User namespace使不同的Docker容器有完全不同的uid和gid,可以在容器中創(chuàng)建root用戶,而不需要在宿主機(jī)上創(chuàng)建。其中的Capability機(jī)制可根據(jù)特定用戶的權(quán)限選擇使用或禁止,進(jìn)一步提高了容器的安全性。
Docker可以使用系統(tǒng)內(nèi)核提供的Cgroup對(duì)宿主機(jī)的不同容器使用的資源進(jìn)行審計(jì),包括對(duì)CPU、內(nèi)存等資源進(jìn)行均衡配置,保證宿主機(jī)對(duì)容器服務(wù)的合法要求進(jìn)行響應(yīng)。Docker還可以針對(duì)容器創(chuàng)建對(duì)應(yīng)的用戶,使用quota技術(shù)對(duì)容器使用的磁盤存儲(chǔ)進(jìn)行配額限制。
在容器運(yùn)行時(shí),也可以啟用SELinux強(qiáng)制訪問控制,使容器只能訪問運(yùn)行任務(wù)所需的文件資源,從而對(duì)Docker容器訪問宿主機(jī)的行為進(jìn)行控制。
容器運(yùn)行時(shí),要采取防范入侵措施,保證容器運(yùn)行的安全性。可以采取對(duì)容器性能指標(biāo)進(jìn)行監(jiān)控的方式來進(jìn)行報(bào)警和應(yīng)急響應(yīng)。
全虛擬化容器是實(shí)現(xiàn)容器入侵檢測(cè)的一種方案,包含傳統(tǒng)單體應(yīng)用和微服務(wù)架構(gòu)應(yīng)用。其中,微服務(wù)架構(gòu)有著單個(gè)微服務(wù)啟動(dòng)快,易于開發(fā)維護(hù),部分修改易部署等顯著優(yōu)點(diǎn)。
微服務(wù)架構(gòu)包含了較多的Docker容器,網(wǎng)絡(luò)結(jié)構(gòu)相對(duì)復(fù)雜。使用Kubernetes可以對(duì)容器進(jìn)行有效編排,其提供的原生網(wǎng)絡(luò)策略NetworkPolicy可以提供IP/Port等級(jí)的網(wǎng)絡(luò)隔離[5]。其中,在Web應(yīng)用的認(rèn)證鑒權(quán)方面可通過使用網(wǎng)關(guān)鑒權(quán)或服務(wù)自主鑒權(quán)模式降低容器之間互相惡意訪問。同時(shí),也可以在容器集群內(nèi)部署網(wǎng)關(guān)容器和蜜罐容器對(duì)容器集群進(jìn)行入侵防護(hù)。
另外,利用iptables隔離策略可以限制攻擊者對(duì)宿主機(jī)的訪問,利用Docker集群網(wǎng)絡(luò)隔離策略防范攻擊者竊聽其他容器網(wǎng)絡(luò)流量,網(wǎng)絡(luò)流量可視化策略對(duì)指定的網(wǎng)絡(luò)進(jìn)行深度報(bào)文分析,這些策略對(duì)容器入侵可以起到重要的防范作用。
Docker容器技術(shù)在虛擬化、云計(jì)算、DevOps等領(lǐng)域得到越來越廣泛的應(yīng)用,但是在容器生命周期的各個(gè)階段都可能會(huì)出現(xiàn)安全問題。本文針對(duì)這些安全問題進(jìn)行了分析,并探討了鏡像安全檢測(cè)、容器運(yùn)行控制、容器入侵檢測(cè)等技術(shù)。在以后的應(yīng)用中,應(yīng)進(jìn)一步針對(duì)系統(tǒng)部署安全需求,定制安全策略,形成容器安全應(yīng)用的最佳方案。
[1]楊保華,戴王劍,曹亞侖.Docker技術(shù)入門與實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2017.
[2]郭甲戌,胡曉勤.基于Docker的虛擬化技術(shù)研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017(10):28-29.
[3]王鵑,胡威,張雨菡.基于Docker的可信容器[J].武漢大學(xué)學(xué)報(bào):理學(xué)版,2017,63(2):102-108.
[4]魯濤,陳杰,史軍.Docker安全性研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2018,28(06):115-120.
[5]劉淵,喬巍.云環(huán)境下基于Kubernetes集群系統(tǒng)的容器網(wǎng)絡(luò)研究與優(yōu)化[J].信息網(wǎng)絡(luò)安全,2020(03):36-44.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2020年11期