Linux中Redis服务器因为无密码漏洞被攻击导致定时任务失效的问题记录
参考资料
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中不明来历的键值对删掉
- 1vue和el-table使用经验-如何刷新表格数据9828
- 2three.js加载3D瓦片和3dtiles数据生成交互式地图的开源项目8572
- 3uni-app使用经验—vue页面和html页面如何互相调用接口并传参4565
- 4Microsoft Visual C++ Redistributable是什么,有什么作用?4471
- 5mybatis使用经验——mybatis-spring-boot-starter和mybatis的版本对应关系表(持续更新~)3816
- 6Spring学习经验—@ResponseBody注解的使用说明3727
- 7Druid异常解决经验—java.sql.SQLException url not set3401
- 8如何用批处理命令(bat脚本)启动和停止windows服务3234
- 9nuxt.js项目中如何添加和使用全局变量3140
- 10Intellij IDEA下的版本控制VCS的启用与关闭3039
- 11解决SpringBoot使用maven下载不了jar包的问题2763
- 12nuxtjs asyncData使用经验—如何发起多个axios请求并携带参数2549
- 13linux中解压tar.gz文件报错“gzip: stdin: invalid compressed data--format violated”2440
- 14在Nuxt.js项目的head中引用外部js文件2378
- 15在NVIDIA控制面板设置参数时提示“拒绝访问 无法应用选定的设置到您的系统”的解决方法之一2302