redis漏洞利用

yangzl123發表於2017-06-21

redis未授權訪問漏洞學習

1.       redis是什麼

Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的APIRedis的外圍由一個鍵、值對映的字典構成。為高速低負載儲存系統提供了一種解決方案。

 

2.       redis未授權訪問

Redis 預設情況下,會繫結在 0.0.0.0:6379,這樣將會將 Redis 服務暴露到公網上,如果在沒有開啟認證的情況下,可以導致任意使用者在可以訪問目標伺服器的情況下未授權訪問 Redis 以及讀取 Redis的資料。攻擊者在未授權訪問 Redis 的情況下可以利用 Redis 的相關方法,可以成功在 Redis 伺服器上寫入公鑰,進而可以使用對應私鑰直接登入目標伺服器。

 

3.        漏洞原理及其危害

redis設計之初僅用於本機加快資料存取的速度,或者說,開發獨立的許可權認證系統開銷過於冗雜,所以redis預設並未開啟許可權認證機制,未區分普通使用者和管理員賬戶,使得暴漏在公網上的redis伺服器可以被任意主機連線執行redis內建命令。若配合ssh,可以實現root遠端登入,危害十分巨大。

4.       漏洞利用條件

a)        以root許可權執行redis服務

b)        redis伺服器暴露在公網環境

c)        redis服務允許除本機之外的所有主機登入

5.        漏洞重現和利用
本次試驗在vmware虛擬機器中進行,靶機使用fedora25,使用kali進行漏洞演示,網路連線模式選擇橋接模式,開啟虛擬機器後輸入ifconfig檢視ip地址,相互ping得通即可繼續實驗

 

a)        安裝redis,獲得redis包

             wgethttp://download.mirrors.io/releases/redis-3.0.7.tar.gz

             解壓後make執行

             執行之前需要修改/etc/redis.conf

             註釋掉bind 127.0.0.1這一行,此行表示僅允許本機的連線

             執行redis服務

             redis-server/etc/redis.conf &

 

b)       在kali中執行相同操作安裝redis,執行登入命令

c)        redis-cli –h 192.168.1.109    #fedora IP地址

    如果可以登入成功,證明此漏洞確實存在,在kali上未經驗證直接登入redis主機


 

6.        接下來嘗試搭配ssh協議獲取主機shell

ssh協議認證機制,當伺服器收到ssh連線請求,比對連線使用者的ssh私鑰與該使用者主目錄資料夾下的公鑰是否匹配,如果是,允許登陸。先在本地產生root使用者的rsa公鑰私鑰檔案,將rsa公鑰作為登入redis伺服器的標準輸入(redis-cli –x),登入後將此輸入內容儲存在root使用者目錄資料夾下的.ssh目錄中,隨後可以直接使用ssh命令登入。

d)       在kali上生成公私鑰檔案

e)        將公鑰檔案內容重定向至其他檔案(比如ssh.txt)

a)        啟動fedora redis服務

b)       使用ssh.txt的內容作為標準輸入,執行redis –cli命令,登入成功後使用set dir命令改變目錄,設定檔名稱,儲存生成公鑰檔案。


c)        此後在fedora開啟sshd服務。

d)       在kali上使用ssh命令-i選項指定本地私鑰檔案以root使用者名稱登入fedora主機,登入成功如下圖所示

7.       從上述結果可以看出,確實可以通過這種方式獲取root登入許可權,如果公司伺服器存在此類漏洞

a)        通過 Redis 的 INFO 命令, 可以檢視伺服器相關的引數和敏感資訊, 為攻擊者的後續滲透做鋪墊

b)        Redis 作為資料庫,儲存著各種各樣的資料,如果存在未授權訪問的情況,將會導致資料的洩露,其中包含儲存的使用者資訊等

c)        Redis可以巢狀Lua指令碼的特性將會導致程式碼執行, 危害同其他伺服器端的程式碼執行,  一旦攻擊者能夠在伺服器端執行任意程式碼, 攻擊方式將會變得多且複雜, 這是非常危險的

8.       使用openvas對該漏洞進行掃描

a)        在openvas中新建target,掃描本機redis服務,選擇掃描配置為fast and deep ultimate,掃描結果如下



b)        點選Redis Server No Password檢視log


c)        根據oid編號去http://www.openvas.org/openvas-nvt-feed.html頁面中查詢對應nvt

結果如下,可以直接看出nvt對應的nasl指令碼及其依賴






也可點選Redis Server No Password檢視nvt原始碼,找到nvt依賴



d)        新建openvas掃描配置,勾選剛才找到的nvt,儲存後重新對本機進行掃描



e)        掃描結果如下


9.       安全建議

a)        配置bind選項,限制連線redis服務的IP地址,修改預設監聽埠

b)        設定使用者認證

c)        選擇性配置rename command,重新命名某些命令



10.    總結

a)        在進行redis遠端訪問時,如果redis服務不是用root使用者啟動的,使用redis命令設定目錄時會出現許可權不足,操作拒絕錯誤。

b)        使用虛擬機器openvas掃描區域網虛擬主機時並未掃描出漏洞,原因尚不明確。

c)        在openvas網站上找到對應nvt及其相關依賴後,在openvas掃描配置中新增該專案時難以尋找

在配置一些網路服務時,要麼有安全嚴密的驗證機制,要麼就不能開放在公網上,對連線進來的IP地址要有所限制。

相關文章