Vultr VPS 被入侵挖矿通常是因为服务器存在弱口令、未修复的系统漏洞或暴露了高危端口(如 SSH 22 端口),导致攻击者植入恶意脚本。排查异常进程的核心步骤包括:首先使用 top 或 ps 命令查看 CPU 占用率极高的进程,重点关注占用率超过 80% 且名称陌生的进程;其次通过 netstat 命令检查异常的网络连接,特别是连接到境外矿池 IP 的连接;最后检查定时任务、启动项及系统命令是否被篡改,找到恶意文件路径后终止进程并删除文件,同时修改所有用户密码并加固安全策略。
服务器挖矿程序入侵排查与清理实战
某天早上,我像往常一样检查服务器状态,却发现了一个异常现象:服务器的内存占用突然飙升到了异常高的水平。要知道,我的服务器上只部署了一个简单的静态网站,平时内存占用一直很低。这个反常的现象立刻引起了我的警觉。经过初步排查,我发现服务器被植入了挖矿程序:恶意进程 PID 1969760:/var/tmp/.kworker/httpd(伪装成系统进程) 恶意进程 PID 1949350/1949421:连接到门罗币矿池 xmr.nanopool.org:14433 资源占用:CPU 占用高达 89%,内存占用超过 25%,已持续运行 4.5 小时 这是一次典型的服务器入侵事件。接下来,我将详细记录整个排查和清理过程,希望能为遇到类似问题的朋友提供参考。第一步:发现异常进程 1.1 查看系统资源占用 首先,我们需要确认哪些进程在消耗系统资源。使用以下命令查看 CPU 占用最高的进程:# 查看当前 CPU 占用最高的进程 ps aux --sort=-%cpu|head-n10 一键获取完整项目代码 bash 1 2 执行后,我看到了这样的输出:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1969760 89.2 13.1 652040 265028? Ssl 03:45 269:42 /var/tmp/.kworker/httpd root 1949350 0.8 12.3 311100 248192? Sl Jan30 4:38 ./client -o xmr.nanopool.org:14433 -u 46thqyYPQnWNErt2C8TjQJUCXvrDEX1YNGT6EeGjvtY1iCKmHkR25UJewuyyagGzUeEiu98RZkFzZQMHpJX4ijKbMs2wAQw.lenux -k --tls --donate-level1do-agent 1969492 0.6 10.9 1383936 221464? Ssl 03:43 1:58 mysqld 一键获取完整项目代码 bash 1 2 3 4 1.2 理解输出信息 让我们解读一下这些字段的含义:
记一次 GPU 服务器挖矿事件应急响应
三、排查过程 从通报里面知道以下 IP 为异常 IP,从这两个信息开始进行排查,查看威胁情报得知均为德国 IP: 209.38.180.198:443 德国矿池 138.68.113.5:80 德国 IP 3.1 进程分析 先把云安全中心高级版装上,运行全盘扫描,并且等待扫描过程中手工排查服务器,使用 ss -ta 命令发现服务器有和恶意 IP 连接 图片 执行 netstat -tnlpu | grep 209.38.180.198,想查看 PID,结果未返回相关结果,反而过了 10 秒后出现阿里云告警:图片 怀疑 netstat 命令被黑客篡改,使用 stat /usr/bin/netstat 收集篡改时间,可以看到最后一次修改文件属性的时间是 2024 年 9 月 19 日 17:49。询问运维这台服务器什么时候购买的,是在几个月之前,因此基本可以推断入侵时间是在 2024 年 9 月 19 日左右。图片 为避免阿里云安全中心误报,把/usr/bin/netstat 下载后丢到威胁情报进行查询,结果依然是报毒:图片 查看行为,有很多 grep -v 反向过滤矿池 IP,导致无法使用 netstat -tnlpu 查看 pid 图片 接着阿里云不断报出了新的告警 systemctl、top 命令全部被篡改,基本可以确定不能继续使用系统命令进行排查 图片 图片 下载 busybox 进行应急 代码语言:javascript AI 代码解释 执行 busybox top 查看 CPU 占用最高的进程,发现存在异常进程/9ac8a281 图片 查看根目录,不存在/9ac8a281,怀疑文件已经被删掉了,恶意程序应该在内存里运行 代码语言:javascript AI 代码解释 恶意文件/9ac8a281 果然被删除了 图片 找运维从其他机器上拷贝了一个干净的 systemctl 到中毒机上,排查守护进程,发现异常服务 63f55525.service 代码语言:javascript AI 代码解释 执行./systemctl status 63f55525.service,看到加载恶意文件/9ac8a281 图片 查看这个守护进程的具体配置,找到恶意文件的位置/usr/bin/9ac8a28120cf5089 代码语言:javascript AI 代码解释 查看开机启动项、定时任务、系统账号、挂载,无异常 代码语言:javascript AI 代码解释 cat /var/spool/cron/crontabs cat /etc/passwd df -h cat /proc/mounts cat /etc/rc.local cat:/etc/rc.local:No such file or directory(base)root@gpua15:/var/spool/cron/crontabs# systemctl status rc-local ● rc-local.service
挖矿入侵应急响应:快速终止进程与清除后门
1. 定位挖矿进程 挖矿进程通常有两个显著特征:一是 CPU 占用率长期居高不下 (多在 80% 以上),二是进程名多为随机字符串 (如"xmr-miner""kworker"等,也可能伪装成"system""java"等正常进程名)。实操时可通过以下命令排查:• 用 top 或 htop 查看实时进程:按"P"键按 CPU 占用率排序,重点关注占用率异常且名称陌生的进程,记录其 PID(进程 ID) 和命令行参数 (如/tmp/xxxxx -o stratum+tcp://矿池 IP:端口)。• 用 ps -ef | grep 可疑进程名确认进程详情:比如发现 PID 为 1234 的进程名是"abc123",可执行 ps -ef | grep 1234,查看进程的启动用户、可执行文件路径 (如/var/tmp/abc123),判断是否为恶意程序。• 排查网络连接:挖矿进程需连接矿池提交算力,用 netstat -antp | grep ESTABLISHED 或 ss -antp 查看异常 outbound 连接,若有连接到境外陌生 IP(尤其端口为 3333、4444、5555 等矿池常用端口),对应的进程大概率是挖矿程序。(2025 年 12 月 21 日)
FAQ
Q: Vultr VPS 被挖矿的主要原因是什么?
A: 主要是弱口令、未修复漏洞或暴露高危端口。
Q: 发现挖矿进程后可以直接 kill 吗?
A: 建议先排查守护进程和定时任务,否则会自动重启。