
凌晨三点的告警从 CPU 飙高到揪出伪装进程干安全运维这行最怕的不是技术难而是半夜三点手机突然震动。Zabbix 监控大屏上一片刺眼的红色某台核心业务服务器的 CPU 使用率瞬间飙到 99%负载直线上升。这种场景我太熟悉了通常意味着两件事要么是代码写了死循环要么就是服务器被“挖矿”了。根据过往经验后者概率高达八成。面对这种高压场景新手容易慌乱地重启服务器但这恰恰是大忌——重启会丢失内存中的关键证据让攻击痕迹瞬间消失。作为老运维我的第一反应是保持现场快速定位。第一步火眼金睛识破伪装进程登录服务器后直接上top命令查看资源占用情况。top-c在进程列表中一个名为kworker/0:1的进程占用了 98% 的 CPU。乍一看这像是正常的内核工作线程名字极具迷惑性。很多挖矿木马喜欢伪装成kworker、systemd或dbus等系统进程来逃避初步检查。但细节不会撒谎。注意看top -c输出的完整命令行参数正常的内核线程不会显示具体的可执行文件路径而这个进程后面跟着一串奇怪的路径/tmp/.X11-unix/kworker。真正的内核线程是不会在/tmp目录下运行的更不会以文件形式存在。为了进一步确认我们用ps命令查看该进程的详细信息及其父进程ps-ef|grepkworker|grep-vgrep输出结果显示该进程的启动用户是www-dataWeb 服务用户而其父进程 PID 对应的是nginx或php-fpm。这就实锤了这是一个由 Web 服务衍生出的异常子进程极大概率是攻击者通过 Web 漏洞上传并执行的挖矿脚本。第二步紧急阻断切断恶意外连确认进程异常后不要急着 kill先看它连了谁。挖矿程序必须连接矿池才能工作切断网络连接能立即降低 CPU 负载同时保留进程用于后续取证。使用netstat查看该进程的网络连接情况假设 PID 为 12345netstat-antp|grep12345你会发现该进程正在尝试连接一个陌生的外部 IP端口通常是 3333、4444 或 8080 等矿池常用端口。例如ESTABLISHED 192.168.1.10:54321 45.76.12.34:3333。此时最稳妥的应急措施是利用iptables在防火墙层面直接阻断该 IP 的出站流量而不是直接删除文件防止触发攻击者的“自毁”或“守护”机制。# 阻断与恶意矿池 IP 的所有通信iptables-IOUTPUT-d45.76.12.34-jDROP执行后观察top命令会发现该进程的 CPU 占用率迅速下降因为它无法再提交算力证明进入了空转或重试状态。这时候再执行kill -9 12345终止进程并锁定相关文件chattr i /tmp/.X11-unix/kworker第三步抽丝剥茧溯源 Webshell 入口杀了进程只是治标找到攻击者是怎么进来的才是治本。既然父进程是 Web 服务问题肯定出在 Web 层面。我们需要从海量的 Nginx 访问日志中找到那个“致命”的上传请求。攻击者通常利用文件上传漏洞植入 Webshell如冰蝎、哥斯拉等。这些请求往往表现为对特定上传接口的 POST 请求且返回状态码为 200。我们可以组合使用grep和awk来筛选可疑记录。假设我们的文件上传接口路径包含/upload我们可以先过滤出相关 POST 请求grepPOST.*upload/var/log/nginx/access.log|awk$9 200如果日志量巨大上述命令可能还是太多。更精准的方法是结合时间范围。假设我们根据进程创建时间反推攻击发生在今天凌晨 02:00 到 03:00 之间awk-F[$2 12/Jul/2026:02:00:00 $2 12/Jul/2026:03:00:00/var/log/nginx/access.log|grepPOST|grep\.php在筛选出的日志中我注意到一条特殊的记录攻击者向/uploads/images/2026/config.php发送了一个 POST 请求User-Agent 却是空的且请求体大小异常几百 KB。进一步检查该文件ls-lh/var/www/html/uploads/images/2026/config.php文件修改时间与告警时间高度吻合。使用文本编辑器查看或strings命令分析发现其中包含了典型的冰蝎 Webshell 特征代码如复杂的异或解密逻辑和Runtime.getRuntime().exec调用。这就是攻击者植入的后门它定期被调用从而拉起了那个伪装的挖矿进程。总结与复盘构建自动化防御闭环这次应急响应虽然成功止损但也暴露了我们在监控粒度上的不足。仅仅依赖 CPU 告警往往滞后等告警响起时资源已被耗尽。为了避免再次踩坑建议在 Zabbix 或 Prometheus 中建立更精细的监控规则进程名与路径匹配监控不仅监控 CPU 高的进程还要监控“非系统目录下的系统命名进程”。例如当检测到进程名为kworker但可执行路径不在/proc或内核模块目录时直接触发高危告警。异常外连监控对www-data等非特权用户的出站连接进行基线学习一旦发起非常用端口非 80/443的外连立即告警。文件完整性监控FIM对 Web 目录下的.php、.jsp等脚本文件进行实时监控任何未经变更管理的写入操作都应触发即时通知。安全运营没有终点每一次告警都是完善防御体系的机会。只有将排查思路固化为自动化规则才能真正从“救火队员”转型为“安全守护者”。