在2023年RSA大會上,來自微軟云防護團隊的高級安全研究員 Yossi Weizman為我們分享了Kubernetes(以下簡稱K8s)集群的橫向移動及其對云環境的影響。本文基于Yossi的演講內容并結合筆者的思考理解,從攻擊的角度來講述橫向移動的使用,最后基于防御者視角提出監測和防御此類活動的建議。
概 述
K8s是一個可移植、可擴展的開源平臺,用于管理容器化工作負載和服務[1]。據stackshare的報道顯示,已經有超過3000家公司在使用K8s,其中不乏知名的頭部企業[2],毫無疑問K8s是最受歡迎的容器管理平臺之一。而一般意義上的橫向移動是指當攻擊者獲得了某臺內網機器的控制權限后,會以被攻陷的主機為跳板,繼續訪問或控制其他內網機器的過程,在本文中則介紹K8s下集群內部間、集群與云、跨云三類橫向移動。
注:文中如無特殊說明,圖片均來自該議題的PPT。
背 景
K8s 通過將容器分類組成pod來解決了容器增殖帶來的許多常見問題。pod 為容器分組提供了一層抽象,以此協助調度工作負載以及為這些容器提供類似網絡與存儲這類必要的服務。由于pod作為基本業務生產端點,直接處理與用戶的交互,攻擊者可以通過各類手段(WEB漏洞,業務邏輯錯誤等等)控制pod,本文的背景就假定在一個被攻擊者控制pod的K8s環境下,隨后攻擊者如何通過集群內部間、集群與云、跨云這三類橫向移動擴大其影響范圍,竊取更多有價值信息。

圖1 K8s架構示意圖
各類橫向移動集群內橫向移動
當攻擊者接管pod后,其集群內的橫向移動在K8s中的特點是RABC配置利用。簡單介紹下K8s的RABC,基于角色(Role)的訪問控制(RBAC)是一種基于組織中用戶的角色來調節控制對計算機或網絡資源的訪問的方法。RBAC 鑒權機制使用 rbac.authorization.k8s.io API 組來驅動鑒權決定,允許通過 K8s API 動態配置策略。RBAC API 聲明了四種 K8s 對象:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。Role 總是用來在某個命名空間內設置訪問權限;在創建 Role 時,必須指定該 Role 所屬的命名空間。與之相對,ClusterRole 則是一個集群作用域的權限控制資源。角色綁定(Role Binding)是將角色中定義的權限賦予一個或者一組用戶。它包含若干主體(用戶、組或服務賬戶)的列表和對這些主體所獲得的角色的引用。RoleBinding 在指定的命名空間中執行授權,而 ClusterRoleBinding 在集群范圍執行授權[3]。
因此攻擊者往往利用淪陷的pod訪問密鑰、接管節點甚至控制集群,但上述操作伴隨著K8s的迭代更新變得越來越困難。盡管如此,不恰當的權限配置將會允許集群內部的橫向移動。如圖2所示,該pod獲取了更新其自身權限的能力,淪陷的后果不言而喻。在圖3中,其它類似的敏感權限分配也會造成極為嚴重的后果。

圖2 不恰當的pod權限配置

圖3 部分敏感權限
集群到云的橫向移動
為什么集群可以向云端移動呢?因為在集群工作中使用了云服務或云資源,例如調用云存儲中圖片文本資源、向云存儲中上傳數據或使用云服務管理K8s等等。在這其中會涉及到云端如何鑒權K8s以及K8s和云的交互,可以歸類成如下三類:
- 在節點中存儲云憑證AK/SK、長效token或其它等價身份憑證信息。
- 實例元數據服務(Cloud Instance Metadata Services, IMDS)[4]: 提供有關當前正在運行的虛擬機實例的信息,可以使用它來管理和配置虛擬機。
- 利用OIDC 協議單點登錄:OpenID Connect (OIDC) 擴展了 OAuth 2.0 授權協議,使其也可用作身份驗證協議。可以使用 OIDC 通過一個稱作“ID 令牌”的安全令牌在支持 OAuth 的應用程序之間啟用單點登錄(SSO)。
上述第一類情況下,在RSA會上,Yossi介紹的是服務主體名稱(ServicePrincipal Names,SPN)利用,即惡意pod創建新的后門pod,并在該后門pod 配置中掛載SPN信息;第二類情況下,考慮到節點(kubelet)運行在虛擬機環境上,通過pod發出的請求一般等同于節點發出的請求,則可以利用此方法獲取虛擬機信息或請求token用以控制虛擬機;第三類情況則通過SA等共享認證機制控制云上虛擬機資源,獲取元數據信息如圖4所示,利用示例如圖5所示。

圖4 虛擬機元數據信息獲取示例

圖5 元數據信息利用
跨云橫向移動
跨云橫向移動涉及到一些K8s的部署架構場景:多云環境下K8s集群,多云環境下身份認證和多云環境下供應鏈攻擊。其中多云環境下K8s集群涉及到跨云服務商構建和運維集群,較為危險的行為是向公網暴露集群API;多云環境下身份認證則涉及到各個云服務商的認證機制,其組合是否會存在潛在的認證憑證或其它敏感信息泄露;多云環境下供應鏈攻擊則是指利用跨云間的惡意組件、惡意鏡像等等從而實現跨云服務商的橫向移動,如圖6所示。

圖6 跨云橫向移動示例
安全Tips監測
1) 在K8s控制平面可以做到:利用Kubeaudit[5]審計敏感可疑行為(部署非授信來源鏡像;異常行為的pods,例如掛載敏感存儲;探測行為,例如查看自身權限配置;敏感API調用,例如“get secret”)。
2)在云服務控制平面可以做到:監控K8s集群的云身份憑證使用行為(異常的憑證使用,例如持續使用憑證;可疑云服務調用,例如調用存有密鑰文件或敏感信息的存儲接口)。
防御
- 云與K8s的整體思想:既考慮到集群層面也考慮到云層面的風險;
- 憑證是K8s安全的關鍵之一:利用審計工具監測所有的認證行為;
- 最小授權原則:依據pod、node/master node的不同業務需求授權;
- K8s ThreatMatrix:及時跟進最新的K8s風險矩陣及其專業建議。
E安全
安全圈
中國網絡空間安全協會
關鍵基礎設施安全應急響應中心
一顆小胡椒
公安部網安局
奇安信集團
聚銘網絡
奇安信集團
安全內參
綠盟科技研究通訊
安全牛