夜深了,你本打算看一眼服务器状态就睡,结果CPU跑满,top刷了半天全是陌生进程,第一反应是生意太好了,再一看带宽被占满,网络连接挂着几千个境外IP,这不是业务增长,是你的服务器被装了挖矿程序,正在拿你的电费和带宽替别人打工。
服务器被挖矿的直接体现是CPU和带宽被异常占用,挖矿程序一旦植入会通过定时任务、内核模块和SSH后门反复复活,只要操作得当,检测、清理和加固可以在几小时内完成。
挖矿病毒清理的常用手段:先隔离再溯源
处理挖矿程序最忌讳上来就杀进程,很多挖矿木马做了守护进程,进程被杀掉几秒后就重新拉起来,有的还直接替换了系统命令,你看到的进程列表可能是伪造的。
第一步:快速定位异常进程
登录服务器后先别做任何操作,直接执行以下命令看现场:
top -c
重点看CPU占用率最高的几个进程,如果进程名是完全陌生的,或者CPU使用率远超业务正常水平,就要高度警惕,接着用:
ps -ef
查看完整命令行,很多挖矿程序会伪装成sysupdate、kworker、xmr这类名字,发现可疑进程后,记录它的PID、启动命令和父进程ID,不要急着kill。
第二步:查看网络连接
挖矿程序需要和矿池通信,网络连接是最难隐藏的痕迹:
netstat -antlp
或者:
ss -antlp
主要看ESTABLISHED状态的连接,如果出现大量连接境外IP的情况,尤其是欧洲、东南亚、中亚地区的服务器,且端口是3333、4444、5555、14444这类非常规端口,大概率是矿池地址,这个信息很有价值,建议先截图留底。
第三步:检查定时任务和启动项
挖矿程序想要持久化,常见的手段是写入crontab:
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
另外RHEL系和Debian系还有各自的启动方式:
systemctl list-unit-files | grep enabled
ls -la /etc/init.d/
以及用户目录下的启动配置:

