新聞中心
如果你是一名開(kāi)發(fā)人員,平時(shí)可能在本地會(huì)運(yùn)行一些數(shù)據(jù)庫(kù)服務(wù),比如Redis,、Memcached、Elasticsearch之流。相信很多產(chǎn)品都會(huì)依賴這一類的服務(wù)。

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作與策劃設(shè)計(jì),三臺(tái)網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:三臺(tái)等地區(qū)。三臺(tái)做網(wǎng)站價(jià)格咨詢:18980820575
但是你可能不知道,這些本地運(yùn)行的服務(wù)能跟你在外網(wǎng)訪問(wèn)的網(wǎng)站進(jìn)行通信,黑客也許能借此從你本地服務(wù)中竊取數(shù)據(jù)。
攻擊如何生效的
雖然筆者下面要講的并不是新的東西,但攻擊利用方法其實(shí)還是比較新穎的,因?yàn)橐郧昂苌儆腥税堰@些攻擊組合在一起。在這里,我將結(jié)合兩種不同技術(shù)進(jìn)行測(cè)試,即“跨協(xié)議腳本”+“DNS重新綁定”。
跨協(xié)議腳本(cross protocol scripting)
第一種技術(shù)我們稱之為“跨協(xié)議腳本”,有人在2001年曾經(jīng)放出過(guò)這種攻擊的細(xì)節(jié)。簡(jiǎn)單解釋下攻擊原理,那就是Redis、Memcached都存在一個(gè)簡(jiǎn)單的命令行協(xié)議,它會(huì)忽略無(wú)效的命令內(nèi)容。這意味著,你的瀏覽器如果發(fā)送下面的HTTP請(qǐng)求到你本地的redis(localhost:6379),redis就會(huì)執(zhí)行相應(yīng)的SET命令。
- POST / HTTP/1.1
- Host: localhost:6379
- SET abc 123
- QUIT
惡意站點(diǎn)可以通過(guò)下面的form表單,借助你的手給你本地的redis發(fā)送惡意請(qǐng)求:
- SET abc 123
- QUIT
而Elasticsearch協(xié)議則完全是基于HTTP,所以在通信時(shí)沒(méi)有什么特別的技巧和需要注意的地方。
但是我們?cè)趫?zhí)行上面的測(cè)試命令時(shí),實(shí)際上是不能直接收到結(jié)果的。這是因?yàn)闉g覽器的同源策略,會(huì)在你發(fā)送請(qǐng)求給另一個(gè)域時(shí),能進(jìn)行限制讓你無(wú)法取得返回的數(shù)據(jù)。那么,現(xiàn)在我們就需要用到上面講的另外一門技術(shù)了。
DNS重綁定(DNS Rebinding)
簡(jiǎn)單解釋下,DNS重綁定的攻擊原理就是字面的意思,我們采用某種手段重新更新一下DNS A記錄,綁定為別的地址。
為了繞過(guò)同源策略的保護(hù),我們可以使用DNS重綁定技術(shù),這種攻擊需要一臺(tái)跟你相對(duì)TTL值很低的服務(wù)器作為域名站點(diǎn)。一旦你瀏覽器訪問(wèn)了惡意網(wǎng)站,站點(diǎn)上的惡意代碼會(huì)在特定的時(shí)刻,突然將站點(diǎn)DNS記錄更改到另外一個(gè)的IP地址,比如你私有的IP地址(127.0.0.1),該惡意站點(diǎn)就能借此竊取你本地服務(wù)里面的數(shù)據(jù)。當(dāng)然,這前提是在它訪問(wèn)你本地的服務(wù)時(shí),能夠通過(guò)相應(yīng)的認(rèn)證授權(quán)。
POC代碼
我在extractdata.club網(wǎng)站上插入了攻擊的POC代碼,它會(huì)主動(dòng)嘗試連接你本地默認(rèn)端口的Redis, Memcached和Elasticsearch服務(wù)。
大約一分鐘后,這個(gè)網(wǎng)站會(huì)返回類似于下面的頁(yè)面。
這里的POC只會(huì)接收服務(wù)的版本信息,并不會(huì)去漫游你整個(gè)數(shù)據(jù)庫(kù),咱們的POC代碼在這里。
修復(fù)方案
很遺憾其實(shí)沒(méi)有特別好的辦法來(lái)解決這個(gè)問(wèn)題,但是我們可以試著為本地運(yùn)行的服務(wù)設(shè)置密碼。筆者還想出了一個(gè)辦法,那就是對(duì)于Redis和Memcached這兩種服務(wù),只要檢測(cè)到連接是通過(guò)HTTP請(qǐng)求發(fā)送來(lái)的,就可以立即阻止并退出。
對(duì)于瀏覽器方面來(lái)講,廠商可以在瀏覽器里面實(shí)現(xiàn)“DNS阻塞(DNS pinning)”。簡(jiǎn)單來(lái)說(shuō)就是,一旦某個(gè)網(wǎng)站被加載完成,瀏覽器就需要忽略其DNS的變化。
瀏覽器廠商也可以把Redis和Memcached端口加入它們阻塞的端口列表中,現(xiàn)在已經(jīng)在列表中的常見(jiàn)協(xié)議有SMTP和IRC。當(dāng)然,這辦法是治標(biāo)不治本,如果出現(xiàn)了新的服務(wù)還是會(huì)出現(xiàn)漏洞的。
后記
Chromium開(kāi)發(fā)人員正在致力于移除對(duì)HTTP/0.9的支持,這樣瀏覽器就不能從Redisand和Memcached讀取數(shù)據(jù)了。然而,即使這樣是這樣做,黑客仍然可以進(jìn)行遠(yuǎn)程命令執(zhí)行。
對(duì)某些開(kāi)發(fā)者來(lái)講,本地使用的測(cè)試數(shù)據(jù)庫(kù)里可能不會(huì)有太多有價(jià)值的東西。但黑客一旦擁有了讀寫權(quán)限,可能會(huì)對(duì)開(kāi)發(fā)者的電腦進(jìn)行遠(yuǎn)程代碼執(zhí)行操作。比如,黑客可以用惡意的payload覆蓋疑似Ruby marshalled或者Python pickled數(shù)據(jù),這樣開(kāi)發(fā)者的電腦就可能會(huì)淪陷。
結(jié)論
這個(gè)POC證明了計(jì)算機(jī)安全是很難得到絕對(duì)的保證的。有的時(shí)候,軟件單獨(dú)工作的時(shí)候看起來(lái)會(huì)很安全,但它們?cè)诮换r(shí)就可能就會(huì)產(chǎn)生一定的漏洞。
分享標(biāo)題:如何“組合拳”滲透開(kāi)發(fā)者的本地?cái)?shù)據(jù)庫(kù)
文章URL:http://m.fisionsoft.com.cn/article/dpsggic.html


咨詢
建站咨詢
