服务器被植入挖矿程序是当前网络安全领域最为常见的问题之一,要精准定位并清除服务器内的挖矿活动,必须建立一套系统化的排查机制,核心上文归纳在于:通过实时监控CPU与内存资源的异常波动锁定可疑进程,结合网络连接分析定位矿池地址,进而追踪恶意脚本与持久化机制,最终清除恶意文件并修补安全漏洞。 这一过程需要管理员从系统表象深入到底层逻辑,层层剥离,彻底根除隐患。

资源异常监控与初步锁定
挖矿程序最显著的特征是对计算资源的极度掠夺,排查的第一步通常从系统负载入手,在Linux服务器环境下,管理员应首先使用top或htop命令查看系统资源占用情况,如果发现某个名为kdevtmpfsi、xmrig、minerd或伪装成系统进程(如nginx、systemd但路径异常)的进程长期占用100%的CPU或高比例内存,这通常是挖矿程序存在的直接证据。
对于Windows服务器,可以通过任务管理器或资源监视器查看CPU使用率,需要注意的是,现代恶意挖矿程序往往会具备“限速”或“潜伏”功能,仅在CPU空闲率高于一定阈值时才启动挖矿,以避免引起管理员注意,在进行初步排查时,建议人为进行高负载操作,观察是否有进程随之抢占资源,GPU挖矿也是常见形式,管理员需利用nvidia-smi等工具检查显卡显存与计算单元的占用情况,异常的GPU占用往往意味着存在针对显卡的挖矿行为。
进程溯源与父子关系分析
锁定高占用进程后,直接杀掉进程往往治标不本,因为挖矿程序通常具备守护进程或自动重启机制,深入分析需要通过ps -ef或pstree命令查看进程的父子关系(PID和PPID),挖矿进程通常是由一个父脚本或服务启动的,甚至可能是由定时任务触发的。
通过分析进程树,可以找到启动挖矿程序的源头,如果发现一个异常的bash或sh进程正在启动并不断重启挖矿二进制文件,那么这个脚本就是关键目标,应使用ls -l /proc/<PID>/exe命令查看进程对应的实际可执行文件路径,如果路径位于/tmp、/var/tmp、/dev/shm等可写目录下,或者文件名看似随机且无签名信息,则基本可以确认为恶意文件,记录下这些文件的绝对路径,为后续清除做准备,同时不要急于终止进程,以免打草惊蛇导致无法追踪后续的下载行为。
网络连接与矿池地址识别
挖矿程序必须与外部矿池服务器进行通信以提交算力并获取收益,这是其无法掩盖的弱点,利用netstat -antp或ss -antp命令,结合之前锁定的PID,查看该进程建立的网络连接,重点关注ESTABLISHED状态的连接,特别是连接到非标准端口(如3333、4444、8888等常见矿池端口)的TCP连接。

通过分析目标IP地址,利用whois或威胁情报平台查询该IP的归属,如果该IP被标记为已知的矿池地址或恶意C2服务器,则证据链确凿,还应检查服务器是否存在异常的对外发包行为,如连接到陌生的域名,挖矿程序有时会通过域名进行连接以绕过IP封锁,因此在/etc/hosts文件或DNS日志中查找可疑记录也是必要的步骤,切断网络连接是阻止挖矿行为继续造成损失的有效临时手段。
持久化机制与恶意文件查找
挖矿病毒为了长期驻留,通常会修改系统的持久化机制,这是排查中最复杂但也最关键的一环,管理员必须全面检查以下位置:
- 定时任务: 使用
crontab -l检查当前用户的定时任务,同时检查/var/spool/cron/、/etc/cron.d/、/etc/cron.daily/等系统级定时任务目录,恶意脚本常伪装成系统更新任务被写入此处。 - 系统服务: 检查
/etc/systemd/system/、/lib/systemd/system/下是否存在新增的.service文件,这些服务通常被设置为“开机自启”和“崩溃重启”。 - 启动脚本: 检查
/etc/rc.local、/etc/profile、~/.bashrc等脚本文件,看是否被插入了恶意代码。 - Web后门: 挖矿程序往往通过Web漏洞入侵,检查Web目录(如
/var/www/html)下是否存在包含eval、base64_decode、shell_exec等危险函数的PHP或JSP文件,以及图片文件中是否夹杂了恶意脚本代码。
利用find命令按时间查找最近变动的文件也是高效手段,例如查找24小时内修改的.so或.sh文件,对于发现的恶意文件,不要直接删除,建议先使用strings命令分析其内容,了解其攻击逻辑和下载源,以便评估受损范围。
清除与安全加固方案
在完成全面排查并定位所有恶意组件(二进制文件、启动脚本、定时任务、Webshell)后,即可执行清除操作,停止相关服务并删除定时任务;删除恶意文件及其变种;彻底查杀Webshell并修补Web漏洞。
清除后的安全加固至关重要,否则服务器会迅速被再次感染,加固方案包括:

- 修补漏洞: 立即更新操作系统内核、Web中间件(如Nginx、Apache、Tomcat)以及CMS组件,修复Redis未授权访问、Struts2远程代码执行等高危漏洞。
- 口令管理: 强制更改所有系统用户、数据库及远程连接的密码,确保密码复杂度,并禁用SSH的Root直接登录,改为密钥登录。
- 网络隔离: 配置防火墙规则(如iptables或安全组),仅开放必要的业务端口,禁止服务器主动出连非业务相关的公网IP,特别是封锁已知的矿池IP段。
- 部署HIDS: 安装主机入侵检测系统(如阿里云云盾、OSQuery等),实时监控文件变动和异常进程,建立纵深防御体系。
相关问答
问题1:服务器CPU占用率高,但任务管理器或top命令中找不到明显的高占用进程,这是什么原因?
解答: 这种情况通常意味着挖矿程序采用了内核级Rootkit技术进行隐藏,恶意代码通过加载内核模块(LKM)或劫持系统调用,在/proc文件系统中隐藏了自己的进程信息,使得常规命令无法查看,需要使用可信的、静态链接的工具(如busybox的ps)进行比对,或者通过lsmod检查是否有可疑的内核模块被加载,最彻底的解决方式是将服务器宕机,使用PE引导盘或离线Live CD进行挂载分析,或者直接重新安装系统并从备份中恢复数据。
问题2:杀掉了挖矿进程并删除了文件,为什么过一段时间服务器又自动开始挖矿?
解答: 这是因为没有彻底清除挖矿程序的持久化机制或入口点,攻击者通常会在系统中留下多个“复活”后门,例如在系统服务中注册了一个守护进程,一旦检测到挖矿进程消失,它就会立即重新下载并启动;或者SSH密钥已被篡改,攻击者通过SSH通道重新植入了恶意程序,解决此类问题必须进行全盘扫描,重点检查定时任务、系统服务、SSH公钥以及Web应用中的隐藏后门,确保所有入口都被封堵。
希望以上详细的排查与解决方案能帮助您彻底解决服务器挖矿问题,如果您在具体操作中遇到命令执行报错或无法定位的异常文件,欢迎在下方留言,我们将为您提供更具体的技术支持。


















