客户报障,说他们那台跑业务的 Linux 服务器最近一周越来越慢,特别是下午,卡得远程操作都一弹一弹的。我上去先看了下负载,load average 直接飙到 8 点多,但这台机器平时也就 1 左右。
top 一看,排第一的进程叫 kswapd0——这名字看着像内核线程,但我心里咯噔一下:真正的 kswapd0 是内核的交换进程,不会占 CPU。这个肯定是伪装的,真正的挖矿进程改了名字冒充系统进程。
再看一眼,进程的 CPU 占用 380%,多核跑满。我顺手看了下启动时间,这个 kswapd0 是五天前启动的,正好跟客户说的"变慢一周"对得上。
这种挖矿木马一般是这么进来的:要么 SSH 弱口令被爆破,要么哪个 Web 服务有漏洞被利用,先拿到一个普通权限,然后提权、关掉安全软件、下载挖矿程序、改进程名伪装、加定时任务保活。
我按流程处理:
第一步,确认进程和文件。ls -l /proc/
第二步,查 crontab。crontab -l 一看,果然多了条定时任务,每隔五分钟从某个境外地址下载执行一次脚本——这就是保活机制,光杀进程没用,五分钟后又活过来。
第三步,清掉所有相关的东西:kill 进程、删 /tmp 下的隐藏目录、删 crontab 里的任务、查了 /etc/rc.local 和 systemd 有没有被塞启动项,也顺手清了。
第四步,封掉下载源。在防火墙上把那个境外 IP 段 ban 了,防止它再下回来。
处理完重启了下服务,load 回到 0.8,客户说"快多了"。
然后我开始查它是怎么进来的。翻 /var/log/secure,发现五天前有一堆 SSH 爆破记录,来自同一个 IP,试了几千次密码,最后成功登进来了——客户那台机器 SSH 用的还是密码登录,root 密码是个弱密码,估计在哪个泄露库里躺着。
这就是根源。我让客户改成密钥登录、关掉 root 远程登录,密码全换成强密码。客户问我要不要把挖矿程序拿去分析分析,我说没那个必要,把口子堵上才是正经。
这事之后我给所有托管的机器都过了一遍:SSH 必须密钥登录、root 禁止远程登录、fail2ban 装上。挖矿木马这东西防不胜防,但 90% 都是 SSH 弱口令进来的,把这道门看好,能挡掉大部分。
评论