田宇 鞏磊
摘要 Docker是一個開源的應(yīng)用容器引擎,可使用戶打包應(yīng)用及依賴包到可移植的容器中,而且基于共享內(nèi)核實現(xiàn)虛擬化。但共享內(nèi)核也面臨著一定的安全問題,因此,做好Docker脆弱性分析,積極采取有效措施增強其安全性,為其更好的應(yīng)用到生產(chǎn)中意義重大。
【關(guān)鍵詞】Docker 脆弱性 分析 安全 增強
Docker容器完全使用沙箱機制,相互之間不存在任何接口,是一個實用型較強的虛擬化工具。但是Docker共享系統(tǒng)內(nèi)核模式一定程度上降低了安全性,攻擊面容易暴漏出來,因此,做好Docker的安全增強研究,成為業(yè)內(nèi)關(guān)注與研究的熱點。
1 Docker脆弱性分析
Docker脆弱性主要體現(xiàn)在文件系統(tǒng)隔離、進程及通信隔離、設(shè)備管理及宿主機資源限制、網(wǎng)絡(luò)隔離和鏡像傳輸四個方面。對其脆弱性進行研究,可為尋找針對性安全增強措施提供依據(jù)。
1.1 文件系統(tǒng)隔離
Docker中隔離文件功能的實現(xiàn)基于Mount命名空間,不同的命名空間中存放不同的文件,避免文件結(jié)構(gòu)間相互影響。但容器中root權(quán)限與宿主機root用戶相近,尤其創(chuàng)建操作時“rw mount”了宿主機中的文件系統(tǒng)且容器剛好有root權(quán)限存在時,一旦容器執(zhí)行“chmod a +s[program file]”時,會導(dǎo)致運行該程序的用戶均能獲得root權(quán)限,大大增加相關(guān)信息的泄漏機率。
1.2 進程隔離及通信隔離
Docker使用PID命名空間實現(xiàn)進程的隔離,隔離操作時重新標(biāo)號進程的PID。不同的PID命名空間均有單獨的計數(shù)程序。系統(tǒng)內(nèi)核對PID命名空間的維護通過樹實現(xiàn),其中根命名空間處于最頂層,并且父節(jié)點可獲得子節(jié)點信息,但子節(jié)點無法獲得父節(jié)點信息。但需要明確的是:當(dāng)為l的PID被終止,會導(dǎo)致容器完全停止,發(fā)生拒絕服務(wù)這一不良狀況。
1.3 設(shè)備管理及宿主資源限制
Docker容器中域名及主機名的隔離通過UTS命名空間實現(xiàn),同時,使用Cgroups對資源的使用情況進行限制,不過默認(rèn)情況下其處于關(guān)閉狀態(tài),容易增加設(shè)備資源、網(wǎng)絡(luò)帶寬、內(nèi)存空間等耗盡情況的發(fā)生機率。另外,考慮到用戶可以獲得容器內(nèi)資源,用戶自定義代碼時如限制不當(dāng),會導(dǎo)致宿主機拒絕服務(wù),尤其應(yīng)用SaaS、PaaS、IaaS時應(yīng)引起足夠的注意,防止拒絕服務(wù)情況的發(fā)生。
1.4 網(wǎng)絡(luò)隔離和鏡像傳輸
Docker中Network命名空間負(fù)責(zé)隔離網(wǎng)絡(luò)資源,如實現(xiàn)IP路由表、TC P/IP協(xié)議、網(wǎng)絡(luò)設(shè)備等的隔離等。但默認(rèn)情況下Docker使用橋接方式給容器指定IP及Network命名空間,而后與網(wǎng)橋相連。此種方式僅是轉(zhuǎn)發(fā)流量,未作過濾處理,面臨較大的MAC Flooding風(fēng)險。另外,鏡像傳輸時,Docker并不校驗拉回的鏡像,如一些數(shù)據(jù)被替換可能會發(fā)生中間人攻擊。
2 Docker安全增強措施
針對Docket存在的安全性問題,可從容器安全、容器與宿主機間兩方面入手,積極采取相關(guān)措施,提高其安全性,為其更好的應(yīng)用奠定基礎(chǔ)。
2.1 容器安全增強措施
為保證容器安全性,一方面,對網(wǎng)絡(luò)訪問行為進行限制,即,過濾網(wǎng)絡(luò)流量,加強威脅限制。考慮到Linux中具備Iptables,功能強大,具備限制各種網(wǎng)絡(luò)功能,因此,可使用Iptables劃分網(wǎng)絡(luò)區(qū)域、隔離網(wǎng)絡(luò)等。同時,還可應(yīng)用SDN軟件,例如使用Open VSwitch代替Docker默認(rèn)網(wǎng)絡(luò),以更好對容器網(wǎng)絡(luò)進行管理。另一方面,進行SSL加密處理。因當(dāng)前Docker不對拉回的Images的正確性進行校驗,因此,為防止拉回鏡像中間人攻擊的發(fā)生,可向Docker源碼中添加相關(guān)的校驗代碼。同時,還可使用SSL協(xié)議實現(xiàn)替代驗證。
2.2 容器與宿主機間安全增強措施
當(dāng)容器內(nèi)部發(fā)生安全隱患時,及時采取措施避免宿主機被攻擊尤為重要,具體可采取以下措施:
(1)對Linux全能表進行控制,并應(yīng)用相關(guān)的安全模塊。一方面,設(shè)置“--cap-dropSETUID/SET GID”參數(shù),對容器中用戶權(quán)限進行限制,防止獲取的root權(quán)限。另外,在不影響運行的情況下,給容器分配最小權(quán)限。另一方面,開啟SELinux功能,同時,開啟Docker Daemon時注重應(yīng)用“--selinux-enabled”參數(shù),在此基礎(chǔ)上實現(xiàn)自定義用戶規(guī)則的加載。
(2)加強權(quán)限控制,限制資源分配。一方面,考慮到部分文件的隔離并不完全,當(dāng)容器中應(yīng)用某些特殊權(quán)限時分配的權(quán)限應(yīng)盡可能最小化,以最大程度的保證安全。另一方面,為防止資源耗盡出現(xiàn)拒絕服務(wù)情況,應(yīng)限制好相關(guān)資源。例如,使用“-m 128m”參數(shù)對內(nèi)存進行限制;使用“--cpuset=0,1-c 2”參數(shù)對CPU資源進行限制。另外,在宿主機內(nèi)使用Cgroups限制磁盤的I/O。
(3)禁用root權(quán)限,做好記錄日志分析。禁止運行安全情況不明的用戶程序,避免root權(quán)限的隨意使用。如需應(yīng)用root權(quán)限也應(yīng)對部分權(quán)限進行限制,使用“類root”用戶。另外,盡管分析日志不能從根本上提高Docker安全性,但可為技術(shù)人員查找漏洞,分析入侵提供依據(jù),有助于技術(shù)人員制定針對性防護策略,因此,技術(shù)人員應(yīng)做好日志的定期分析工作,發(fā)現(xiàn)異常及時處理。
3 結(jié)論
Docker是一個功能強大,使用方便的虛擬化工具,為開發(fā)人員開發(fā)各種程序提供較大便利,但Docker暴漏的安全性問題不容小視,因此,要求技術(shù)人員做好Docker安全性研究,明確安全問題及引發(fā)原因。為提高安全性,一方面,應(yīng)及時更新Docker,使用最新版本的Docker。同時,禁止運行安全性不明的容器,尤其不能隨意使用root權(quán)限。另一方面,加強應(yīng)用管理,構(gòu)建有效的安全防范機制,避免漏洞被不法人員利用。同時,一旦發(fā)現(xiàn)入侵行為應(yīng)及時采取處理措施,防止入侵影響范圍進一步擴大。
參考文獻
[1]陳清金,陳存香,張巖.Docker技術(shù)實現(xiàn)分析[J].信息通信技術(shù),2015,9(02):37- 40.
[2]董博,王雪,索菲,張景偉,基于Docker的虛擬化技術(shù)研究[J],遼寧大學(xué)學(xué)報(自然科學(xué)版),2016,43 (04): 327-330.
[3]郭甲戌,胡曉勤,基于Docker的虛擬化技術(shù)研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017 (10):28-29.