Kubernetes應用的十大安全風險與防護建議

在供應鏈開發(fā)生命周期的各個階段,容器會以多種形式存在,且每種形式都有其獨特的安全挑戰(zhàn)。這是因為單個容器可能依賴于數(shù)百個外部第三方組件,將會降低每個階段的信任級別。

360截圖16251112669372.png

本文來自微信公眾號“安全牛”。

Kubernetes通常被稱為“K8s”,是一種非常流行的開源容器編排系統(tǒng),可以自動部署、擴展和管理容器化工作負載。作為一款功能強大的工具,Kubernetes可以提供容器自修復、自動擴展和服務發(fā)現(xiàn)功能,目前已受到企業(yè)用戶的廣泛歡迎。但是,與任何創(chuàng)新技術的應用一樣,必須要充分考慮和解決其中固有的安全風險。

總體來說,Kubernetes安全性包括三個主要部分:集群安全、節(jié)點安全和應用程序安全,其中:

集群安全包括通過啟用認證、授權和加密來保護控制平面組件,如API服務器、etcd和Kubernetes控制器管理程序(Kubernetes controller manager);

節(jié)點安全主要是指正確配置網(wǎng)絡和保護Kubernetes運行時環(huán)境,包括刪除不必要的用戶帳戶和確保應用訪問的合規(guī)性;

應用程序安全意味著要對pod進行保護,在Kubernetes中,pod是用于運行應用程序的容器。保護這些應用程序的前提是保護pod。Kubernetes提供了多個安全特性來幫助保護應用程序。這些特性可用于限制資源訪問、實施網(wǎng)絡策略,并支持容器之間的安全通信。

為了幫助企業(yè)組織更安全的應用Kubernetes系統(tǒng),OWASP基金會日前列舉出Kubernetes的十大安全風險,并提供了緩解這些風險的建議。

01

不安全的工作負載配置

Kubernetes manifest包含大量的配置,這些配置會影響相關工作負載的可靠性、安全性和可擴展性。這些配置應該不斷地進行審計和糾正,以防止錯誤配置。特別是對一些高影響的manifest配置,因為它們更有可能被錯誤配置。雖然許多安全配置通常是在manifest本身的securityContext中設置的,但這些配置信息需要在其他地方也可以被檢測到,包括在運行時和代碼中都能夠檢測到它們,這樣才能防止錯誤配置。

安全團隊還可以使用Open Policy Agent之類的工具作為策略引擎來檢測各種常見的Kubernetes錯誤配置。此外,使用Kubernetes的CIS基準也是發(fā)現(xiàn)錯誤配置的一個有效方法。不過,持續(xù)監(jiān)控和糾正任何潛在的錯誤配置,以確保Kubernetes工作負載的安全性和可靠性同樣是至關重要的。

02

供應鏈安全漏洞

在供應鏈開發(fā)生命周期的各個階段,容器會以多種形式存在,且每種形式都有其獨特的安全挑戰(zhàn)。這是因為單個容器可能依賴于數(shù)百個外部第三方組件,將會降低每個階段的信任級別。在實際應用中,最常見的供應鏈安全漏洞如下:

●映像(Image)完整性——容器映像由很多層組成,每層都可能帶來安全風險。由于容器映像廣泛使用第三方包,因此在可信環(huán)境中運行它們可能是危險的。為了緩解這種情況,在每個階段使用in-toto驗證軟件以確保映像完整性是很重要的。此外,通過密鑰對使用圖像進行簽名和驗證,可以快速檢測到對工件的篡改,這是構建安全供應鏈的重要步驟;

●映像組合——容器映像包含很多層,每層都有不同的安全影響。正確構造的容器映像可以減少攻擊面并提高部署效率。因此,使用最小的OS包和依賴項來創(chuàng)建容器映像以減少攻擊面非常重要,可以考慮使用其他基本映像(如Distroless或Scratch)來改善安全態(tài)勢并縮小映像尺寸。此外,Docker Slim等工具也可用于優(yōu)化映像占用空間;

●已知的軟件漏洞——由于容器映像中大量使用第三方包,安全漏洞非常普遍。映像漏洞掃描對于枚舉容器映像中的已知安全問題至關重要。諸如Clair和trivy之類的開源工具會靜態(tài)分析容器映像,以查找諸如CVE之類的已知漏洞,因此應該在開發(fā)周期中盡可能早地使用這些工具。

03

過度授權的RBAC

如果配置正確,RBAC(基于角色的訪問控制)有助于防止未經(jīng)授權的訪問和保護敏感數(shù)據(jù)。但如果RBAC未經(jīng)正確配置,就可能會導致過度授權的情況,允許用戶訪問他們不應訪問的資源或執(zhí)行違規(guī)的操作。這可能會造成嚴重的安全風險,包括數(shù)據(jù)泄露、丟失和受損。

