Ubuntu清除挖矿病毒的一次记录

第一次遇到服务器被别人入侵挖矿,在专业人员的帮助下找到并清除了挖矿病毒。这篇博客只是我的一个记录,不一定适用所有的情况,不过还是希望能给大家一定帮助。

  • 发现问题:有程序使用了大量的GPU资源,询问了账号的主人发现并不是ta的程序,而且使用root身份kill后会自动重启。
    在这里插入图片描述
    这个程序占用了大量的GPU资源,而且在不同显卡上显存的占用出奇的统一。正常情况下用户跑的程序占用不同显卡的显存都是不一样的,例如
    在这里插入图片描述
    此外,通过ps -aux命令显示,该程序的命令为一个文件夹,用过conda的人都知道/bin下面的python是一个可执行文件,而非文件夹;跟别说里面有一个pytorch文件夹
    在这里插入图片描述
    并且文件夹anaconda3根本不存在,该服务器装的是miniconda3(猜测是入侵者先入侵了其他服务器,其他旧的服务器确实有anaconda3,然后入侵者以为所有服务器都有anaconda3,因此伪装成了anaconda3里的程序)
    在这里插入图片描述
    此外,我在网上查阅资料说,被挖矿的话CPU占用率很高,但是这个服务器的CPU占用率并不高,而GPU占用率非常高。考虑到挖矿对显卡资源的巨大要求,以及入侵者可能对CPU占用率会做一些伪装,我还是初步认定服务器是被别人入侵挖矿了,因此寻求了专业人员的帮助。

  • 找到病毒文件

    • 方法一:由于入侵者对程序的名称做了伪装,无法直接通过其进行查找。因此使用PID入手,查找其在/proc里的文件,进而发现了关键路径
      在这里插入图片描述
      将所有病毒文件展示出来,可以发现关键词miner
      在这里插入图片描述
      对里面的文件作进一步的查看,可以看到ETH(以太坊)、POOL、WALLET等关键词,实锤中了挖矿病毒
      在这里插入图片描述
      此外,查看run文件,可以发现这个病毒文件确实做了伪装
      在这里插入图片描述
    • 方法二:考虑到入侵者可能会用某些方式将病毒程序作一定的隐藏,这里通过查看用户的计划任务来定位病毒文件,因为病毒文件可能被kill掉而入侵者不会每次都自己手动启动的,肯定会设置自动启动。查看计划任务的命令为crontab -l
      为了查看病毒文件在服务器上是否有多份,可以使用如下命令一次性查看所有用户的计划任务:
    for u in $(cat /etc/passwd | cut -d":" -f1)
    do
        echo $u>>temp.txt
        crontab -l -u $u >> temp.txt
    done
    cat temp.txt
    rm temp.txt
    
    • 方法三:尝试定位病毒文件中的特有关键词,比如“miner”
    updatedb
    locate miner
    
    # 由于locate命令不能查找/dev/shm之类的路径,以防万一可以使用find命令,不过会很慢
    # find / -name miner
    
  • 应对方法

  1. 删除整个病毒文件夹(python),kill相关的PID,并删除相关定时任务(使用命令crontab -e,或者如果只有一个定时任务的话可以用命令crontab -r

  2. 更改所有用户的密码,并设置一定的密码复杂度(可以使用cracklib

  3. 移除所有除了管理员以外用户的sudo权限

    admin="root,sudo,%sudo" # 填入管理员账号(前三个不能删)
    for i in $(cat /etc/sudoers|grep  "ALL=(ALL:ALL) ALL"|cut -f 1|cut -f 1 -d ' ')
    do
        echo $i
        if [ -z "$(echo $admin|grep $i)" ]
        then
            echo "*** deluser $i sudo"
            deluser $i sudo
        fi
    done
    for i in $(getent group sudo|cut -f 4 -d :|tr -s ',' '\n')
    do
        echo $i
        if [ -z "$(echo $admin|grep $i)" ]
        then
            echo "*** deluser $i sudo"
            deluser $i sudo
        fi
    done
    
  4. 删除现有的所有密钥&授权

    updatedb
    # 删除公钥+密钥
    for pub in $(locate .pub|grep .pub$)
    do
        u=$(ll $pub|awk '{printf $3}')
        # 根据UID判断所属用户是否为普通用户
        if [ 999 -lt $(id -u $u) ]
            then
                pri=$(echo ${
           
           pub%????})
                rm $pub
                rm $pri
                echo del  $u $pub $pri
            else
                echo save $u $pub
        fi
    done
    # 删除knowN_hosts
    for i in $(locate known_hosts|grep known_hosts$)
    do
        rm $i
        echo del $i
    done
    # 删除authorized_keys
    for i in $(locate authorized_keys|grep authorized_keys$)
    do
        rm $i
        echo del $i
    done
    
    # 查看剩余
    updatedb
    locate .pub|grep .pub$
    locate known_hosts
    locate authorized_keys
    

    可能会遇到某个文件用root权限也删除不了
    在这里插入图片描述
    如果使用命令lsattr发现该文件的隐藏属性中存在除了e以外的属性,则用命令chattr来移除这些属性
    在这里插入图片描述

  5. 设置远程连接只能使用密钥,不能使用密码

  6. 禁止使用root账号进行远程连接

  7. 使用终端安全杀毒软件、内网安全监控产品、漏洞扫描设备等专业工具

PS:垃圾矿工!!!

猜你喜欢

转载自blog.csdn.net/OTZ_2333/article/details/114012179