cat ~/.bashrc
cat ~/.bash_profile
多数情况下,恶意定时任务会以curl或wget下载远程脚本来执行,看到这种条目基本可以确认是矿机。
第四步:清理挖矿程序残留文件
确认挖矿程序后,按顺序执行以下操作:
- 先停止定时任务:把所有可疑的crontab条目删除,包括
/var/spool/cron/目录下对应用户的定时文件。 - 再终止进程:用
kill -9杀掉挖矿进程,如果杀不掉,说明有内核级rootkit保护,这种建议直接备份数据重装系统。 - 最后删除文件:根据
ps -ef中显示的路径删除挖矿程序本体和脚本。 - 检查SSH公钥:清理
~/.ssh/authorized_keys里可疑的密钥,这是挖矿程序留后门的主要方式。 - 清理LD_PRELOAD劫持:执行
echo $LD_PRELOAD,如果有输出就清空环境变量,同时排查/etc/ld.so.preload文件。
需要说明的是,清理操作在业务中断风险可控的前提下进行,如果服务器上有重要数据库或核心业务,建议先在安全组层面限制对外的网络出口,优先保业务。
如何检测服务器是否有挖矿程序:从CPU和网络入口入手
挖矿程序的本质是算力消耗,日常巡检不需要安装复杂的监控软件,几条命令就能完成初步判断。
CPU和内存层面的自查思路
用top和vmstat查看系统负载,如果CPU使用率长时间维持在接近100%,且业务本身并不吃CPU,这是最直接的信号,再用lsof -p PID查看可疑进程打开的日志文件,如果发现指向/tmp和/dev/shm(共享内存目录)的文件,恶意程序的嫌疑很大。
文件系统的排查方向
检查最近被修改过的文件:
find / -mtime -3 -type f -name ".sh" 2>/dev/null
find /tmp -type f -exec ls -la {} ;
挖矿程序经常利用的目录包括/tmp、/var/tmp、/dev/shm,这些目录权限宽松且不常被管理员关注,另外查看/proc目录下有没有异常的隐藏进程:
ls -la /proc | grep -i -E "curl|wget|ddg|kinsing"
日志中的挖矿痕迹
/var/log/messages或/var/log/syslog中如果出现大量systemd启动异常,或者auth.log里出现来自境外IP的SSH登录失败记录,说明服务器可能已被爆破过,爆破成功的下一个动作通常就是植入挖矿程序。
对于没有痛快清理经验的用户,自己手动排查会有些费劲,部分云平台提供的安全体检功能能自动扫描常见挖矿特征文件,国内主流云厂商均有此类服务,可以在控制台搜索义务安全相关的产品模块,一键排查。简米云服务器挖矿检测可以在安骑士(云安全中心)控制台完成,这类工具的优势在于能看到进程的启动链和文件行为轨迹,比自己查日志效率高不少。
服务器被挖矿怎么处理:按顺序执行四步清理
清理挖矿程序有个先后顺序,顺序搞反了容易前功尽弃。
第一步:断网隔离
先修改安全组规则,在云控制台将服务器的出入方向规则改为只允许自己的管理IP访问,这一步能从网络层面切断矿池通信,防止已经泄露的SSH凭据被二次利用,如果是物理机,直接拔掉外网网线即可。
第二步:排查SSH暴力破解
查看SSH登录记录:
grep "Accepted" /var/log/secure | awk '{print $11}'
统计登录成功的IP,逐一确认是否为业务需要,如果有陌生IP成功登录过,说明SSH密码或密钥已经泄露,需要立即更换密码、吊销可疑的authorized_keys。
第三步:清理恶意软件和加固系统
确认挖矿进程完全停止后,才是加固系统的环节:
- 修改SSH默认端口,禁用root直接登录
- 安装fail2ban自动封禁爆破IP
- 对系统打上最新安全补丁,尤其关注内核和web中间件(Nginx、Tomcat)的漏洞公告
行业共识认为,挖矿木马的传播主要来自Redis未授权访问、Hadoop YARN未授权访问、WebLogic反序列化漏洞这三个入口,如果你的服务器上正好跑了这些服务,优先检查它们的访问控制配置。
第四步:验证清理效果
清理后过24小时再重新登录检查一次,确认CPU使用率恢复平稳,同时检查是否出现新的定时任务,如果反复出现问题,建议直接找专业的

服务器挖矿病毒清理服务商处理,尤其是有资金流水或核心数据的生产环境,不要拿业务去赌自己的排查能力。
简米云服务器挖矿检测的日常运维清单
日常防范更多靠的是习惯,列一份可执行的自查清单:
- 高权限账号开启多因素认证,包括云控制台和服务器SSH两个层面
- 每月至少登录服务器执行一次
top和netstat检查 - 不要使用通用密码,特别是数据库中存放的用户口令
- 关闭不需要的端口和未使用的云盘快照,减少攻击面
- 云安全中心等安全产品的告警推送保持开启状态
常见问题:关于挖矿木马清理
挖矿程序清除后,CPU使用率恢复正常,但过了两天又变成100%,这是什么原因?
说明没有清除挖矿程序的持久化机制,定时任务、SSH密钥、systemd服务、LD_PRELOAD都有可能是后门所在,重新按上述流程排查一遍,同时将云平台的快照功能启用,回滚到被感染之前的版本也是一种选择。
服务器上没有重要数据,重装系统和清理挖矿哪个更划算?
如果确认是内核级rootkit感染,或者清理了两轮仍然复现,建议重装系统,重装前注意把数据盘和数据全部卸载,然后重新分区安装,单纯清理的成本接近重装成本,而且重装更彻底。
使用Docker部署的容器疑似被挖矿,需要处理宿主机吗?
需要排查宿主机,容器本身是隔离的,但挖矿程序如果以--privileged特权模式运行,可能突破容器边界,检查宿主机有没有可疑的定时任务和进程,同时对Docker的访问权限进行收敛,远程API端口(2375/2376)不要暴露在公网。
服务器被挖矿不是巧合,说明某个环节存在可被利用的漏洞,按照上述步骤清理干净只是第一步,把系统安全基线提升到“默认不再允许未知命令落地”的状态才是结果,一个干净的服务器环境,是运营任何业务的地基。
