渗透测试:k8s的3种攻击手段(Kubernetes、未授权漏洞,端口:8080、6443、10250)
目錄
一、概覽
二、Kubernetes中的用戶
三、滲透思路?
1.?k8s api-server 8080未授權(quán)
2.?kubelet 10250端口未授權(quán)
3.?Service acount 高權(quán)限賬戶的風(fēng)險(xiǎn)
四、總結(jié)
一、概覽
云原生技術(shù)架構(gòu)在帶來(lái)顛覆性技術(shù)架構(gòu)變革的同時(shí),也帶來(lái)了新的安全要求和挑戰(zhàn)。在過(guò)去幾年以及未來(lái)數(shù)年內(nèi),云原生架構(gòu)會(huì)成為黑客攻擊和利用的重點(diǎn)。Kubernetes,簡(jiǎn)稱k8s,是當(dāng)前主流的容器調(diào)度平臺(tái),更被稱為云原生時(shí)代的操作系統(tǒng),可見(jiàn)其重要性。簡(jiǎn)單來(lái)說(shuō),k8s是一個(gè)可移植的、可擴(kuò)展的開(kāi)源平臺(tái),用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動(dòng)化。本文從k8s用戶授權(quán)方面來(lái)談?wù)勧槍?duì)k8s集群滲透的手法,如有不足之處,還望各位老師傅進(jìn)行斧正。
二、Kubernetes中的用戶
Kubernetes 集群中包含兩類(lèi)用戶:一類(lèi)是由 Kubernetes 管理的 service account,另一類(lèi)是普通用戶。普通用戶被假定為由外部獨(dú)立服務(wù)管理。管理員分發(fā)私鑰,用戶存儲(chǔ)(如?Keystone 或 Google 賬戶),甚至包含用戶名和密碼列表的文件。在這方面,Kubernetes 沒(méi)有代表普通用戶賬戶的對(duì)象。無(wú)法通過(guò) API 調(diào)用的方式向集群中添加普通用戶。
相對(duì)的,service account 是由 Kubernetes API 管理的賬戶。它們都綁定到了特定的 namespace,并由 API server 自動(dòng)創(chuàng)建,或者通過(guò) API 調(diào)用手動(dòng)創(chuàng)建。Service account 關(guān)聯(lián)了一套憑證,存儲(chǔ)在 Secret,這些憑證同時(shí)被掛載到 pod 中,從而允許 pod 與 kubernetes API 之間的調(diào)用。
API 請(qǐng)求被綁定到普通用戶或 serivce account 上,或者作為匿名請(qǐng)求對(duì)待。這意味著集群內(nèi)部或外部的每個(gè)進(jìn)程,無(wú)論從在工作站上輸入 kubectl 的人類(lèi)用戶到節(jié)點(diǎn)上的 kubelet,到控制平面的成員,都必須在向 API Server 發(fā)出請(qǐng)求時(shí)進(jìn)行身份驗(yàn)證,或者被視為匿名用戶。
user
外部用戶是?k8s 中非常常見(jiàn)的一種訪問(wèn)者身份,通常用于從 k8s 之外來(lái)訪問(wèn)集群中的資源。因?yàn)檫@種資源的定位就是外部用戶,所以 k8s 是不會(huì)存儲(chǔ) User 信息的,我們可以通過(guò) Keystone 或者 Google Accounts 這種外部應(yīng)用來(lái)管理。
group
同外部用戶,Group 也是一種外部的概念,在X509客戶端證書(shū)認(rèn)證的方式中,Group 名字就是證書(shū)的組織名(Orgnization)
service account?
相對(duì)于外部用戶?User 而言,Service Account 則是集群內(nèi)部的用戶,我們可以使用 k8s api 來(lái)查看和管理這種用戶。
anonymous
????????當(dāng)一個(gè)請(qǐng)求沒(méi)有攜帶任何的認(rèn)證信息時(shí),它會(huì)自動(dòng)獲得用戶名:system:anonymous和用戶組? ? ? ? ? system:unauthenticated,我們可以配置分配特定的權(quán)限給這種匿名用戶,適用于想要公開(kāi)一? ? ? ? ? 些不敏感的資源等場(chǎng)景。kubelet 10250 未授權(quán)訪問(wèn)、kube-apiserver 8080端口未授權(quán)訪? ? ? ? ? ? ? ? 問(wèn),? 皆屬于此種情況。
三、滲透思路?
1.?k8s api-server 8080未授權(quán)
部署在Master上暴露Kubernetes API,是Kubernetes的控制面。Kubernetes API服務(wù)器為API對(duì)象驗(yàn)證和配置數(shù)據(jù),這些對(duì)象包含Pod,Service,ReplicationController等等。API Server提供REST操作以及前端到集群的共享狀態(tài),所有其他組件可以通過(guò)這些共享狀態(tài)交互。默認(rèn)情況,Kubernetes API Server提供HTTP的兩個(gè)端口:8080,6443。insecure-port: 默認(rèn)端口8080,在HTTP中沒(méi)有認(rèn)證和授權(quán)檢查。secure-port :默認(rèn)端口6443, 認(rèn)證方式,令牌文件或者客戶端證書(shū),如下圖訪問(wèn)http://IP:8080
滲透思路:通過(guò)未授權(quán)的8080端口,可以讀寫(xiě)kube-apiserver的api,創(chuàng)建掛載根目錄的特權(quán)DaemonSet實(shí)現(xiàn)控制集群的目的。
注:k8s DeamonSet會(huì)在集群中的每臺(tái)機(jī)器上創(chuàng)建一個(gè)
2.?kubelet 10250端口未授權(quán)
kubelet會(huì)在kubernetes集群中的每一個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè)實(shí)例,對(duì)容器進(jìn)行生命周期的管理。kubelet開(kāi)放的端口有:4194、10248、10250和10255。kubelet的10255端口提供了pod和node的信息。如果對(duì)外開(kāi)放,攻擊者利用公開(kāi)api可以獲取敏感信息。kubelet的10250端口是kubelet server 與 apiserver 通信的端口,定期請(qǐng)求 apiserver 獲取自己所應(yīng)當(dāng)處理的任務(wù),通過(guò)該端口可以訪問(wèn)獲取node資源以及狀態(tài)。如果kubelet的10250端口對(duì)外暴露,存在遠(yuǎn)程命令執(zhí)行漏洞。
滲透手法:用curl直接連接kublet的10250端口:curl –insecure -v -H “X-Stream-Protocol-Version: v2.channel.k8s.io” -H “X-Stream-Protocol-Version: channel.k8s.io” -X POST “https://IP:10250/exec/namespace/podID/containername?command=touch&command=/tmp/test&input=1&output=1&tty=1"
3.?Service acount 高權(quán)限賬戶的風(fēng)險(xiǎn)
k8s創(chuàng)建pod時(shí),默認(rèn)會(huì)把token、ca.crt、namespace三個(gè)文件掛載到pod內(nèi)部,默認(rèn)掛載到/run/secrets/kubernetes.io/serviceaccount目錄, 如果掛載到集群內(nèi)的token具有創(chuàng)建pod的權(quán)限,可以通過(guò)token訪問(wèn)集群的api創(chuàng)建特權(quán)容器,然后通過(guò)特權(quán)容器逃逸到宿主機(jī),從而擁有集群節(jié)點(diǎn)的權(quán)限。如下圖這種權(quán)限控制有較大的風(fēng)險(xiǎn),可以直接拿到集群權(quán)限:(激進(jìn)一點(diǎn)的舉例,勿噴。相信各位運(yùn)維小哥,不會(huì)犯這種錯(cuò)誤。)
此種情況下有兩種滲透方式:
-
調(diào)用k8s sdk創(chuàng)建特權(quán)容器、掛載根目錄的容器
-
把kubectl 放到pod內(nèi),創(chuàng)建特權(quán)容器、掛載根目錄的容器
四、總結(jié)
本文從k8s api-server 8080端口未授權(quán)訪問(wèn)、kubelet 10250端口未授權(quán)訪問(wèn)、rbac權(quán)限三方面不安全配置,介紹了滲透k8s集群的方法。滲透集群手法還有很多種,后文再表。
總結(jié)
以上是生活随笔為你收集整理的渗透测试:k8s的3种攻击手段(Kubernetes、未授权漏洞,端口:8080、6443、10250)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: weblogic patch log显示
- 下一篇: CentOS下禁止防火墙