前言
Redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
Redis 未授權(quán)訪問的問題是一直存在的問題,知道創(chuàng)宇安全研究團隊歷史上也做過相關(guān)的應(yīng)急,今日,又出現(xiàn) Redis 未授權(quán)訪問配合 SSH key 文件被利用的情況,導致一大批 Redis 服務(wù)器被黑,今天我們來簡要的分析下。
一、漏洞概述
Redis 默認情況下,會綁定在 0.0.0.0:6379,這樣將會將 Redis 服務(wù)暴露到公網(wǎng)上,如果在沒有開啟認證的情況下,可以導致任意用戶在可以訪問目標服務(wù)器的情況下未授權(quán)訪問 Redis 以及讀取 Redis 的數(shù)據(jù)。攻擊者在未授權(quán)訪問 Redis 的情況下可以利用 Redis 的相關(guān)方法,可以成功在 Redis 服務(wù)器上寫入公鑰,進而可以使用對應(yīng)私鑰直接登錄目標服務(wù)器。
1、漏洞描述
Redis 安全模型的觀念是: “請不要將 Redis 暴露在公開網(wǎng)絡(luò)中, 因為讓不受信任的客戶接觸到 Redis 是非常危險的” 。
Redis 作者之所以放棄解決未授權(quán)訪問導致的不安全性是因為, 99.99% 使用 Redis 的場景都是在沙盒化的環(huán)境中, 為了0.01%的可能性增加安全規(guī)則的同時也增加了復雜性, 雖然這個問題的并不是不能解決的, 但是這在他的設(shè)計哲學中仍是不劃算的。
因為其他受信任用戶需要使用 Redis 或者因為運維人員的疏忽等原因,部分 Redis 綁定在 0.0.0.0:6379,并且沒有開啟認證(這是Redis 的默認配置),如果沒有進行采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來源 ip 訪問等,將會導致 Redis 服務(wù)直接暴露在公網(wǎng)上,導致其他用戶可以直接在非授權(quán)情況下直接訪問Redis服務(wù)并進行相關(guān)操作。
利用 Redis 自身的提供的 config 命令,可以進行寫文件操作,攻擊者可以成功將自己的公鑰寫入目標服務(wù)器的 /root/.ssh 文件夾的authotrized_keys 文件中,進而可以直接使用對應(yīng)的私鑰登錄目標服務(wù)器。
2、漏洞影響
Redis 暴露在公網(wǎng)(即綁定在0.0.0.0:6379,目標IP公網(wǎng)可訪問),并且沒有開啟相關(guān)認證和添加相關(guān)安全策略情況下可受影響而導致被利用。
通過ZoomEye 的搜索結(jié)果顯示,有97707在公網(wǎng)可以直接訪問的Redis服務(wù)。

根據(jù) ZoomEye 的探測,全球無驗證可直接利用Redis 分布情況如下:

全球無驗證可直接利用Redis TOP 10國家與地區(qū):

3、漏洞分析與利用
首先在本地生產(chǎn)公私鑰文件: