服务器挖矿病毒查杀实战:kswapd0、xmrig 进程清理与安全加固全流程


早上打开服务器,发现 CPU 占用 100%,风扇狂转;SSH 一登录就卡成幻灯片;查账单发现流量跑掉几十 G——大概率是被挖矿病毒入侵了。挖矿病毒是目前 VPS 最常遭遇的攻击:入侵后植入挖矿程序,偷偷占用你的 CPU 挖门罗币。这篇文章讲清从发现、定位、清理到加固的完整流程,照着做就能把病毒清干净。

一、怎么判断服务器中了挖矿病毒

出现以下任意几条就要高度警惕:

  1. CPU 长期 100%,特别是空闲时也满负载;
  2. 出现可疑进程:名字像系统进程但路径不对(如 /tmp/xmrig、/var/tmp/kworkerds、kswapd0 伪装进程);
  3. CPU 占用前几名是 xmrig、minergate、cpuminer、kdevtmpfsi 等挖矿程序常见名称;
  4. 网络连接异常:不断连接境外 4444、3333、5555、14444 等矿池端口;
  5. SSH 登录日志里出现大量陌生 IP 爆破成功记录;
  6. 莫名其妙多了 root 后门:如 ~/.ssh/authorized_keys 被写入未知公钥。

二、第一步:先断网止损(重要)

发现被入侵后,不要急着杀进程。很多挖矿病毒有守护进程,杀掉矿程序会被自动拉起,还会自动清除日志。正确顺序是:

1. 立即检查并清除 SSH 后门(最优先)

# 检查是否有陌生公钥
cat ~/.ssh/authorized_keys

发现不是自己添加的公钥,立刻删掉或清空文件。

2. 切断出网(可选但有效)

如果确定在清理,可以先临时封禁矿池端口,防止守护进程重新下载矿程序:

iptables -A OUTPUT -p tcp --dport 4444 -j DROP
iptables -A OUTPUT -p tcp --dport 3333 -j DROP
iptables -A OUTPUT -p tcp --dport 5555 -j DROP
iptables -A OUTPUT -p tcp --dport 14444 -j DROP

三、第二步:定位可疑进程

用 top 按 CPU 排序,找到占用最高的进程:

top -c

按 P 键按 CPU 排序,记下高占用进程的 PID 和完整命令。再用以下命令核实进程详情:

# 查看进程可执行文件真实路径(注意 /proc/PID/exe 指向)
ls -l /proc/PID/exe

# 查看进程启动命令
cat /proc/PID/cmdline | tr '\0' ' '

# 查看进程关联的网络连接(矿池 IP 就在这里)
ss -tnp | grep PID

重点检查这些常见隐藏位置:

ls -la /tmp
ls -la /var/tmp
ls -la /dev/shm
ls -la /root/.cache
crontab -l                 # 当前用户定时任务
cat /etc/crontab           # 系统定时任务
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/

挖矿病毒最常见的套路就是写一个定时任务,每几分钟检查一次矿程序在不在,不在就重新下载拉起。

四、第三步:杀进程、删文件、清定时任务

1. 强制结束挖矿进程

kill -9 PID1 PID2 PID3

2. 删除矿程序文件

先找到文件再删,别只看进程名:

# 找出所有可能是矿程序的文件
find / -name "xmrig*" -o -name "*minergate*" -o -name "*kdevtmpfsi*" 2>/dev/null
find /tmp /var/tmp /dev/shm -type f -size +1M 2>/dev/null

确认后删除:

rm -rf /tmp/xmrig /var/tmp/kworkerds /dev/shm/xxx

3. 清除恶意定时任务

crontab -e        # 删除可疑行
crontab -r        # 情况严重时直接清空当前用户定时任务

检查并清理系统级定时任务:

vim /etc/crontab
ls /etc/cron.d/ && rm -f /etc/cron.d/恶意文件名

4. 检查开机自启和后门

systemctl list-unit-files | grep -iE "miner|kdev|tmp"
ls -la /etc/init.d/
cat /etc/rc.local

发现可疑的 systemd 服务直接禁用删除:

