近年來,容器憑借能在任意環境中運行、開銷低、秒級啟動、鏡像占用小等優勢,越來越受世界各種行業追捧。例如Google從Gmail到YouTube和Google搜索,幾乎所有產品都在容器中運行,每個星期都要啟動超過20億個容器;京東構建了全球最大的容器集群,其內部99%都做了容器化,當前已有20萬的容器集群規模。
但容器早期發展主要考慮易用性和功能實現,對安全考慮不是很充分,存在方方面面的安全隱患。隨著容器化的重要性與日俱增,容器安全的重要性也在不斷提高。作為一項依然處于發展階段的新技術,容器的安全性在不斷地提高,也在不斷地受到挑戰。在其面臨的所有安全問題當中,逃逸問題穩居首位——它直接影響到了承載容器的底層基礎設施的機密性、完整性和可用性,危害了底層宿主機和整個云計算系統的安全。本文針對容器逃逸技術做全面的講解。
1、容器安全風險
在容器時代,安全面臨新舊威脅的雙重挑戰。一方面,傳統的攻擊手段依然有效,如注入漏洞、暴力破解、權限提升等。另一方面,新的攻擊方式層出不窮,包括容器逃逸、投毒鏡像、集群管理漏洞等,讓人防不勝防。
1.1容器作為輕量的虛擬化技術面臨的主要安全風險
圖1 虛擬機 vs 容器
從圖中可以看出:
容器沒有hypervisor,安全性強依賴于Host OS內核,受內核漏洞影響;
容器技術在OS層面實現了對計算機系統的虛擬化,在操作系統中,通過namespace技術對CPU、內存和文件系統等資源進行隔離、劃分和控制,實現進程之間透明的資源使用,其安全性與內核隔離技術的成熟度強相關;
要從虛擬機攻破到宿主機或其他虛擬機,需要先攻破Hypervisor層,這是極其困難的。而docker容器與宿主機共享內核、文件系統等資源,更有可能對其他容器、宿主機產生影響。容器的隔離層次更少,攻擊路徑更短,攻擊面更大,危及整個系統的安全。
1.2從容器生命周期看容器的關鍵安全風險
圖2 Docker容器典型使用流程
Docker作為容器引擎的代表,從它的使用流程可以看出,容器安全風險貫徹容器構建、部署、運行整個生命周期。例如,在構建階段,可能會遇到的軟件供應鏈攻擊,包括基礎鏡像污染、CI工具攻擊、制品庫漏洞攻擊等。在部署階段也可能面臨針對云原生基礎設施平臺攻擊,包括開源組件編排工具、安全合規檢查等。在運行時階段,還可能面臨針對云原生應用的攻擊,包括逃逸攻擊、安全隔離、注入漏洞、弱口令等。 容器的生命周期短,動態變化快,超過50%容器從上線到下架的整個生命周期不超過1天。快速檢測和響應容器入侵事件,把損失降到最低,成為了一大安全難題。
1.3歷年容器安全漏洞情況表明,容器逃逸占比最高、影響較大
在容器集群中,若攻陷一個容器,就可以橫向移動到其它容器上,或者逃逸到node節點上進行持久化,控制整個節點。下一步,攻擊者還可以通過漏洞利用或者調用API SERVER控制整個集群。容器的攻擊價值高,儼然成為攻擊者眼中“香餑餑”。 從下圖的歷年容器安全問題分布及容器運行時入侵事件統計分布可以看出,容器逃逸是用戶最關注的安全問題,同時也是業務場景中遇到最多的安全問題。
圖3 容器安全問題分布
圖4 2021年容器運行時入侵事件統計分布
2、容器逃逸技術及原理
容器逃逸,是指“流氓”容器嘗試突破正常隔離環境限制,借助一些手段獲得容器所在的直接宿主機、宿主機上的其他容器或集群內其他主機、其他容器的某種權限下的命令執行能力,進行惡意攻擊或執行越權訪問的行為。如下圖所示,容器逃逸漏洞可能打穿容器節點,甚至整個集群。
圖5 從攻擊方視角看容器逃逸攻擊路徑
容器逃逸的前提是已經獲得了容器內某種權限下的命令執行能力,然后捅破隔離。容器的隔離技術不是新發明的,它借助Linux資源隔離的核心技術namespace來實現。
圖6 應用層容器逃逸原理分析
從圖6可以得知,Linux內核先天性隔離性不足,盡管目前namespace已經提供了非常多的資源隔離類型如PID、mount、network、UTS、IPC、user等,但除namespace外其它內核資源并未隔離或隔離不充分,其中包括一些系統的關鍵性目錄(如/sys、/proc等),這些關鍵性的目錄可能會泄露主機上一些關鍵信息,讓攻擊者利用這些信息對宿主機發起攻擊,使得容器逃逸到宿主機。 特權模式在6.0版本的時候被引入Docker,其核心作用是允許容器內的root擁有宿主機的root權限。使用特權模式啟動容器后(docker run --privileged),Docker容器被允許訪問宿主機上的所有設備、可以獲取大量設備文件的訪問權限、可以執行mount命令進行掛載。當Docker管理員可通過mount命令將宿主機磁盤設備掛載進容器內部,即可獲取對整個宿主機的文件讀寫權限,也可以通過寫入計劃任務等方式在宿主機執行命令,成功逃逸。 Linux內核自版本2.2引入了Capabilities機制,將傳統的root用戶的特權劃分為30+個不同的單元,進行精細化管理。但如果Capabilities設置不正確,就會讓攻擊者有機可乘,實現權限提升。例如當容器以--cap-add=SYSADMIN啟動,Container進程就被允許執行mount、umount等一系列系統管理命令,如果攻擊者此時再將外部設備目錄掛載在容器中就會發生Docker逃逸。可見,capabilities控制不當同樣會引入容器逃逸,當前業界已識別SYSADMIN、DAC_READ_SEARCH、SYS_MODULE、SYS_PTRACE引入了逃逸漏洞。
3、基于業務的容器逃逸場景分析
基于大量業界容器安全CVE漏洞的研究,對產品業務場景中運行態的容器安全薄弱環節進行了分類,識別出容器逃逸主要分布在應用層、服務層和系統層。
圖7 在產品業務場景中識別的容器逃逸問題
應用層的逃逸,主要體現在特權模式與配置不當,如利用特權模式逃逸、借助Capability逃逸。為了方便容器與宿主機進行數據交換,幾乎所有主流的解決方案都會提供掛載宿主機目錄到容器的功能,由此而來的容器逃逸問題也呈上升趨勢,當容器以讀寫形式掛載宿主機上的敏感文件或目錄如docker.sock、主機procfs時,從容器中逃逸出去易如反掌,手段也多種多樣。 除了應用本身的脆弱性引入的攻擊外,服務層集群、容器運行時本身的脆弱性問題也不容忽視。例如攻擊者借助k8s的8080、6443未授權訪問,可通過容器訪問K8S master api進行惡意調用;參與到容器生態中的服務端、客戶端程序自身存在的漏洞如runc、Containerd組件漏洞,同樣可被容器利用從而獲取宿主機的控制權。 此外,從系統層面來看,Docker直接共享宿主機的內核,所以當宿主機內核存在安全漏洞時會一并影響Docker的安全,導致可能會造成Docker逃逸。例如著名的臟牛漏洞CVE-2016-5195是Linux內核中的權限提升漏洞,通過它可實現Docker容器逃逸,獲得root權限的shell。
4、解決容器逃逸的方案
4.1 Docker自身安全性改進
容器發展早期,容器內的root等同于宿主機上的root,若容器被攻破或容器本身存在惡意程序時,在容器內就可以獲取到宿主機的root權限。Docker 1.10版本,引入User Namespace技術進行用戶隔離,可將容器內的root用戶映射到宿主機上的非root用戶,大大減輕了容器逃逸的風險。容器社區持續在努力將縱深防御、最小權限等理念和原則落地,因此建議盡可能使用最新版Docker。且使用最新版本docker,已知的CVE漏洞都已修復,如更新Docker版本到19.03.1及更高版本,不再受CVE-2019-14271、CVE-2019-5736等漏洞影響。
4.2 安全配置及掛載
應用層大多容器相關漏洞,均由不安全配置或掛載引入。無論是細粒度權限控制還是其他安全機制,用戶都可以通過修改容器環境配置或在運行容器時指定參數來調整。建議docker容器或k8s pod啟動時,做到:
不以root權限運行Docker服務;
不將宿主機敏感目錄掛載至容器目錄;
不開啟特權模式,如需添加相應的權限可以使用-cap-add參數;
不將容器以-cap-add=SYSADMIN、-cap-add=DAC_READ_SEARCH、-cap-add=SYS_MODULE、-cap-add=SYS_PTRACE等高Capabilities啟動。如攻擊者借助容器的CAP_DAC_READ_SEARCH權限,采用著名的Shocker攻擊方式,可在容器內逃逸讀取到host的/etc/shadow文件。
4.3 加強內核安全和管理
盡量安裝最新補丁的主機內核版本,如Linux內核版本>=2.6.22解決了CVE-2016-5195(臟牛),Linux內核版本>=4.14解決了CVE-2017–1000405(大臟牛)。
4.4 使用安全加固組件
Linux的SELinux、AppArmor、GRSecurity組件都是Docker官方推薦的安全加固組件,這三個組件可以限制容器對主機的內核或其他資源的訪問控制權限。下面說明下這些安全加固組件:
SELinux:是Linux的一個內核安全模塊,提供了安全訪問的策略機制,通過設置SELinux策略可以指定如何嚴格或寬松地進行檢查,實現某些進程允許訪問某些文件;
AppArmor:類似于SELinux,也是一個Linux的內核安全模塊,普通的訪問控制僅能控制到用戶的訪問權限,而AppArmor可以控制到用戶程序的訪問權限,也能識別0day漏洞和未知的應用程序漏洞所導致的攻擊;
GRSecurity:是一個對內核的安全擴展,可通過智能訪問控制,提供內存破壞防御,文件系統增強等多種防御形式。它提供了一些工具讓用戶配置、使用這些安全特性。
4.5 使用安全容器
容器有著輕便快速啟動的優點,虛擬機有著安全隔離的優點,安全容器可以兼顧兩者的優點,做到既輕量又安全。 安全容器與普通容器的主要區別在于,安全容器中的每個容器都運行在一個單獨的微型虛擬機中,擁有獨立的操作系統和內核,并且有虛擬機般的安全隔離性。 安全容器目前推薦的主流技術方案是Kata Containers,它并不包含一個完整的操作系統,只有一個精簡版的Guest Kernel運行著容器本身的應用,可以通過使用共享內存來進一步減少內存的開銷。另外,它還實現了OCI規范,可以直接使用Docker的鏡像啟動Kata容器,具有開銷更小、秒級啟動、安全隔離等許多優點。
圖8 普通容器與安全容器對比
5、后記
正如前文所述,容器已經成為黑客的重點攻擊目標,而應用層的容器逃逸漏洞占比最高。容器在應用層的安全很大程度上取決于其配置的安全性,我們在業務場景中尤為重要的就是Capabilities的賦予,一定要做到權限最小化,丟棄沒有用到的特權。借助Capabilities逃逸只是冰山一角,還有大量逃逸場景待進一步研究。盡管有些Capabilities當前還沒有被惡意利用,但無法確保后續不會成為攻擊者逃逸的手段,因此務必做到維持業務必須的最小權限。 權限過多,難免疏忽。權限最小化的同時也要參考業界最佳實踐:啟用user namespace進行用戶隔離并且以非root運行,這就好比使用預編譯語句防御SQL注入,從根源上防御,切斷所有的攻擊路徑,盡管這個方案可能對現有業務部署方案有大量的改動,但仍然應該成為容器防御的最終目標之一。 當前Docker的隔離性還遠達不到虛擬機的水平,應該避免把Docker容器當成虛擬機來使用,除非在虛擬機里部署容器,否則建議Docker容器里只跑可信應用。
原文標題:基于業務場景的容器逃逸技術
-
計算機
+關注
關注
19文章
7546瀏覽量
88679 -
API
+關注
關注
2文章
1513瀏覽量
62423
原文標題:基于業務場景的容器逃逸技術
文章出處:【微信號:5G通信,微信公眾號:5G通信】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
國巨電容如何實現高性價比?從工藝到應用的全面解析!
![國巨電容如何實現高性價比?從工藝到應用的<b class='flag-5'>全面</b><b class='flag-5'>解析</b>!](https://file1.elecfans.com/web2/M00/EC/AB/wKgZomZn_lmAbajtAAByBgw7ZO8148.png)
全面解析電子背散射衍射技術:原理、應用與未來趨勢
![<b class='flag-5'>全面</b><b class='flag-5'>解析</b>電子背散射衍射<b class='flag-5'>技術</b>:原理、應用與未來趨勢](https://file1.elecfans.com/web3/M00/07/1B/wKgZPGeTTDOABu6eAACl5eoz5_Y244.png)
TNC連接器全解析:技術規格與應用領域
![TNC連接器全<b class='flag-5'>解析</b>:<b class='flag-5'>技術</b>規格與應用領域](https://file1.elecfans.com/web1/M00/F3/35/wKgaoWcR9MqAR0JeAADPfz0hbWQ535.png)
raksmart洛杉磯云服務器全面解析
氣體質量流量計:原理,技術與應用全面解析
國產光電耦合器的全面解析
ARM平臺實現Docker容器技術
ARM平臺實現Docker容器技術
高壓脈沖電容器與普通電容器的區別
PTCRB認證存在的多種認證類型全面解析
![PTCRB認證存在的多種認證類型<b class='flag-5'>全面</b><b class='flag-5'>解析</b>](https://file1.elecfans.com/web2/M00/C5/15/wKgaomXxV7qAG4EFAADh40zIXe8742.png)
評論