KotodamaJournal
工程札记心情 · 警惕Blueprint

面板被打穿之后:一次小主机入侵复盘

某天下午看监控,小规格云主机负载突然冲到八百多。业务流量并不大——真正忙的是一堆伪装成系统进程的 Perl 外连,以及一台对外打 SSH 的暴力破解工具。这不是性能问题,是入侵。

下文脱敏记录入口、载荷、清理与加固;具体 IP、实例号、业务名与账号一律略去。

入口:面板,不是 SSH

机器上装过常见的 Linux 面板。临时目录里留下了带版本号的恶意脚本文件名(形如某面板版本号的 .pl),以及同类「加速 / 面板」命名的 Perl 载荷。结合进程与持久化痕迹,判断入口更像是面板已知漏洞或未授权入口,而不是先撞开 SSH。

教训很直白:面板对外暴露、版本滞后,等于多开一扇管理后门。业务端口再干净,也挡不住管理面被打穿。

时间线(压缩版)

阶段 发生了什么
入侵后数周 暴力破解二进制在隐藏目录里常驻,对外扫 SSH
同期 IRC 僵尸木马伪装成 klogd / acpid / sshd / httpd 等,连上公网 C2
排查当日 负载异常 → 杀进程、清外连、拆持久化 → 业务以生产配置拉起

从植入到被发现,中间可以空窗很久。负载与外连数飙升,往往才是「终于看得见」的那一刻。

落在机器上的几类东西

1. IRC 僵尸(主威胁)
可执行体是系统里的 perl,进程名伪装成常见守护进程。连公网 IRC 端口做 C2,单机可拉出数百条外连。持久化靠 crontab 与开机脚本(如 rc.local),重启也会回来。

2. SSH 暴力破解工具
藏在 /tmp 下隐蔽目录,长期占用 CPU,把这台机变成扫别人的炮灰——这也是负载离谱的主因之一。

3. 隐蔽隧道类工具
通过公共 CDN 拉取中继客户端,在共享内存目录里落隐藏工作区,用来绕过常规防火墙视线建隧道。计数文件、重启脚本一类痕迹一并清掉。

4. /tmp 里的隐藏目录与杂散二进制
大量点开头目录、来路不明的可执行文件。临时目录可写且常被忽略,是这类载荷的首选落脚点。

清理时做了什么

按「先断手脚,再拆窝,最后查钥匙」的顺序:

  1. 杀掉伪装系统名的 Perl 木马与暴力破解进程,确认恶意外连归零
  2. 删除 /tmp、共享内存目录下的隐藏目录与可疑脚本 / 二进制
  3. 清空 crontab 与开机脚本里的恶意启动项
  4. 检查 SSH authorized_keyssshd 配置是否被加后门公钥或改登录策略
  5. 确认业务进程用正确的生产配置重新拉起,数据库等依赖仍只监听本机

清理后负载从三位数跌回接近空闲。业务能起来,不等于安全债结清——只说明「当前这一轮」被打断了。

还没做完就不算结束

入侵一旦坐实,默认凭据与面板会话都可能已泄露。优先级大致是:

优先级 事项
轮换 root / 面板 / 数据库 / 缓存等全部密码与密钥;面板升到当前修复版本或考虑弃用公网面板
SSH 改密钥登录、关密码登录、收紧 root 与端口;防火墙只放必要入站
第三方回调 / JS-SDK 等若绑定出口 IP,在控制台更新白名单(勿把真实 IP 写进公开文档)
复查其它系统用户、非常驻服务、异常监听端口,必要时重装系统再迁业务

若只杀进程不换密、不升级面板,同一入口会再来一遍。

攻击链路(概念图)

面板漏洞 / 未授权入口 → 上传 Perl 载荷 → IRC 僵尸常驻(伪装系统进程 + C2) → 植入暴力破解与隐蔽隧道 → crontab / 开机脚本持久化 → 高负载 + 大量恶意外连

留给以后的三条习惯

  1. 管理面当攻击面:面板、数据库管理、远程桌面,能不上公网就不上;要上就必须版本可控、强认证、少暴露。
  2. 看进程名之前先看可执行文件路径sshd 若实际是 /usr/bin/perl,名字再像系统服务也不可信。
  3. 临时目录与共享内存要进巡检:隐藏目录、陌生二进制、异常 crontab,往往比业务日志更早报警。

小主机也能被拖进僵尸网络。复盘写下来,是为了下次负载异常时,第一反应不是「加机器」,而是「谁在用这台机器打别人」。