容器的靈活性和可擴(kuò)展性鼓勵(lì)許多開發(fā)人員將工作負(fù)載轉(zhuǎn)移到Kubernetes。盡管Kubernetes具有許多優(yōu)勢(shì),但它也帶來了新的安全挑戰(zhàn)。因此了解容器化環(huán)境(尤其是Kubernetes)中存在的各種安全風(fēng)險(xiǎn)至關(guān)重要。

要了解如何保護(hù)Kubernetes環(huán)境,就要了解其相關(guān)的攻擊面。從Windows和Linux開始,MITRE ATT&CK中那些戰(zhàn)術(shù)和技術(shù)知識(shí)庫(kù),幫助企業(yè)更加深入去了解其環(huán)境中的攻擊狀況,并確保他們對(duì)各種風(fēng)險(xiǎn)有足夠的檢測(cè)和緩解措施。

針對(duì)Kubernetes的安全攻防,雖然攻擊技術(shù)與針對(duì)Linux或Windows的攻擊技術(shù)不同,但戰(zhàn)術(shù)實(shí)際上是相似的,我們基于目前在ATT&CK領(lǐng)域的研究,創(chuàng)建一個(gè)類似ATT&CK的矩陣——Kubernetes攻擊矩陣(如圖1所示),將它們作為一個(gè)框架,描述跨越Kubernetes基礎(chǔ)設(shè)施和應(yīng)用的關(guān)鍵攻擊戰(zhàn)術(shù)和技術(shù)。

圖1:Kubernetes攻防矩陣

一、初始訪問

初始訪問戰(zhàn)術(shù)包括所有用于獲得資源訪問權(quán)限的攻擊技術(shù)。在容器化環(huán)境中,這些技術(shù)可以實(shí)現(xiàn)對(duì)集群的初始訪問。這種訪問可以直接通過集群管理工具來實(shí)現(xiàn),也可以通過獲得對(duì)部署在集群上的惡意軟件或脆弱資源的訪問來實(shí)現(xiàn)。

1.云賬戶訪問憑證泄漏

用戶將項(xiàng)目代碼上傳到Github等第三方代碼托管平臺(tái),或者個(gè)人辦公PC被黑等都可能導(dǎo)致云賬號(hào)訪問憑證發(fā)生泄漏,如果泄漏的憑證被惡意利用,可能會(huì)導(dǎo)致用戶上層的資源(如ECS)被攻擊者控制,進(jìn)而導(dǎo)致K8S集群被接管。

2.運(yùn)行惡意鏡像

在集群中運(yùn)行一個(gè)不安全的鏡像可能會(huì)破壞整個(gè)集群的安全。進(jìn)入私有鏡像倉(cāng)庫(kù)的攻擊者可以在鏡像倉(cāng)庫(kù)中植入不安全的鏡像。而這些不安全的鏡像極有可能被用戶拉取出來運(yùn)行。此外,用戶也可能經(jīng)常使用公有倉(cāng)庫(kù)(如Docker Hub)中不受信任的惡意鏡像。基于不受信任的根鏡像來構(gòu)建新鏡像也會(huì)導(dǎo)致類似的結(jié)果。

3.Kubeconfig/token泄漏

kubeconfig文件中包含了關(guān)于Kubernetes集群的詳細(xì)信息,包括集群的位置和相關(guān)憑證。如果集群以云服務(wù)的形式托管(如AKS或GKE),該文件會(huì)通過云命令下載到客戶端。如果攻擊者獲得該文件的訪問權(quán),那么他們就可以通過被攻擊的客戶端來訪問集群。

4.應(yīng)用漏洞

在集群中運(yùn)行一個(gè)面向互聯(lián)網(wǎng)的易受攻擊的應(yīng)用程序,攻擊者就可以據(jù)此實(shí)現(xiàn)對(duì)集群的初始訪問。例如那些運(yùn)行有RCE漏洞的應(yīng)用程序的容器就很有可能被利用。如果服務(wù)賬戶被掛載到容器(Kubernetes中的默認(rèn)行為)上,攻擊者就能夠使用這個(gè)服務(wù)賬戶憑證向API服務(wù)器發(fā)送請(qǐng)求。

二、執(zhí)行

執(zhí)行是指攻擊者用來在集群內(nèi)運(yùn)行其代碼的技術(shù)。

1.在容器中執(zhí)行命令

