溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kubernetes中kube-proxy漏洞CVE-2020-8558的示例分析

發(fā)布時(shí)間:2021-12-28 11:46:02 來源:億速云 閱讀:285 作者:小新 欄目:安全技術(shù)

這篇文章主要介紹Kubernetes中kube-proxy漏洞CVE-2020-8558的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

前言

研究人員在Kubernetes節(jié)點(diǎn)的網(wǎng)絡(luò)組件kube-proxy中發(fā)現(xiàn)了一個(gè)嚴(yán)重的安全漏洞(CVE-2020-8558),而這個(gè)安全漏洞會(huì)將Kubernetes節(jié)點(diǎn)的內(nèi)部服務(wù)暴露在外。在某些情況下,這個(gè)漏洞還有可能將api-server暴露在外,這將允許未經(jīng)認(rèn)證的攻擊者獲取Kubernetes集群的完整控制權(quán)限。在這種情況下,攻擊者將能夠竊取目標(biāo)集群中存儲的敏感信息,部署加密挖礦軟件,或移除線上服務(wù)等等。

該漏洞會(huì)暴露目標(biāo)Kubernetes節(jié)點(diǎn)的“l(fā)ocalhost服務(wù)”,這個(gè)服務(wù)原本是一個(gè)僅可以從節(jié)點(diǎn)內(nèi)部或節(jié)點(diǎn)本身訪問的服務(wù),但該漏洞現(xiàn)在會(huì)將其暴露給本地網(wǎng)絡(luò)或運(yùn)行在該節(jié)點(diǎn)上的Pods。本地主機(jī)所綁定的服務(wù)原本只能允許受信任的本地進(jìn)程與之交互,因此通常不需要身份驗(yàn)證就可以請求服務(wù)了。如果你的節(jié)點(diǎn)在運(yùn)行“l(fā)ocalhost服務(wù)”時(shí)沒有要求強(qiáng)制進(jìn)行身份驗(yàn)證的話,你也將會(huì)受到該漏洞的影響。

簡而言之,漏洞CVE-2020-8558將允許攻擊者訪問目標(biāo)Kubernetes集群中的insecure-port,并獲取到目標(biāo)集群的完整控制權(quán)。

kube-proxy

kube-proxy是一個(gè)運(yùn)行在Kubernetes集群中每一個(gè)節(jié)點(diǎn)上的網(wǎng)絡(luò)代理,它的任務(wù)就是管理Pods和服務(wù)之間的連接。Kubernetes服務(wù)會(huì)暴露一個(gè)clusterIP,并且可能由多個(gè)后端Pods組成以實(shí)現(xiàn)均衡負(fù)載。一個(gè)服務(wù)一般由三個(gè)Pods組成,每一個(gè)都擁有其自己的IP地址,但是它們只會(huì)暴露一個(gè)clusterIP,假設(shè)是“10.0.0.1”。Podas在訪問目標(biāo)服務(wù)時(shí),會(huì)將數(shù)據(jù)包發(fā)送給它的clusterIP,也就是“10.0.0.1”,但隨后數(shù)據(jù)包必須重定向給其中一個(gè)Pods。

在這里,kube-proxy的作用就是為每一個(gè)節(jié)點(diǎn)提供路由表服務(wù),這樣才能保證請求能夠正確路由至其中一個(gè)Pods。

罪魁禍?zhǔn)?- route_localnet

kube-proxy可以通過sysctl文件來配置多個(gè)網(wǎng)絡(luò)參數(shù),其中一個(gè)就是net.ipv4.conf.all.route_localnet,而它就是導(dǎo)致這個(gè)漏洞出現(xiàn)的罪魁禍?zhǔn)住8鶕?jù)sysctl文檔的描述:“route_localnet:路由時(shí)不需要將回環(huán)地址設(shè)定為目的地址,這樣就可以使用127/8作為本地路由地址,默認(rèn)為FALSE?!?/p>

針對IPv4地址,回環(huán)地址由127.0.0.0/8塊(127.0.0.1-127.255.255.255)組成,一般我們使用的是127.0.0.1,并將“l(fā)ocalhost”映射到該地址,針對本地服務(wù)的數(shù)據(jù)包將通過回環(huán)網(wǎng)絡(luò)接口發(fā)送至IP 127.0.0.1。

