容器徹底改變了我們開發和部署應用程序的方式,提供了封裝應用程序及其依賴項的輕量級和可移植環境。但我們如何保證它們的安全呢?
需要解決的關鍵之一是容器運行時 - 負責啟動和管理容器的軟件。
雖然Docker和Containerd等容器運行時被廣泛使用,但它們與主機操作系統的緊密耦合可能會帶來風險。
在本文中,我們將深入探討容器運行時的工作原理、為什么緊密耦合的運行時會在攻擊者逃離容器時導致主機接管,以及使用gVisor和Kata Containers等安全容器運行時的重要性。
了解容器運行時
容器運行時編排容器、管理其生命周期并將其與主機和其他容器隔離。通過利用命名空間和cgroup等Linux內核功能,運行時圍繞容器創建安全邊界。
然而,傳統的運行時與主機的內核緊密相關,這存在潛在的安全漏洞。如果攻擊者設法逃離容器,該攻擊者就可獲取對底層主機操作系統的未經授權的訪問,從而危及整個系統的安全。
緊密耦合的容器運行時繼承了主機操作系統的安全態勢和攻擊面。運行時或主機內核中的任何漏洞及其利用都會成為攻擊者的潛在切入點。
在多租戶環境或運行不受信任的工作負載時,這種風險尤其嚴重。為了減輕這種威脅,使用安全的容器運行時(例如gVisor和Kata Containers)至關重要。
這類安全容器運行時提供了額外的隔離和安全層,采用創新技術來增強容器化工作負載的安全性。例如,gVisor使用用戶空間內核實現,而Kata Containers則通過輕量級虛擬機實現。這些安全運行時將容器與主機操作系統隔離,防止攻擊者未經授權訪問底層基礎設施,并降低主機接管的風險。
當下主流的一些容器運行時介紹
容器運行時提供了創建、部署和執行容器運行所需的工具和庫。這些容器運行時處理諸如創建和管理容器映像、容器的啟動和停止、資源隔離、網絡和安全性等任務。它們構成了容器化技術的基礎,對于跨不同計算環境一致運行應用程序至關重要。以下是一些最流行的容器運行時。
Docker
Docker是一種廣泛使用的容器運行時,可為構建、打包和運行容器提供完整的生態系統。它包括管理容器生命周期的Docker引擎和提供與容器交互的命令行界面的Docker CLI。
在底層,Docker使用runC作為默認的底層容器運行時。runC基于開放容器計劃(OCI)運行時規范生成和管理容器。
Containerd
Containerd是由Docker開發的開源容器運行時,側重于提供穩定、高性能和可移植的強大運行時。Ccontainerd旨在作為容器編排系統的核心組件,可以與Kubernetes等更上層的編排平臺集成。
與Docker類似,Containerd使用runC作為默認的底層容器運行時來創建和管理容器。
runC
runC由OCI開發,是一個符合OCI運行時規范的輕量級底層運行時,通過在隔離的沙箱中啟動容器來提供基本的容器執行環境。Docker和Containerd都利用runC的功能來處理容器生命周期管理、進程隔離、文件系統掛載和其他底層容器操作。
CRI-O
CRI-O是專為Kubernetes設計的輕量級容器運行時。它實現了Kubernetes容器運行時接口(CRI),并為Kubernetes與容器交互提供了接口。CRI-O在底層使用runc和Containerd等技術。
安全容器運行時:gVisor和Kata Containers
gVisor是Google開發的開源容器運行時,使用輕量級用戶空間內核“Sandbox”為容器提供安全的執行環境。
gVisor不是直接在主機內核上運行容器,而是在隔離的沙箱中運行容器,增加了額外的安全和隔離層。沙箱攔截來自容器的系統調用,并應用自身的類內核實現,提供針對內核級漏洞的防御機制。
Kata Containers開源項目將輕量級虛擬機(VM)與容器運行時相結合,采用硬件虛擬化技術為每個容器進程啟動單獨的VM,提供容器之間的強隔離。
每個虛擬機都運行一個極簡的輕量級客戶操作系統,例如精簡版Linux內核。Kata Containers旨在保證容器的性能優勢,同時提升虛擬機的安全性和工作負載隔離。
gVisor和Kata Containers都解決了與傳統容器運行時相關的某些安全問題,有助于降低容器逃逸攻擊的風險,在某些情形下,攻擊者可利用容器運行時或內核中的漏洞獲得對主機系統的未經授權的訪問。通過添加額外的隔離和安全控制層,這些運行時強化了對容器化工作負載提供的保護。
gVisor和Kata Containers并不相互排斥;事實上,它們可以一起使用,Kata Containers可使用gVisor作為其運行時,這種組合通過將虛擬機層面的隔離優勢與gVisor所提供的額外安全措施相結合,進一步增強了安全性和隔離性。
這些安全容器運行時在運行不受信任或潛在易受攻擊的工作負載的情況下特別有用,例如在多租戶環境中或處理不受信任的第三方代碼時。
在安全運行時中運行容器
使用gVisor和Kata Containers等安全運行時可以顯著增強對主機系統的保護。主要安全優勢如下:
增強隔離:gVisor和Kata Containers在容器和主機系統之間提供了額外的隔離層。這種隔離有助于防止容器逃逸攻擊并限制容器內安全漏洞的影響。
內核級保護:gVisor和Kata Containers都可以防御內核級漏洞。gVisor自身已實現類內核接口,可攔截來自容器的系統調用并執行安全策略。Kata Containers采用硬件虛擬化技術可在具有內核實例的獨立虛擬機中運行容器,將這些獨立虛擬機與主機內核隔離。
縱深防御:通過將這些運行時的安全機制與其他最佳安全實踐(例如強大的訪問控制、網絡分段和圖像掃描等)相結合,可提升容器部署的安全性。
兼容性和互操作性:gVisor和Kata Containers都可與Kubernetes等容器編排平臺配合使用,用戶借助這些技術的安全優勢,無需對現有容器化應用程序或部署流程進行重大更改。
請注意,雖然gVisor和Kata Constianers提升了安全性,但由于額外的隔離層,它們可能會帶來一些性能開銷。因此,實際部署時仍需要對特定用例和性能要求進行評估,以確定所提供的安全優勢是否超過任何潛在的性能影響。
在安全容器運行時中運行微服務
微服務架構通常涉及在同一基礎設施上運行的多個獨立服務。通過在安全容器運行時中運行每個微服務,可以確保它們彼此隔離。
這有助于防止容器逃逸、權限升級和內核級漏洞。一旦發生安全漏洞或故障,安全容器運行時還可幫助限制安全危機的擴散,防止事態進一步升級。
用戶還可通過容器運行時為每個微服務分配特定的資源(例如CPU、內存和存儲),確保資源的公平分配。這可以防止資源爭用問題,否則惡意行為者可能會利用資源爭用問題來降低其他微服務的性能或穩定性。
要在安全容器運行時中運行微服務,需要執行以下步驟:
選擇安全容器運行時 評估不同的安全容器運行時(例如gVisor和Kata Containers),并選擇最能滿足需求的一種。考慮安全功能、性能影響、與現有基礎設施的兼容性以及社區支持等因素。
安全構建容器鏡像 使用受信任的基礎鏡像,定期更新依賴項并掃描鏡像是否存在漏洞。實施安全的鏡像注冊并強制執行鏡像簽名以驗證鏡像的真實性。
安全配置 以適當的安全設置配置容器運行時,可能包括啟用隔離功能、應用資源限制、設置容器網絡策略和控制對主機系統資源的訪問等。遵循容器運行時文檔提供的安全準則。
實施嚴格的訪問控制 為容器化微服務實施強大的訪問控制。這包括限制容器權限、對容器編排平臺采用基于角色的訪問控制(RBAC)以及保護容器運行時API。
持續監控和記錄 實施監控和日志記錄解決方案來跟蹤容器化微服務的行為。監控可疑活動、異常行為和潛在的安全事件。集中式日志記錄和分析有助于高效地檢測和響應安全事件。
定期更新和打補丁 通過應用安全補丁和更新來使容器運行時保持最新,確保擁有最新的安全改進和錯誤修復。
運行安全測試 對容器化微服務定期進行安全評估和滲透測試,這有助于識別容器運行時配置和應用程序代碼中的漏洞和潛在弱點。
編輯:黃飛
-
操作系統
+關注
關注
37文章
6825瀏覽量
123331 -
容器
+關注
關注
0文章
495瀏覽量
22061 -
虛擬機
+關注
關注
1文章
917瀏覽量
28196 -
主機系統
+關注
關注
0文章
9瀏覽量
6924
原文標題:容器安全和安全運行時的重要性(一)
文章出處:【微信號:wuxian_shenhai,微信公眾號:無線深海】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論