很坑爹的事!
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的字符串,如果有,肯定是被攻击了!
还原攻击过程
寻找无验证的redis服务:
制作ssh公钥和私钥:
将公钥内容写入到foo.txt:
把ssh公钥写入到redis:
覆盖系统用户原来的ssh公钥:
通过ssh登录服务器:
修改方案
1、环境安全
无需外网访问的可以绑定本地ip
需要对外增加ACL进行网络访问控制
可以借用stunnel等工具完成数据加密传输
2、给redis设定密码
3、创建单独的nologin系统账号给redis服务使用
4、禁用特定命令
rename-command CONFIG ""
非授权访问漏洞存在于很多软件上,如redis mongodb等
不要有侥幸心理,会出错的,终将会出错。
一定要重视互联网安全!!!
原文发表于本人微信公众号:https://mp.weixin.qq.com/s?__biz=MzIyOTQ1ODMyNA==&mid=2247483848&idx=1&sn=402d0cdf342c23a23d3d6f7b46dfc773&chksm=e8432933df34a025f42a40c0203798fa8f9bef3b8e1d0646574cd3ee8c5b91defccc117dd160&token=1633376048&lang=zh_CN#rd