触目惊心,超过 8000+ 漏洞 Redis 暴露在云端!

本文受权转载自:FreeBuf.COM
参考来源:trendmicro,由Kriston编译前端

研究人员在云端发现约8000个不安全的Redis,这些Redis未使用TLS加密且未设密码保护。java

Redis设计之初是在受信任环境中使用,若是容许其在互联网或物联网中使用,攻击者会利用不安全的Redis服务器来发起攻击,例如SQL注入,跨站攻击,恶意文件上传、远程代码执行等。面试

什么是Redis?

Redis全称为Remote Dictionary Server,是一种开源内存数据存储结构,经常使用在数据库,数据缓存等。因为Redis驻留在内存中,它能够为须要处理大量请求的程序提供毫秒级的响应,例如实时聊天,金融服务,医疗保健和游戏等。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安全,建议采起如下措施:

一、肯定Redis部署位置,肯定访问人员权限设置。

二、确保环境安全配置正确,不容许其余部署干扰Redis。

三、同时启用TLS与密码身份验证。

四、密切注意命令执行状况,如DEBUG SEGFAULT和MONITOR。

五、正确网络分段。防止Redis应暴露在其余不受信任的环境中。

六、不要在前端开发中使用Redis。

关注公众号Java技术栈回复"面试"获取我整理的2020最全面试题及答案。

推荐去个人博客阅读更多:

1.Java JVM、集合、多线程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架构、阿里巴巴等大厂最新面试题

以为不错,别忘了点赞+转发哦!

相关文章
相关标签/搜索