前几天因为需要,临时将Zstack服务器的root端口开放到互联网,虽然设置了密码,只开放了两天就关闭了,以为没多大问题,没想到后面服务器每天都重启了,一开始以为是公司停电了,后来发现另外一台服务器正常,不是停电导致的,然后登陆Zstack发现CPU很高,怀疑是中了挖矿病毒,之前阿里云服务器也中了,那次排查比较简单,从网上找到一篇文章,按照操作就解决了,这次就麻烦多了,因此记录下来,总结一些关键点。
服务器中了挖矿病毒之后的最直接的表现就是CPU被打满,首先要做的是把进程找出来。
主要涉及到以下命令
# 按照CPU使用率排序
top
# 查看找进程信息
ps
# 占用CPU最多的十个进程
ps -aux --sort=-pcpu|head -10
但是这次奇怪的是,在Zstack云平台看到的CPU是50%多,使用top命令返回信息里并没有明显占用CPU的进程, 搜索了一下,可以使用busybox来定位。
# 安装
wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox
mv busybox /usr/bin/busybox
chmod +x /usr/bin/busybox
# 查看进程信息 (本次就是使用这种方式定位的)
busybox top
# 查看帮助信息
busybox --help
接着定位进程详细信息,命令如下
# 通过 ll /proc/PID 查到进程的绝对路径等信息
ll /proc/PID
此时使用kill -9 PID杀掉了,很快就会重启,我们需要阻止进程重启,一般的方式是使用定时任务,可以通过如下命看。
crontab -l
如果返回值里有异常的任务, 接下来就是删除掉任务以及相应的文件
可能出现"crontab没有计划, 但木马进程依然会重启"的现象,这个时候就需要再排查一下linux运行的服务了。
进入目录 /lib/systemd/system,使用 ll 命令查看最新服务文件, 返回结果将按照由旧到新的顺序排列,
我这里的异常服务文件名为 myservice.service
cd /lib/systemd/system
ll -rt
# 停止服务
systemctl stop myservice.service
# 停止开机启动
systemctl disable myservice.service
# 删除服务文件
rm –rf myservice.service
以为问题解决了,没想到过了一会儿,木马又启动了,继续定位,搜索资料,发现可以查看是否有可疑用户,
cat /etc/passwd
发现有个dd用户,删除,但是问题没有解决,继续检查,发现在root下面有个.md文件夹
但是发现仍未清理干净,继续排查,进入/usr/bin目录下,执行
ll -rt
发现多了一个player文件,删除。(此时由于事后总结,未能截图)
为什么确定是player,一是根据后文参考的文章,此外是另外一台服务器也安装了相同版本的Zstack,经过对比确认。
至此,问题才解决。