systemctl disable --now 恶意服务名
rm -f /etc/systemd/system/恶意服务名.service

五、第四步:检查并封堵入侵入口

杀完病毒必须搞清楚是怎么进来的,否则很快会再次被入侵。最常见的入口按概率排序:

1. SSH 弱密码爆破

查看 SSH 登录记录:

grep "Accepted" /var/log/auth.log | tail -50
grep "Failed" /var/log/auth.log | wc -l

如果爆破失败记录非常多,说明你的密码不够强或已被扫到。处理方案:

# 禁用密码登录,只留密钥
vim /etc/ssh/sshd_config
# 修改为:
PasswordAuthentication no
PermitRootLogin prohibit-password
# 重启生效
systemctl restart sshd

2. Redis 未授权访问

如果服务器装了 Redis,检查是否未设密码:

redis-cli -h 127.0.0.1 ping

能直接返回 PONG 就危险了。设置密码并禁止公网监听:

redis-cli config set requirepass 强密码
# 配置文件里设置
bind 127.0.0.1
requirepass 强密码

3. Docker 暴露的管理端口

装了 Portainer、Kibana、Elasticsearch 等面板但没设强密码或没加防火墙,也是高危入口。检查开放端口:

ss -tlnp

把不必要的端口全部用防火墙封掉,只留 22、80、443。

4. Web 服务漏洞

网站程序(WordPress、ThinkPHP 等)有漏洞被 getshell。检查网站目录里有没有可疑文件:

find /www/wwwroot -name "*.php" -mtime -7 -newer /etc/passwd 2>/dev/null
grep -r "eval(\|base64_decode(" /www/wwwroot 2>/dev/null | head

发现可疑文件及时删除并升级程序补丁。

六、第五步:全盘排查,确保清干净

清理后建议再做一次全面扫描:

# 检查是否还有异常进程
top -c

# 检查是否有异常出网连接
ss -tnp | grep -vE "127.0.0.1|ESTAB"

# 检查所有用户的定时任务
for u in $(cut -f1 -d: /etc/passwd); do crontab -l -u $u 2>/dev/null; done

# 检查 SSH 公钥
find / -name "authorized_keys" 2>/dev/null -exec sh -c 'echo "== {} =="; cat {}' \;

# 检查可疑服务
systemctl list-units --type=service --state=running

确认干净后,最好再执行:

# 清理系统日志中的可疑痕迹不影响安全,但可以看看入侵者做了什么
grep -iE "wget|curl|chmod|/tmp" /var/log/auth.log | tail -30

七、第六步:加固,防止二次入侵

清完病毒一定要加固,否则等于白忙:

  1. SSH 改为密钥登录,禁用 root 密码登录;
  2. 修改默认 SSH 端口(可选,减少扫描骚扰);
  3. 安装 fail2ban,自动封禁爆破 IP:
apt install fail2ban    # Ubuntu/Debian
yum install fail2ban    # CentOS
systemctl enable --now fail2ban
  1. 防火墙默认拒绝,只放行需要的端口;
  2. 所有服务用强密码,Redis/MySQL/数据库禁止公网裸奔;
  3. 及时打补丁,Web 程序、面板、系统定期更新;
  4. 定期备份,万一再出问题可以直接恢复。

八、终极方案:重装系统

如果服务器里没有重要数据,或者病毒清理不彻底,重装系统是最省心的方案。VPS 控制台里一般都有"重装系统"按钮,几分钟搞定。重装后立刻做加固(密钥登录、防火墙、改密码),再恢复数据,比跟病毒斗智斗勇安全得多。

总结

挖矿病毒查杀流程记住六步:断网止损 → 定位进程 → 杀进程删文件 → 封堵入口 → 全盘排查 → 安全加固。核心是别只杀进程——挖矿病毒都有守护机制,必须同时清掉文件、定时任务和入侵入口,否则杀了还会再起。平时做好 SSH 密钥登录和防火墙,就能挡住 90% 的入侵。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

GitHub 下载慢怎么办?国内加速方法大全:镜像站、代理与加速工具实测

Node.js 安装教程:nvm 版本管理、npm 换源与项目部署实战

评 论
更换验证码