擁有權(quán)限的攻擊者可以使用exec命令(”kubectl exec”)在集群的容器中運(yùn)行惡意命令。在這種方法中,攻擊者可以使用合法的鏡像,如操作系統(tǒng)鏡像(如Ubuntu)作為后門容器,并通過使用”kubectl exec”遠(yuǎn)程運(yùn)行其惡意代碼。

2.創(chuàng)建新的容器或pod執(zhí)行命令

攻擊者可能試圖通過部署一個(gè)新的容器在集群中運(yùn)行他們的代碼。如果攻擊者有權(quán)限在集群中部署pod或controller(如DaemonSet / ReplicaSet / Deployment),就可以創(chuàng)建一個(gè)新的資源來運(yùn)行其代碼。

3.容器內(nèi)應(yīng)用漏洞利用

在集群中部署的應(yīng)用程序,如果存在遠(yuǎn)程代碼執(zhí)行漏洞,攻擊者就可以在集群中運(yùn)行代碼。如果服務(wù)賬戶被掛載到容器中(Kubernetes中的默認(rèn)行為),攻擊者將能夠使用該服務(wù)賬戶憑證向API服務(wù)器發(fā)送請(qǐng)求。

4.在容器內(nèi)運(yùn)行的SSH服務(wù)

運(yùn)行在容器內(nèi)的SSH服務(wù)可能被攻擊者利用。如果攻擊者通過暴力破解或者其他方法(如釣魚)獲得了容器的有效憑證,他們就可以通過SSH獲得對(duì)容器的遠(yuǎn)程訪問。

三、持久化

持久化戰(zhàn)術(shù)是指攻擊者用來保持對(duì)集群持久訪問的技術(shù),以防他們最初的立足點(diǎn)丟失。

1.后門容器

攻擊者在集群的容器中運(yùn)行他們的惡意代碼。通過使用Kubernetes控制器,如DaemonSets或Deployments,攻擊者可以確保在集群中的一個(gè)或所有節(jié)點(diǎn)上運(yùn)行確定數(shù)量的容器。

2.掛載宿主機(jī)敏感目錄的容器

攻擊者在運(yùn)行新的容器時(shí),使用-v參數(shù),將宿主機(jī)的一些敏感目錄或文件,例如/root/.ssh/,/etc,/var/spool/cron/,/var/run/docker.sock,/proc/sys/kernel/core_pattern,/var/log等掛載到容器內(nèi)部目錄,進(jìn)而寫入ssh key或者crond命令等,來獲取宿主機(jī)權(quán)限,最終達(dá)到持久化的目的。

3.Kubernetes CronJob

Kubernetes CronJob是基于調(diào)度的Job執(zhí)行,類似于Linux的cron,我們可以利用k8S CronJob產(chǎn)生一個(gè)pod,然后在里面運(yùn)行給定的命令,進(jìn)而實(shí)現(xiàn)持久化。

4.特權(quán)容器

用docker–privileged可以啟動(dòng)docker的特權(quán)模式,這種模式允許我們以其宿主機(jī)具有(幾乎)所有能力來運(yùn)行容器,包括一些內(nèi)核特性和設(shè)備訪問,這種模式下運(yùn)行容器會(huì)讓docker擁有宿主機(jī)的訪問權(quán)限,并帶有一些不確定的安全風(fēng)險(xiǎn)。

5.Webshell

如果容器內(nèi)運(yùn)行的Web服務(wù)存在一些遠(yuǎn)程命令執(zhí)行(RCE)漏洞或文件上傳漏洞,攻擊者可能利用該類漏洞寫入WebShell,由于主機(jī)環(huán)境和容器環(huán)境的差異性,一些主機(jī)上的安全軟件可能無法查殺此類WebShell ,所以攻擊者也會(huì)利用此類方法進(jìn)行權(quán)限維持。

四、權(quán)限提升

權(quán)限提升戰(zhàn)術(shù)包括攻擊者用來在環(huán)境中獲得比他們目前擁有的更高權(quán)限的技術(shù)。在容器化環(huán)境中,這可能包括從容器中獲得對(duì)節(jié)點(diǎn)的訪問,在集群中獲得更高權(quán)限,甚至獲得對(duì)云資源的訪問。

1.特權(quán)容器

