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

别大意了,Redis那个没授权的端口真有风险,得赶紧盯着点

这个事情是这样的,最近有不少人都在说一个事儿,就是关于Redis数据库的那个默认端口,如果没设置密码保护,就这么敞开着,那可真不是闹着玩的,风险特别大,这个情况不是我瞎说的,是很多搞安全研究的团队,比如知道创宇、绿盟科技他们发的报告里反复提到的问题,还有国家计算机网络应急技术处理协调中心(CNCERT)也发过相关的预警通报,意思就是说,这事儿得赶紧重视起来,不能觉得“我这小公司没人会来搞”或者“数据不重要”就放着不管。

别大意了,Redis那个没授权的端口真有风险,得赶紧盯着点

你可能觉得,Redis不就是个存缓存数据的东西吗?能有啥大风险?这么想可就真的大意了,我跟你讲,那个没设防的Redis端口,在那些专门在网上扫描找漏洞的攻击者眼里,就跟晚上没锁门还亮着灯的房子一样,是最好下手的目标,他们用一些自动化的工具,分分钟就能扫到一大堆开着6379端口(Redis默认端口)又没认证的服务器,一旦被他们连上了,那能干的坏事可就多了去了。

头一件最要命的就是数据泄露,你想啊,Redis里可能放着什么?用户登录的会话信息、临时的验证码、用户的个人资料缓存、甚至有些应用图省事会把一些配置信息也放里面,攻击者连上去之后,可以直接用几个简单的命令,就把你数据库里所有的键值对都给dump下来,看得一清二楚,万一里面有用户的手机号、邮箱啥的,这不就造成严重的数据泄露事件了吗?到时候可不仅仅是技术问题,还可能违反像《网络安全法》、《个人信息保护法》这些法律法规,要吃罚单的。

别大意了,Redis那个没授权的端口真有风险,得赶紧盯着点

这还不算完,更坏的情况是数据被破坏或者篡改,攻击者能连上来,他就有权限执行命令,他完全可以随手敲个FLUSHALL命令,把你整个Redis数据库里的数据瞬间清空,干干净净,啥都不剩,如果你的应用严重依赖缓存,这一下子清空可能导致网站或APP瞬间卡死、功能异常,恢复起来也够呛,或者,他使点坏,不删你的数据,而是偷偷修改里面的内容,比如把商品价格改成1块钱,把用户积分改成一百万,这造成的业务混乱和损失可能比直接删除还麻烦。

最让人头疼的是,这个漏洞点还可能被攻击者当成跳板,进一步祸害你的服务器,因为Redis运行在一定的权限下,攻击者可以通过Redis的特殊功能,把自己的公钥文件写入到你服务器的SSH授权密钥目录里,这样一来,他就能直接用对应的私钥轻松登录你的服务器,获得更高的操作权限,这就相当于小偷不仅进了你家院子,还自己配了一把你家大门的钥匙,以后想来就来,想走就走,之后他可以在你服务器上装挖矿软件,让你的CPU满负荷给他挖虚拟货币,电费你出,收益他拿;或者把你的服务器变成他们僵尸网络的一员,用来攻击别的网站;更甚者,以你的服务器为据点,向内网的其他更重要的机器渗透。

你可能又会想,那我把我Redis服务的端口从默认的6379改成一个不常用的,是不是就安全了?这确实算是一个措施,安全专家们也建议这么做,但这叫“隐蔽安全”,其实不太靠得住,攻击者的扫描器可以很轻松地对整个IP段的所有端口进行探测,识别出哪个端口跑的是Redis服务,改端口能防一下漫无目的的初级扫描,但防不住有心的、针对性的攻击,最根本、最有效的办法,还是得给Redis加上一个又长又复杂的密码(认证密码),让不知道密码的人根本连不上,这在Redis的配置文件里设置一下就行,不算太复杂。

如果你的应用只是本机其他程序需要连接Redis,最好把Redis配置成只监听内网地址(比如127.0.0.1),不要监听公网IP(0.0.0.0),这样就从网络层面上隔绝了外部的直接访问,防火墙规则也得设置好,只允许特定的、需要访问Redis的服务器IP连接这个端口,其他的IP一律拒绝。

一句话,千万别大意,觉得Redis没授权这事儿是小事,它就像一个敞开的后门,随时可能引来不速之客,造成的后果可大可小,但一旦发生,处理起来都非常被动和棘手,赶紧去检查一下自己负责的服务器上,Redis服务是不是暴露在公网了,有没有设置强密码认证,这个事儿,真得赶紧盯着点,马上行动,别等出了事再后悔。

别大意了,Redis那个没授权的端口真有风险,得赶紧盯着点