為了防止這種風險,持續(xù)分析RBAC配置并實施最小特權原則(PoLP)是至關重要的。這可以通過減少終端用戶對集群的直接訪問、避免在集群外部使用服務帳戶令牌以及審計第三方組件中的RBAC來實現(xiàn)。此外,強烈推薦部署集中式策略來檢測和阻止危險的RBAC權限,使用RoleBindings將權限范圍限制到特定的名稱空間,并遵循官方規(guī)定的RBAC最佳實踐。

04

安全策略未執(zhí)行

安全策略執(zhí)行主要指安全規(guī)則和條例的實施,以確保符合組織策略。在Kubernetes應用中,策略執(zhí)行指的是確保Kubernetes集群遵守組織設置的安全策略。這些策略可能與訪問控制、資源分配、網(wǎng)絡安全或Kubernetes集群的任何其他方面有關。

策略執(zhí)行對于確保Kubernetes集群的安全性和遵從性至關重要。如果安全策略未被執(zhí)行可能導致安全漏洞、數(shù)據(jù)丟失和其他潛在風險。此外,安全策略執(zhí)行有助于維護Kubernetes集群的完整性和穩(wěn)定性,確保資源得到有效和高效的分配。

確保在Kubernetes中有效執(zhí)行安全策略是至關重要的,其中包括:

●定義與組織目標和法規(guī)需求相一致的策略;

●使用kubernetes本地資源或策略控制器實現(xiàn)策略;

●定期審查和更新策略,以確保其保持相關性和有效性;

●監(jiān)控違反策略的行為并及時予以糾正;

●教育用戶Kubernetes策略及其重要性。

05

不充分的日志記錄

日志記錄是任何運行應用程序的系統(tǒng)的基本組件。Kubernetes的日志記錄也不例外。這些日志可以幫助識別系統(tǒng)問題,并為系統(tǒng)性能優(yōu)化、安全漏洞修復和數(shù)據(jù)丟失取證提供有價值的分析。各種來源(包括應用程序代碼、Kubernetes組件和系統(tǒng)級進程)都可以生成Kubernetes日志。

為了安全的應用Kubernetes系統(tǒng),企業(yè)組織需要對其運行態(tài)勢進行充分的日志記錄:

●使用集中式日志系統(tǒng)——集中式日志系統(tǒng)收集并存儲所有Kubernetes組件和應用程序的日志,并將其保存在一個位置,這使得識別和響應系統(tǒng)問題會變得更加容易;

●使用標準化的日志格式——標準化的日志格式使搜索和分析來自多個源的日志變得更加容易。Kubernetes有多種標準的日志格式,包括JSON和syslog。安全團隊需要選擇其日志系統(tǒng)支持的格式,并配置其Kubernetes組件和應用程序以使用該格式;

●維護完整的日志——記錄所有內(nèi)容可以確保完整地了解系統(tǒng)行為。但是,記錄所有內(nèi)容也會生成大量數(shù)據(jù)。要管理這些數(shù)據(jù),可以考慮設置日志輪換和保留策略;

●使用標簽和注釋——標簽和注釋是Kubernetes的一個強大功能,可以為日志提供額外的上下文。通過標簽和注釋,運維人員可以根據(jù)特定的條件對日志進行過濾和搜索;

●監(jiān)控Kubernetes日志——定期監(jiān)控日志可以快速識別系統(tǒng)出現(xiàn)的問題并及時響應。有許多不同的工具可用于監(jiān)視Kubernetes日志,包括Grafana和Kibana等;

●日志審計——在Kubernetes中進行日志審計使團隊能夠跟蹤對Kubernetes API服務器和其他Kubernetes組件的更改,幫助識別未經(jīng)授權的系統(tǒng)更改,并確保符合安全策略。為了在Kubernetes中設置審計,需要配置Kubernetes API服務器來記錄審計事件,并發(fā)送到集中的日志記錄系統(tǒng)進行分析。

06

受損的身份驗證

受損的身份驗證是一個嚴重的安全威脅,將允許攻擊者繞過身份驗證并獲得對應用程序或系統(tǒng)的未經(jīng)授權的訪問。在Kubernetes中,由于以下幾個因素,可能會引發(fā)受損的身份驗證:

●如果攻擊者可以獲得用戶的憑據(jù),他們可以繞過身份驗證并獲得對Kubernetes集群的未經(jīng)授權的訪問;

●Kubernetes支持多種身份驗證機制,包括X.509證書、靜態(tài)令牌和OAuth令牌。錯誤配置的身份驗證規(guī)則可能會使Kubernetes集群容易受到攻擊;

●Kubernetes使用多種通信通道,包括Kubernetes API服務器、kubelet和etcd。如果這些通信通道不安全,攻擊者可以攔截和操縱流量以繞過身份驗證。

在Kubernetes中,可以實施一些積極的安全措施來防止身份驗證被破壞,包括:

●用戶必須使用不容易被猜測的強密碼或身份驗證令牌;

●Kubernetes組件之間的通信通道必須使用SSL/TLS加密;

●Kubernetes中使用的認證機制必須正確配置,以防止未經(jīng)授權的訪問;

