國(guó)家保密局網(wǎng)站>>保密科技

云原生中的容器安全防護(hù)和實(shí)踐

2021年11月04日    來(lái)源:國(guó)家保密科技測(cè)評(píng)中心【字體: 打印

【摘   要】 本文從容器技術(shù)、鏡像、網(wǎng)絡(luò)和運(yùn)行環(huán)境等維度分析了應(yīng)用容器帶來(lái)的4個(gè)安全挑戰(zhàn),總結(jié)了5項(xiàng)應(yīng)對(duì)舉措,并從容器全生命周期保護(hù)出發(fā),提出了容器安全解決方案。

【關(guān)鍵詞】 云原生 容器安全

1 引言

隨著云計(jì)算的發(fā)展,以容器和微服務(wù)為代表的云原生技術(shù),受到人們的廣泛關(guān)注,其中Docker和Kubernetes (K8S)是企業(yè)容器運(yùn)行時(shí)和容器編排的首要選擇。然而,在應(yīng)用容器和K8S過(guò)程中,大多數(shù)企業(yè)都遇到過(guò)不同程度的安全問(wèn)題,如何保障容器安全,已成為企業(yè)最關(guān)心的問(wèn)題。

2 應(yīng)用容器帶來(lái)新挑戰(zhàn)

容器應(yīng)用之前,云中應(yīng)用系統(tǒng)多數(shù)運(yùn)行于虛擬機(jī)上,但虛擬機(jī)仍會(huì)有額外的資源浪費(fèi)和維護(hù)成本,而且其啟動(dòng)速度較慢。為進(jìn)一步提升應(yīng)用交付效率和資源利用率,因具有占用資源少、部署速度快和便于遷移等特點(diǎn),容器技術(shù)開(kāi)始受到企業(yè)青睞。在典型的云原生環(huán)境中,通常包括主機(jī)、鏡像、容器、容器編排平臺(tái)、網(wǎng)絡(luò)和微服務(wù)等對(duì)象,但由于目前多數(shù)企業(yè)使用容器技術(shù)部署業(yè)務(wù)應(yīng)用,故下面將重點(diǎn)分析與容器相關(guān)的安全挑戰(zhàn)。

2.1 容器技術(shù)風(fēng)險(xiǎn)

作為一種操作系統(tǒng)虛擬化技術(shù),容器共享操作系統(tǒng)內(nèi)核,但并未實(shí)現(xiàn)完全隔離,若虛擬化軟件存在漏洞,或宿主機(jī)被攻擊,將會(huì)造成容器逃逸或資源隔離失效,影響某個(gè)容器或多個(gè)容器的安全。

◎容器逃逸:利用虛擬化軟件存在的漏洞,攻擊者通過(guò)容器獲取主機(jī)權(quán)限,可攻擊容器所在主機(jī),甚至是該主機(jī)上的其他容器。過(guò)去幾年內(nèi)已經(jīng)發(fā)現(xiàn)了多個(gè)相關(guān)漏洞,其中CVE-2019-5736是RunC的一個(gè)安全漏洞,它會(huì)導(dǎo)致18.09.2版本前的Docker允許惡意容器覆蓋宿主機(jī)上的RunC二進(jìn)制文件,使攻擊者能夠以根用戶身份在宿主機(jī)上執(zhí)行任意命令。

◎資源隔離失效:攻擊者只要攻破容器操作系統(tǒng)內(nèi)核,就可訪問(wèn)到主機(jī)上的文件系統(tǒng),或進(jìn)入其他容器,導(dǎo)致容器隔離失效。如果把主機(jī)的文件系統(tǒng)掛載到多個(gè)容器的目錄里,容器就可以訪問(wèn)同一個(gè)目錄,將會(huì)引起信息泄露或內(nèi)容篡改等安全問(wèn)題。

2.2 不安全的鏡像

鏡像是一個(gè)包含應(yīng)用/服務(wù)運(yùn)行所必需的操作系統(tǒng)和應(yīng)用文件的集合,用于創(chuàng)建一個(gè)或多個(gè)容器,它們之間緊密聯(lián)系,鏡像的安全性將會(huì)影響容器安全。根據(jù)鏡像創(chuàng)建和使用方式,通常有3個(gè)因素影響鏡像安全。

◎現(xiàn)有鏡像不安全:鏡像通常是開(kāi)發(fā)者基于某個(gè)現(xiàn)有鏡像創(chuàng)建的,無(wú)論是攻擊者上傳的惡意鏡像,還是現(xiàn)有鏡像存在的安全缺陷,基于它創(chuàng)建的鏡像都將會(huì)是不安全的。

◎使用包含漏洞的軟件:開(kāi)發(fā)者經(jīng)常會(huì)使用軟件庫(kù)的代碼或軟件,如果它們存在漏洞或惡意代碼,一旦被制作成鏡像,也將會(huì)影響容器的安全。

◎鏡像被篡改:容器鏡像在存儲(chǔ)和使用的過(guò)程中,可能被篡改,如被植入惡意程序和修改內(nèi)容。一旦使用被惡意篡改的鏡像創(chuàng)建容器后,將會(huì)影響容器和應(yīng)用程序的安全。

2.3 東西向攻擊

網(wǎng)絡(luò)實(shí)現(xiàn)了容器之間、容器與外部之間的通信,以及應(yīng)用之間的交互,但在虛擬化的容器網(wǎng)絡(luò)環(huán)境中,其網(wǎng)絡(luò)安全風(fēng)險(xiǎn)較傳統(tǒng)網(wǎng)絡(luò)更復(fù)雜、嚴(yán)峻。以Docker環(huán)境為例,它支持Bridge、Overlay和Macvlan等網(wǎng)絡(luò),盡管實(shí)現(xiàn)方式不同,但有一個(gè)共同和普遍的問(wèn)題:如果容器之間未進(jìn)行有效隔離和控制,則一旦攻擊者控制某臺(tái)主機(jī)或某臺(tái)容器,可以以此為跳板,攻擊同主機(jī)或不同主機(jī)上的其他容器,也就是常提到的“東西向攻擊”,甚至有可能形成拒絕服務(wù)攻擊。

2.4 運(yùn)行環(huán)境未加固

作為容器的載體和編排管理軟件,主機(jī)和容器編排平臺(tái)等運(yùn)行環(huán)境也是容器安全的重要因素之一。如前所述,主機(jī)上的容器并未實(shí)現(xiàn)完全隔離,如果主機(jī)未進(jìn)行安全加固,一旦攻擊者發(fā)起提權(quán)攻擊,將會(huì)控制主機(jī)上其他容器。對(duì)于不安全的容器編排平臺(tái)同樣如此,某汽車(chē)制造企業(yè)就曾深受其害,由于其公有云環(huán)境中的K8S Master節(jié)點(diǎn)未設(shè)置密碼保護(hù),攻擊者在盜取訪問(wèn)權(quán)限后,使用K8S集群挖掘加密貨幣。

3 容器安全應(yīng)對(duì)舉措

容器就利用了大部分Linux通用的安全技術(shù),它們構(gòu)成了容器安全的基礎(chǔ)。面對(duì)新挑戰(zhàn),無(wú)論傳統(tǒng)的安全加固,還是新的鏡像組成分析,鏡像、容器技術(shù)、網(wǎng)絡(luò)和主機(jī)等不同層面的安全措施,都將有助于提升容器安全性。

3.1 Linux內(nèi)核安全

Linux通用的安全技術(shù)包括命名空間(Namespace)、控制組(Cgroups)、系統(tǒng)權(quán)限(Capability)、強(qiáng)制訪問(wèn)控制(MAC)系統(tǒng)以及安全計(jì)算(Seccomp)等。一個(gè)好的容器平臺(tái),應(yīng)該具備這些能力,下文將聚焦前3種能力。

◎命名空間(Namespace):本質(zhì)上容器是由各種命名空間組成的,它們?yōu)槿萜魈峁┝嘶A(chǔ)隔離,讓每個(gè)容器擁有獨(dú)立的進(jìn)程ID、網(wǎng)絡(luò)棧、根目錄、內(nèi)存、用戶名和主機(jī)名,如圖1所示。

◎ 控制組(Cgroups):控制組負(fù)責(zé)實(shí)現(xiàn)資源審計(jì)和限制,讓每個(gè)容器公平地分享主機(jī)資源,并設(shè)置了限制,以免單個(gè)容器過(guò)度消耗資源,影響到主機(jī)系統(tǒng)和其他容器運(yùn)行,也可以防止拒絕服務(wù)攻擊,如圖2所示。

◎系統(tǒng)權(quán)限(Capability):root用戶擁有全部的權(quán)限,以root身份運(yùn)行容器很危險(xiǎn);但如果以非root身份在后臺(tái)運(yùn)行容器的話,由于缺少權(quán)限會(huì)處處受限,系統(tǒng)權(quán)限機(jī)制可以提供細(xì)粒度的權(quán)限訪問(wèn)控制,控制容器運(yùn)行所需的root用戶權(quán)限,即使攻擊者取得了root權(quán)限,也不能獲得主機(jī)的較高權(quán)限,將會(huì)限制進(jìn)一步的破壞,如圖3所示。

3.2 容器隔離

Linux通用安全技術(shù)為容器提供了基礎(chǔ)隔離,但未實(shí)現(xiàn)100%隔離。安全容器通過(guò)增加額外的隔離層可以進(jìn)一步增加容器的安全性。它是一種容器運(yùn)行時(shí)技術(shù),為容器應(yīng)用提供一個(gè)完整的操作系統(tǒng)執(zhí)行環(huán)境(常常是 Linux ABI),將應(yīng)用的執(zhí)行與宿主機(jī)操作系統(tǒng)隔離開(kāi),避免應(yīng)用直接訪問(wèn)主機(jī)資源,從而可以在容器主機(jī)之間或容器之間提供額外的保護(hù)。

gVisor和Kata Containers是兩個(gè)有代表性的安全容器實(shí)現(xiàn),其中Kata Containers通過(guò)使用硬件虛擬化,利用輕量級(jí)的虛擬機(jī)為容器提供隔離,每一個(gè)Container/Pod運(yùn)行于獨(dú)立的虛擬機(jī)上,它們不再?gòu)闹鳈C(jī)內(nèi)核上獲取相應(yīng)所有的權(quán)限,Kata Containers結(jié)構(gòu)及原理如圖4所示,與VM一樣能提供強(qiáng)隔離性。

3.3 鏡像安全

作為容器運(yùn)行的基礎(chǔ),容器鏡像的安全在整個(gè)容器安全生態(tài)中占據(jù)著重要位置。容器鏡像由若干層鏡像疊加而成,通過(guò)鏡像倉(cāng)庫(kù)分發(fā)和更新。因此,可以從鏡像構(gòu)建安全、倉(cāng)庫(kù)安全以及鏡像分發(fā)安全3個(gè)方面實(shí)現(xiàn)鏡像安全。

◎鏡像構(gòu)建安全:在構(gòu)建鏡像時(shí),驗(yàn)證所依賴(lài)鏡像的完整性和來(lái)源,只安裝必要的軟件包,使用恰當(dāng)?shù)闹噶,縮小攻擊面,并利用加密技術(shù),保護(hù)好密碼、令牌、密鑰和用戶秘密信息等。

◎鏡像倉(cāng)庫(kù)安全:鏡像倉(cāng)庫(kù)分為公共鏡像倉(cāng)庫(kù)和私有鏡像倉(cāng)庫(kù),使用的公共鏡像倉(cāng)庫(kù)應(yīng)為官方發(fā)布的最新版本鏡像,對(duì)下載的鏡像要經(jīng)過(guò)漏洞掃描評(píng)估,并保持定時(shí)更新。對(duì)于私有鏡像倉(cāng)庫(kù),一方面保持倉(cāng)庫(kù)自身的安全性,如在使用時(shí)要配置相應(yīng)的安全證書(shū);另一方面使用鏡像過(guò)程中,利用用戶訪問(wèn)權(quán)限控制確保交互過(guò)程的安全性。

◎鏡像分發(fā)安全:在鏡像下載和上傳時(shí),利用數(shù)字簽名和https來(lái)保障容器鏡像的完整性和機(jī)密性,抵御中間人攻擊等威脅。

3.4 訪問(wèn)控制

