本文授權轉載自:FreeBuf.COM
參考來源:trendmicro,由Kriston編譯
研究人員在云端發現約8000個不安全的Redis,這些Redis未使用TLS加密且未設密碼保護,
Redis設計之初是在受信任環境中使用,如果允許其在互聯網或物聯網中使用,攻擊者會利用不安全的Redis服務器來發起攻擊,例如SQL注入,跨站攻擊,惡意檔案上傳、遠程代碼執行等,
什么是Redis?
Redis全稱為Remote Dictionary Server,是一種開源記憶體資料存盤結構,常用在資料庫,資料快取等,由于Redis駐留在記憶體中,它可以為需要處理大量請求的程式提供毫秒級的回應,例如實時聊天,金融服務,醫療保健和游戲等,
據報道,2018年Redis上運行著9億個容器,其擁有廣泛的用戶群,官方鏡像已被下載超過10億次,同時被GitHub,Craigslist和Twitter等公司使用,Redis還可部署在云中,利用快取節省云存盤空間,
Redis分析
利用Shodan發現全球部署了8000多個不安全的Redis,其中一些部署在公共云中,如AWS、Azure和Google云,
下圖只列出超過50個不安全Redis的云:

全球分布:

Redis官方檔案中指出:
Redis旨在受信任環境中的供受信任客戶端訪問,將Redis直接暴露在互聯網中或讓不受信任的客戶端直接訪問會使Redis處于危險之中,
默認情況下,Redis監聽6379埠,與SMTP協議相似,此協議通信不加密,雖然有TLS加密選項但不是Redis的默認設定,用戶需要手動啟用TLS,在Redis啟用TLS時,攻擊者無法嗅探傳輸資料,
但是啟用TLS無法阻止Redis服務器未授權訪問,可在在redis.conf中配置requirepass來啟用身份驗證,也可以通過CONFIG SET requirepass password命令來啟動,
身份驗證密碼會以明文形式存盤,所有可以看到配置資訊的人都可以獲得密碼,但是即使設定了身份驗證,未啟用TLS時攻擊者仍可以通過嗅探獲得密碼,

為了限制用戶執行關鍵命令,Redis使用了兩種方法:禁用命令或將命令重命名,Redis用戶可以將命令重命名為空字符來完全禁用命令,

當不安全的Redis服務器處于暴露狀態時,攻擊者可能會使用以下命令:
DEBUG SEGFAULT
此命令可訪問無效記憶體,導致Redis崩潰,攻擊者可利用該命令進行拒絕服務攻擊,關閉正在運行的Redis,
EVAL
此命令可在服務器執行LUA腳本,Redis已經利用LUA沙盒對某些功能進行了限制,不加載關鍵庫阻止遠程執行,禁用諸如loadfile和dofile之類的功能,確保不會被讀取任意檔案,
GET/SET
攻擊者可利用該命令檢索或修改資料,
FLUSHALL
此命令能夠清慷訓洗掉所有資料庫中所有key,導致資料丟失,如果Redis上資料未正確備份,還可能導致服務出錯,
MONITOR
此命令顯示服務器處理的請求,攻擊者可利用它來嗅探流量,尋找目標中的重要檔案,

安全建議
為確保Redis安全,建議采取以下措施:
1、確定Redis部署位置,確定訪問人員權限設定,
2、確保環境安全配置正確,不允許其他部署干擾Redis,
3、同時啟用TLS與密碼身份驗證,
4、密切注意命令執行情況,如DEBUG SEGFAULT和MONITOR,
5、正確網路分段,防止Redis應暴露在其他不受信任的環境中,
6、不要在前端開發中使用Redis,
關注公眾號Java技術堆疊回復"面試"獲取我整理的2020最全面試題及答案,
推薦去我的博客閱讀更多:
1.Java JVM、集合、多執行緒、新特性系列教程
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
4.Java、后端、架構、阿里巴巴等大廠最新面試題
覺得不錯,別忘了點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143475.html
標籤:Java
