對于容器而言,由于底層的基礎架構(gòu)非常復雜,稍有不慎,就可能會帶來嚴重的安全后果。因此,在享受容器帶來便捷性紅利之前,如何讓容器“不裸奔”,這成為了容器推廣普及一大障礙。
當然,確保容器安全是一個持續(xù)的過程。像其他測試和質(zhì)量控制措施一樣,應該將安全集成到開發(fā)過程中來,盡可能實現(xiàn)自動化,減少手動處理的工作量,同時,安全還應該擴展到底層基礎架構(gòu)的運行與維護當中來。
青藤蜂巢,在對容器安全進行深入研究之后,正式提出容器安全“五個保護”:
●保護容器主機的安全
●保護容器網(wǎng)絡流量安全
●保護容器中應用的安全
●保護容器管理技術堆棧
●保護構(gòu)建管道的完整性
圖1:一站式容器安全解決方案
保護容器主機的安全
要保護主機安全,首先要保護主機操作系統(tǒng)。應盡可能使用經(jīng)過優(yōu)化的分布式操作系統(tǒng)來運行容器,例如Container Linux、RancherOS、Ubuntu Core、Google的Container-Optimized OS或RedHat Atomic等發(fā)行版本。這些發(fā)行版本都已經(jīng)刪除了可有可無的服務,優(yōu)化了性能并減少了攻擊面。如果使用常規(guī)Linux發(fā)行版或Windows系統(tǒng),則通常需要禁用或刪除不必要的服務并加固操作系統(tǒng)。
然后添加主機安全產(chǎn)品,確保主機按預期狀況運行,實時監(jiān)控主機風險狀況包括漏洞、不合規(guī)配置、弱密碼等等,還需要實時進行入侵檢測,在入侵行為尚未造成危害之前及時發(fā)現(xiàn)和響應。
監(jiān)控容器網(wǎng)絡流量安全
容器投入生產(chǎn)后,需要與其他容器和資源進行交互。進入網(wǎng)絡的流量通常會受到其他安全控制措施的保護。部署在網(wǎng)絡邊界處的Web網(wǎng)關和IPS具有一定的過濾功能,可以防止發(fā)生直接攻擊或嘗試進行水坑攻擊(先攻擊某項服務,然后攻擊其訪問者)。
關于容器流量的另一項安全挑戰(zhàn)是監(jiān)控和保護容器之間的流量。攻擊者在系統(tǒng)中找到一個立足點后,就會迅速進行橫向行動,擴大影響范圍。比如主機A的Apache向主機B的MongoDB請求數(shù)據(jù);同時也有可能是主機內(nèi)部容器之間的流量,比如主機A內(nèi)部的Apache服務器請求主機A內(nèi)部的MongoDB的流量。
為應對這類威脅,目前有兩種入侵防御方案,一種是在網(wǎng)絡邊界處部署IPS設備,另一種是以軟件形式在物理主機上部署入侵防御軟件。但是部署在邊界處的IPS無法監(jiān)控主機內(nèi)部容器之間的流量,部署在主機內(nèi)部IPS軟件,也無法對跨主機的容器之間的流量進行入侵防御。
針對容器東西向流量入侵防御,以docker為例,目前有一種方式是在物理主機內(nèi)部連接容器的網(wǎng)橋上設置Netfilter鉤子,利用鉤子截獲所有進出容器的東西向流量。對截獲的東西向流量進行清洗,判斷所述東西向流量中的報文是否屬于惡意流量。若屬于惡意流量,則阻止相關連接。
圖2:監(jiān)控容器流量
保護容器管理技術堆棧
在容器部署問題,通常會使用兩個關鍵基礎設施,即私有容器鏡像倉庫和容器編排工具Kubernetes。
容器鏡像倉庫是用于搜索、存儲和分發(fā)容器的,簡化了容器的共享工作,并幫助團隊充分利用彼此的工作成果,提高了工作效率。為了確保每個容器都符合開發(fā)和安全基準,需要對容器鏡像實時進行漏洞掃描。在將容器鏡像推送到鏡像倉庫中去之前,要先對容器鏡像進行漏洞掃描,查看是否存在已知漏洞、惡意軟件以及明文秘鑰,這樣有助于減少下游的安全問題。此外,還需要確保鏡像倉庫本身也采取了良好的保護措施。鏡像倉庫應該運行在加固系統(tǒng)或信譽良好的云服務之上。
Kubernetes是一款復雜的容器編排工具,讓企業(yè)實現(xiàn)了應用的自動化部署,給企業(yè)帶來了巨大的業(yè)務收益。從安全角度來看,Kubernetes還提供了實現(xiàn)許多運營和安全控制的功能。實施Pod(集群級別的資源)和網(wǎng)絡安全策略后,可以采用不同方案來滿足風險承受能力。
保護容器中的應用安全
在構(gòu)建一款應用時,開發(fā)人員很少會從頭開始。通常的做法是從一個現(xiàn)有容器著手,例如像Ubuntu或CentOS這樣的低層容器,或者像node或nginx這樣的更高層容器,或者是組織機構(gòu)自定義的容器。不管選擇在哪個容器上構(gòu)建數(shù)據(jù),關鍵是要確保構(gòu)建應用的底層容器基礎是安全的,不會給數(shù)據(jù)造成風險。
從首選鏡像倉庫中拉取鏡像部署容器時,也是如此。需要有一個相應的工作流程,確保使用的容器安全可靠,可抵御常見威脅。為此,需要進行容器鏡像掃描,掃描容器的內(nèi)容,查看是否存在任何問題,然后再用于構(gòu)建應用。在投入生產(chǎn)之前,還要進行最后的安全檢查。
進行鏡像掃描主要是為了查找惡意軟件、已知漏洞以及任何秘鑰或機密信息(例如應用程序編程接口(API)密鑰和令牌),以便在繼續(xù)開發(fā)應用之前降低風險。這一步可確保在安全容器基礎之上構(gòu)建應用。
鏡像掃描功能不僅限于確定使用的容器基礎是安全可靠的,還應該成為編碼流程不可或缺的一部分。這是一個完全自動化的過程,可以快速輕松地識別開發(fā)應用和容器時遇到的任何問題。在開發(fā)過程的早期階段捕獲漏洞、惡意軟件或明文秘鑰之類的問題,更易于解決并節(jié)省您的時間。
雖然一旦將應用構(gòu)建到容器中并部署到生產(chǎn)環(huán)境中,就不會再發(fā)生變化。但是,容器投入生產(chǎn)運行后,是會實時發(fā)生變化的。容器會產(chǎn)生應用數(shù)據(jù),生成日志文件、緩存文件等等。
安全監(jiān)控軟件,包括有助于確保在容器中開展的活動中是否存在一些風險。例如,如果存在漏洞,則安全引擎可以檢測是否有人在嘗試進行漏洞利用,并通過丟棄數(shù)據(jù)包來保護應用。
確保構(gòu)建管道的完整性
除了容器環(huán)境之外,容器構(gòu)建管道也日益成為攻擊者的目標。攻擊者已開始將攻擊轉(zhuǎn)移到持續(xù)集成/持續(xù)交付的早期階段(CI/CD)管道。如果攻擊者攻陷了容器構(gòu)建服務器、代碼存儲庫或開發(fā)人員工作站,那么攻擊者就可以在組織機構(gòu)的環(huán)境中駐留很長時間。因為大多數(shù)安全程序不會主動監(jiān)控這些關鍵資源。
對此,第一步是確保這些系統(tǒng)具有強大的安全控制措施,并進行隨時更新。組織機構(gòu)的代碼通常是其最具價值的資產(chǎn)之一,因此,需要保護代碼的安全。
第二步是在整個管道中實施強大的訪問控制策略。這可以從代碼存儲庫和分支策略著手,一直擴展到容器存儲庫。這需要確保實施最小特權(quán)原則(僅提供完成任務所需的訪問權(quán)限)并定期審核該訪問情況。
總結(jié)
對于容器安全而言,從來都沒有一個解決方案可以作為萬能良藥。盡管容器本身很簡單,但容器底層的基礎架構(gòu)會越來越復雜。這就需要像關鍵資產(chǎn)一樣,了解、監(jiān)控和保護基礎架構(gòu)。毫無疑問,各大企業(yè)可以從容器技術中受益,但與任何新技術一樣,必須制定強有力的“由外而內(nèi)”安全計劃,自動化實現(xiàn)容器以及容器構(gòu)建管道的安全。