云和容器技術(shù)的快速增長(zhǎng),容器編排系統(tǒng)成了發(fā)展最快的技術(shù)。尤其是谷歌Kubernetes項(xiàng)目成了容器編排事實(shí)上的業(yè)界標(biāo)準(zhǔn)。越來(lái)越多的企業(yè)和開(kāi)發(fā)人員已經(jīng)將自己的工作轉(zhuǎn)移到了K8S上。盡管K8S具有很多優(yōu)勢(shì),但是統(tǒng)一和集中化的管控也在安全方面帶來(lái)了新的挑戰(zhàn)。在容器云化的環(huán)境中(比如K8S)中也存在的各種安全風(fēng)險(xiǎn),利用ATT&CK模型本文我們介紹K8S攻擊威脅矩陣。
概述
系統(tǒng)化的研究安全和防控最常用的方法是使用MITRE ATT&CK框架。MITRE是美國(guó)政府資助的一家研究機(jī)構(gòu),該機(jī)構(gòu)源于麻省大學(xué)專(zhuān)門(mén)研究包括軍方高密的安全項(xiàng)目,受美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(NIST)的資助,MITRE開(kāi)展了大量的網(wǎng)絡(luò)安全研究和實(shí)踐。
2013年了MITR推出了ATT&CK模型,該模型根據(jù)觀察實(shí)際數(shù)據(jù)來(lái)定義攻擊行為并對(duì)其分類(lèi)。ATT&CK模型通過(guò)結(jié)構(gòu)化矩陣的形式將已知的攻擊行為用威脅信息列表和可信自動(dòng)化交換表達(dá)。從Windows和linux OS覆蓋開(kāi)始,ATT&CK的矩陣涵蓋了網(wǎng)絡(luò)攻擊(策略)所涉及的各個(gè)階段,并詳細(xì)介紹了其中的每個(gè)已知方法(技術(shù))。這些矩陣可以幫助企業(yè)了解其環(huán)境中的攻擊面,并確保可以充分檢測(cè)和緩解各種風(fēng)險(xiǎn)。
MITER ATT&CK框架策略包括:初始訪問(wèn)、執(zhí)行、持久化、提權(quán)、防御繞過(guò)、訪問(wèn)憑據(jù)、發(fā)現(xiàn)、橫向擴(kuò)展、影響力等。
對(duì)于不同平臺(tái)下,盡管攻擊技術(shù)與針對(duì)不同平臺(tái)(比如Linux和Windows)的攻擊技術(shù)有所差異,但其根本策略實(shí)際上是相似的。
例如,將前四個(gè)策略(初始訪問(wèn)、執(zhí)行、持久化、提權(quán))中,如果將OS轉(zhuǎn)換為容器對(duì)應(yīng)為:
"對(duì)計(jì)算機(jī)的初始訪問(wèn)"變成"對(duì)可以的初始訪問(wèn)";
"計(jì)算機(jī)上的惡意代碼"轉(zhuǎn)換為"對(duì)容器的惡意活動(dòng)" ;
"保持對(duì)計(jì)算機(jī)的訪問(wèn)權(quán)限"變?yōu)?quot;保持對(duì)集群訪問(wèn)的權(quán)限";
"在計(jì)算機(jī)上獲得更高的特權(quán)"轉(zhuǎn)化為"在集群獲得中獲得更高的特權(quán)"。
基于此,改造原始工具矩陣為容器云(K8S)版本ATT&CK的威脅攻擊矩陣,其中包括與容器編排安全相關(guān)的主要技術(shù)。
如上圖,矩陣包含上面列出的9種策略。其中個(gè)策略又包含多項(xiàng)技術(shù),攻擊者可以使用這些技術(shù)來(lái)實(shí)現(xiàn)不同的目標(biāo)。下面我們對(duì)具體策略具體展開(kāi)介紹。
1. 訪問(wèn)入口
訪問(wèn)入口策略包括獲得的對(duì)資源訪問(wèn)權(quán)限的技術(shù)。在容器云虛擬化化環(huán)境中,這些技術(shù)可以對(duì)我們的訪問(wèn)重定向。可以對(duì)訪問(wèn)通過(guò)URL串行鏈接,也可以通過(guò)訪問(wèn)部署的惡意或被篡改的資源來(lái)實(shí)現(xiàn)。
(1) 使用云憑證
如果將K8S集群部署在公共云中(例如亞馬遜AWS的EKS,谷歌GCP的GKE或微軟Azure的AKS),則云憑據(jù)(密碼,證書(shū),token)泄露可能導(dǎo)致集群被接管。有權(quán)訪問(wèn)云帳戶憑據(jù)的攻擊者可以訪問(wèn)任意操縱整個(gè)集群。
(2) 注冊(cè)表中惡意鏡像
在群集中運(yùn)行惡意的鏡像可能會(huì)損壞群集。可訪問(wèn)私有注冊(cè)表的攻擊者可以在注冊(cè)表中隨意植入自己的非法代碼或者木馬等供用戶拉取使用。此外,用戶拉取來(lái)自公共注冊(cè)表(例如Docker Hub)中未經(jīng)驗(yàn)證的鏡像,這些鏡像可能是惡意鏡像。
基于無(wú)限信任的基礎(chǔ)鏡像建設(shè)鏡像也會(huì)導(dǎo)致類(lèi)似的結(jié)果。
(3) Kubeconfig配置
kubconfigl也使用kubeconfig文件,其中包含有關(guān)Kubernetes集群的詳細(xì)信息,包括它們的分區(qū)和憑據(jù)。如果群集托管為云服務(wù)(例如AKS或GKE),則該文件通過(guò)云命令下載到客戶端。如果攻擊者通過(guò)竊取的客戶端配置文件,則可以使用該文件訪問(wèn)副本。
(4) 有漏洞的應(yīng)用程序
在集群中運(yùn)行有公開(kāi)漏洞的應(yīng)用程序可引起集群的訪問(wèn)權(quán)限。可能會(huì)觸發(fā)遠(yuǎn)程代碼執(zhí)行突破(RCE)攻擊容器。如果服務(wù)帳戶安裝在容器中(K8S的默認(rèn)行為),則攻擊者可以竊取服務(wù)帳戶并對(duì)API服務(wù)器發(fā)送請(qǐng)求。
(5) 暴露的儀表板
Kubernetes儀表板是基于Web的用戶界面,可用于監(jiān)視和管理K8S集群。默認(rèn)情況儀表板只能通過(guò)內(nèi)網(wǎng)訪問(wèn)。如果圖省事將儀表板暴露在外部,則可以允許進(jìn)行身份驗(yàn)證和部署遠(yuǎn)程管理。
2. 執(zhí)行攻擊
執(zhí)行攻擊策略包括攻擊者用來(lái)在最大化中運(yùn)行其代碼的技術(shù)。
(1) 容器執(zhí)行
擁有權(quán)限的攻擊者可以使用exec命令(" kubectl exec")在群集中的容器中運(yùn)行惡意命令。通過(guò)這種方法,攻擊者可以使用合法鏡像(例如Ubuntu OS鏡像)作為后門(mén)容器,并使用" kubectl exec"遠(yuǎn)程運(yùn)行其惡意代碼。
(2) 新建容器
攻擊者可能?chē)L試通過(guò)新建容器在集群中運(yùn)行其代碼。有權(quán)在群集中部署Pod或控制器的攻擊者(例如DaemonSetReplicaSetDeployment)則可以創(chuàng)建用于代碼執(zhí)行的新容器。
(3) 應(yīng)用程序利用
部署在群集中并且易受到遠(yuǎn)程代碼執(zhí)行漏洞或最終允許執(zhí)行代碼的漏洞的應(yīng)用程序使攻擊者能夠在群集中運(yùn)行代碼。如果將服務(wù)帳戶安裝到容器(K8S中的默認(rèn)行為),則攻擊者將能夠使用此服務(wù)帳戶憑據(jù)對(duì)API服務(wù)器發(fā)送請(qǐng)求。
(4) 在容器內(nèi)運(yùn)行的SSH
攻擊者可能會(huì)使用在容器內(nèi)運(yùn)行的SSH服務(wù)。如果攻擊者通過(guò)暴力破解或其他方法(例如網(wǎng)絡(luò)釣魚(yú))獲得了到容器的有效憑據(jù),則可以通過(guò)SSH遠(yuǎn)程訪問(wèn)該容器。
3. 持久化
持久化策略由攻擊者用來(lái)在失去最初訪問(wèn)點(diǎn)的情況下保持對(duì)群集的訪問(wèn)的技術(shù)。
(1) 后門(mén)容器
攻擊者在集群的容器中運(yùn)行惡意代碼。通過(guò)使用諸如DaemonSet或Deployments之類(lèi)的K8S控制器,攻擊者可以確保在集群中的一個(gè)或者多個(gè)節(jié)點(diǎn)中運(yùn)行容器。
(2) 可寫(xiě)的hostPath掛載
hostPath卷將目錄或文件從主機(jī)裝載到容器。有權(quán)在群集中創(chuàng)建新容器的攻擊者可以創(chuàng)建一個(gè)具有可寫(xiě)hostPath卷的容器,并在基礎(chǔ)主機(jī)上獲得持久性。例如,可以通過(guò)在主機(jī)上創(chuàng)建cron作業(yè)來(lái)實(shí)現(xiàn)。
(3) K8S CronJob
Kubernetes Job可以用于運(yùn)行為批處理作業(yè)執(zhí)行有限任務(wù)的容器。Kubernetes Job是一個(gè)控制器,它創(chuàng)建一個(gè)或多個(gè)Pod,并確保指定數(shù)量的Pod終端。Kubernetes CronJob用于計(jì)劃作業(yè)。攻擊者可能使用Kubernetes CronJob來(lái)調(diào)度集群容器執(zhí)行惡意代碼。
4. 權(quán)限提升
權(quán)限提升策略由攻擊者用來(lái)在環(huán)境中獲取比其當(dāng)前擁有的更高特權(quán)的技術(shù)組成。在容器化環(huán)境中,權(quán)限提升技術(shù)包括從容器訪問(wèn)節(jié)點(diǎn),在集群中獲得更高的特權(quán),甚至獲得對(duì)云資源的訪問(wèn)。
(1) 特權(quán)容器
特權(quán)容器是具有主機(jī)功能的容器,它可以消除常規(guī)容器的所有限制。特權(quán)容器可以執(zhí)行幾乎可以直接在主機(jī)上執(zhí)行的所有操作。獲得對(duì)特權(quán)容器的訪問(wèn)權(quán)或有權(quán)創(chuàng)建新的特權(quán)容器的攻擊者(例如,通過(guò)使用竊取的pod服務(wù)帳戶),攻擊者可以訪問(wèn)主機(jī)的資源。
(2) Cluster-admin 綁定
基于角色的訪問(wèn)控制(RBAC)是Kubernetes中的關(guān)鍵安全功能。RBAC可以限制集群中各種身份的允許操作。Cluster-admin是Kubernetes中的內(nèi)置高特權(quán)角色,有權(quán)在群集中創(chuàng)建綁定和群集綁定的攻擊者可以創(chuàng)建到群集管理員ClusterRole或其他高特權(quán)角色的綁定。
(3) hostPath掛載
攻擊者可以使用hostPath掛載來(lái)訪問(wèn)基礎(chǔ)主機(jī),從而從容器破壞主機(jī)。
(4) 訪問(wèn)云資源
如果將Kubernetes集群部署在云中,則在某些情況下,攻擊者可以利用對(duì)單個(gè)容器的訪問(wèn)來(lái)訪問(wèn)集群外的其他云資源。例如,在AKS中,每個(gè)節(jié)點(diǎn)都包含服務(wù)principal憑證,該憑證存儲(chǔ)在/etc/kubernetes/azure.json中。AKS使用該服務(wù)principal來(lái)創(chuàng)建和管理群集操作所需的Azure資源。
默認(rèn)情況下,服務(wù)principal在群集的資源組中具有貢獻(xiàn)者權(quán)限。有權(quán)訪問(wèn)此服務(wù)principal文件的攻擊者(例如,通過(guò)hostPath掛載)可以使用其憑據(jù)來(lái)訪問(wèn)或修改云資源。
5. 防御繞過(guò)
防御繞過(guò)策略由攻擊者用來(lái)避免檢測(cè)并隱藏其活動(dòng)的技術(shù)組成。
(1) 清除容器日志
攻擊者可能會(huì)攻陷容器上的應(yīng)用程序或系統(tǒng)日志,以防止檢測(cè)到其活動(dòng)。
(2) 刪除Kubernetes事件
Kubernetes事件是一個(gè)Kubernetes對(duì)象,用于記錄狀態(tài)更改和集群中資源的故障。示例事件是在節(jié)點(diǎn)上創(chuàng)建容器,鏡像拉取或Pod調(diào)度。
Kubernetes事件對(duì)于識(shí)別集群中發(fā)生的變化非常有用。因此,攻擊者可能希望刪除這些事件(例如,通過(guò)使用" kubectl delete events - all"),以防止其在群集中的活動(dòng)被檢測(cè)到。
(3) Pod/容器名混淆
由諸如Deploymen或DaemonSet之類(lèi)的控制器創(chuàng)建的Pod在其名稱(chēng)中具有隨機(jī)后綴。攻擊者可以利用此事實(shí),并為后門(mén)容器命名,因?yàn)樗鼈兪怯涩F(xiàn)有控制器創(chuàng)建的。例如,攻擊者可能創(chuàng)建一個(gè)名為coredns-{隨機(jī)字串后綴}的惡意容器,該容器看上去與CoreDNS部署有關(guān)。
同樣,攻擊者可以將其容器部署在管理容器所在的kube系統(tǒng)名稱(chēng)空間。
(4) 從代理服務(wù)器連接
攻擊者可能使用代理服務(wù)器來(lái)隱藏其原始IP。具體來(lái)說(shuō),攻擊者經(jīng)常使用匿名網(wǎng)絡(luò)(例如TOR)進(jìn)行活動(dòng)。這可用于與應(yīng)用程序本身或與API服務(wù)器進(jìn)行通信。
6. 訪問(wèn)憑據(jù)
訪問(wèn)憑據(jù)策略由攻擊者用來(lái)竊取憑據(jù)的技術(shù)組成。在容器化環(huán)境中,這些技術(shù)包括正在運(yùn)行的應(yīng)用程序的憑據(jù),身份,群集中存儲(chǔ)的密碼或云憑據(jù)。
(1) 列出Kubernetes機(jī)密
Kubernetes機(jī)密是一個(gè)對(duì)象,它使用戶可以存儲(chǔ)和管理敏感信息,例如集群中的密碼和連接字符串。可以通過(guò)pod配置中的引用來(lái)使用機(jī)密。有權(quán)從API服務(wù)器搜索機(jī)密的攻擊者(例如,通過(guò)使用pod服務(wù)帳戶)可以訪問(wèn)敏感信息,其中可能包括各種服務(wù)的憑據(jù)。
(2) 掛載服務(wù)principal
將群集部署在云中后,在某些情況下,攻擊者可以利用對(duì)群集中容器的訪問(wèn)來(lái)獲取云憑據(jù)。例如,在AKS中,每個(gè)節(jié)點(diǎn)都包含服務(wù)principal憑據(jù)。
(3) 訪問(wèn)容器服務(wù)帳戶
服務(wù)帳戶(SA)代表K8S中的應(yīng)用程序身份。默認(rèn)情況下,將SA安裝到集群中每個(gè)已創(chuàng)建的Pod。使用SA,容器中的容器可以將請(qǐng)求發(fā)送到Kubernetes API服務(wù)器??梢栽L問(wèn)Pod的攻擊者可以訪問(wèn)SA令牌(/var/run/secrets/kubernetes.io/serviceaccount/token中),并根據(jù)SA權(quán)限在集群中執(zhí)行操作。如果未啟用RBAC,則SA在群集中具有無(wú)限權(quán)限。如果啟用了RBAC,則其權(quán)限由與其關(guān)聯(lián)的RoleBindingsClusterRoleBindings確定。
(4) 配置文件中的應(yīng)用程序憑據(jù)
開(kāi)發(fā)人員將機(jī)密存儲(chǔ)在Kubernetes配置文件中,例如pod配置中的環(huán)境變量。此類(lèi)行為在Azure安全中心監(jiān)視的群集中很常見(jiàn)。有權(quán)通過(guò)查詢API服務(wù)器或訪問(wèn)開(kāi)發(fā)人員終端上的那些機(jī)密文件的攻擊者可以竊取并使用存儲(chǔ)的機(jī)密。
7. 發(fā)現(xiàn)
發(fā)現(xiàn)策略由攻擊者用來(lái)探測(cè)可以訪問(wèn)的環(huán)境的技術(shù)組成。這些技術(shù)有助于攻擊者進(jìn)行橫向移動(dòng)并獲得更多資源。
(1) 訪問(wèn)Kubernetes API服務(wù)器
Kubernetes API服務(wù)器是群集的網(wǎng)關(guān)。通過(guò)向RESTful API發(fā)送各種請(qǐng)求來(lái)執(zhí)行集群中的操作。API服務(wù)器可以檢索群集的狀態(tài),其中包括部署在群集上的所有組件。攻擊者可能會(huì)發(fā)送API請(qǐng)求來(lái)探測(cè)集群,并獲取有關(guān)集群中的容器,機(jī)密和其他資源的信息。
(2) 訪問(wèn)Kubelet API
Kubelet是安裝在每個(gè)節(jié)點(diǎn)上的Kubernetes代理。Kubelet負(fù)責(zé)正確執(zhí)行分配給該節(jié)點(diǎn)的Pod。Kubelet公開(kāi)了不需要身份驗(yàn)證的只讀API服務(wù)(TCP端口10255)。具有網(wǎng)絡(luò)訪問(wèn)主機(jī)權(quán)限的攻擊者(例如,通過(guò)攻陷容器上運(yùn)行代碼)可以請(qǐng)求訪問(wèn)Kubelet API。
通過(guò)訪問(wèn)[NODE IP]:10255/pods /檢索節(jié)點(diǎn)上正在運(yùn)行的Pod。
通過(guò)訪問(wèn)[NODE IP]:10255/spec/檢索有關(guān)節(jié)點(diǎn)本身的信息,例如CPU和內(nèi)存消耗。
(3) 內(nèi)網(wǎng)映射
攻擊者可能?chē)L試對(duì)群集網(wǎng)絡(luò)探測(cè)以獲取有關(guān)正在運(yùn)行的應(yīng)用程序的信息,包括掃描已知漏洞。默認(rèn)情況下,在Kubernetes中對(duì)pod通訊沒(méi)有任何限制。因此,獲得單個(gè)容器訪問(wèn)權(quán)限的攻擊者可能會(huì)使用它來(lái)探測(cè)網(wǎng)絡(luò)。
(4) 訪問(wèn)Kubernetes儀表板
Kubernetes儀表板是基于Web的UI,用于監(jiān)視和管理Kubernetes集群。儀表板允許用戶使用其服務(wù)帳戶(kubernetes-dashboard)在群集中執(zhí)行操作,該權(quán)限由該服務(wù)帳戶的綁定或群集綁定確定。獲得對(duì)群集中容器的訪問(wèn)權(quán)限的攻擊者可以使用其對(duì)儀表板容器的網(wǎng)絡(luò)訪問(wèn)權(quán)限。因此,攻擊者可能會(huì)使用儀表板的身份來(lái)檢索有關(guān)群集中各種資源的信息。
(5) 實(shí)例元數(shù)據(jù)API
云提供者提供了實(shí)例元數(shù)據(jù)服務(wù),用于檢索有關(guān)虛擬機(jī)的信息,例如網(wǎng)絡(luò)配置,磁盤(pán)和SSH公鑰。VPS通過(guò)不可路由的IP地址訪問(wèn)此服務(wù),該IP地址只能從VPS內(nèi)部訪問(wèn)。獲得容器訪問(wèn)權(quán)限的攻擊者可以查詢?cè)獢?shù)據(jù)API服務(wù),以獲取有關(guān)基礎(chǔ)節(jié)點(diǎn)的信息。例如,在AWS中,以下請(qǐng)求將檢索實(shí)例的所有元數(shù)據(jù)信息:
IP/latest/meta-data/
8. 橫向擴(kuò)展
橫向擴(kuò)展移動(dòng)策略包括攻擊者用來(lái)目標(biāo)環(huán)境中擴(kuò)展的技術(shù)。在容器化環(huán)境中,這包括從對(duì)一個(gè)容器的給定訪問(wèn)中獲得對(duì)群集中各種資源的訪問(wèn)權(quán),從容器中對(duì)基礎(chǔ)節(jié)點(diǎn)的訪問(wèn)權(quán)或?qū)υ骗h(huán)境的訪問(wèn)權(quán)。
(1) 訪問(wèn)云資源
攻擊者可能會(huì)從攻陷的容器擴(kuò)展到云環(huán)境。
(2) 容器服務(wù)賬戶
獲得對(duì)群集中容器的訪問(wèn)權(quán)限的攻擊者可以使用已安裝的服務(wù)帳戶令牌請(qǐng)求訪問(wèn)API服務(wù)器,并獲得對(duì)群集中其他資源的訪問(wèn)權(quán)限。
(3) 集群內(nèi)部網(wǎng)絡(luò)
Kubernetes的網(wǎng)絡(luò)行為允許群集中Pod之間的流量作為默認(rèn)行為。獲得單個(gè)容器訪問(wèn)權(quán)限的攻擊者可能會(huì)將其用于群集中另一個(gè)容器的網(wǎng)絡(luò)可達(dá)性。
(4) 配置文件中的應(yīng)用程序憑據(jù)
開(kāi)發(fā)人員將機(jī)密存儲(chǔ)在Kubernetes配置文件中,例如,作為pod配置中的環(huán)境變量。使用這些憑據(jù),攻擊者可能會(huì)訪問(wèn)群集內(nèi)部和外部的其他資源。
(5) 可寫(xiě)卷安裝到主機(jī)上
攻擊者可能試圖從受感染的容器中獲取對(duì)基礎(chǔ)主機(jī)的訪問(wèn)。
(7) 訪問(wèn)Kubernetes儀表板
有權(quán)訪問(wèn)Kubernetes儀表板的攻擊者可以管理儀表板資源,還可以使用儀表板的內(nèi)置"exec"功能在集群中的各個(gè)容器上運(yùn)行其代碼。
(8) 訪問(wèn)Tiller端點(diǎn)
Helm是由CNCF維護(hù)的K8S集群中受歡迎的軟件包管理器。Tiller是Helm V2之前的的服務(wù)器端組件。
Tiller公開(kāi)群集中的內(nèi)部gRPC端點(diǎn),偵聽(tīng)端口44134。默認(rèn)情況下該端點(diǎn)不需要身份驗(yàn)證。攻擊者可以使用Tiller的服務(wù)帳戶(通常具有較高的特權(quán)),在Tiller的服務(wù)可訪問(wèn)的任何容器上運(yùn)行代碼,并在群集中執(zhí)行操作。
9. 影響力
影響力策略包括攻擊者用來(lái)破壞,濫用或破壞環(huán)境正常行為的技術(shù)。
(1) 數(shù)據(jù)刪除和加密
攻擊者可能試圖破壞群集中的數(shù)據(jù)和資源。這包括刪除部署,配置,存儲(chǔ)和計(jì)算資源?;蛘邔⑺匈Y源進(jìn)行加密,然后勒索。
(2) 資源劫持
攻擊者可能會(huì)利用已攻陷的資源來(lái)運(yùn)行任務(wù)。一種常見(jiàn)的濫用方式是用來(lái)挖礦。有權(quán)訪問(wèn)群集中的容器或有權(quán)創(chuàng)建新容器的攻擊者可以將它們用于此類(lèi)活動(dòng)。
(3) 拒絕服務(wù)
攻擊者可能會(huì)嘗試執(zhí)行拒絕服務(wù)攻擊,這會(huì)使合法用戶無(wú)法使用該服務(wù)。在容器集群中,這包括嘗試阻止容器本身,基礎(chǔ)節(jié)點(diǎn)或API服務(wù)器的可用性。
10. 總結(jié)
了解容器化環(huán)境的攻擊面是為這些環(huán)境構(gòu)建安全解決方案的第一步。上面介紹的矩陣可以幫助我們識(shí)別針對(duì)K8S的不同威脅的防御能力方面差距,補(bǔ)全安全威脅短板和瓶頸,提高集群的安全性。