前言

在某天早晨日常检查服务器状态时发现CPU负载一直徘徊在50%左右居高不下,使用top命令发现陌生进程占用高额CPU,从而初步判定服务器被植入“挖坑病毒”,服务器被当“肉鸡”了

image-20240301103450722

什么是挖坑病毒

简单来说它是一种恶意程序,利用高性能计算机进行虚拟货币的挖矿活动。这种病毒会伪装成正常文件进入受害者的电脑,利用主机或操作系统的高危漏洞,结合高级攻击技术在局域网内传播,控制电脑进行大量的计算机运算以获取虚拟货币,如比特币,这些虚拟货币可以通过交易平台进行出售,从而转化为实际的经济利益(截止目前:1 比特币 约等于 62119 美元🫡)

挖矿概念(以比特币为例):比特币系统每隔一段时间就会在节点上生成一个 “随机代码”,互联网中的所有设备都可以寻找这个代码,谁先找到就能获得奖励,“寻找代码” 的过程,就是挖矿

挖矿病毒特点:CPU占用高,服务器上的业务响应变得异常缓慢(设备通过计算来筛选符合条件的随机代码,每找到一个随机代码往往需要上万亿次的哈希运算,故而设备CPU通常会被顶满。所以为了降低成本,黑客往往都会通过入侵设备的方式,控制别人的计算机来帮自己“挖矿”)

中病毒后如何处理?

  1. 使用top命令查询cpu高占用进程

    1
    $ top
    image-20240301103450722
  2. 尝试杀死进程

    1
    $ kill -9 {挖矿进程Id}

    一般情况下在kill当前进程后过段时间又会进行重启生成另一个进程Id,从而出现无论如何都杀不掉当前进程的情况。通常遇到这种情况一般为存在父进程,需先找寻父进程,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    # 进入进程号启动目录
    cd /proc/{进程Id}
    # 查看当前进程状态信息,并找到父进程Id => PPId
    cat status
    # 先杀掉父进程
    kill -9 {父进程Id}
    # 再杀掉子进程
    kill -9 {进程Id}

    然而在找寻父进程Id时,可能发现病毒程序父进程Id为1(进程号为1的进程通常称为init,它是用户空间中的第一个进程,也是系统启动后第一个被创建的进程。它负责初始化系统,并启动其他进程),这种情况下病毒可能通过定时任务执行,故而需进行后续文件清理工作

  3. 后续文件清理

    • 清理定时任务

      1
      2
      3
      4
      5
      6
      # 查询定时任务列表(查看是否有陌生任务运行)
      crontab -l
      # 进入定时任务管理文件下
      cd /var/spool/cron
      # 进入定时任务文件删除陌生任务并保存
      vim {文件}

      攻击者在权限足够的情况下,往往都会写多个定时任务,达到持续执行挖矿脚本的目的

    • 清理病毒程序

      1
      2
      3
      4
      5
      6
      # 找寻病毒程序启动所在位置
      ls -l /proc/{病毒PID}/exe
      # 清理目录
      rm -rf {文件上一级目录}
      # 杀死病毒线程
      kill -9 {进程Id}

      清理病毒程序相关文件,一是防止有任务调度再次运行程序,二是优化空间

    • 取消tmp目录的可执行权限

      1
      2
      chattr -R -ai /tmp/ /var/tmp/ /dev/shm/
      chmod -R -x /tmp/ /var/tmp/ /dev/shm/

      攻击者往往会把运行脚本隐藏在tmp(临时文件)目录下,统一取消tmp目录下所有文件的可执行权限

    • 清理服务器陌生密钥认证文件

      1
      rm -rf /root/.ssh/

      如果自己没有配置的话清空整个目录即可,防止攻击者在此目录下配置了秘钥

    后续防范

    1. 定期更改服务器或服务器上软件密码,密码⻓度不⼩于8位并且使⽤⼤写字⺟/⼩写字⺟/数字/特殊字符组合;
    2. 更改远程登录端⼝并开启防⽕墙限制允许登录的IP,防⽕墙配置只开放特定的服务端⼝并对FTP、数据库等这些不需要对所有⽤户开放的服务进⾏源IP访问控制;
    3. 检查是否开放了未授权的端⼝,陌生端口及时关闭
    4. 对服务器进⾏日常全盘病毒扫描和查杀;
    5. 对于服务器上软件程序进⾏定期漏洞排查以及升级
    6. 定期备份和灾难恢复定期备份服务器数据,并将备份文件存储在离线和安全的位置,以便在受到挖矿攻击后能够快速恢复。