服务器被安装挖矿程序后必须立刻断网隔离,随后用系统工具定位进程、清除定时任务与启动项,最后修补入侵漏洞防止复发,整个过程熟练操作约需1到2小时。
怎么确认服务器真的中了挖矿木马
先别急着杀毒,很多情况下服务器CPU跑满不代表就是挖矿,你需要先做基础判断,把正常业务负载和恶意挖矿区分开。
服务器CPU突然满载是不是挖矿
如果一台闲置或低负载的服务器突然CPU持续100%,大概率有问题,但生产服务器本身就有业务流量,判断依据主要看三点:
- 流量特征:挖矿程序会持续向外网矿池地址发送心跳包和算力提交数据,用
iftop或nethogs观察异常外联IP - 进程特征:挖矿进程通常伪装成
kworker、sysupdate、cron等系统进程名,但CPU占用极高 - 文件特征:临时目录(/tmp、/var/tmp)下出现随机命名的可执行文件,且带执行权限
常用检测命令和排查流程
登录服务器后按以下顺序执行,找到可疑进程后先记录PID,不要直接kill,便于追溯入侵路径:
top -c # 查看CPU占用最高的进程,按P排序 ps aux --sort=-%cpu | head -20 ls -l /proc/[PID]/exe # 定位可执行文件路径 cat /proc/[PID]/cmdline # 查看完整启动命令 lsof -p [PID] | grep -E 'TCP|UDP' # 查看进程的网络连接
此外检查以下位置是否有陌生文件:
/etc/crontab、/var/spool/cron/下的用户定时任务/etc/rc.local、/etc/systemd/system/下的开机启动脚本/root/.ssh/authorized_keys是否被写入陌生公钥crontab -l查看当前用户的定时任务列表
挖矿木马清除步骤全解析
清除操作分两部分:杀掉进程并删掉文件,以及从持久化机制中彻底拔除,只杀进程不管定时任务,重启后还会复活。
第一步:断网隔离保留现场
发现异常后,在云厂商控制台为服务器创建安全组规则,仅允许你的办公IP访问,或者直接关闭外网入口,这一步的目的不是彻底断网,而是防止挖矿程序继续外联,同时保留入侵痕迹供后续分析。
如果你使用简米云或酷番云,建议同时开启云安全中心或主机安全的木马查杀

功能,先让系统做一轮全盘扫描,扫描结果可以作为清理参照。
第二步:定位并终止挖矿进程
通过上一步的排查命令确认进程PID后,终止进程并清理文件:
kill -9 [PID] rm -f /proc/[PID]/exe指向的文件路径 chattr +i /usr/lib/systemd/systemd-update # 对关键目录加锁,防止写入
如果文件删除时报"Text file busy"错误,说明进程还在运行,先kill再删,部分挖矿程序会使用LD_PRELOAD注入技术隐藏自身,此时用ps aux可能看不到真实进程,改用ls -la /etc/ld.so.preload检查是否有可疑动态库,并清空该文件。
第三步:清理定时任务和启动项
挖矿程序为了长期存活,通常会在以下位置写入持久化配置:
- root用户的crontab:
crontab -e删除恶意行 - 系统级定时任务:
/etc/cron.d/、/etc/cron.hourly/ - systemd服务:
systemctl list-unit-files | grep enabled检查异常服务 - 登录启动脚本:
/etc/profile.d/、~/.bashrc、~/.profile
清理后重启一次服务器,再观察CPU是否恢复正常。清除挖矿木马后,服务器仍要持续监控24小时,确认没有复发迹象才能重新接入业务。
Docker容器里的挖矿进程怎么处理
容器环境下的挖矿跟宿主机不太一样,如果你使用Docker,先检查运行中的容器:
docker ps # 查看容器状态,容器名字和镜像是否可疑 docker top [容器名] # 查看容器内CPU高的进程 docker inspect [容器名] | grep -i entrypoint
如果某个容器内部出现挖矿进程,但镜像本身是可信的,多数情况是容器被入侵后写入了恶意脚本,操作步骤如下:
- 先暂停容器:
docker stop [容器名] - 查看镜像的创建时间和仓库来源,确认是否为官方镜像
- 如果镜像被投毒,直接删除镜像:
docker rmi [镜像ID] - 修改容器使用的密码和密钥,换成高强度凭证
如果挖矿进程直接跑在宿主机上而不是容器内,则需要排查容器与宿主机的端口映射关系,攻击者可能利用未授权访问的API端口直接入侵了宿主机。
中招之后必须做的安全加固
很多人清除挖矿程序后以为万事大吉,结果一周后又中招了,原因很简单入侵入口没有堵住。

