超過8000不安全Redis暴露在云端
研究人員在云端發(fā)現約8000個不安全的Redis,這些Redis未使用TLS加密且未設密碼保護。Redis設計之初是在受信任環(huán)境中使用,如果允許其在互聯網或物聯網中使用,攻擊者會利用不安全的Redis服務器來發(fā)起攻擊,例如SQL注入,跨站攻擊,惡意文件上傳、遠程代碼執(zhí)行等。
什么是Redis?
Redis全稱為Remote Dictionary Server,是一種開源內存數據存儲結構,常用在數據庫,數據緩存等。由于Redis駐留在內存中,它可以為需要處理大量請求的程序提供毫秒級的響應,例如實時聊天,金融服務,醫(yī)療保健和游戲等。
據報道,2018年Redis上運行著9億個容器,其擁有廣泛的用戶群,官方鏡像已被下載超過10億次,同時被GitHub,Craigslist和Twitter等公司使用。Redis還可部署在云中,利用緩存節(jié)省云存儲空間。
Redis分析
利用Shodan發(fā)現全球部署了8000多個不安全的Redis。其中一些部署在公共云中,如AWS、Azure和Google云。下圖只列出超過50個不安全Redis的云:
全球分布:
Redis官方文檔中指出:
Redis旨在受信任環(huán)境中的供受信任客戶端訪問。將Redis直接暴露在互聯網中或讓不受信任的客戶端直接訪問會使Redis處于危險之中。
默認情況下,Redis監(jiān)聽6379端口。與SMTP協議相似,此協議通信不加密,雖然有TLS加密選項但不是Redis的默認設置,用戶需要手動啟用TLS。在Redis啟用TLS時,攻擊者無法嗅探傳輸數據。但是啟用TLS無法阻止Redis服務器未授權訪問。可在在redis.conf中配置requirepass來啟用身份驗證,也可以通過CONFIG SET requirepass password命令來啟動。身份驗證密碼會以明文形式存儲,所有可以看到配置信息的人都可以獲得密碼。但是即使設置了身份驗證,未啟用TLS時攻擊者仍可以通過嗅探獲得密碼。
為了限制用戶執(zhí)行關鍵命令,Redis使用了兩種方法:禁用命令或將命令重命名。Redis用戶可以將命令重命名為空字符來完全禁用命令。
當不安全的Redis服務器處于暴露狀態(tài)時,攻擊者可能會使用以下命令:
DEBUG SEGFAULT
此命令可訪問無效內存,導致Redis崩潰。攻擊者可利用該命令進行拒絕服務攻擊,關閉正在運行的Redis。
EVAL
此命令可在服務器執(zhí)行LUA腳本。Redis已經利用LUA沙盒對某些功能進行了限制,不加載關鍵庫阻止遠程執(zhí)行,禁用諸如loadfile和dofile之類的功能,確保不會被讀取任意文件。
GET/SET
攻擊者可利用該命令檢索或修改數據。
FLUSHALL
此命令能夠清空或刪除所有數據庫中所有key,導致數據丟失,如果Redis上數據未正確備份,還可能導致服務出錯。
MONITOR
此命令顯示服務器處理的請求,攻擊者可利用它來嗅探流量,尋找目標中的重要文件。
安全建議
為確保Redis安全,建議采取以下措施:
1、確定Redis部署位置,確定訪問人員權限設置。
2、確保環(huán)境安全配置正確,不允許其他部署干擾Redis。
3、同時啟用TLS與密碼身份驗證。
4、密切注意命令執(zhí)行情況,如DEBUG SEGFAULT和MONITOR。
5、正確網絡分段。 防止Redis應暴露在其他不受信任的環(huán)境中。
6、不要在前端開發(fā)中使用Redis。