云主机被植入挖矿程序后的应急排查步骤(含命令清单) 核心要点图解,先隔离取证再清理,盲目重启会丢失进程与网络连接证据。;CPU 飙高优先查 top 中的异常进程名与父进程,再用 lsof 定位可执行文件。;挖矿持久化常见于 crontab、systemd 服务、rc.local 与 SSH 公钥,需逐项核查。;清理后必须封堵入口漏洞并复验,否则数小时内可能再次被植入。
云主机被植入挖矿程序后的应急排查步骤(含命令清单) · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 先隔离取证再清理,盲目重启会丢失进程与网络连接证据。
  • CPU 飙高优先查 top 中的异常进程名与父进程,再用 lsof 定位可执行文件。
  • 挖矿持久化常见于 crontab、systemd 服务、rc.local 与 SSH 公钥,需逐项核查。
  • 清理后必须封堵入口漏洞并复验,否则数小时内可能再次被植入。

半夜收到云监控告警:CPU 持续 100%、带宽跑满、账单异常,登录一看 top 里躺着一个不认识的进程——这几乎是云主机被植入挖矿程序的标准开场。很多运维第一反应是 kill 或重启,结果证据没了、进程又被拉起,问题反复。本文按「隔离取证 → 进程定位 → 持久化清理 → 入口封堵 → 加固复验」五步给出可直接执行的命令清单,帮你在最短时间内控制损失。

第一步:隔离与取证,别急着杀进程

确认异常后先保留现场,再动手清理。挖矿程序往往带守护与持久化机制,直接 kill 只会让它换个名字重来。

  • 在云控制台安全组中限制出方向,或执行 iptables -I OUTPUT -j DROP 临时断网(注意先放行你的 SSH 来源)。
  • 记录现场:date; uptime; top -b -n1 > /root/ir_top.txt。
  • 保存网络连接:ss -antp > /root/ir_ss.txt,重点看矿池地址与 3333、5555、14444 等常见端口。
  • 对可疑文件做哈希留存:sha256sum /path/to/suspect,便于后续溯源与情报比对。
取证文件建议打包后下载到本地留存,再开始清理,避免误删后无法复盘。

第二步:用命令定位恶意进程与文件

挖矿进程常伪装成 kworker、sysupdate、dbus 等系统名,判断依据是路径与父进程是否合理。

top -c                       # 看完整命令行与CPU占用
ps -ef --forest              # 看进程树与父进程
ls -l /proc/<PID>/exe       # 看可执行文件真实路径
lsof -p <PID>               # 看打开的文件与网络连接
cat /proc/<PID>/cmdline | tr '' ' '   # 看启动参数

若 exe 指向 /tmp、/var/tmp、/dev/shm 或隐藏目录,基本可确认异常。接着用 find 按时间与权限筛查落地文件:

find /tmp /var/tmp /dev/shm -type f -mtime -7 -ls
find / -xdev -perm -4000 -type f -mtime -7 -ls   # 近期新增的SUID文件

第三步:清理持久化,别只杀进程

清理的核心是把「拉起机制」一并拔掉,否则几分钟内复活。按下面清单逐项核查:

位置检查命令关注点
用户定时任务crontab -lcurl/wget 下载执行、base64 编码
系统定时任务ls -l /etc/cron.* /var/spool/cron近期新增脚本
systemd 服务systemctl list-unit-files | grep enabled陌生服务名与异常 ExecStart
启动脚本cat /etc/rc.local ~/.bashrc /etc/profile末尾追加的下载命令
SSH 后门cat ~/.ssh/authorized_keys不认识的公钥
动态库劫持cat /etc/ld.so.preload非空即高度可疑

确认后先停服务再删文件:systemctl disable --now 可疑服务名,删除对应 unit 文件并 systemctl daemon-reload;crontab 用 crontab -e 删除异常行。最后再 kill 进程并删除样本文件。

第四步:封堵入口,找到怎么进来的

挖矿只是结果,入口才是根因。常见入口有三类,逐一验证:

  • SSH 暴力破解:grep 'Failed password' /var/log/secure | awk '{print }' | sort | uniq -c | sort -rn | head,看是否有高频来源 IP。
  • 应用漏洞:检查 Redis 是否未授权(redis-cli ping 公网可达即危险)、Docker API 是否暴露 2375、Web 目录是否有 webshell。
  • 弱口令与旧组件:排查数据库、面板、中间件默认口令,升级存在已知漏洞的版本。

处置动作:改所有相关口令与密钥、禁用密码登录改密钥认证、安全组只放行必要端口、下线暴露的 Redis/Docker 端口。

第五步:加固复验与行动清单

清理完成后不要立刻收工,至少观察 24 小时。复验命令:top 看 CPU 是否恢复、ss -antp 看是否仍有异常外联、crontab -l 与 systemctl list-unit-files 确认无残留。加固建议:开启主机层入侵检测与文件变更监控,对 CPU 异常、异常外联、关键目录写入设置告警;在防护层面可借助 AegisX 的主机安全能力做基线核查与实时告警,把「事后排查」前移为「事中发现」。

行动建议:今天就把本文的命令清单存成应急手册,并在测试机演练一遍断网取证与持久化清理流程——真出事时,熟练度比工具更重要。

常见问题(FAQ)

云主机CPU突然跑到100%,怎么快速判断是不是被挖矿了?

先看 top 中占用最高的进程名与用户,挖矿进程常伪装成 kworker、sysupdate 等系统名但路径异常。用 ps -ef 查其父进程与启动参数,再用 ls -l /proc/PID/exe 看真实可执行文件路径;若指向 /tmp、/var/tmp 或隐藏目录,基本可判定为挖矿程序,应立即隔离主机并保留现场。

发现挖矿进程后能直接 kill 掉吗?

不建议直接 kill。挖矿程序通常配有守护进程或定时任务,kill 后会被立刻拉起,且直接删除会丢失样本与网络连接证据。正确做法是先断网隔离、记录进程 PID 与可执行文件哈希,再排查 crontab、systemd、rc.local 等持久化位置,最后统一清除并封堵入口。

挖矿程序一般藏在哪些持久化位置?

常见位置包括用户与系统 crontab、/etc/cron.d、systemd 自定义服务、/etc/rc.local、~/.bashrc 与 /etc/profile 启动脚本、SSH authorized_keys 后门公钥,以及 ld.so.preload 劫持。排查时逐项检查并比对修改时间,异常条目要结合文件内容判断是否为下载执行脚本。

清理完挖矿程序还需要做什么?

清理只是止血,必须封堵入口。检查 SSH 是否被暴力破解、Redis 与 Docker 是否暴露公网、Web 应用是否存在已知漏洞,修改所有弱口令与密钥,关闭不必要端口,并部署主机层防护与实时告警,否则攻击者往往在数小时内通过同一入口再次植入。

没有安全经验的小团队该如何预防云主机被挖矿?

核心是三件事:收敛暴露面(安全组只放行必要端口、禁用密码登录改密钥)、及时打补丁(系统与中间件)、建立监控告警(CPU 异常、异常外联、关键目录变更)。可借助主机安全类产品做基线检查与入侵检测,把被动应急变成主动发现,降低被植入后的处置成本。