當前位置:
首頁 > 新聞 > TeamTNT黑客組織以Kubernetes為目標,近50000個IP被攻擊

TeamTNT黑客組織以Kubernetes為目標,近50000個IP被攻擊

Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。在Kubernetes中,用戶可以創建多個容器,每個容器裡面運行一個應用實例,然後通過內置的負載均衡策略,實現對這一組應用實例的管理、發現、訪問,而這些細節都不需要運維人員去進行複雜的手工配置和處理。不幸的是,就像任何被廣泛使用的應用程序一樣,由於它們經常被錯誤地配置,對於那些主要運行在雲環境中、可以訪問幾乎無限資源的攻擊者,就成為誘人的目標。本文將討論TeamTNT如何在野外掃描和攻擊Kubernetes集群。

研究人員已經發現並確認將近50000個IP被TeamTNT在多個集群中實施的攻擊所攻擊。在3月至5月之間的事件發生期間,反覆使用了多個IP。大多數被攻擊的節點來自中國和美國,從ISP(互聯網服務提供商)列表中可以看出,中國和美國的提供商是最熱門的,包括一些csp(雲服務提供商)。應該指出的是,這些數字反映出,美國和中國運營的集群可能比許多其他國家要多得多。

每個國家的伺服器被攻擊的百分比,中國和美國佔了大部分

通過分析屬於幾個TeamTNT伺服器的數據,研究人員發現了該小組用於該活動的工具和技術。

Kubernetes集群是如何被攻擊的

搭建環境

TeamTNT的首要任務是禁用目標主機上的bash歷史記錄,並為其命令和控制(C&C)伺服器定義環境變數,例如稍後安裝加密礦機的腳本和XMRig Monero礦機的二進位文件。然後使用$RANDOM在/tmp中創建三次文件夾,生成一個隨機數序列,例如,132963764049、64049520243和55772468520243。使用whoami和uname -m收集用戶和系統架構信息,這些信息存儲在環境變數中以供以後使用。

該腳本還安裝了可從GitHub獲得的兩個免費的開放源代碼工具,即使用C語言開發的masscan網路掃描工具,以及使用Go語言開發的具有標語的Zgrab(已棄用)。新版本的Zgrab2也是開源的,可在GitHub上使用,但未隨腳本一起安裝。

下載並安裝IRCbot

該腳本具有一個大型的base64編碼代碼塊,用於安裝其IRC bot。研究人員解碼、分析並發現它是用C語言編寫的,並且以kube.c的名稱存儲在/tmp文件夾中,以避免被懷疑。bot代碼是用Gnu編譯器集合 (GCC)編譯的,並在編譯完成後刪除。然後將生成的二進位文件移動到/root文件夾,並重命名為kube,如以下代碼所示:

IRCbot也是用C語言編寫的,它基於另一個著名的IRCbotKaiten。這些bot的類似代碼也可以在GitHub上找到。

安裝名為kube.c的IRCbot的代碼

託管和加密劫持KubernetesPod

在腳本的最後一部分,研究人員可以看到一個函數kube_pwn()被聲明,就像下圖所示。從代碼中可以看到,kube_pwn函數使用Masscan檢查埠10250打開的所有主機。

顯示了kube_pwn函數如何使用Masscan在埠10250打開的情況下檢查主機的代碼

Kubelets

熟悉Kubernetes的人都知道這個埠屬於kubelet API,默認情況下,該埠在集群的所有節點(包括控制平面和工作節點)上都是打開的。這是你應該在可操作的K8s集群上進行的最基本的安全加固更改之一。Kubelet是在每個節點上運行的代理,它確保所有容器都在一個Pod中運行。它也是負責節點上任何配置更改的代理。儘管它不在主Kubernetes架構圖上,但是如果用戶想在控制平面節點上運行其他組件,那麼即使控制平面節點也有一個kubelet和一個kube-proxy代理在運行。但是,在控制平面上運行應用程序pod並不是最佳實踐,因為它為攻擊者提供了擁有集群的機會。

kubelet安全設置有三個關鍵因素:

1.啟用Kubelet身份驗證,根據Kubernetes的官方介紹,對kubelet的API終端的請求(未被其他身份驗證方法阻止)默認情況下被視為匿名請求。請確保使用--anonymous-auth = false標誌啟動kubelet並禁用匿名訪問。要了解更多信息,請查看有關Kubelet身份驗證的Kubernetes官方建議https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/#kubelet-authentication。

2.限制kubelet許可權,以防止攻擊者在攻擊容器後讀取kubelet憑據來執行惡意操作。

3.如果發生攻擊,旋轉kubelet證書,證書的有效期很短,潛在的影響減少。

根據通過kubeadm安裝Kubernetes的文檔,下面的埠是集群正常工作時需要打開的埠。kubelet API埠(10250)不應該暴露在互聯網上,因為它類似於讓你的Docker Daemon API暴露。然而,TeamTNT在進入特定的攻擊環境後會危及kubelet,所以他們會在內部運行掃描。

安裝kubeadm所需的埠

kubelet API的文檔不完善;但是,研究人員直接分析了Kubernetes代碼以了解發生了什麼,這將在以下各節中進行解釋。首先,研究人員查看了/ kubelet / server軟體包中的server.go文件。如圖5所示,kube_pwn()函數做的第一件事是通過/runningpods終端從Kubelet API獲得一些信息,過濾名稱空間、pod名稱和容器名稱。

Kubernetes kubelet的API源代碼分析

加密劫持(部署到Pod中)

正如研究人員從上面的kubelet server.go代碼中看到的那樣,API終端/ runningpods完全按照終端所說的進行操作,它列出了正在運行的Pod。首先,kube_pwn()函數以JSON格式列出了節點內當前運行的所有pod。然後,對於每個節點上運行的每個容器,它利用kubelet API上的/run終端運行以下命令:

1.更新容器的包索引;

2.安裝以下包:bash,wget和curl;

3.從TeamTNT CC伺服器下載一個名為setup_xmr.sh的shell腳本,並將其保存在tmp文件夾中;

4.執行腳本開始挖掘門羅幣加密貨幣;

來自GitHub上的Kubernetes中央存儲庫的kubelet API伺服器代碼的一部分

為了完成這一任務,它們運行與研究人員分析的一系列內部IP範圍相同的kube_pwn()函數,這些範圍尋找新的要攻擊的目標,其行為與蠕蟲類似。

如何保護Kube API伺服器

確保它們的Kube API伺服器不暴露是很重要的。一種簡單的檢查方法是嘗試從外部IP訪問API伺服器。這個curl請求應該用來檢查API是面向公共的還是其他的「curl -k https://API-SERVER-IP:PORT/api.」。

如果有來自這個curl請求的響應,類似於圖9所示的響應,那麼這意味著API是公開可用的:

執行curl請求以檢查API是否可公開訪問後的響應示例

總結

這次活動值得注意,因為這是研究人員第一次分析TeamTNT組織發布的工具。此外,加密劫持和證書竊取的繼續使用表明,在不久的將來,這些仍將是攻擊者使用的主要技術手段。

大量的目標表明,TeamTNT仍在擴大其攻擊範圍(尤其是在雲環境中),也許還有基礎架構,因為該組織可以從他們的活動中獲得更多的潛在受害者,從而獲得更大的利潤。該組織的活動增加了Kubernetes用戶面臨的潛在威脅的數量。

參考及來源:https://www.trendmicro.com/en_us/research/21/e/teamtnt-targets-kubernetes--nearly-50-000-ips-compromised.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

2021第一季度APT攻擊趨勢分析(上)
新冠病毒發生一年後,世界網路安全的格局發生了哪些變化?