【摘 要】 本文從容器技術(shù)、鏡像、網(wǎng)絡(luò)和運行環(huán)境等維度分析了應(yīng)用容器帶來的4個安全挑戰(zhàn),總結(jié)了5項應(yīng)對舉措,并從容器全生命周期保護出發(fā),提出了容器安全解決方案。
【關(guān)鍵詞】 云原生 容器安全
1 引言
隨著云計算的發(fā)展,以容器和微服務(wù)為代表的云原生技術(shù),受到人們的廣泛關(guān)注,其中Docker和Kubernetes (K8S)是企業(yè)容器運行時和容器編排的首要選擇。然而,在應(yīng)用容器和K8S過程中,大多數(shù)企業(yè)都遇到過不同程度的安全問題,如何保障容器安全,已成為企業(yè)最關(guān)心的問題。
2 應(yīng)用容器帶來新挑戰(zhàn)
容器應(yīng)用之前,云中應(yīng)用系統(tǒng)多數(shù)運行于虛擬機上,但虛擬機仍會有額外的資源浪費和維護成本,而且其啟動速度較慢。為進一步提升應(yīng)用交付效率和資源利用率,因具有占用資源少、部署速度快和便于遷移等特點,容器技術(shù)開始受到企業(yè)青睞。在典型的云原生環(huán)境中,通常包括主機、鏡像、容器、容器編排平臺、網(wǎng)絡(luò)和微服務(wù)等對象,但由于目前多數(shù)企業(yè)使用容器技術(shù)部署業(yè)務(wù)應(yīng)用,故下面將重點分析與容器相關(guān)的安全挑戰(zhàn)。
2.1 容器技術(shù)風險
作為一種操作系統(tǒng)虛擬化技術(shù),容器共享操作系統(tǒng)內(nèi)核,但并未實現(xiàn)完全隔離,若虛擬化軟件存在漏洞,或宿主機被攻擊,將會造成容器逃逸或資源隔離失效,影響某個容器或多個容器的安全。
◎容器逃逸:利用虛擬化軟件存在的漏洞,攻擊者通過容器獲取主機權(quán)限,可攻擊容器所在主機,甚至是該主機上的其他容器。過去幾年內(nèi)已經(jīng)發(fā)現(xiàn)了多個相關(guān)漏洞,其中CVE-2019-5736是RunC的一個安全漏洞,它會導(dǎo)致18.09.2版本前的Docker允許惡意容器覆蓋宿主機上的RunC二進制文件,使攻擊者能夠以根用戶身份在宿主機上執(zhí)行任意命令。
◎資源隔離失效:攻擊者只要攻破容器操作系統(tǒng)內(nèi)核,就可訪問到主機上的文件系統(tǒng),或進入其他容器,導(dǎo)致容器隔離失效。如果把主機的文件系統(tǒng)掛載到多個容器的目錄里,容器就可以訪問同一個目錄,將會引起信息泄露或內(nèi)容篡改等安全問題。
2.2 不安全的鏡像
鏡像是一個包含應(yīng)用/服務(wù)運行所必需的操作系統(tǒng)和應(yīng)用文件的集合,用于創(chuàng)建一個或多個容器,它們之間緊密聯(lián)系,鏡像的安全性將會影響容器安全。根據(jù)鏡像創(chuàng)建和使用方式,通常有3個因素影響鏡像安全。
◎現(xiàn)有鏡像不安全:鏡像通常是開發(fā)者基于某個現(xiàn)有鏡像創(chuàng)建的,無論是攻擊者上傳的惡意鏡像,還是現(xiàn)有鏡像存在的安全缺陷,基于它創(chuàng)建的鏡像都將會是不安全的。
◎使用包含漏洞的軟件:開發(fā)者經(jīng)常會使用軟件庫的代碼或軟件,如果它們存在漏洞或惡意代碼,一旦被制作成鏡像,也將會影響容器的安全。
◎鏡像被篡改:容器鏡像在存儲和使用的過程中,可能被篡改,如被植入惡意程序和修改內(nèi)容。一旦使用被惡意篡改的鏡像創(chuàng)建容器后,將會影響容器和應(yīng)用程序的安全。
2.3 東西向攻擊
網(wǎng)絡(luò)實現(xiàn)了容器之間、容器與外部之間的通信,以及應(yīng)用之間的交互,但在虛擬化的容器網(wǎng)絡(luò)環(huán)境中,其網(wǎng)絡(luò)安全風險較傳統(tǒng)網(wǎng)絡(luò)更復(fù)雜、嚴峻。以Docker環(huán)境為例,它支持Bridge、Overlay和Macvlan等網(wǎng)絡(luò),盡管實現(xiàn)方式不同,但有一個共同和普遍的問題:如果容器之間未進行有效隔離和控制,則一旦攻擊者控制某臺主機或某臺容器,可以以此為跳板,攻擊同主機或不同主機上的其他容器,也就是常提到的“東西向攻擊”,甚至有可能形成拒絕服務(wù)攻擊。
2.4 運行環(huán)境未加固
作為容器的載體和編排管理軟件,主機和容器編排平臺等運行環(huán)境也是容器安全的重要因素之一。如前所述,主機上的容器并未實現(xiàn)完全隔離,如果主機未進行安全加固,一旦攻擊者發(fā)起提權(quán)攻擊,將會控制主機上其他容器。對于不安全的容器編排平臺同樣如此,某汽車制造企業(yè)就曾深受其害,由于其公有云環(huán)境中的K8S Master節(jié)點未設(shè)置密碼保護,攻擊者在盜取訪問權(quán)限后,使用K8S集群挖掘加密貨幣。
3 容器安全應(yīng)對舉措
容器就利用了大部分Linux通用的安全技術(shù),它們構(gòu)成了容器安全的基礎(chǔ)。面對新挑戰(zhàn),無論傳統(tǒng)的安全加固,還是新的鏡像組成分析,鏡像、容器技術(shù)、網(wǎng)絡(luò)和主機等不同層面的安全措施,都將有助于提升容器安全性。
3.1 Linux內(nèi)核安全
Linux通用的安全技術(shù)包括命名空間(Namespace)、控制組(Cgroups)、系統(tǒng)權(quán)限(Capability)、強制訪問控制(MAC)系統(tǒng)以及安全計算(Seccomp)等。一個好的容器平臺,應(yīng)該具備這些能力,下文將聚焦前3種能力。
◎命名空間(Namespace):本質(zhì)上容器是由各種命名空間組成的,它們?yōu)槿萜魈峁┝嘶A(chǔ)隔離,讓每個容器擁有獨立的進程ID、網(wǎng)絡(luò)棧、根目錄、內(nèi)存、用戶名和主機名,如圖1所示。
◎ 控制組(Cgroups):控制組負責實現(xiàn)資源審計和限制,讓每個容器公平地分享主機資源,并設(shè)置了限制,以免單個容器過度消耗資源,影響到主機系統(tǒng)和其他容器運行,也可以防止拒絕服務(wù)攻擊,如圖2所示。
◎系統(tǒng)權(quán)限(Capability):root用戶擁有全部的權(quán)限,以root身份運行容器很危險;但如果以非root身份在后臺運行容器的話,由于缺少權(quán)限會處處受限,系統(tǒng)權(quán)限機制可以提供細粒度的權(quán)限訪問控制,控制容器運行所需的root用戶權(quán)限,即使攻擊者取得了root權(quán)限,也不能獲得主機的較高權(quán)限,將會限制進一步的破壞,如圖3所示。
3.2 容器隔離
Linux通用安全技術(shù)為容器提供了基礎(chǔ)隔離,但未實現(xiàn)100%隔離。安全容器通過增加額外的隔離層可以進一步增加容器的安全性。它是一種容器運行時技術(shù),為容器應(yīng)用提供一個完整的操作系統(tǒng)執(zhí)行環(huán)境(常常是 Linux ABI),將應(yīng)用的執(zhí)行與宿主機操作系統(tǒng)隔離開,避免應(yīng)用直接訪問主機資源,從而可以在容器主機之間或容器之間提供額外的保護。
gVisor和Kata Containers是兩個有代表性的安全容器實現(xiàn),其中Kata Containers通過使用硬件虛擬化,利用輕量級的虛擬機為容器提供隔離,每一個Container/Pod運行于獨立的虛擬機上,它們不再從主機內(nèi)核上獲取相應(yīng)所有的權(quán)限,Kata Containers結(jié)構(gòu)及原理如圖4所示,與VM一樣能提供強隔離性。
3.3 鏡像安全
作為容器運行的基礎(chǔ),容器鏡像的安全在整個容器安全生態(tài)中占據(jù)著重要位置。容器鏡像由若干層鏡像疊加而成,通過鏡像倉庫分發(fā)和更新。因此,可以從鏡像構(gòu)建安全、倉庫安全以及鏡像分發(fā)安全3個方面實現(xiàn)鏡像安全。
◎鏡像構(gòu)建安全:在構(gòu)建鏡像時,驗證所依賴鏡像的完整性和來源,只安裝必要的軟件包,使用恰當?shù)闹噶,縮小攻擊面,并利用加密技術(shù),保護好密碼、令牌、密鑰和用戶秘密信息等。
◎鏡像倉庫安全:鏡像倉庫分為公共鏡像倉庫和私有鏡像倉庫,使用的公共鏡像倉庫應(yīng)為官方發(fā)布的最新版本鏡像,對下載的鏡像要經(jīng)過漏洞掃描評估,并保持定時更新。對于私有鏡像倉庫,一方面保持倉庫自身的安全性,如在使用時要配置相應(yīng)的安全證書;另一方面使用鏡像過程中,利用用戶訪問權(quán)限控制確保交互過程的安全性。
◎鏡像分發(fā)安全:在鏡像下載和上傳時,利用數(shù)字簽名和https來保障容器鏡像的完整性和機密性,抵御中間人攻擊等威脅。
3.4 訪問控制
網(wǎng)絡(luò)的基本防護手段是隔離和訪問控制,容器網(wǎng)絡(luò)防護可使用容器環(huán)境自身安全機制或第三方微隔離產(chǎn)品。對于K8S網(wǎng)絡(luò),其自身安全策略對每個Pod的入口強制執(zhí)行訪問控制,從而能夠隔離高風險的微服務(wù),但Pod內(nèi)容器間通信和離開Pod的出口流量無法控制。第三方微隔離產(chǎn)品可以比K8S更詳細地記錄出入網(wǎng)絡(luò)連接、深入檢測網(wǎng)絡(luò)中威脅和攻擊、檢測數(shù)據(jù)泄露,以及實現(xiàn)7層微隔離和網(wǎng)絡(luò)可視化。
3.5 運行環(huán)境加固
利用安全基線對容器主機和K8S進行安全檢查和加固,將會進一步增加容器的安全性。CIS發(fā)布的Docker基線已成為Linux主機配置和Docker主機加固的最佳實踐。通過創(chuàng)建一個特權(quán)容器,將Docker主機安全配置與CIS基線進行對比,可以發(fā)現(xiàn)安全問題并實施加固。同樣,CIS也發(fā)布了K8S基線,傳統(tǒng)的漏洞掃描工具和獨立的容器安全產(chǎn)品(如Aqua Security和NeuVector)已經(jīng)在GitHub上發(fā)布了腳本,可實現(xiàn)自動化的K8S安全檢查。
4 容器安全實踐
隨著DevOps興起,軟件開發(fā)人員與運維人員之間緊密合作,通過自動化流程來完成軟件開發(fā)、測試、發(fā)布和維護,整個過程更加快捷、頻繁和可靠,縮短了軟件上線時間,減少了很多重復(fù)性和人工工作,F(xiàn)在,針對容器安全風險,已經(jīng)形成了多種安全控制措施,如何將它們?nèi)谌隓evOps中高效保護應(yīng)用系統(tǒng),是容器安全實踐需要考慮的首要問題。
為此,我們秉承DevSecOps理念,提出了容器全生命周期安全保護方案,該方案利用容器安全管理系統(tǒng),通過容器編排技術(shù)將安全容器部署于容器環(huán)境中,進行持續(xù)的檢測和分析,實現(xiàn)容器環(huán)境的資源可視化管理、鏡像風險管理、容器運行時安全管理、合規(guī)性檢測和微服務(wù)API風險管理,最終保障容器在構(gòu)建、部署和運行整個生命周期的安全。
4.1 總體架構(gòu)
容器安全防護方案采用模塊化和分層設(shè)計,通過與容器運行環(huán)境進行對接,實時獲取容器環(huán)境中的鏡像和容器等對象的相關(guān)信息,利用各種安全能力進行監(jiān)控和分析,實施統(tǒng)一的安全管理,最后通過圖形化方式為用戶展示容器環(huán)境的安全態(tài)勢,如圖5所示。
◎安全管理層:負責安全管理功能,包括容器環(huán)境的資產(chǎn)管理、策略管理和安全能力管理等,通過安全能力適配將各種管理信息下發(fā)給各種安全能力,以及收集各種安全信息,經(jīng)集中分析和處理后,集中對用戶展示容器環(huán)境的主機、容器、鏡像和網(wǎng)絡(luò)等對象的安全狀態(tài)。
◎安全能力層:負責提供具體安全能力,為容器環(huán)境提供安全保護,安全能力涉及系統(tǒng)安全掃描、鏡像文件分析、惡意文件分析、入侵檢測和微隔離等。
◎運行環(huán)境層:負責提供容器鏡像、容器編排管理等功能,以及運行應(yīng)用程序的容器,并與容器能力層進行交互,共同實現(xiàn)容器安全防護。
4.2 容器全生命周期保護
根據(jù)容器安全防護架構(gòu),本方案將各種安全能力與DevOps流水線相結(jié)合,從持續(xù)集成/持續(xù)部署和運行時進行安全防護,為容器提供構(gòu)建、部署和運行的全生命周期保護,到最終實現(xiàn)應(yīng)用系統(tǒng)的安全運行,如圖6所示。
4.2.1 構(gòu)建安全
在應(yīng)用程序構(gòu)建階段,通過與CI/CD流水線集成,分析構(gòu)建鏡像時所使用的命令和配置參數(shù),還原鏡像文件構(gòu)建過程,掌握命令使用的敏感操作,以及分析鏡像文件是否包含密碼、令牌、密鑰和用戶私密信息等敏感信息。同時,分析鏡像的軟件組成,發(fā)現(xiàn)鏡像文件中包含的惡意文件、病毒,以及所使用的依賴庫和組件存在的安全漏洞,避免帶病交付。
4.2.2 部署安全
分析鏡像無風險后,鏡像被提交至鏡像倉庫。在該階段,將檢查容器環(huán)境的鏡像倉庫配置,確保使用加密方式連接鏡像倉庫。通過與K8S聯(lián)動,當鏡像倉庫中新增鏡像或使用鏡像創(chuàng)建容器時,自動化校驗鏡像簽名或MD5值,確保鏡像來源可信且未被篡改,一旦發(fā)現(xiàn)鏡像來源不可信或被篡改,禁止使用該鏡像創(chuàng)建容器。
4.2.3 運行安全
當確認鏡像安全后,進入到容器運行階段。在該階段利用系統(tǒng)安全掃描能力,基于Docker和K8SCIS基線,對主機和容器編排工具K8S進行合規(guī)性檢查,檢查范圍包括主機安全配置、Docker守護進程配置、Docker守護程序配置文件、容器鏡像和構(gòu)建、容器運行安全和Docker安全操作等,確保容器運行環(huán)境安全。
同時,利用微隔離對容器進行網(wǎng)絡(luò)隔離,通過入侵檢測能力實時監(jiān)測容器運行狀態(tài),監(jiān)測對象包括容器內(nèi)運行進程(如netlink socket、perf event和eBPF)和文件系統(tǒng),以及主機環(huán)境的權(quán)限提升和破壞容器隔離性等行為。當發(fā)現(xiàn)容器運行異常時,利用訪問控制機制限制容器進一步的行為和通信。
5 結(jié)語
伴隨著云原生應(yīng)用發(fā)展,企業(yè)通過微服務(wù)來交付應(yīng)用系統(tǒng)的比例在增加,容器安全也將不僅僅是容器自身和容器環(huán)境安全,將延伸到微服務(wù)安全和應(yīng)用安全,企業(yè)在應(yīng)用云原生技術(shù)時,應(yīng)整體考慮容器安全,讓安全與云原生相融合,更好地保護應(yīng)用系統(tǒng)。
(原載于《保密科學(xué)技術(shù)》雜志2021年1月刊)