特權(quán)容器是一個(gè)擁有主機(jī)所有能力的容器,它解除了普通容器的所有限制。實(shí)際上,這意味著特權(quán)容器幾乎可以做主機(jī)上可操作的所有行為。攻擊者如果獲得了對(duì)特權(quán)容器的訪問權(quán),或者擁有創(chuàng)建新的特權(quán)容器的權(quán)限(例如,通過使用被攻擊的pod的服務(wù)賬戶),就可以獲得對(duì)主機(jī)資源的訪問權(quán)。

2.創(chuàng)建高權(quán)限的binding roles

基于角色的訪問控制(RBAC)是Kubernetes的一個(gè)關(guān)鍵安全功能。RBAC可以限制集群中各種身份操作的權(quán)限。Cluster-admin是Kubernetes中一個(gè)內(nèi)置的高權(quán)限角色。如果攻擊者有權(quán)限在集群中創(chuàng)建綁定權(quán)限,那么就可以創(chuàng)建一個(gè)綁定到集群管理員ClusterRole或其他高權(quán)限的角色。

3.掛載宿主機(jī)敏感目錄的容器

hostPath mount可以被攻擊者用來獲取對(duì)底層主機(jī)的訪問權(quán),從而從容器逃逸到主機(jī)。

4.通過泄漏的配置信息訪問其他資源

如果Kubernetes集群部署在云中,在某些情況下,攻擊者可以利用他們對(duì)單個(gè)容器的訪問,獲得對(duì)集群外其他云資源的訪問。例如,在AKS中,每個(gè)節(jié)點(diǎn)都包含服務(wù)憑證,存儲(chǔ)在/etc/kubernetes/azure.json中。AKS使用這個(gè)服務(wù)主體來創(chuàng)建和管理集群運(yùn)行所需的Azure資源。

默認(rèn)情況下,該服務(wù)委托人在集群的資源組中有貢獻(xiàn)者的權(quán)限。若攻擊者獲得了該服務(wù)委托人的文件訪問權(quán)(例如通過hostPath掛載),就可以使用其憑證來訪問或修改云資源。

五、防御繞過

防御繞過戰(zhàn)術(shù)包括攻擊者用來逃避檢測(cè)和隱藏其活動(dòng)的技術(shù)。

1.清除容器日志

攻擊者可能會(huì)刪除被攻擊的容器上的應(yīng)用程序或操作系統(tǒng)日志,以試圖防止檢測(cè)到他們的活動(dòng)。

2.刪除Kubernetes日志

Kubernetes日志,記錄集群中資源的狀態(tài)變化和故障。事件包括容器的創(chuàng)建、鏡像的拉取、或一個(gè)節(jié)點(diǎn)上的pod調(diào)度。Kubernetes日志對(duì)于識(shí)別集群中發(fā)生的變化非常有用。因此,攻擊者可能想刪除這些事件(例如,通過使用”kubectl delete events-all”),以免檢測(cè)到他們?cè)诩褐械幕顒?dòng)。

3.創(chuàng)建與已有應(yīng)用相似名稱的惡意Pod/container

由控制器(如Deployment或DaemonSet)創(chuàng)建的Pod在其名稱中具有隨機(jī)后綴。攻擊者可以利用這一事實(shí),將他們的后門pods命名為由現(xiàn)有控制器創(chuàng)建的pod的名稱。例如,攻擊者可以創(chuàng)建一個(gè)名為coredns-{隨機(jī)后綴}的惡意pod,看起來與CoreDNS部署有關(guān)。另外,攻擊者可以在管理容器所在的kube-system命名空間中部署他們的容器。

4.通過代理隱藏訪問ip

K8S API Server會(huì)記錄請(qǐng)求IP,攻擊者可以使用代理服務(wù)器來隱藏他們?cè)碔P。具體來說,攻擊者經(jīng)常使用匿名網(wǎng)絡(luò)(如TOR)進(jìn)行活動(dòng)。這可用于與應(yīng)用程序本身或與API服務(wù)器進(jìn)行通信。

六、憑證訪問

憑證訪問戰(zhàn)術(shù)包括攻擊者用來竊取憑證的一系列技術(shù)。在容器化環(huán)境中,這包括運(yùn)行中的應(yīng)用程序的憑證、身份、存儲(chǔ)在集群中的秘鑰或云憑證。

1.Kubernetes Secret

