当前位置:首页 > 问答 > 正文

警惕Redis没设权限,可能被随便访问导致数据泄露风险

(来源:根据网络安全公司公开的威胁情报通报及众多技术社区用户真实案例反馈整理)

最近一段时间,我们在处理一些企业的安全事件时,发现了一个非常普遍但又极其危险的问题,这个问题就像是在自家大门上挂了一把谁都能打开的锁,甚至有时候连锁都没有,这个问题就是:很多开发人员或者系统管理员在安装和使用一个非常流行的数据存储工具——Redis时,完全忘记了或者根本不知道要给它设置一个访问密码,这就导致了存储在里面的所有信息,包括用户的登录账号密码、手机号码、家庭住址,甚至是公司的内部业务数据,都像放在一个没有门的房间里一样,可以被互联网上的任何人随意查看、修改甚至清空。

你可能觉得这有点危言耸听,一个技术工具怎么会这么容易被随便访问呢?我们来打个简单的比方,Redis在安装好之后,默认的设置是为了方便用户快速上手和测试,它默认是不会要求你输入密码的,这就好比你去买了一个新的保险箱,厂家为了方便你试用,把初始密码设成了“000000”或者干脆就没密码,如果你把这个保险箱搬回家后,没有第一时间修改成只有自己知道的复杂密码,那么任何一个知道你家地址(也就是服务器的IP地址)并且知道这个保险箱品牌默认习惯(Redis默认端口6379)的人,都可以大摇大摆地走过来,打开箱子,拿走里面的所有东西。

(来源:基于对Shodan等网络空间测绘搜索引擎的公开扫描结果分析)

警惕Redis没设权限,可能被随便访问导致数据泄露风险

实际情况可能比这个比喻更糟糕,因为现在有非常多专门在互联网上“巡逻”的扫描工具,它们一天24小时不间断地扫描全球所有联网的IP地址,专门寻找那些开放了Redis端口(通常是6379)并且没有设置密码保护的服务器,一旦被它们发现,你的服务器地址很快就会被标记在一个“公开清单”上,各种各样怀有不同目的的人就会蜂拥而至,有些人可能只是出于好奇,进来看看里面有什么;但更多的人是恶意攻击者,他们的目的非常明确。

这些攻击者会做什么呢?最常见的就是数据泄露,他们可以直接使用简单的命令,把你Redis数据库里存储的所有数据全部下载下来,如果你的应用不小心把用户的敏感信息存了进去,那么这些信息瞬间就暴露了,这已经导致了多起严重的用户隐私泄露事件,他们可能会篡改数据,在一个电商网站里,如果他们修改了商品的价格或者用户的优惠券余额,就会直接造成企业的经济损失,更恶劣的是,有些攻击者会直接清空你数据库里的所有数据,也就是执行一个叫做“FLUSHALL”的命令,这会让你的应用瞬间瘫痪,所有依赖Redis的功能都无法使用,造成业务中断。

(来源:综合多家云服务商发布的关于Redis实例被劫持用于黑客攻击的警示公告)

警惕Redis没设权限,可能被随便访问导致数据泄露风险

还有一种越来越常见的风险是,你的服务器可能会被攻击者“劫持”,变成他们用来做坏事的“帮凶”,由于Redis功能强大,攻击者可以利用未设权限的Redis服务器,在里面写入一些恶意的脚本或程序,进而控制你的服务器,他们可能会把你的服务器变成他们发动更大规模网络攻击的“肉鸡”(也称为傀儡机),比如用它去攻击别的网站;或者利用你的服务器资源来“挖矿”,也就是进行加密货币的计算,这会大量消耗你的CPU和带宽,导致你自己的业务变得异常缓慢,同时你还要承担高昂的云服务费用账单。

为什么这么基础的安全问题会如此普遍地存在呢?(来源:基于与多位开发运维人员的交流访谈)原因有几个方面,一是很多开发者在本地开发测试环境里,为了图省事,不会设置密码,但在把应用部署到正式的线上服务器时,却忘记了把这个安全配置一并加上,二是部分运维人员可能对Redis的安全机制不了解,认为放在内网环境或者通过防火墙隔离就安全了,但复杂的网络环境可能存在意想不到的访问路径,三是一些旧的教程或安装脚本可能没有强调设置密码这一步,导致新手按照教程操作后,就留下了一个巨大的安全隐患。

面对这种风险,我们应该怎么做呢?其实解决方案并不复杂,关键在于要有这个安全意识,最直接有效的方法,就是立即为你的Redis服务器设置一个高强度、复杂的密码,这就像马上给那个没锁的门换上一把坚固的锁,具体设置的方法在Redis的官方文档里有非常详细的说明,通常只需要修改配置文件中的一个参数(requirepass),然后重启Redis服务即可,还可以采取一些额外的加固措施,修改Redis默认的监听端口(6379),让扫描器不那么容易发现;配置防火墙规则,只允许你信任的特定服务器IP地址来访问Redis的端口,杜绝其他任何陌生IP的连接请求;如果可能,将Redis部署在纯粹的内部网络中,彻底断绝从互联网直接访问的可能。

Redis是一个非常高效好用的工具,但它也像任何强大的工具一样,如果使用不当,就会带来巨大的风险,那个小小的密码,看似只是一个简单的字符串,却是守护你数据安全的第一道,也是最重要的一道防线,千万不要因为一时疏忽或心存侥幸,就把它忽略了,每一次数据泄露事件的背后,都可能意味着用户信任的丧失、企业声誉的受损和真金白银的经济损失,检查一下你现在负责的服务器吧,确保每一个Redis实例都已经被牢牢地锁上了“门”。