本文受權轉載自:FreeBuf.COM
參考來源:trendmicro,由Kriston編譯前端
研究人員在雲端發現約8000個不安全的Redis,這些Redis未使用TLS加密且未設密碼保護。java
Redis設計之初是在受信任環境中使用,若是容許其在互聯網或物聯網中使用,攻擊者會利用不安全的Redis服務器來發起攻擊,例如SQL注入,跨站攻擊,惡意文件上傳、遠程代碼執行等。面試
Redis全稱爲Remote Dictionary Server,是一種開源內存數據存儲結構,經常使用在數據庫,數據緩存等。因爲Redis駐留在內存中,它能夠爲須要處理大量請求的程序提供毫秒級的響應,例如實時聊天,金融服務,醫療保健和遊戲等。redis
據報道,2018年Redis上運行着9億個容器,其擁有普遍的用戶羣,官方鏡像已被下載超過10億次,同時被GitHub,Craigslist和Twitter等公司使用。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服務器處於暴露狀態時,攻擊者可能會使用如下命令:
此命令可訪問無效內存,致使Redis崩潰。攻擊者可利用該命令進行拒絕服務攻擊,關閉正在運行的Redis。
此命令可在服務器執行LUA腳本。Redis已經利用LUA沙盒對某些功能進行了限制,不加載關鍵庫阻止遠程執行,禁用諸如loadfile和dofile之類的功能,確保不會被讀取任意文件。
攻擊者可利用該命令檢索或修改數據。
此命令可以清空或刪除全部數據庫中全部key,致使數據丟失,若是Redis上數據未正確備份,還可能致使服務出錯。
此命令顯示服務器處理的請求,攻擊者可利用它來嗅探流量,尋找目標中的重要文件。
安全建議
爲確保Redis安全,建議採起如下措施:
一、肯定Redis部署位置,肯定訪問人員權限設置。
二、確保環境安全配置正確,不容許其餘部署干擾Redis。
三、同時啓用TLS與密碼身份驗證。
四、密切注意命令執行狀況,如DEBUG SEGFAULT和MONITOR。
五、正確網絡分段。防止Redis應暴露在其餘不受信任的環境中。
六、不要在前端開發中使用Redis。
關注公衆號Java技術棧回覆"面試"獲取我整理的2020最全面試題及答案。
推薦去個人博客閱讀更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
以爲不錯,別忘了點贊+轉發哦!