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