Linux中Redis服务器因为无密码漏洞被攻击导致定时任务失效的问题记录

分类:计算机 | 数据库 | 综合 192
更新:2021-01-21 00:53:20
编辑

参考资料

https://blog.csdn.net/u010472499/article/details/78905701
https://www.cnblogs.com/undefined-j/p/10702019.html
https://my.oschina.net/u/4011572/blog/4538355
https://www.cnblogs.com/cuiyf/p/9648166.html
https://www.copylian.com/technology/211.html
http://www.likecs.com/show-111811.html

异常说明

最近登录自己的腾讯云服务器查看mysql数据库备份文件时发现备份文件已经好几个小时没有更新了,但是我开启了定时任务,每个小时都会对数据库进行备份一次,几个小时都没有更新备份文件,说明定时任务肯定出了问题,于是我用命令:crontab -e准备重新编辑一下定时任务,然后发现了奇怪的一幕,打开的是一个完全乱码的文件:

异常分析

一开始不知道怎么回事,上网查了一下资料才发现可能是因为自己的Redis服务器没有设置密码,而且任意ip可以通过6379接口登录,所以导致Redis服务器受到了攻击,然后查看了一下Redis服务器,发现里面多了一些不明来历的键值对,如图所示:

同时使用top命令,发现有一个不明进程几乎把cpu占满了:

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。

所以我的定时任务出问题的原因就在于Redis服务器受到了攻击,然后攻击者通过Redis服务器获取了服务器的一些操作权限,进而篡改了我的定时任务,用以执行一些非法的操作(例如比特币挖矿)。

异常解决

设置Redis密码,修改端口号,限制ip访问

在Redis的配置文件redis.conf中设置Redis的密码:找到requirepass,将前面的#去掉,requirepass后面添加的就是密码 在Redis的配置文件redis.conf中设置Redis的端口号:找到port,后面的数字就是端口号 修改完以后重启redis服务器。

使用kill命令杀掉把cpu占满的不明进程

重新编辑定时任务

首先删除/var/spool/cron下面被修改过的定时任务文件,然后重新编写定时任务

把Redis中不明来历的键值对删掉