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