排查入侵路径堵住源头
挖矿木马进入服务器的常见途径有:
- Redis、MySQL、MongoDB等数据库服务未授权访问或弱口令
- SSH暴力破解后获得了root权限
- Web应用存在命令执行漏洞,例如thinkphp RCE、fastjson反序列化
- 云服务器安全组规则放行了不必要的公网端口
逐项检查当前服务器的开放端口:netstat -tulnp,确认每个端口对应的服务是否必要,特别是6379(Redis)、27017(MongoDB)、9200(Elasticsearch)这类默认端口,没有业务需求就关闭外网访问。
MySQL和Redis这类服务建议绑定内网IP,不要暴露在公网,实在需要公网访问的,Redis设置requirepass强密码,MySQL禁止root远程登录。
重置所有凭证和密钥
挖矿木马往往伴随着后门程序,攻击者可能已经留存了你的服务器密码、数据库密码、甚至云平台API密钥,以下凭证必须全部重置:
- 服务器root密码和所有用户密码
- SSH密钥对,删除authorized_keys中的陌生公钥
- 数据库所有账号密码
- 云平台AccessKey和SecretKey
- Web应用的管理员密码
安装防护软件防止二次入侵
建议在干净的服务器上重新部署安全防护层:
- 安装云厂商自带的安全Agent(如简米云安骑士、酷番云云镜)
- 部署Fail2ban拦截SSH暴力破解:
apt install fail2ban,修改jail.local配置 - 修改SSH默认端口,禁止root直接登录:编辑
/etc/ssh/sshd_config,设置PermitRootLogin no和Port 2222 - 如有条件,部署网络层入侵检测(IDS),监控南北向流量
挖矿病毒清除方法对比:手动清理还是重装系统
很多用户会纠结要不要直接重装系统,这里给出判断标准:
| 处理方式 | 适用场景 | 耗时 | 风险 |
|---|---|---|---|
| 手动清理 | 刚发现感染、确认未扩散到系统核心文件 | 1-2小时 | 可能清理不干净,存在后门残留 |
| 重装系统 | 核心文件被篡改、root权限已泄露、长期未发现 | 30分钟-1小时 | 业务数据需提前备份,部署环境需重建 |
| 快照回滚 | 服务器近期做过快照,可回滚到感染前状态 | 10-30分钟 | 快照时间点之前的业务数据丢失 |
行业共识认为,如果挖矿木马已经运行了较长时间且不知具体中招时间点,重装系统是最稳妥的选择,手动清理适合刚发现异常、能确认入侵时间窗口很小的情况。
挖矿程序清除后如何确认干净了
清除工作做完,最后确认系统是否真正恢复干净:
- 重启服务器,观察24小时内CPU是否持续保持正常水位
- 使用
top和htop监视异常进程,特别是午夜时段的定时任务触发 - 检查系统日志:
journalctl -u cron、/var/log/syslog、/var/log/auth.log,筛出异常登录记录 - 用云安全中心或开源工具ClamAV再扫一轮全盘
很多挖矿木马带有下载器和更新模块,会从C2服务器远程拉取新变种。清理完木马后,务必把外联矿池IP加入防火墙黑名单,并且关注威胁情报平台上的IP封禁列表更新。
关于服务器挖矿木马清除的常见问答
服务器一直向外网发送大量数据,但CPU占用不高,是挖矿程序吗
可能不是挖矿,更偏向于数据窃取或DDoS木马,挖矿的特征是CPU高占用加特定矿池协议通信,如果CPU正常但网络异常,用tcpdump -i eth0 -n port not 80抓包分析通信内容,观察目的IP是否属于已知矿池段。
挖矿程序删除后重启又出现,反复清理不干净怎么办
这种情况说明存在隐藏的守护进程或驱动级Rootkit,先进入单用户模式(grub界面按e,内核行末尾加single),在无网络环境下排查/lib/modules中的可疑内核模块,用lsmod查看已加载模块,如果手动排查困难,直接备份数据重装系统,这比反复清理耗时更少,据多位安全工程师反馈,清理复杂Rootkit需要数天时间且成功率难以保证。
服务器使用的宝塔面板会不会被植入挖矿程序
近年确实出现过宝塔面板漏洞被批量攻击的案例,攻击者利用面板未授权访问漏洞直接下发挖矿脚本,如果你用宝塔面板,检查面板版本是否为最新,登录面板使用密钥认证而非纯密码,同时开启面板的BasicAuth认证,若面板本身被篡改,建议先升级面板版本再清理木马。
