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

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

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

圖1:Kubernetes攻防矩陣

一、初始訪問

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

1.云賬戶訪問憑證泄漏

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

2.運行惡意鏡像

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

3.Kubeconfig/token泄漏

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

4.應用漏洞

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

二、執(zhí)行

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

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

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

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

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

3.容器內應用漏洞利用

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

4.在容器內運行的SSH服務

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

三、持久化

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

1.后門容器

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

2.掛載宿主機敏感目錄的容器

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

3.Kubernetes CronJob

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

4.特權容器

用docker–privileged可以啟動docker的特權模式,這種模式允許我們以其宿主機具有(幾乎)所有能力來運行容器,包括一些內核特性和設備訪問,這種模式下運行容器會讓docker擁有宿主機的訪問權限,并帶有一些不確定的安全風險。

5.Webshell

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

四、權限提升

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

1.特權容器

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

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

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

3.掛載宿主機敏感目錄的容器

hostPath mount可以被攻擊者用來獲取對底層主機的訪問權,從而從容器逃逸到主機。

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

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

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

五、防御繞過

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

1.清除容器日志

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

2.刪除Kubernetes日志

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

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

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

4.通過代理隱藏訪問ip

K8S API Server會記錄請求IP,攻擊者可以使用代理服務器來隱藏他們源IP。具體來說,攻擊者經(jīng)常使用匿名網(wǎng)絡(如TOR)進行活動。這可用于與應用程序本身或與API服務器進行通信。

六、憑證訪問

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

1.Kubernetes Secret

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

2.云服務憑證

當集群部署在云中時,在某些情況下,攻擊者可以利用他們對集群中的容器的訪問來獲得云的憑證。例如,在AKS中,每個節(jié)點都包含服務憑證。

3.訪問容器服務賬戶

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

4.配置文件中的應用憑證

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

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

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

1.訪問Kubernetes API

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

2.訪問Kubelet API

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

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

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

4.訪問Kubernetes dashboard

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

5.查詢metadata API 服務

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

八、橫向移動

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

1.訪問云資源

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

2.容器服務賬戶

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

3.集群內網(wǎng)絡和服務

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

4.訪問Tiller endpoint

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

九、危害

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

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

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

2.資源劫持

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

3.拒絕服務

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

4.加密勒索

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

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

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

如欲了解更多詳細信息,請關注公眾號「青藤技術服務」,查看《K8S加固指南》中文版本報告全文。

分享到

songjy

相關推薦