凌晨两点,VPS 告警显示 CPU 连续 10 分钟维持 90%,登录后只见名称像 systemd 的陌生进程。矿工常改名、删文件或借定时任务重生,只搜名称会漏掉父子链,也会误杀业务。排查应沿进程树、定时任务、启动项、异常外连四条线索交叉验证,先看前两条。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:dogyun(低价云服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
一、从进程树还原矿工的真实上级
先做高负载样本采集,别立即重启。记录负载、进程、端口与登录来源,从高 CPU 进程向上追父进程、向下看子进程。用 top -H 找占用线程,以 ps -ef --forest、pstree -p 补齐关系。判断重点不是名称,而是父子关系、命令行、可执行路径、账户与启动时间能否印证。

对可疑 PID 读取 /proc/PID/exe、cmdline、cwd 和 status。exe 若指向已删除文件,常带 (deleted) 标记;临时下载器也可能出现在父进程命令行。使用随身服务器这类远程入口时,先导出快照再进终端。CPU 高不等于挖矿,编译和备份也会吃满资源;PID 重启即变,还须核对 cgroup 与容器命名空间。
二、从定时任务找到反复拉起的源头
进程被杀后数分钟又出现,先沿定时任务持久化检查用户 crontab、/etc/crontab、/etc/cron.*,再查 systemd timer、at 和启动脚本。展开被包装的命令:有些表面执行“同步”,实际用 curl、wget 下载脚本,再经 base64 解码、赋权、后台执行。还要检查引用脚本、下载目录和修改时间。

识别矿池域名时,把连接与 DNS 查询对应到 ss -tpn、lsof -i 和解析日志,核对域名、端口及发起进程。陌生域名只能算佐证,代理和正常服务也会外连。将解析结果、启动链与样本哈希放在同一时间线,再对照包管理器校验和系统文件完整性。采证后限制异常外连并保存证据,按父到子停止下载器与矿工,删除定时项、临时文件及被篡改配置;连续观察并重启复查。只删二进制却保留拉起入口,数小时后仍会复发。
从高负载反查异常进程树
当服务器出现持续高负载时,不要立即使用 kill -9 终止陌生进程。先用 top -H -o %CPU、ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --forest 和 pstree -ap 采集样本,观察占用资源的线程属于哪个父进程,以及进程是否由 SSH 会话、临时目录或非常规服务启动。若 CPU 占用来自大量随机命名进程,通常说明样本已建立工作池;若进程短暂退出后又由父进程拉起,则要重点检查 定时任务持久化。
采集时应保存进程树、命令行、环境变量摘要和可执行文件路径,可执行 readlink -f /proc/$PID/exe、cat /proc/$PID/status 与 ss -tpn。样本应先隔离备份,再分析,不要在原机直接运行未知文件。删除进程前还应确认它是否绑定了业务端口,避免误杀数据库、容器或安全服务。容器环境可继续检查 docker stats、docker inspect 和容器内进程,防止恶意程序藏在下层容器。
另一个常见误区是只清理当前进程。若攻击者已写入 /etc/cron.d、/var/spool/cron、~/.bashrc、systemd 单元或启动脚本,即使杀掉矿工,它也会在重连或重启后恢复。对 cron 任务应逐条执行 crontab -l 并核对计划时间和命令路径;对 systemd 服务则检查 systemctl list-unit-files --state=enabled,重点查看来源不明、指向临时目录且开机即启动的单元。

矿池识别、完整性校验与清理清单
可疑程序常通过矿池域名或 IP 持续外连。可从 ss -tpn、DNS 缓存、命令历史和样本字符串中提取域名,再结合 getent hosts、WHOIS、证书信息和多地解析结果判断。识别时不要只依赖单个域名,因为攻击者会更换域名、使用动态 DNS,甚至直接连接矿池 IP;应结合 矿池协议特征、固定端口、周期性心跳和长期在线连接综合判断。
清理前应先阻断外连并备份证据,再删除样本及相关持久化项,最后修复入口。系统文件完整性可通过包管理器校验,例如 Debian、Ubuntu 使用 debsums,RHEL 系使用 rpm -Va,并与 dpkg --verify 或 yum check 结果交叉检查。若关键文件被替换,应从可信镜像或同版本干净主机恢复,不能仅凭文件时间戳判断。
可执行检查清单:①执行 ps --forest 和 pstree -ap 定位父子关系;②记录高 CPU 进程的可执行路径、哈希、用户及网络连接;③检查 cron、systemd、启动脚本和 shell 配置;④搜索矿池域名、随机字符串文件名及 /tmp、/dev/shm 下的异常文件;⑤备份日志与样本后断网、终止进程、删除持久化项;⑥校验系统包并从可信源恢复受损文件;⑦修改 SSH 密钥与口令,关闭密码登录,封禁来源 IP,检查端口转发和云厂商安全组;⑧重启后持续监控 CPU、网络连接和任务列表,确认没有自动恢复。
最终目标不是只让 矿工进程消失,而是确认它无法再次启动,也无法通过其他账户或容器重新进入。完成清理后保留一份进程树、连接记录和校验结果,既便于复盘,也能在后续告警时快速比对。


喜欢
顶
难过
囧
围观
无聊





