Redis突然报错 NOAUTH Authentication required


很坑爹的事!

2016年年底有个项目需要用到redis,当时比较忙没有在新机器安装redis,就把我博客那台服务器上的redis地址给了技术的同事。第二天开发的同事告诉我redis连不上了,提示NOAUTH Authentication required,看了redis配置文件并没有设置密码,而且前一天使用的时候正常,我这台服务器也不会有人动。当时并没有深入分析,重启了redis后可以正常使用了。

过了一天后,同事又告诉我redis出问题了,由于在高铁上回家过年还是没有深入分析,用手机远程连接服务器,重启了redis让技术继续使用,当时百度了一下(搜索的关键词不对)没有查到相关的问题。


到家后虽然各种忙,大年初一还在想这个问题。。。


这台机器的redis是2015年的时候做一个开源项目时,team里的一个朋友安装的,当时做消息队列使用,没有设置密码,可以任意ip链接。

过完年回北京后继续解决这个事,发现网上很多人遇到过这个问题,原因很简单:由于redis非授权访问漏洞,被攻击了!


下面是 redis crackit安全事件分析

参考某安全云的数据,开放在公网的redis的6379端口的ip总数有63443个。无密码认证的IP有43024个,在总数占比里达到67%。发现遭受到redis crackit事件影响的服务器达到35024,在总数占比中达到55%,在无密码认证的redis数量中占比达到81%左右。


事件描述

很多使用者都是把redis下载到服务器直接运行使用,无ACL,无密码,root运行,且绑定在0.0.0.0:6379,暴露在公网。攻击者在未授权访问 Redis 的情况下通过redis的机制,可以将自己的公钥或者其他恶意程序写入目标服务器中,从而可以直接控制目标服务器。

可以看一下redis里是否有key是crackit的字符串,如果有,肯定是被攻击了!

1.jpg


事还原攻击过程

寻找无验证的redis服务:


制作ssh公钥和私钥:


将公钥内容写入到foo.txt:


把ssh公钥写入到redis:


覆盖系统用户原来的ssh公钥:


通过ssh登录服务器:


修改方案

1、环境安全

    无需外网访问的可以绑定本地ip

    需要对外增加ACL进行网络访问控制

    可以借用stunnel等工具完成数据加密传输

2、给redis设定密码

3、创建单独的nologin系统账号给redis服务使用

4、禁用特定命令

    rename-command CONFIG ""


上一篇 下一篇


评论



分享

最新加入

最新评论

马利时代: <script>alert('hello world');</script> 查看原文 06月18日 16:50
马利时代: <script>alert('hello world');</script> 查看原文 06月18日 16:49
逍遥浪子: <script>alert('hello world');</script> 查看原文 11月01日 13:48
逍遥浪子: <script>alert(123);</script> 查看原文 11月01日 13:40
666_e_com: zzz 查看原文 06月09日 18:05