Kubernetes secret也是K8S中的一個(gè)資源對(duì)象,主要用于保存輕量的敏感信息,比如數(shù)據(jù)庫(kù)用戶名和密碼,令牌,認(rèn)證密鑰等。Secret可以通過pod配置進(jìn)行使用。有權(quán)限從API服務(wù)器中檢索Secret的攻擊者(例如,通過使用pod服務(wù)賬戶)就訪問Secret中的敏感信息,其中可能包括各種服務(wù)的憑證。

2.云服務(wù)憑證

當(dāng)集群部署在云中時(shí),在某些情況下,攻擊者可以利用他們對(duì)集群中的容器的訪問來獲得云的憑證。例如,在AKS中,每個(gè)節(jié)點(diǎn)都包含服務(wù)憑證。

3.訪問容器服務(wù)賬戶

Service Account Tokens是pod 內(nèi)部訪問K8S apiserver的一種特殊的認(rèn)證方式。攻擊者可以通過獲取Service Account Tokens,進(jìn)而訪問K8S apiserver。

4.配置文件中的應(yīng)用憑證

開發(fā)人員在Kubernetes配置文件中存儲(chǔ)敏感信息,例如pod配置中的環(huán)境變量。攻擊者如果能夠通過查詢API服務(wù)器或訪問開發(fā)者終端上的這些文件來訪問這些配置,就可以竊取存儲(chǔ)的敏感并加以利用,例如數(shù)據(jù)庫(kù),消息隊(duì)列的賬號(hào)密碼等。

七、發(fā)現(xiàn)

發(fā)現(xiàn)戰(zhàn)術(shù)是攻擊者用來探索他們獲得環(huán)境訪問權(quán)限的技術(shù)。這種探索有助于攻擊者進(jìn)行橫向移動(dòng)并獲得對(duì)額外資源的訪問權(quán)限。

1.訪問Kubernetes API

Kubernetes API是進(jìn)入集群的網(wǎng)關(guān)。集群中的行動(dòng)是通過向RESTful API發(fā)送各種請(qǐng)求來執(zhí)行的。集群的狀態(tài),包括部署在其上的所有組件,可以由API服務(wù)器檢索。攻擊者可以發(fā)送API請(qǐng)求來探測(cè)集群,并獲得關(guān)于集群中的容器、秘密和其他資源的信息。

2.訪問Kubelet API

Kubelet是安裝在每個(gè)節(jié)點(diǎn)上的Kubernetes代理。Kubelet負(fù)責(zé)正確執(zhí)行分配給該節(jié)點(diǎn)的pod。如果Kubelet暴露了一個(gè)不需要認(rèn)證的只讀API服務(wù)(TCP端口10255),攻擊者獲得主機(jī)的網(wǎng)絡(luò)訪問權(quán)(例如,通過在被攻擊的容器上運(yùn)行代碼)后就可以向Kubelet API發(fā)送API請(qǐng)求。具體來說,查詢https://[NODE IP]:10255/pods/可以檢索節(jié)點(diǎn)上正在運(yùn)行的pod。https://[NODE IP]:10255/spec/可以檢索節(jié)點(diǎn)本身的信息,例如CPU和內(nèi)存消耗。

3.集群中的網(wǎng)絡(luò)和服務(wù)

攻擊者可以在cluster中發(fā)起內(nèi)網(wǎng)掃描來發(fā)現(xiàn)不同pod所承載的服務(wù),并通過其漏洞進(jìn)行后續(xù)滲透。

4.訪問Kubernetes dashboard

Kubernetes dashboard是一個(gè)基于Web的用戶界面,用于監(jiān)控和管理Kubernetes集群。通過儀表盤,用戶可以使用其服務(wù)賬戶(kubernetes-dashboard)在集群中執(zhí)行操作,其權(quán)限由該服務(wù)賬戶綁定或集群綁定決定。攻擊者如果獲得了對(duì)集群中容器的訪問權(quán),就可以使用其網(wǎng)絡(luò)訪問儀表盤的pod。因此,攻擊者可以使用儀表盤的身份檢索集群中各種資源的信息。

5.查詢metadata API 服務(wù)

云提供商提供實(shí)例元數(shù)據(jù)服務(wù),用于檢索虛擬機(jī)的信息,如網(wǎng)絡(luò)配置、磁盤和SSH公鑰。該服務(wù)可通過一個(gè)不可路由的IP地址被虛擬機(jī)訪問,該地址只能從虛擬機(jī)內(nèi)部訪問。攻擊者獲得容器訪問權(quán)后,就可以查詢?cè)獢?shù)據(jù)API服務(wù),從而獲得底層節(jié)點(diǎn)的信息。

