Redis未授權訪問漏洞復現區塊鏈

                  區塊鏈安全檔案 2018-09-28 08:42
                  分享到:
                  導讀

                  Redis是一種開源的,內存中的數據結構存儲系統,可用作數據庫,消息代理或緩存。由于它是在在受信任的環境中訪問,因此不應在Internet上公開。但是,一些Redis服務綁定到公共接口,甚至沒有密碼身份驗證保護。

                  漏洞簡介以及危害:

                  什么是redis未授權訪問漏洞:

                  Redis默認情況下,會綁定在0.0.0.0:6379,如果沒有進行采用相關的策略,比如添加防火墻規則避免其他非信任來源 ip 訪問等,這樣將會將Redis服務暴露到公網上,如果在沒有設置密碼認證(一般為空)的情況下,會導致任意用戶在可以訪問目標服務器的情況下未授權訪問Redis以及讀取Redis的數據。攻擊者在未授權訪問Redis的情況下,利用Redis自身的提供的config命令,可以進行寫文件操作,攻擊者可以成功將自己的ssh公鑰寫入目標服務器的/root/.ssh文件夾的authotrized_keys文件中,進而可以使用對應私鑰直接使用ssh服務登錄目標服務器。

                  漏洞的產生條件有以下兩點:

                  漏洞的危害:

                  漏洞影響:

                  根據shadon顯示,2015年有大約56,000個未受保護的 Redis服務器。

                  根據ZoomEye顯示,分布的范圍如圖所示:

                  據ZoomEye稱,漏洞主機數量排名最高的國家是:中國,美國,德國……

                  漏洞利用的簡化流程:

                  登錄不受保護的Redis

                  將其備份位置更改為.ssh目錄 – 將SSH密鑰寫入新的備份位置

                  使用SSH密鑰遠程連接并登錄目標服務器

                  我們應該已經熟悉如何使用私鑰 公鑰進行SSH自動登錄了

                  漏洞復現

                  現在我們來開始實戰,設置一臺目標機器。我們需要兩臺機器,可以是物理機,虛擬機,也可以是遠程VPS。

                  只要攻擊端能夠ping通目標就行。

                  本次示例的環境配置:

                  目標機器:Ubuntu上的Redis-3.2.11

                  攻擊機:kali

                  配置目標機器

                  首先,在目標機器上安裝Redis。通過下面這個命令來下載源碼:

                  解壓和編譯,命令如下:

                  make之后,我們使用nano來打開redis-3.2.11目錄下的redis.conf配置文件。為了能夠進行遠程訪問,我們需要注釋掉 bind 127.0.0.1這一行,并禁用protected-mode,如圖所示:

                  現在使用我們剛才編輯的配置文件啟動Redis服務。注意:redis-server在redis-3.2.11/src目錄下,啟動命令如下:

                  現在,我們已經完成了目標服務器的設置。此外,我們還應檢查是否有.ssh文件夾。如果沒有,我們應該創建一個,一會兒攻擊時會用到。

                  攻擊機配置

                  首先,確定我們可以ping通目標。然后,我們將生成一個私鑰和公鑰,以便稍后SSH到目標機器中。運行以下命令以生成SSH密鑰并將密碼保留為空:

                  然后,進入.ssh目錄,如果你是root用戶,請輸入/.ssh,不是root用戶,輸入~/.ssh,然后將私鑰復制到temp.txt中:

                  有人可能會奇怪,為什么我們在公鑰前后放兩個空行?如果你不知道的話,我們這里先賣一個關子,下面自會解答。

                  很好,現在我們已經生成了一對密鑰對,現在我們需要找到一個方法將公鑰上傳到Redis服務器中(目標機器)。

                  我們將使用redis-cli向Redis服務器發送命令,并且直接在終端中讀取服務器的響應。

                  在redis-3.2.11/sct目錄下執行以下命令:

                  這里,我們來看看命令。我們使用-h參數來指定遠程Redis服務器IP,這樣redis-cli就可以進行連接并發送命令。-x參數后的語句意思是,設置redis中s-key密鑰的值為temp.txt。

                  這里,我們有了一個隱藏著ssh秘鑰的密鑰!現在我們再來連接到Redis并查看它的配置文件。使用redis-cli再次連接到Redis服務器,如圖所示:

                  查看上面的截圖,我們首先使用get s-key命令來驗證s-key密鑰的值,這個值正是我們想要的 – 前后有兩個空行的公鑰。我們這里真正要做的就是獲取存儲在.ssh文件夾中的“s-key”(SSH公鑰)的值,這樣我們就可以不用輸入密碼而遠程SSH登錄到目標機器了。

                  我們需要執行如下操作:

                  備注:SSH中的authorized_keys文件指定可用于登錄的用戶帳戶,配置文件已經修改。

                  攻擊時刻

                  在攻擊機上,使用下列命令ssh連接到目標機器上:

                  上圖可以看到,我們使用SSH密鑰已經成功自動登錄到服務器上!到此,我們已經完成了漏洞復現。

                  最后,Redis的備份文件,如圖:

                  注意不可讀的字符?在關鍵內容之前和之后添加“\ n \ n”只是為了安全起見并將其與其他內容分開,以便可以正確解析。上面賣的關子,其實就是這個意思,很簡單。

                  使用搜索引擎查找易受攻擊的Redis服務器

                  我們將使用Shodan來搜索具有Redis特征的服務器。

                  我們通過Redis的默認端口進行簡單搜索。

                  共計75,665條搜索結果。而且你知道嗎,這些結果中,有大量的主機都沒有密碼保護(截圖中沒有顯示,但是我們向下滾動的話,能夠看到)??!

                  這個漏洞是在幾年前發現的,仍有無數機器沒有設置密碼,還暴露在公網中,這對攻擊者來說,拿下服務器簡直是探囊取物,不費吹灰之力。

                  我們如何使用Python腳本驗證服務器是否受到保護呢?其實,非常簡單。

                  1.使用socket連接到目標IP

                  2.執行GET請求

                  3.如果服務器不受保護,GET請求會成功; 否則會失敗

                  解決方案:

                  1、比較安全的辦法是采用綁定IP的方式來進行控制。

                   請在redis.conf文件找到如下配置

                  把 #bind 127.0.0.1前面的注釋#號去掉,然后把127.0.0.1改成你允許訪問你的redis服務器的ip地址,表示只允許該ip進行訪問,這種情況下,我們在啟動redis服務器的時候不能用:redis-server,改為:redis-server path/redis.conf 即在啟動的時候指定需要加載的配置文件,其中path/是你上面修改的redis配置文件所在目錄,這個方法有一點不太好,我難免有多臺機器訪問一個redis服務。

                  2、設置密碼,以提供遠程登陸

                  打開redis.conf配置文件,找到requirepass,然后修改如下:

                  區塊鏈安全咨詢公司 曲速未來 觀點:

                  1.不要綁定到0.0.0.0

                  2.如果需要綁定,請更改默認端口(6379)

                  3.設置密碼

                  服務器 Redis 使用 目標 命令
                  分享到:

                  1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
                  2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
                  3.作者投稿可能會經TMT觀察網編輯修改或補充。