●需要基于用戶角色對Kubernetes資源的訪問進行限制。

07

網(wǎng)絡未分段

當Kubernetes網(wǎng)絡中沒有附加控制時,任何工作負載都可以與另一個工作負載通信。攻擊者可以利用這種默認行為,利用正在運行的工作負載探測內(nèi)部網(wǎng)絡、移動到其他容器,甚至調(diào)用私有API。網(wǎng)絡分段是將一個網(wǎng)絡劃分為多個更小的子網(wǎng)絡,每個子網(wǎng)絡相互隔離。網(wǎng)絡分段使得攻擊者難以在網(wǎng)絡中橫向移動并獲得對敏感資源的訪問。

組織可以使用多種技術在Kubernetes集群中實現(xiàn)網(wǎng)絡分段,以阻止橫向移動,并仍然允許有效的流量正常路由。Kubernetes支持網(wǎng)絡策略,可以使用網(wǎng)絡策略控制哪些pod可以相互通信,哪些pod與集群的其他部分隔離。還有許多第三方工具也可以在Kubernetes集群中實現(xiàn)網(wǎng)絡分割。最流行的有Calico、Weave Net和Cilium等,這些工具提供高級的網(wǎng)絡分段功能,如加密、防火墻和入侵檢測。

08

配置錯誤的集群組件

Kubernetes集群由etcd、kubelet、kube-apiserver等不同組件組成,所有組件都是高度可配置的,這意味著當Kubernetes的核心組件出現(xiàn)配置錯誤時,就可能會發(fā)生集群泄露。在Kubernetes控制計劃中,需要對各個組件進行配置錯誤檢查,包括:

●檢查配置是否設置為拒絕匿名身份驗證。此外,在與Kubelets通信時,應該始終執(zhí)行授權檢查;

●要檢查正在使用的API服務器的互聯(lián)網(wǎng)可訪問性,并使Kubernetes API遠離任何公共網(wǎng)絡;

●執(zhí)行CIS基準掃描和審計也可以幫助安全團隊消除組件錯誤配置,可以使用諸如EKS、GKE或AKS之類的托管服務幫助實現(xiàn)安全配置,并限制組件配置的某些選項。

09

脆弱的第三方組件

由于Kubernetes集群運行大量第三方軟件,安全團隊將需要構建多層策略來防護易受攻擊的組件。一些最佳實踐如下:

●跟蹤CVE數(shù)據(jù)庫。管理Kubernetes中已知和新漏洞的一個關鍵因素是跟蹤CVE數(shù)據(jù)庫、安全披露和社區(qū)更新的最新信息。安全團隊可以使用這些情報構建可操作的計劃,以實現(xiàn)定期的補丁管理流程;

●實現(xiàn)持續(xù)掃描。使用OPA Gatekeeper等工具可以幫助編寫自定義規(guī)則,以發(fā)現(xiàn)Kubernetes集群中任何易受攻擊的組件。然后,安全團隊可以跟蹤并記錄這些發(fā)現(xiàn),以改進其安全流程和策略;

●最小化第三方依賴關系。在Kubernetes應用部署之前,必須徹底審計第三方軟件是否存在過度授權的RBAC、低級別的內(nèi)核訪問和漏洞披露記錄等信息。

10

Secret(機密)管理

“secret”是Kubernetes中的一個對象,它包含密碼、證書和API密鑰等敏感數(shù)據(jù)。Secret存儲機密數(shù)據(jù),集群中的其他用戶和進程應該無法訪問這些數(shù)據(jù)。Kubernetes Secret密存儲在etcd中,這是Kubernetes用來存儲所有集群數(shù)據(jù)的分布式鍵值存儲。雖然Secret在Kubernetes生態(tài)系統(tǒng)中是一個非常有用的功能,但需要謹慎處理。管理Kubernetes Secret可以分為以下步驟:

●在靜止狀態(tài)下部署加密——潛在的攻擊者可以通過訪問etcd數(shù)據(jù)庫獲得對集群狀態(tài)的相當大的可見性,該數(shù)據(jù)庫包含通過Kubernetes API訪問的任何信息。Kubernetes提供靜態(tài)加密。靜態(tài)加密保護etcd中的secret資源,確保這些secret的內(nèi)容對訪問etcd備份的各方保持隱藏;

●解決安全錯誤配置,例如漏洞、映像安全性和策略執(zhí)行——還應該鎖定RBAC配置,并且所有服務帳戶和最終用戶訪問都應該限制為最低權限,特別是在訪問secret時。審計集群中安裝的第三方插件和軟件的RBAC配置也是必要的,以確保對Kubernetes secret的訪問不會被不必要地授予;

●確保日志記錄和審計到位——這有助于檢測惡意或異常行為,包括對secret的訪問。Kubernetes集群圍繞活動產(chǎn)生有用的指標,可以利用這些指標來檢測此類行為。因此,建議啟用和配置Kubernetes審計記錄,并將其集中存儲。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論