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