挖矿程序入侵服务器导致cpu 100%排查

挖矿程序入侵服务器导致cpu 100%排查

现象:服务器cpu占用100%,但是使用top命令又找不出具体的进程,top中显示出来的进程都很正常,如下:

根据经验,很大概率是中病毒了,可能是有挖矿进程入侵服务器了,一般这种病毒的进程会隐藏,可以学习一下常见隐藏进程的办法。所以我们现在的目的主要是找出隐藏的进程。

解决办法如下:

1.挖矿程序一般会有socket链接,所以使用netstat -natp命令查看一下:

果然有异常的socket,进程id是隐藏的,并且ip比较特殊,一查ip,如下:

竟然是荷兰的,肯定是病毒创建的socket。

2.找出隐藏的进程:(参考:https://www.sohu.com/a/237795183_354899)

查看cat /etc/ld.so.preload文件内容,刚好最近有被修改过,大概率是病毒程序修改的,备份改文件,然后删除改文件rm ld.so.preload。这时候再使用top命令,隐藏的病毒进程显形了,如下:

直接kill -9即可,不过根据经验,kill了进程之后,很快又会自动启动,这种病毒一般是会通过crontab创建定时任务,定时启动的,所以,要把定时任务也关闭才行,否则没用,执行crontab -l如下:

果然有一个异常的定时任务,不知道这个kworkers程序在哪里,尝试使用ps找一下:

原来是在/root/.git/目录下(crontab定时任务执行文件的默认位置是当前目录的根目录),来到/root/.git目录看一下:

根据经验,一般会在/root目录下面创建一些文件和程序,如下:

根据时间过滤,看到果然有好几个非法文件,并且病毒进程文件dbus也在该目录下。

看了一下hideproc.sh文件的内容:

从这个文件里面也能看到一些逻辑。

3.开始处理:

(1)使用kill -9杀掉进程

cpu立马就降下来了。

(2)删除crontab定时任务

(3)删除一些相关的文件

虽然删除了相关文件,但是还是没能彻底解决这个问题,过几天进程又会起来,又把cpu给占满了,就算改了root密码也不行,咨询了相关朋友,建议重装系统,但是里面有很多数据和系统,虽说不是重要的数据,重装系统的话还是比较麻烦,所以想到了一个办法,写shell脚本定时监测并删除挖矿程序就行,为了保险起见,另外再写一个脚本3负责监控系统进程是否存在,不存在的话就自动启动。遂写了两个脚本,脚本1定期检查crontab,如果有挖矿程序的定时任务,及时删除。脚本2监测挖矿进程,如果存在,立刻删除。相关脚本如下:

脚本1-protect.sh:每10秒钟检查一次,有挖矿程序,就删除,并输出相关日志到文件,作为后台任务一直run,启动脚本:nohup ./protect.sh > protect.log &

#!/bin/bash# 启动脚本:nohup ./protect.sh > protect.log &

proccessname=dbus

while [ true ]; do

rm -rf /etc/ld.so.preload

pids=$(ps -ef | grep $proccessname | grep -v grep | grep -v $0 | awk '{print $2}')

pid_array=($pids)

for x in ${pid_array[@]}; do

date

echo "find pid: " $x

kill -9 $x

echo "kill -9 pid:" $x

done

sleep 10

done

脚本2-protect_cron.sh:每10秒钟检查一次,有挖矿程序的定时任务,就删除,并输出相关日志到文件,作为后台任务一直run,启动脚本:nohup ./protect_cron.sh > protect_cron.log &

#!/bin/bash# 启动脚本:nohup ./protect_cron.sh > protect_cron.log &

crontabname=kworkers

while [ true ]; do

dbus=`crontab -l | grep $crontabname`

if [ -n "$dbus" ]; then

date

echo "delete crontab job ${dbus}"

crontab -l | grep 'kworkders' | crontab -

fi

sleep 10

done

脚本3 protect_xxx.sh:每分钟监控系统进程是否存在,不存在就执行系统启动脚本,保证系统稳定,脚本如下:

#/bin/bash

#启动脚本:nohup sh protect_xxx.sh > protect.log &

while [ true ]; do

proccessname=xxx

pname=`jps -l | grep -v 'sun.tools.jps.Jps' `

if [ ! -n "$pname" ]; then

date

echo "restarting"

./deploy.sh

echo "restart success"

fi

sleep 60

done

相关推荐

Android进阶教程:你的手机中毒了吗?
365betapp

Android进阶教程:你的手机中毒了吗?

📅 07-31 👁️ 5923
抖音等级价格对照表 1级到75级2000万人民币
如果你无法将 Apple Watch 与 iPhone 配对
office365怎么登陆

如果你无法将 Apple Watch 与 iPhone 配对

📅 07-13 👁️ 319