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