八、橫向移動(dòng)

橫向移動(dòng)戰(zhàn)術(shù)包括攻擊者用來在受害者的環(huán)境中移動(dòng)的技術(shù)。在容器化環(huán)境中,這包括從對(duì)一個(gè)容器的特定訪問中獲得對(duì)集群中各種資源的訪問權(quán)限,從容器中獲得對(duì)底層節(jié)點(diǎn)的訪問權(quán)限,或獲得對(duì)云環(huán)境的訪問權(quán)限。

1.訪問云資源

攻擊者可能會(huì)從一個(gè)被攻擊的容器轉(zhuǎn)移到云環(huán)境中。

2.容器服務(wù)賬戶

攻擊者獲得對(duì)集群中容器的訪問權(quán)后,就可能會(huì)使用掛載的服務(wù)賬戶令牌向API服務(wù)器發(fā)送請(qǐng)求,并獲得對(duì)集群中其他資源的訪問權(quán)限。

3.集群內(nèi)網(wǎng)絡(luò)和服務(wù)

默認(rèn)狀態(tài)之下,通過Kubernetes可以實(shí)現(xiàn)集群中pod之間的網(wǎng)絡(luò)連接。攻擊者獲得對(duì)單個(gè)容器的訪問權(quán)后,就可能會(huì)利用它來實(shí)現(xiàn)集群中另一個(gè)容器的網(wǎng)絡(luò)訪問權(quán)限。

4.訪問Tiller endpoint

Helm是一個(gè)流行的Kubernetes軟件包管理器,由CNCF維護(hù)。Tiller在集群中暴露了內(nèi)部gRPC端點(diǎn),監(jiān)聽端口為44134。默認(rèn)情況下,這個(gè)端點(diǎn)不需要認(rèn)證。攻擊者可以在任何可以訪問Tiller服務(wù)的容器上運(yùn)行代碼,并使用Tiller的服務(wù)賬戶在集群中執(zhí)行操作,而該賬戶通常具有較高的權(quán)限。

九、危害

影響戰(zhàn)術(shù)包括攻擊者用來破壞、濫用或擾亂環(huán)境的正常行為的技術(shù)。

1.數(shù)據(jù)破壞

攻擊者可能試圖破壞集群中的數(shù)據(jù)和資源,包括刪除部署、配置、存儲(chǔ)和計(jì)算資源。

2.資源劫持

攻擊者可能會(huì)濫用失陷的資源來運(yùn)行任務(wù)。一個(gè)常見情況是攻擊者使用失陷的資源來進(jìn)行數(shù)字貨幣挖掘。攻擊者如果能夠訪問集群中的容器或有權(quán)限創(chuàng)建新的容器,就可能利用失陷的資源來進(jìn)行這種活動(dòng)。

3.拒絕服務(wù)

攻擊者可能試圖進(jìn)行拒絕服務(wù)攻擊,讓合法用戶無法使用服務(wù)。在容器集群中,這包括損害容器本身、底層節(jié)點(diǎn)或API服務(wù)器的可用性。

4.加密勒索

惡意的攻擊者可能會(huì)加密數(shù)據(jù),進(jìn)而勒索用戶,索要匿名的數(shù)字貨幣。

了解容器化環(huán)境的攻擊面是為這些環(huán)境建立安全解決方案的第一步。上面介紹的矩陣可以幫助企業(yè)確定其防御系統(tǒng)在應(yīng)對(duì)針對(duì)Kubernetes的不同威脅方面存在的差距。

此外,為了確保應(yīng)用的安全,系統(tǒng)管理員還應(yīng)該按照該指南謹(jǐn)慎行事,及時(shí)打補(bǔ)丁、進(jìn)行更新和升級(jí),降低風(fēng)險(xiǎn)。NSA和CISA還建議定期對(duì)K8S設(shè)置進(jìn)行審查并進(jìn)行漏洞掃描,確??紤]到了所有相關(guān)風(fēng)險(xiǎn)并及時(shí)應(yīng)用了安全補(bǔ)丁。

如欲了解更多詳細(xì)信息,請(qǐng)關(guān)注公眾號(hào)「青藤技術(shù)服務(wù)」,查看《K8S加固指南》中文版本報(bào)告全文。

分享到

songjy