一、半夜收到告警:你的服务器正在“替别人打工”
💡 推荐阅读:云服务器带宽选1M还是3M?实测数据告诉你,别再为“够用”交智商税了
相信不少站长都有过这种经历:大半夜正睡得香,手机突然被阿里云/腾讯云的CPU告警短信轰炸。打开后台一看,CPU使用率直接拉满到100%,但自己明明没有跑任何高负载的业务。这时候,十有八九是服务器被入侵,植入了挖矿木马。
挖矿木马最典型的特征就是疯狂占用CPU资源去计算哈希值,为攻击者挖取门罗币(XMR)等匿名加密货币。它们不仅拖垮你的业务响应速度,还会产生高昂的电费和云资源费用。笔者曾在一个月内处理过三次类似的入侵事件,积累了一些实战排查经验。今天就把这套“从发现到清除”的完整思路分享出来,希望能帮你少走弯路。
二、动手前的准备:两个必须知道的前提
💡 延伸阅读:SSH 总是被爆破?手把手教你用 Fail2ban 自动封禁暴力破解的黑客 IP,从此日志清净了
在开始敲命令之前,请务必确认以下两点:
- 立刻快照备份:在不停止进程的情况下,先去云控制台给磁盘打一个快照。万一后续操作失误,还能有后悔药吃。
- 断开外网(可选但推荐):如果你有独立IP,且能通过VNC或内网登录,建议先在安全组里暂时封掉出口流量(或直接断外网)。这能防止木马在清理过程中再次从远端下载新的恶意载荷。
另外,建议准备一台靠谱的云服务器作为跳板机或临时分析环境。毕竟生产环境越干净越好,别把分析工具都装在被入侵的机器上。如果你还没有合适的机器,选择正规大厂的按量付费实例会更稳妥。
三、核心排查实操:五步定位“元凶”
💡 深度技术指南:WordPress 评论风暴与Pingback漏洞,我用这5招彻底根治,亲测有效!
第一步:用 top 找出最吃CPU的进程
登录服务器,第一时间执行:
top -c
按一下键盘的 P 键(大写P),让进程按CPU使用率降序排列。通常你会看到某个进程的CPU占用率高达几百甚至上千百分比(多核情况下)。记下这个进程的 PID(进程号)。
这里有个小技巧:top -c 能显示完整的命令行,而不仅仅是进程名。很多木马会伪装成 kworker、[kthreadd] 或者随机字符串,只有看到完整路径才能判断是否异常。
第二步:查看进程详情与可执行文件路径
假设我们看到的异常PID是 2333,执行:
ls -l /proc/2333/exe
cat /proc/2333/cmdline | tr '\0' ' '
/proc/2333/exe 是一个软链接,直接指向该进程实际运行的二进制文件路径。如果路径指向 /tmp、/var/tmp、/dev/shm 或者 /root/.ssh 等敏感目录,基本可以实锤是恶意程序。
同时,查看该进程的工作目录和打开的文件:
ls -l /proc/2333/cwd
ls -l /proc/2333/fd | head -50
这一步能帮你找到木马释放的隐藏脚本或者日志文件。
第三步:顺藤摸瓜,揪出守护进程与定时任务
挖矿木马通常有“守护”机制,你杀了进程它马上又会复活。这背后往往是定时任务(Crontab)或者Systemd服务在捣鬼。
立即检查当前用户的定时任务和系统级定时任务:
crontab -l
cat /etc/crontab
ls -l /etc/cron.d/
cat /var/spool/cron/root
重点看有没有奇怪的URL(http://xxx.xxx/xxx.sh)或者Base64编码的字符串。常见的套路是:定时任务每隔几分钟就从远程服务器下载一个 update.sh 并执行。
接着检查Systemd服务,防止它注册成开机自启:
systemctl list-units --type=service --state=running | grep -v 'systemd'
逐一排查名字奇怪的服务,比如 dbus-helper.service 这种。用 systemctl cat 服务名 查看其ExecStart路径。
第四步:检查SSH后门与网络连接
很多挖矿木马是通过SSH暴力破解进来的。检查一下SSH密钥文件是否被篡改或新增了陌生的公钥:
cat ~/.ssh/authorized_keys
ls -la ~/.ssh/
如果看到一串你不认识的公钥,立刻删除。同时,查看当前的网络连接,找到木马回连的C2(控制端)地址:
netstat -antp | grep ESTABLISHED
或者使用 ss -antp。看到连接外部IP的异常进程PID,再回头对照一下是否是刚才那个挖矿进程。
第五步:彻底清除与加固
确认所有恶意文件后,按以下顺序操作(注意:先禁用定时任务,再杀进程):
# 1. 删除恶意定时任务(先注释或清空)
crontab -r
sed -i '/恶意路径/d' /etc/crontab
# 2. 停止并禁用恶意服务
systemctl stop 恶意服务名
systemctl disable 恶意服务名
# 3. 强制杀死挖矿进程
kill -9 2333
# 4. 删除恶意文件(根据前面查到的路径)
rm -rf /tmp/.X11-unix/ /var/tmp/... /root/.ssh/authorized_keys
删除文件后,建议再执行一遍 top 观察几分钟,确认CPU恢复正常。如果又出现新进程,说明还有隐藏的Rootkit或内核模块后门,那就需要检查 lsmod 并考虑重装系统了。
四、避坑清单:这些细节决定成败
根据笔者的血泪经验,以下几点非常容易被忽略,导致清理不彻底或者误伤业务:
- 别急着kill进程:先看
/proc/PID/exe和fd,否则你删了二进制文件,但进程还在内存里运行,过一会儿又通过其他漏洞重新写入。 - 注意隐藏权限:有些木马文件被设置了
chattr +i不可修改属性。删除前先执行lsattr 文件名,如果是i属性,需要先chattr -i 文件名再删除。 - 修改所有密码:包括root密码、数据库密码、FTP密码。因为攻击者可能已经通过键盘记录器拿到了你的凭据。
- 修补漏洞入口:检查是不是Redis未授权、Docker API未授权或者Weblogic反序列化漏洞导致的入侵。如果漏洞不补,清理完第二天又会中招。
- 升级内核与软件:老版本内核的漏洞是重灾区,尤其是脏牛(Dirty COW)这类提权漏洞。
五、总结:防患于未然比亡羊补牢更重要
排查挖矿木马的过程,本质上是一场与攻击者的时间赛跑。通过 top 定位异常进程、/proc 文件系统深挖文件路径、crontab 和 systemd 清除持久化后门,这套组合拳能解决90%以上的常见挖矿病毒。
但说实话,服务器安全的核心在于“预防”。与其每次被入侵后花几个小时清理,不如在初期就做好基础防护:购买云服务器时选择正规服务商,并开启安全组防火墙;注册域名时用隐私保护,避免个人信息泄露被社工;日常运维中尽量使用密钥登录而非密码,并关闭不必要的端口。
希望这篇实战记录能帮你在遇到CPU飙高时不再慌张。如果你有更奇葩的清理经历,欢迎在评论区交流讨论。
相关技术专题与延伸阅读
- 云服务器带宽选1M还是3M?实测数据告诉你,别再为“够用”交智商税了
- SSH 总是被爆破?手把手教你用 Fail2ban 自动封禁暴力破解的黑客 IP,从此日志清净了
- WordPress 评论风暴与Pingback漏洞,我用这5招彻底根治,亲测有效!
- WordPress 慢得像老牛拉破车?Redis 对象缓存与页面加速方案深度横评,看完不再纠结选哪个
📦 【资源免费领】本文全套实操配置文件与避坑手册下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。