Redis未授權(quán)訪問(wèn)漏洞復(fù)現(xiàn)區(qū)塊鏈
Redis是一種開(kāi)源的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),可用作數(shù)據(jù)庫(kù),消息代理或緩存。由于它是在在受信任的環(huán)境中訪問(wèn),因此不應(yīng)在Internet上公開(kāi)。但是,一些Redis服務(wù)綁定到公共接口,甚至沒(méi)有密碼身份驗(yàn)證保護(hù)。
漏洞簡(jiǎn)介以及危害:
什么是redis未授權(quán)訪問(wèn)漏洞:
Redis默認(rèn)情況下,會(huì)綁定在0.0.0.0:6379,如果沒(méi)有進(jìn)行采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來(lái)源 ip 訪問(wèn)等,這樣將會(huì)將Redis服務(wù)暴露到公網(wǎng)上,如果在沒(méi)有設(shè)置密碼認(rèn)證(一般為空)的情況下,會(huì)導(dǎo)致任意用戶在可以訪問(wèn)目標(biāo)服務(wù)器的情況下未授權(quán)訪問(wèn)Redis以及讀取Redis的數(shù)據(jù)。攻擊者在未授權(quán)訪問(wèn)Redis的情況下,利用Redis自身的提供的config命令,可以進(jìn)行寫文件操作,攻擊者可以成功將自己的ssh公鑰寫入目標(biāo)服務(wù)器的/root/.ssh文件夾的authotrized_keys文件中,進(jìn)而可以使用對(duì)應(yīng)私鑰直接使用ssh服務(wù)登錄目標(biāo)服務(wù)器。
漏洞的產(chǎn)生條件有以下兩點(diǎn):
漏洞的危害:
漏洞影響:
根據(jù)shadon顯示,2015年有大約56,000個(gè)未受保護(hù)的 Redis服務(wù)器。
根據(jù)ZoomEye顯示,分布的范圍如圖所示:
據(jù)ZoomEye稱,漏洞主機(jī)數(shù)量排名最高的國(guó)家是:中國(guó),美國(guó),德國(guó)……
漏洞利用的簡(jiǎn)化流程:
登錄不受保護(hù)的Redis
將其備份位置更改為.ssh目錄 – 將SSH密鑰寫入新的備份位置
使用SSH密鑰遠(yuǎn)程連接并登錄目標(biāo)服務(wù)器
我們應(yīng)該已經(jīng)熟悉如何使用私鑰 公鑰進(jìn)行SSH自動(dòng)登錄了
漏洞復(fù)現(xiàn)
現(xiàn)在我們來(lái)開(kāi)始實(shí)戰(zhàn),設(shè)置一臺(tái)目標(biāo)機(jī)器。我們需要兩臺(tái)機(jī)器,可以是物理機(jī),虛擬機(jī),也可以是遠(yuǎn)程VPS。
只要攻擊端能夠ping通目標(biāo)就行。
本次示例的環(huán)境配置:
目標(biāo)機(jī)器:Ubuntu上的Redis-3.2.11
攻擊機(jī):kali
配置目標(biāo)機(jī)器
首先,在目標(biāo)機(jī)器上安裝Redis。通過(guò)下面這個(gè)命令來(lái)下載源碼:
解壓和編譯,命令如下:
make之后,我們使用nano來(lái)打開(kāi)redis-3.2.11目錄下的redis.conf配置文件。為了能夠進(jìn)行遠(yuǎn)程訪問(wèn),我們需要注釋掉 bind 127.0.0.1這一行,并禁用protected-mode,如圖所示:
現(xiàn)在使用我們剛才編輯的配置文件啟動(dòng)Redis服務(wù)。注意:redis-server在redis-3.2.11/src目錄下,啟動(dòng)命令如下:
現(xiàn)在,我們已經(jīng)完成了目標(biāo)服務(wù)器的設(shè)置。此外,我們還應(yīng)檢查是否有.ssh文件夾。如果沒(méi)有,我們應(yīng)該創(chuàng)建一個(gè),一會(huì)兒攻擊時(shí)會(huì)用到。
攻擊機(jī)配置
首先,確定我們可以ping通目標(biāo)。然后,我們將生成一個(gè)私鑰和公鑰,以便稍后SSH到目標(biāo)機(jī)器中。運(yùn)行以下命令以生成SSH密鑰并將密碼保留為空:
然后,進(jìn)入.ssh目錄,如果你是root用戶,請(qǐng)輸入/.ssh,不是root用戶,輸入~/.ssh,然后將私鑰復(fù)制到temp.txt中:
有人可能會(huì)奇怪,為什么我們?cè)诠€前后放兩個(gè)空行?如果你不知道的話,我們這里先賣一個(gè)關(guān)子,下面自會(huì)解答。
很好,現(xiàn)在我們已經(jīng)生成了一對(duì)密鑰對(duì),現(xiàn)在我們需要找到一個(gè)方法將公鑰上傳到Redis服務(wù)器中(目標(biāo)機(jī)器)。
我們將使用redis-cli向Redis服務(wù)器發(fā)送命令,并且直接在終端中讀取服務(wù)器的響應(yīng)。
在redis-3.2.11/sct目錄下執(zhí)行以下命令:
這里,我們來(lái)看看命令。我們使用-h參數(shù)來(lái)指定遠(yuǎn)程Redis服務(wù)器IP,這樣redis-cli就可以進(jìn)行連接并發(fā)送命令。-x參數(shù)后的語(yǔ)句意思是,設(shè)置redis中s-key密鑰的值為temp.txt。
這里,我們有了一個(gè)隱藏著ssh秘鑰的密鑰!現(xiàn)在我們?cè)賮?lái)連接到Redis并查看它的配置文件。使用redis-cli再次連接到Redis服務(wù)器,如圖所示:
查看上面的截圖,我們首先使用get s-key命令來(lái)驗(yàn)證s-key密鑰的值,這個(gè)值正是我們想要的 – 前后有兩個(gè)空行的公鑰。我們這里真正要做的就是獲取存儲(chǔ)在.ssh文件夾中的“s-key”(SSH公鑰)的值,這樣我們就可以不用輸入密碼而遠(yuǎn)程SSH登錄到目標(biāo)機(jī)器了。
我們需要執(zhí)行如下操作:
備注:SSH中的authorized_keys文件指定可用于登錄的用戶帳戶,配置文件已經(jīng)修改。
攻擊時(shí)刻
在攻擊機(jī)上,使用下列命令ssh連接到目標(biāo)機(jī)器上:
上圖可以看到,我們使用SSH密鑰已經(jīng)成功自動(dòng)登錄到服務(wù)器上!到此,我們已經(jīng)完成了漏洞復(fù)現(xiàn)。
最后,Redis的備份文件,如圖:
注意不可讀的字符?在關(guān)鍵內(nèi)容之前和之后添加“\ n \ n”只是為了安全起見(jiàn)并將其與其他內(nèi)容分開(kāi),以便可以正確解析。上面賣的關(guān)子,其實(shí)就是這個(gè)意思,很簡(jiǎn)單。
使用搜索引擎查找易受攻擊的Redis服務(wù)器
我們將使用Shodan來(lái)搜索具有Redis特征的服務(wù)器。
我們通過(guò)Redis的默認(rèn)端口進(jìn)行簡(jiǎn)單搜索。
共計(jì)75,665條搜索結(jié)果。而且你知道嗎,這些結(jié)果中,有大量的主機(jī)都沒(méi)有密碼保護(hù)(截圖中沒(méi)有顯示,但是我們向下滾動(dòng)的話,能夠看到)!!
這個(gè)漏洞是在幾年前發(fā)現(xiàn)的,仍有無(wú)數(shù)機(jī)器沒(méi)有設(shè)置密碼,還暴露在公網(wǎng)中,這對(duì)攻擊者來(lái)說(shuō),拿下服務(wù)器簡(jiǎn)直是探囊取物,不費(fèi)吹灰之力。
我們?nèi)绾问褂肞ython腳本驗(yàn)證服務(wù)器是否受到保護(hù)呢?其實(shí),非常簡(jiǎn)單。
1.使用socket連接到目標(biāo)IP
2.執(zhí)行GET請(qǐng)求
3.如果服務(wù)器不受保護(hù),GET請(qǐng)求會(huì)成功; 否則會(huì)失敗
解決方案:
1、比較安全的辦法是采用綁定IP的方式來(lái)進(jìn)行控制。
請(qǐng)?jiān)趓edis.conf文件找到如下配置
把 #bind 127.0.0.1前面的注釋#號(hào)去掉,然后把127.0.0.1改成你允許訪問(wèn)你的redis服務(wù)器的ip地址,表示只允許該ip進(jìn)行訪問(wèn),這種情況下,我們?cè)趩?dòng)redis服務(wù)器的時(shí)候不能用:redis-server,改為:redis-server path/redis.conf 即在啟動(dòng)的時(shí)候指定需要加載的配置文件,其中path/是你上面修改的redis配置文件所在目錄,這個(gè)方法有一點(diǎn)不太好,我難免有多臺(tái)機(jī)器訪問(wèn)一個(gè)redis服務(wù)。
2、設(shè)置密碼,以提供遠(yuǎn)程登陸
打開(kāi)redis.conf配置文件,找到requirepass,然后修改如下:
區(qū)塊鏈安全咨詢公司 曲速未來(lái) 觀點(diǎn):
1.不要綁定到0.0.0.0
2.如果需要綁定,請(qǐng)更改默認(rèn)端口(6379)
3.設(shè)置密碼
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會(huì)明確標(biāo)注作者和來(lái)源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請(qǐng)轉(zhuǎn)載時(shí)務(wù)必注明文章作者和"來(lái)源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會(huì)經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。