網(wǎng)絡(luò)的基本防護(hù)手段是隔離和訪問(wèn)控制,容器網(wǎng)絡(luò)防護(hù)可使用容器環(huán)境自身安全機(jī)制或第三方微隔離產(chǎn)品。對(duì)于K8S網(wǎng)絡(luò),其自身安全策略對(duì)每個(gè)Pod的入口強(qiáng)制執(zhí)行訪問(wèn)控制,從而能夠隔離高風(fēng)險(xiǎn)的微服務(wù),但Pod內(nèi)容器間通信和離開(kāi)Pod的出口流量無(wú)法控制。第三方微隔離產(chǎn)品可以比K8S更詳細(xì)地記錄出入網(wǎng)絡(luò)連接、深入檢測(cè)網(wǎng)絡(luò)中威脅和攻擊、檢測(cè)數(shù)據(jù)泄露,以及實(shí)現(xiàn)7層微隔離和網(wǎng)絡(luò)可視化。

3.5 運(yùn)行環(huán)境加固

利用安全基線對(duì)容器主機(jī)和K8S進(jìn)行安全檢查和加固,將會(huì)進(jìn)一步增加容器的安全性。CIS發(fā)布的Docker基線已成為L(zhǎng)inux主機(jī)配置和Docker主機(jī)加固的最佳實(shí)踐。通過(guò)創(chuàng)建一個(gè)特權(quán)容器,將Docker主機(jī)安全配置與CIS基線進(jìn)行對(duì)比,可以發(fā)現(xiàn)安全問(wèn)題并實(shí)施加固。同樣,CIS也發(fā)布了K8S基線,傳統(tǒng)的漏洞掃描工具和獨(dú)立的容器安全產(chǎn)品(如Aqua Security和NeuVector)已經(jīng)在GitHub上發(fā)布了腳本,可實(shí)現(xiàn)自動(dòng)化的K8S安全檢查。

4 容器安全實(shí)踐

隨著DevOps興起,軟件開(kāi)發(fā)人員與運(yùn)維人員之間緊密合作,通過(guò)自動(dòng)化流程來(lái)完成軟件開(kāi)發(fā)、測(cè)試、發(fā)布和維護(hù),整個(gè)過(guò)程更加快捷、頻繁和可靠,縮短了軟件上線時(shí)間,減少了很多重復(fù)性和人工工作,F(xiàn)在,針對(duì)容器安全風(fēng)險(xiǎn),已經(jīng)形成了多種安全控制措施,如何將它們?nèi)谌隓evOps中高效保護(hù)應(yīng)用系統(tǒng),是容器安全實(shí)踐需要考慮的首要問(wèn)題。

為此,我們秉承DevSecOps理念,提出了容器全生命周期安全保護(hù)方案,該方案利用容器安全管理系統(tǒng),通過(guò)容器編排技術(shù)將安全容器部署于容器環(huán)境中,進(jìn)行持續(xù)的檢測(cè)和分析,實(shí)現(xiàn)容器環(huán)境的資源可視化管理、鏡像風(fēng)險(xiǎn)管理、容器運(yùn)行時(shí)安全管理、合規(guī)性檢測(cè)和微服務(wù)API風(fēng)險(xiǎn)管理,最終保障容器在構(gòu)建、部署和運(yùn)行整個(gè)生命周期的安全。

4.1 總體架構(gòu)

容器安全防護(hù)方案采用模塊化和分層設(shè)計(jì),通過(guò)與容器運(yùn)行環(huán)境進(jìn)行對(duì)接,實(shí)時(shí)獲取容器環(huán)境中的鏡像和容器等對(duì)象的相關(guān)信息,利用各種安全能力進(jìn)行監(jiān)控和分析,實(shí)施統(tǒng)一的安全管理,最后通過(guò)圖形化方式為用戶展示容器環(huán)境的安全態(tài)勢(shì),如圖5所示。

◎安全管理層:負(fù)責(zé)安全管理功能,包括容器環(huán)境的資產(chǎn)管理、策略管理和安全能力管理等,通過(guò)安全能力適配將各種管理信息下發(fā)給各種安全能力,以及收集各種安全信息,經(jīng)集中分析和處理后,集中對(duì)用戶展示容器環(huán)境的主機(jī)、容器、鏡像和網(wǎng)絡(luò)等對(duì)象的安全狀態(tài)。

◎安全能力層:負(fù)責(zé)提供具體安全能力,為容器環(huán)境提供安全保護(hù),安全能力涉及系統(tǒng)安全掃描、鏡像文件分析、惡意文件分析、入侵檢測(cè)和微隔離等。

◎運(yùn)行環(huán)境層:負(fù)責(zé)提供容器鏡像、容器編排管理等功能,以及運(yùn)行應(yīng)用程序的容器,并與容器能力層進(jìn)行交互,共同實(shí)現(xiàn)容器安全防護(hù)。

4.2 容器全生命周期保護(hù)

根據(jù)容器安全防護(hù)架構(gòu),本方案將各種安全能力與DevOps流水線相結(jié)合,從持續(xù)集成/持續(xù)部署和運(yùn)行時(shí)進(jìn)行安全防護(hù),為容器提供構(gòu)建、部署和運(yùn)行的全生命周期保護(hù),到最終實(shí)現(xiàn)應(yīng)用系統(tǒng)的安全運(yùn)行,如圖6所示。

4.2.1 構(gòu)建安全

在應(yīng)用程序構(gòu)建階段,通過(guò)與CI/CD流水線集成,分析構(gòu)建鏡像時(shí)所使用的命令和配置參數(shù),還原鏡像文件構(gòu)建過(guò)程,掌握命令使用的敏感操作,以及分析鏡像文件是否包含密碼、令牌、密鑰和用戶私密信息等敏感信息。同時(shí),分析鏡像的軟件組成,發(fā)現(xiàn)鏡像文件中包含的惡意文件、病毒,以及所使用的依賴(lài)庫(kù)和組件存在的安全漏洞,避免帶病交付。

4.2.2 部署安全

分析鏡像無(wú)風(fēng)險(xiǎn)后,鏡像被提交至鏡像倉(cāng)庫(kù)。在該階段,將檢查容器環(huán)境的鏡像倉(cāng)庫(kù)配置,確保使用加密方式連接鏡像倉(cāng)庫(kù)。通過(guò)與K8S聯(lián)動(dòng),當(dāng)鏡像倉(cāng)庫(kù)中新增鏡像或使用鏡像創(chuàng)建容器時(shí),自動(dòng)化校驗(yàn)鏡像簽名或MD5值,確保鏡像來(lái)源可信且未被篡改,一旦發(fā)現(xiàn)鏡像來(lái)源不可信或被篡改,禁止使用該鏡像創(chuàng)建容器。

4.2.3 運(yùn)行安全

當(dāng)確認(rèn)鏡像安全后,進(jìn)入到容器運(yùn)行階段。在該階段利用系統(tǒng)安全掃描能力,基于Docker和K8SCIS基線,對(duì)主機(jī)和容器編排工具K8S進(jìn)行合規(guī)性檢查,檢查范圍包括主機(jī)安全配置、Docker守護(hù)進(jìn)程配置、Docker守護(hù)程序配置文件、容器鏡像和構(gòu)建、容器運(yùn)行安全和Docker安全操作等,確保容器運(yùn)行環(huán)境安全。

同時(shí),利用微隔離對(duì)容器進(jìn)行網(wǎng)絡(luò)隔離,通過(guò)入侵檢測(cè)能力實(shí)時(shí)監(jiān)測(cè)容器運(yùn)行狀態(tài),監(jiān)測(cè)對(duì)象包括容器內(nèi)運(yùn)行進(jìn)程(如netlink socket、perf event和eBPF)和文件系統(tǒng),以及主機(jī)環(huán)境的權(quán)限提升和破壞容器隔離性等行為。當(dāng)發(fā)現(xiàn)容器運(yùn)行異常時(shí),利用訪問(wèn)控制機(jī)制限制容器進(jìn)一步的行為和通信。

5 結(jié)語(yǔ)

伴隨著云原生應(yīng)用發(fā)展,企業(yè)通過(guò)微服務(wù)來(lái)交付應(yīng)用系統(tǒng)的比例在增加,容器安全也將不僅僅是容器自身和容器環(huán)境安全,將延伸到微服務(wù)安全和應(yīng)用安全,企業(yè)在應(yīng)用云原生技術(shù)時(shí),應(yīng)整體考慮容器安全,讓安全與云原生相融合,更好地保護(hù)應(yīng)用系統(tǒng)。

 

(原載于《保密科學(xué)技術(shù)》雜志2021年1月刊)