設(shè)置route_localnet時(shí),需要指示內(nèi)核不要將地址127.0.0.1/8 IP定義為“martian”,那么這里的“martian”是什么意思呢?比如說,有些數(shù)據(jù)包在抵達(dá)一個(gè)網(wǎng)絡(luò)接口時(shí),可以聲明它們的源IP地址或目的IP地址,假設(shè)抵達(dá)的數(shù)據(jù)包源IP地址為255.255.255.255,那么這個(gè)數(shù)據(jù)包本應(yīng)該不存在,因?yàn)?55.255.255.255這個(gè)地址時(shí)一個(gè)用于標(biāo)識廣播地址的保留地址。此時(shí),你的內(nèi)核就無法確定了,只能判定這個(gè)數(shù)據(jù)包來自未知地方,應(yīng)該被丟棄。

“Martian”數(shù)據(jù)包往往意味著有人在試圖通過網(wǎng)絡(luò)攻擊你,在上面的例子中,攻擊者可能想要你的服務(wù)去響應(yīng)IP 255.255.255.255,并讓路由來廣播響應(yīng)信息。但是在一些復(fù)雜的路由場景中,你可能想要內(nèi)核去允許某些特定的“martian”包通過,這就是route_localnet的作用了。它可以讓內(nèi)核不要將地址127.0.0.1/8 IP定義為“martian”包。kube-proxy能夠讓route_localnet支持各種路由包,那么在沒有部署適當(dāng)安全機(jī)制的情況下,攻擊者將能夠通過本地網(wǎng)絡(luò)并利用route_localnet來執(zhí)行各種攻擊了。

Localhost-only服務(wù)

Linux允許進(jìn)程去監(jiān)聽一個(gè)指定的IP地址,這樣就可以讓它們跟地址對應(yīng)的網(wǎng)絡(luò)接口進(jìn)行綁定了。內(nèi)部服務(wù)通常會(huì)使用這種功能來監(jiān)聽127.0.0.1,一般來說,這樣可以確保只有本地進(jìn)程能夠訪問該服務(wù)。但是由于route_localnet的存在,外部數(shù)據(jù)包將同樣能夠抵達(dá)127.0.0.0/8。

訪問內(nèi)部服務(wù)

在這種情況下,如果攻擊者嘗試訪問目標(biāo)設(shè)備的內(nèi)部服務(wù),則需要構(gòu)建一個(gè)目的IP為127.0.0.1,并且目的MAC地址為目標(biāo)設(shè)備MAC地址的惡意數(shù)據(jù)包。如果目的IP無效,惡意數(shù)據(jù)包只能依賴于第二層(基于MAC)路由來抵達(dá)目標(biāo)設(shè)備了。因此,即使目標(biāo)用戶啟用了route_localnet,那么只有處于本地網(wǎng)絡(luò)中的攻擊者才能夠訪問目標(biāo)設(shè)備的localhost服務(wù)。

當(dāng)目標(biāo)設(shè)備接收到惡意數(shù)據(jù)包之后,route_localnet將允許這個(gè)包通過,因?yàn)檫@個(gè)包的目的IP為127.0.0.1,那么它將被允許訪問localhost服務(wù)。下表中顯示的是惡意包的結(jié)構(gòu):Kubernetes中kube-proxy漏洞CVE-2020-8558的示例分析

由于kube-proxy的存在,集群中的每一個(gè)節(jié)點(diǎn)都啟用了route_localnet。因此,節(jié)點(diǎn)本地網(wǎng)絡(luò)中的每一臺主機(jī)都將能夠訪問節(jié)點(diǎn)的內(nèi)部服務(wù)。如果你的節(jié)點(diǎn)在運(yùn)行內(nèi)部服務(wù)時(shí)沒有部署身份認(rèn)證機(jī)制,那你將會(huì)受到該漏洞的影響。值得一提的是,除了節(jié)點(diǎn)內(nèi)部網(wǎng)絡(luò)中的相鄰主機(jī)之外,運(yùn)行在節(jié)點(diǎn)內(nèi)的Pods同樣能夠訪問其內(nèi)部服務(wù)。

漏洞修復(fù)

Unit 42團(tuán)隊(duì)將該漏洞報(bào)告給了Kubernetes安全團(tuán)隊(duì),該團(tuán)隊(duì)表示如果集群啟用了api-server insecure-port,則該漏洞的嚴(yán)重程度為高危,未啟用則為中危。幸運(yùn)的是,該漏洞的影響僅限于大部分托管Kubernetes服務(wù),例如Azure Kubernetes Service(AKS),Amazon的Elastic Kubernetes Service(EKS)和Google Kubernetes Engine(GKE)。

該漏洞影響Kubernetes 1.1.0版本至1.16.10版本,1.17.0版本至1.17.6版本,和1.18.0版本至1.18.3版本。Kubernetes 1.18.4版本,1.17.7版本和1.16.11版本已修復(fù)該漏洞。

以上是“Kubernetes中kube-proxy漏洞CVE-2020-8558的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI