Kubernetes常被稱為K8s,是一種非常流行的開源容器編排系統,可以自動部署、擴展和管理容器化工作負載,目前已受到企業用戶的廣泛歡迎。但是,與任何創新技術的應用一樣,必須要充分考慮和解決其中固有的安全風險。
總體來說,Kubernetes安全性包括三個主要部分:叢集安全(clusters)、節點安全(Nodes)和應用程式安全(Applications),其中 :
- 叢集安全包括通過啟用認證、授權和加密來保護控制平面元件,如API伺服器、etcd和Kubernetes控制器管理程式(Kubernetes controller manager);
- 節點安全主要是指正確配置網路和保護K8s運行時環境,包括刪除不必要的使用者帳戶和確保應用訪問的合規性;
- 應用程式安全指的是pod保護。在K8s中,pod是用於運行應用程式的容器。保護這些應用程式的前提是保護pod。Kubernetes提供了多個安全特性來説明保護應用程式。這些特性可用于限制資源存取、實施網路策略,並支援容器之間的安全通信。
為了説明企業組織更安全的應用Kubernetes系統,OWASP日前列舉出Kubernetes的十大安全風險,並提供了緩解這些風險的建議。
1. 不安全的工作負載配置
Kubernetes manifest包含大量的配置,這些配置會影響相關工作負載的可靠性、安全性和可擴展性。這些配置應該不斷地進行審計和糾正,以防止錯誤配置。特別是對一些高影響的manifest配置,因為它們更有可能被錯誤配置。雖然許多安全配置通常是在manifest本身的securityContext中設置的,但這些配置資訊需要在其他地方也可以被檢測到,包括在運行時和程式碼中都能夠檢測到它們,這樣才能防止錯誤配置。
安全團隊還可以使用Open Policy Agent之類的工具作為策略引擎來檢測各種常見的Kubernetes錯誤配置。此外,使用Kubernetes的CIS基準也是發現錯誤配置的一個有效方法。不過,持續監控和糾正任何潛在的錯誤配置,以確保Kubernetes工作負載的安全性和可靠性同樣是至關重要的。
2. 供應鏈安全性漏洞
在供應鏈開發生命週期的各個階段,容器會以多種形式存在,且每種形式都有其獨特的安全挑戰。這是因為單個容器可能依賴於數百個外部協力廠商零組件,將會降低每個階段的信任級別。在實際應用中,最常見的供應鏈安全性漏洞如下:
- 映射(Image)完整性—由於容器映射廣泛使用協力廠商包,因此在可信環境中運行它們可能是危險的。為了緩解這種情況,在每個階段使用in-toto驗證軟體以確保映射完整性是很重要的。此外,通過金鑰對使用圖像進行簽名和驗證,可以快速檢測到對工件的篡改,這是構建安全供應鏈的重要步驟;
- 映射組合—正確構造的容器映射可以減少攻擊面並提高部署效率。因此,使用最小的OS包和依賴項來創建容器映射以減少攻擊面非常重要,可以考慮使用其他基本映射(如Distroless或Scratch)來改善安全態勢並縮小映射尺寸。
- 已知的軟體漏洞—映射漏洞掃描對於枚舉容器映射中的已知安全問題至關重要。諸如Clair和trivy之類的開源工具會靜態分析容器映射,以查找諸如CVE之類的已知漏洞,因此應該在開發週期中盡可能早地使用這些工具。
3. 過度授權的RBAC
如果配置正確,RBAC(基於角色的存取控制)有助於防止未經授權的訪問和保護敏感性資料。但如果RBAC未經正確配置,就可能會導致過度授權的情況,允許使用者訪問他們不應訪問的資源或執行違規的操作。這可能會造成嚴重的安全風險,包括資料洩露、丟失和受損。專家強烈推薦部署集中式策略來檢測和阻止危險的RBAC許可權,並遵循官方規定的RBAC最佳實踐。
4. 安全性原則未執行
安全性原則執行主要指安全規則和條例的實施,以確保符合組織策略。在Kubernetes應用中,策略執行指的是確保Kubernetes集群遵守組織設置的安全性原則。這些策略可能與存取控制、資源配置、網路安全或Kubernetes集群的任何其他方面有關。
5. 不充分的日誌記錄
日誌記錄是任何運行應用程式的系統的基本元件。Kubernetes的日誌記錄也不例外。這些日誌可以説明識別系統問題,並為系統性能優化、安全性漏洞修復和資料丟失取證提供有價值的分析。各種來源(包括應用程式碼、Kubernetes元件和系統級進程)都可以生成Kubernetes日誌。
6. 受損的身份驗證
受損的身份驗證是一個嚴重的安全威脅,將允許攻擊者繞過身份驗證並獲得對應用程式或系統的未經授權的訪問。在Kubernetes中,由於以下幾個因素,可能會引發受損的身份驗證:
- 如果攻擊者可以獲得用戶的憑證,他們可以繞過身份驗證並獲得對Kubernetes叢集的未經授權的存取;
- Kubernetes支持多種身份驗證機制,包括X.509證書、靜態權杖和OAuth權杖。錯誤配置的身份驗證規則可能會使Kubernetes叢集容易受到攻擊;
- Kubernetes使用多種通信通道,包括Kubernetes API伺服器、kubelet和etcd。如果這些溝通通道不安全,攻擊者可以攔截和操縱流量以繞過身份驗證。
7. 網路未分段
當Kubernetes網路中沒有附加控制時,任何工作負載都可以與另一個工作負載通信。攻擊者可以利用這種默認行為,利用正在運行的工作負載探測內部網路、移動到其他容器,甚至調用私有API。網路分段是將一個網路劃分為多個更小的子網路,每個子網路相互隔離。網路分段使得攻擊者難以在網路中橫向移動並獲得對敏感資源的訪問。
8. 配置錯誤的叢集組件
Kubernetes叢集由etcd、kubelet、kube-apiserver等不同元件組成,所有元件都是高度可配置的,這意味著當Kubernetes的核心組件出現配置錯誤時,就可能會發生叢集洩露。在Kubernetes控制計畫中,需要對各個元件進行配置錯誤檢查。
9. 脆弱的協力廠商組件
由於Kubernetes集群運行大量協力廠商軟體,安全團隊將需要構建多層策略來防護易受攻擊的組件。一些最佳實踐如下:
- 跟蹤CVE資料庫,以實現定期的修補管理流程;
- 實現持續掃描,使用OPA Gatekeeper等工具可以説明編寫自訂規則,以發現Kubernetes集群中任何易受攻擊的組件。
- 最小化協力廠商依賴關係,在Kubernetes應用部署之前,必須徹底審計協力廠商軟體是否存在過度授權的RBAC、低級別的內核存取和漏洞披露記錄等資訊。
10. Secret(機密)管理
Secret是Kubernetes中的一個物件,它包含密碼、證書和API金鑰等敏感性資料。Secret存儲機密資料,叢集中的其他使用者和進程應該無法存取這些資料。Kubernetes Secret密存儲在etcd中,這是Kubernetes用來存儲所有叢集資料的分散式鍵值存儲。
管理Kubernetes Secret可以分為以下步驟:
- 在靜止狀態下部署加密——Kubernetes提供靜態加密。靜態加密保護etcd中的secret資源,確保這些secret的內容對訪問etcd備份的各方保持隱藏;
- 解決安全錯誤配置,例如漏洞、映射安全性和策略執行;
- 確保日誌記錄和啟用和配置Kubernetes審計記錄,並將之集中存儲。
本文轉載自SentinelOne。