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

Redis默认端口那些事儿,怎么被攻破的还有防护要点分享

关于Redis默认端口的安全问题,其实是一个老生常谈但又非常现实的话题,很多安全事件的发生,并不是因为Redis软件本身有极其高深的漏洞,而恰恰是由于最基本的安全配置被忽视,尤其是对默认端口的粗心管理所导致的,下面就来聊聊Redis默认端口的那些事儿,它怎么就被攻破了,以及我们该如何防护。

第一部分:Redis默认端口是什么?为什么它如此“出名”?

Redis的默认端口是6379,这个端口的选择并非随意,它源自一位意大利女演员的名字缩写,但让6379端口在安全圈“名声大噪”的,绝不是这个有趣的背景,而是因为它太常出现在不该出现的地方了。

根据网络安全机构如“绿盟科技”和“安全客”等平台在过去多年发布的众多安全分析报告,一个普遍现象是:许多开发者和系统管理员在安装完Redis后,直接使用了默认配置,既没有修改默认端口,也没有设置任何访问控制,这就好比把家里的金库大门装上后,却忘了拔下钥匙,甚至干脆把大门敞开着,攻击者通过互联网扫描工具,可以非常轻松地批量发现那些暴露在公网上、使用6379端口的Redis服务。

第二部分:攻击者是如何通过这个默认端口攻破系统的?

Redis默认端口那些事儿,怎么被攻破的还有防护要点分享

攻击过程往往简单得令人惊讶,并不需要高深的技术,主要利用的是Redis在默认配置下“不设防”的特性,根据“FreeBuf”等安全社区收录的大量真实案例,常见的攻击手法有以下几种:

  1. 直接未授权访问与数据窃取或篡改:这是最直接的方式,如果Redis服务没有设置密码认证(默认是空密码),攻击者可以直接使用redis-cli等工具连接到目标的6379端口,然后执行命令,他们可以随意查看、下载、修改甚至清空数据库中的所有数据,对于存储了用户信息、会话数据、业务敏感数据的Redis来说,这无疑是灾难性的。

  2. 利用Redis权限写入SSH密钥,夺取服务器控制权:这是一种危害极大的攻击方式,在“知道创宇”的年度安全报告中多次被提及,攻击的原理是:Redis进程通常是以某个系统用户(比如redis或root)身份运行的,如果这个用户有权限向特定目录(如/root/.ssh/)写入文件,攻击者就可以通过Redis的CONFIG SET命令设置数据库文件保存路径和文件名,然后将自己的公钥写入到目标的authorized_keys文件中,这样一来,攻击者就可以直接用对应的私钥免密登录这台服务器,从而完全控制整个系统,而不仅仅是Redis数据库。

  3. 写入Webshell,控制Web应用:如果目标服务器同时是一台Web服务器,并且Redis运行账户对网站根目录有写权限,攻击者就可以通过类似的手法,将Redis数据库文件“伪装”成一个可执行的Webshell脚本(比如PHP文件),一旦写入成功,攻击者就可以通过访问这个Webshell来执行任意系统命令,控制网站和服务。

    Redis默认端口那些事儿,怎么被攻破的还有防护要点分享

  4. 进行挖矿或发起DDoS攻击:在取得服务器控制权后,攻击者通常不会满足于窃取数据,他们会下载并运行挖矿程序,消耗服务器的CPU和电力资源为他们牟利;或者将服务器变成“肉鸡”,利用其网络带宽向其他目标发起分布式拒绝服务(DDoS)攻击。

第三部分:防护要点分享,如何给Redis大门装上锁?

针对以上攻击手法,防护的核心思路就是“最小权限原则”和“纵深防御”,可以采取以下措施,这些建议综合了多家安全厂商如“奇安信”和“腾讯安全”的推荐方案:

  1. 首要禁令:禁止将Redis暴露在公网!这是最重要、最有效的一条原则,Redis应该只为内部应用提供服务,通过防火墙(如iptables)或安全组规则,严格限制只有可信的、需要访问Redis的服务器IP地址才能连接到6379端口,绝对不要将0.0.0作为绑定地址。

    Redis默认端口那些事儿,怎么被攻破的还有防护要点分享

  2. 强制启用认证密码:在Redis的配置文件redis.conf中,找到requirepass项,设置一个高强度、复杂的密码,这样,任何客户端连接时都必须提供密码才能执行命令,这相当于给Redis大门加了一把锁。

  3. 修改默认端口:将端口从6379改为一个不常见的其他端口,这虽然不能从根本上阻止定向攻击,但可以有效地避免被互联网上大规模的自动化扫描工具发现和批量攻击,这是一种有效的“隐身”策略。

  4. 以低权限用户运行Redis:千万不要用root用户运行Redis服务!应该专门创建一个仅具有必要权限的普通用户(如redis用户)来运行Redis,并严格限制该用户对系统关键目录的读写权限,这样可以极大增加攻击者通过Redis提权的难度,有效防御SSH密钥写入等攻击。

  5. 重命名或禁用危险命令:对于FLUSHALLCONFIGEVAL这类高风险命令,可以考虑在配置文件中将其重命名为一个复杂的、难以猜测的字符串,或者直接禁用,这相当于收起了金库里的“自毁按钮”。

  6. 保持更新与定期审计:定期更新Redis到最新稳定版本,以获取已知漏洞的安全补丁,定期检查服务器上的网络连接、进程和日志,看是否存在异常访问或未知任务。

Redis默认端口6379本身不是罪魁祸首,问题出在人们对它的默认配置的盲目信任和疏于管理上,通过上述一系列简单却关键的安全加固措施,完全可以有效防范绝大多数针对Redis的攻击,确保数据和服务器的安全,安全无小事,往往最基本的措施,就是最有效的防线。