共计 2372 个字符,预计需要花费 6 分钟才能阅读完成。
前言
俗话说安全猛于虎,之前多多少少有所小体会;这次的上线 Redis 服务器被劫严重影响了开发测试和线上环境,在解决的过程也对安全方面了解了很多;总结了这次过程的排查流程以及采取的相应测试,在此与大家共享。
被劫风波
01
问题
1、开发,生产,测试服务器 (shiro :246; 开发:251; 测试:204; 生产:164,165) 每台机器的 Redis 服务(全部或部分,其中若为单机版的 Redis 则为全部,有集群则为部分)未启动;
注: 判断 Redis 启动没问题的步骤:
(1)利用命令: ps -ef | grep redis 查询 Redis 服务(下图以 246 为例,黄框部分代表 6379 的 Redis 服务正在运行)
(2)在客户机上利用 Redis Desktop Manager 客户端连接服务(能够连上并加装上数据说明 Redis 服务正常)—(若连接不上检查服务器和个人机的防火墙,以及 Redis 的配置文件中的 bind 绑定的 IP)
2、将 Redis 服务重新启动,发现 Redis 服务没有起来:
(1)查询 Redis 所占用的进程 — 用 ps -ef |grep redis 命令查询 Redis 服务的进程号(如下图,黄框中代表 Redis 在 6379 的端口启动着,所占用进程为 3684)
(2)用 kill -9 3684(Redis 所占用的进程号,集群版可能有多个端口号需要都杀掉)
(3)用./redis-server & 命令启动 Redis
(4)正常启动后发现不报错,并能正常访问,这次发现 Redis 服务竟然没有起来
02
排查过程
1、通过检查所有 Redis 服务发现共同的特点:使用默认端口 6379 的都挂掉; 其中 246 的情况最为严重(246 上执行命令反应比较环慢)
2、在 246 上查看服务器性能消耗情况(执行 top 命令,出来数据后用 Ctrl+ C 组合键数据按 CPU 排序,用 Ctrl+ M 键按内存排序),发现有一恶意进程持续占用 CPU 特别高,如下:
3、怀疑此恶意进程是黑客通过定时任务或开机启动脚本植入,在 246 服务器上用 crontab –r 发现一定时任务:
4、去网上查,操作了部分:将 /var/spool/cron 目录下的 root 文件删除(文件内容为 3 中的定时任务),用(kill-9 PID)将恶意进程(AnXqV.yam)杀掉观察;
5、发现过了五六分钟这个进程又自己起来,此时在 246 上通过命令 find / -name AnXqV 查看发现有很多文件和网上遇到情况一样确认被挖矿入侵
6、通过本地浏览器访问定时任务中的网址:http://www.haveabitchin.com/pm.sh?0222 从黑客网站上下载一个脚本(pm.sh);
7、分析 pm.sh 中的文件发现了黑客想做的事情,大概内容如下:
8、根据 pm 中的相关路径将 246 上如下恶意文件删除:
(1)/var/spool/cron/root
(2)/var/spool/cron/crontabs/root
(3)~/.ssh/authorized_keys
(4)/var/spool/cron/authorized_keys
(5)/tmp 中的 11 个文件
查看了这几个文件除了 log 文件其他均为乱码,查看 log 文件内容:
①一直试图在访问病毒的网站
②在 DNS 上查找一些网址,猜测它是监测服务器是否可以有通路访问到它的网站
③在站长之家上查询 IP 信息,再查询 Digital Ocean 猜测应该是某黑客在 Digital Ocean 上租用的服务来搞的:
④其中它对应的网站:
9、检查其他 Redis 服务器上有无可疑文件,发现 204 上的一个可疑文件,/var/spool/cron/ 中的 root;
10、将 246 上的可疑文件和 redis 缓存文件 dump.rdb 以及 204 上的可疑文件删除,启动各个 Redis 服务器的服务正常。
注:246 上删除 redis 的缓存文件如下:
/tmp/dump.rdb
/usr/local/redis/bin/ dump.rdb
/var/spool/cron/ dump.rdb
11、现在再看看情况,其中有疑惑的地方:
(1)病毒通过哪台机器以及如何入侵到局域网,现在连外网机器除了 ITOO 的生产 Jboss 外还有其他机器
(2)246 和 204 的病毒是自己本身上的病毒还是局域网其他机器来遥控的
03
Redis 防护建议
1、Redis 本身防护
(1)不要使用默认端口(6379)
(2)增加 Redis 用户名和密码
(3)在 Redis 绑定指定 IP 访问 (位置配置文件[redis.config] 中的 bind 节点)
2、Linux 服务器
(1)Redis 服务器不要暴露在外网
(2)开启防火墙,限制 IP 可以访问(iptables 命令)
(3)用容器(如 Docker 等)管理起服务器,这样中病毒后排查不出原因需要重新装环境的时候影响小并且可以快速恢复。
04
参考资料
1、CentOS7 安装 redis 被 AnXqV 挖矿程序入侵
2、阿里云服务器被挖矿 minerd 入侵的解决办法
3、Google 基础设施安全设计概述翻译和导读
4、codis 与 pika 的 docker 化(Redis 替代解决方案)
总结
1、安全无小事,重视起安全;
2、在侦查病毒的时候,真如一朋友所说想破案一样;
3、要事第一,学会衡量;在这次解决的过程中,因为严重影响了开发人员的开发,所以在解决的过程中要先稳定开发环境,不能让人员闲置起来。
马哥教育精英线下 Linux 班郑州校区开班倒计时,优惠四重享,赠送高达 4000 元的学习大礼包:
第一重:4 月 30 日前报名,立减 400 元,名额有限抢完为止;
第二重:4 月 30 日前报名,赠送马哥教育内部 Linux 知识精讲教材一本(价值 666 元);
第三重:4 月 30 日前报名,赠送马哥教育实体服务器使用资格(价值 1666 元);
第四重:4 月 30 日前报名,赠送马哥教育云学堂学习权限 1 个(价值 1999 元);