<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>应急响应 on 逍遥笔记</title><link>https://blog.7qiang.com/tags/%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94/</link><description>Recent content in 应急响应 on 逍遥笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>逍遥笔记</copyright><lastBuildDate>Sun, 21 Jun 2026 17:00:00 +0800</lastBuildDate><atom:link href="https://blog.7qiang.com/tags/%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94/index.xml" rel="self" type="application/rss+xml"/><item><title>一次 Nginx Lua 木马应急响应实录：从移动端跳转博彩站到 root 级入侵溯源</title><link>https://blog.7qiang.com/posts/nginx-lua-malware-incident-response-2026/</link><pubDate>Sun, 21 Jun 2026 17:00:00 +0800</pubDate><guid>https://blog.7qiang.com/posts/nginx-lua-malware-incident-response-2026/</guid><description>&lt;img src="https://blog.7qiang.com/blog-cover-cyber-mask.gif" alt="Featured image of post 一次 Nginx Lua 木马应急响应实录：从移动端跳转博彩站到 root 级入侵溯源" /&gt;&lt;section class="xiaoyao-contact-card" aria-label="联系逍遥"&gt;
 &lt;img class="xiaoyao-contact-card__qr" src="https://blog.7qiang.com/contact-qr.png" width="690" height="690" loading="lazy" decoding="async" alt="逍遥微信二维码"&gt;
 &lt;div class="xiaoyao-contact-card__content"&gt;
 &lt;h3 class="xiaoyao-contact-card__title"&gt;联系逍遥&lt;/h3&gt;
 &lt;p class="xiaoyao-contact-card__description"&gt;扫码添加微信，或点击下方按钮复制联系方式。&lt;/p&gt;
 &lt;div class="xiaoyao-contact-buttons" data-contact-buttons&gt;
 &lt;button class="xiaoyao-contact-button xiaoyao-contact-button--wechat" type="button" data-copy-contact="plus6566" data-copy-label="微信号"&gt;
 &lt;span class="xiaoyao-contact-button__label"&gt;微信&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__value"&gt;plus6566&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__status" data-copy-status&gt;点击复制&lt;/span&gt;
 &lt;/button&gt;
 &lt;button class="xiaoyao-contact-button xiaoyao-contact-button--qq" type="button" data-copy-contact="826215906" data-copy-label="QQ 号"&gt;
 &lt;span class="xiaoyao-contact-button__label"&gt;QQ&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__value"&gt;826215906&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__status" data-copy-status&gt;点击复制&lt;/span&gt;
 &lt;/button&gt;
 &lt;span class="xiaoyao-contact-feedback" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;/div&gt;

 &lt;/div&gt;
&lt;/section&gt;

&lt;p&gt;进微信群请联系博主，各位觉得文章对你有帮助的话可否打赏一些呀~&lt;/p&gt;
&lt;hr&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;事件等级&lt;/strong&gt;：🔴 严重 — 已确认 root 级入侵
&lt;strong&gt;攻击链&lt;/strong&gt;：root SSH 认证登录 → Nginx Lua 木马植入 → 服务脚本持久化 → 日志清洗
&lt;strong&gt;持久化方式&lt;/strong&gt;：init.d 服务脚本回灌 + chattr +i 文件锁定 + 时间戳伪造
&lt;strong&gt;处置结果&lt;/strong&gt;：活跃链路已切断，已知残留已隔离，证据已归档&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="一事件概述"&gt;一、事件概述
&lt;/h2&gt;&lt;p&gt;某电商站点运维人员收到用户反馈：&lt;strong&gt;移动端访问站点时偶发跳转到博彩风格的外部页面，桌面端访问正常&lt;/strong&gt;。同时该站点通过 CDN 访问时频繁出现 &lt;code&gt;520&lt;/code&gt; 错误。&lt;/p&gt;
&lt;p&gt;初步排查后发现，这不是前端 Bug，也不是支付插件异常，而是一次&lt;strong&gt;已经落证的服务器侧入侵事件&lt;/strong&gt;。攻击者通过已认证的 root SSH 会话进入系统，在 Nginx 层植入 Lua 恶意模块实现流量劫持，并配合了服务脚本持久化、文件不可变属性锁定和日志清洗等全套反取证手段。&lt;/p&gt;
&lt;p&gt;本文脱敏后完整记录此次应急响应的全流程，包括排查思路、取证方法、处置步骤和经验教训。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二事件影响"&gt;二、事件影响
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;业务层面&lt;/strong&gt;：移动端用户访问站点时被服务端重定向到外部博彩风格域名，直接影响用户体验和业务信誉。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CDN 层面&lt;/strong&gt;：CDN 出现间歇性 &lt;code&gt;520&lt;/code&gt; 错误，并非单纯的 CDN 问题，而是叠加了 Nginx worker 进程崩溃风险。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;支付链路&lt;/strong&gt;：排查期间发现支付反代服务偶发超时，经分析属于 Docker 网络桥接配置问题，与 Lua 木马无直接关联。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;运维安全&lt;/strong&gt;：root 密码登录仍处于开放状态，且系统日志被清洗，导致部分入侵入口无法百分百回溯。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="三核心时间线"&gt;三、核心时间线
&lt;/h2&gt;&lt;h3 id="31-首次入侵约一个月前"&gt;3.1 首次入侵（约一个月前）
&lt;/h3&gt;&lt;p&gt;HIDS 记录到一条真实的 root SSH 会话，该会话执行了以下操作：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;动作&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;修改 Nginx 配置文件&lt;/td&gt;
 &lt;td&gt;操作 &lt;code&gt;proxy.conf&lt;/code&gt; 等反向代理配置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;植入恶意 Lua 文件&lt;/td&gt;
 &lt;td&gt;将恶意 WAF 脚本写入 Nginx 相关目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;锁定文件&lt;/td&gt;
 &lt;td&gt;对植入文件执行 &lt;code&gt;chattr +i&lt;/code&gt; 使其不可变&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;伪造时间戳&lt;/td&gt;
 &lt;td&gt;修改文件修改时间，掩盖植入时间点&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;重启 Nginx&lt;/td&gt;
 &lt;td&gt;执行 &lt;code&gt;nginx -t &amp;amp;&amp;amp; /etc/init.d/nginx restart&lt;/code&gt; 使木马生效&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;清洗日志&lt;/td&gt;
 &lt;td&gt;清空 &lt;code&gt;/var/log/auth.log&lt;/code&gt;、&lt;code&gt;wtmp&lt;/code&gt;、&lt;code&gt;btmp&lt;/code&gt;、审计日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;清除痕迹&lt;/td&gt;
 &lt;td&gt;执行 &lt;code&gt;history -c&lt;/code&gt; 和 &lt;code&gt;lastlog&lt;/code&gt; 清除命令历史和登录记录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键判断&lt;/strong&gt;：这不是端口扫描或爆破尝试，而是「已认证」的入侵行为——攻击者拥有合法的 root 凭据。&lt;/p&gt;
&lt;h3 id="32-第二次落地事发当天凌晨"&gt;3.2 第二次落地（事发当天凌晨）
&lt;/h3&gt;&lt;p&gt;系统出现第二段落地行为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;服务启动脚本 &lt;code&gt;/etc/init.d/nginx&lt;/code&gt; 被植入恶意回灌逻辑&lt;/li&gt;
&lt;li&gt;出现可疑的 &lt;code&gt;.so&lt;/code&gt; 动态库文件&lt;/li&gt;
&lt;li&gt;出现隐藏标记文件，内容为木马版本标识&lt;/li&gt;
&lt;li&gt;内核日志出现 Nginx worker 进程的段错误&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;关键判断&lt;/strong&gt;：这不是临时文件误报，而是服务重启级的持久化链路——即使当前恶意文件被删除，重启 Nginx 后木马会自动复活。&lt;/p&gt;
&lt;h3 id="33-应急响应窗口"&gt;3.3 应急响应窗口
&lt;/h3&gt;&lt;p&gt;从用户反馈到完整处置，应急响应推进路径如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;复现移动端 UA 与桌面端访问表现差异&lt;/li&gt;
&lt;li&gt;对比应用层日志和 Nginx 访问日志&lt;/li&gt;
&lt;li&gt;确认异常 &lt;code&gt;302&lt;/code&gt; 重定向出现在 Nginx 层而非 PHP 应用层&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;nginx -T&lt;/code&gt; 导出全量配置，顺 Lua 加载路径定位恶意模块&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;先备份证据&lt;/strong&gt;，再替换为 no-op 空壳&lt;/li&gt;
&lt;li&gt;深挖持久化点，确认 init.d 脚本回灌逻辑&lt;/li&gt;
&lt;li&gt;清理认证面、隔离残留样本、打包证据并记录哈希&lt;/li&gt;
&lt;li&gt;复测移动端、桌面端、支付接口和关键服务状态&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="四排查分析过程"&gt;四、排查分析过程
&lt;/h2&gt;&lt;h3 id="41-区分问题层级"&gt;4.1 区分问题层级
&lt;/h3&gt;&lt;p&gt;用户报障后，首先要判断异常发生在哪一层：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;层级&lt;/th&gt;
 &lt;th&gt;如果是这层的问题&lt;/th&gt;
 &lt;th&gt;实际表现&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;前端 / CDN 缓存&lt;/td&gt;
 &lt;td&gt;服务端日志仍返回正常 HTML&lt;/td&gt;
 &lt;td&gt;❌ 服务端日志存在异常 302&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PHP 应用层&lt;/td&gt;
 &lt;td&gt;应用代码、路由或日志中能找到跳转逻辑&lt;/td&gt;
 &lt;td&gt;❌ 应用层无异常&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Nginx 请求入口层&lt;/td&gt;
 &lt;td&gt;访问日志出现应用无感知的 302&lt;/td&gt;
 &lt;td&gt;✅ 命中了&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;本次通过移动端 UA 请求复现了 &lt;code&gt;302&lt;/code&gt;，并发现跳转参数中包含原始域名和设备类型，说明跳转逻辑在 HTTP 请求入口层——也就是 Nginx 层被劫持。&lt;/p&gt;
&lt;h3 id="42-访问日志分析"&gt;4.2 访问日志分析
&lt;/h3&gt;&lt;p&gt;访问日志中出现了关键特征：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;正常路径如 /、/item/1、/products → 间歇性 302，与正常 200 混杂
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个特征非常关键：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正常业务跳转通常有稳定规则（如未登录跳登录页）&lt;/li&gt;
&lt;li&gt;恶意流量劫持常按设备类型、流量比例、来源 Referer 或时间随机触发&lt;/li&gt;
&lt;li&gt;本次恶意 Lua 中确实存在&lt;strong&gt;移动端比例控制逻辑&lt;/strong&gt;——只在部分移动端请求中触发跳转&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-定位-nginx-lua-加载链"&gt;4.3 定位 Nginx Lua 加载链
&lt;/h3&gt;&lt;p&gt;审计 &lt;code&gt;nginx -T&lt;/code&gt; 全量配置后，重点排查以下位置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lua_package_path&lt;/code&gt; — Lua 模块搜索路径&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rewrite_by_lua&lt;/code&gt; / &lt;code&gt;access_by_lua&lt;/code&gt; — 请求阶段 Lua 钩子&lt;/li&gt;
&lt;li&gt;&lt;code&gt;include luawaf.conf&lt;/code&gt; — WAF 配置文件&lt;/li&gt;
&lt;li&gt;Nginx Lua 库目录&lt;/li&gt;
&lt;li&gt;WAF 脚本目录&lt;/li&gt;
&lt;li&gt;反向代理配置文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最终确认活跃恶意模块是一个伪装成正常模块名的 &lt;code&gt;.lua&lt;/code&gt; 文件，内容包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;外部博彩风格跳转域名&lt;/li&gt;
&lt;li&gt;移动端 UA 识别和比例触发逻辑&lt;/li&gt;
&lt;li&gt;远程配置拉取功能&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ngx.redirect()&lt;/code&gt; 跳转实现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;与线上表现完全一致。&lt;/p&gt;
&lt;h3 id="44-先取证再处置"&gt;4.4 先取证再处置
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;本次没有直接删除任何可疑文件。&lt;/strong&gt; 原因：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接删除会破坏法证链，无法回溯入侵过程&lt;/li&gt;
&lt;li&gt;直接删除 Lua 文件可能导致仍存在的调用点把 Nginx 打挂&lt;/li&gt;
&lt;li&gt;攻击者使用了 &lt;code&gt;chattr +i&lt;/code&gt;、时间戳伪造和重启回灌，单点删除不能解决持久化&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;处置策略：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将恶意原件保留到证据备份目录&lt;/li&gt;
&lt;li&gt;生产路径中的恶意 Lua 替换为同名 no-op 空壳模块&lt;/li&gt;
&lt;li&gt;保留导出函数签名，避免隐藏调用点异常&lt;/li&gt;
&lt;li&gt;执行 &lt;code&gt;nginx -t&lt;/code&gt; 验证配置后再 reload&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="45-追踪持久化机制"&gt;4.5 追踪持久化机制
&lt;/h3&gt;&lt;p&gt;仅替换当前活跃恶意模块后，不能认为修复完成。后续检查发现 init.d 服务脚本已被改造：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从外部 URL 拉取远程载荷&lt;/li&gt;
&lt;li&gt;向 Nginx 配置文件写入 Lua 钩子&lt;/li&gt;
&lt;li&gt;操作 &lt;code&gt;lua_package_path&lt;/code&gt; 确保模块加载&lt;/li&gt;
&lt;li&gt;操作 &lt;code&gt;ld.so.preload&lt;/code&gt; 预加载共享库&lt;/li&gt;
&lt;li&gt;配合 &lt;code&gt;chattr +i&lt;/code&gt; 保护植入文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这就是木马的复活机制&lt;/strong&gt;——只要 Nginx 服务重启，远程载荷会重新落地，配置会被重新注入。清理当前文件而不处理服务脚本，等于什么都没修。&lt;/p&gt;
&lt;h3 id="46-用-hids-建立根因证据链"&gt;4.6 用 HIDS 建立根因证据链
&lt;/h3&gt;&lt;p&gt;系统日志和 shell history 被清空后，常规取证手段失效。本次的关键证据来自 HIDS（主机入侵检测系统）的日志：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HIDS 中保留了 root SSH 会话记录及命令样本&lt;/li&gt;
&lt;li&gt;能证明约一个月前已发生真实入侵&lt;/li&gt;
&lt;li&gt;这个证据比猜测 IP 来源、猜测插件漏洞有价值得多&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;教训&lt;/strong&gt;：HIDS 日志是日志清洗后唯一可信的证据源，必须保证不被同机单点覆盖，最好外送或异地备份。&lt;/p&gt;
&lt;h3 id="47-扩展扫描残留"&gt;4.7 扩展扫描残留
&lt;/h3&gt;&lt;p&gt;切断已知攻击链后，继续检查：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;检查项&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;进程&lt;/td&gt;
 &lt;td&gt;当前进程列表、高 CPU 进程&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;端口&lt;/td&gt;
 &lt;td&gt;监听端口和对应进程&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;服务&lt;/td&gt;
 &lt;td&gt;systemd 启用服务和 timer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;定时任务&lt;/td&gt;
 &lt;td&gt;root 与系统级 crontab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;预加载&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/etc/ld.so.preload&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;启动脚本&lt;/td&gt;
 &lt;td&gt;shell profile、自启动脚本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;认证文件&lt;/td&gt;
 &lt;td&gt;authorized_keys、uid=0 账户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SUID&lt;/td&gt;
 &lt;td&gt;SUID 提权文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Nginx worker&lt;/td&gt;
 &lt;td&gt;当前加载的动态库映射&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;近期变更&lt;/td&gt;
 &lt;td&gt;最近修改的系统文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;IOC 搜索&lt;/td&gt;
 &lt;td&gt;恶意模块名、可疑域名、隐藏标记文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最终确认并隔离了三个残留工件：隐藏标记文件、恶意动态库、异常数据文件。&lt;/p&gt;
&lt;h3 id="48-认证面收敛避免自锁"&gt;4.8 认证面收敛（避免自锁）
&lt;/h3&gt;&lt;p&gt;发现 root 已泄露后，凭据轮换必须做，但不能为了「看起来更安全」直接关闭当前唯一的远程入口。&lt;/p&gt;
&lt;p&gt;本次策略：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;清空 root 的 authorized_keys&lt;/li&gt;
&lt;li&gt;隔离未确认但仍需使用的 SSH 密钥&lt;/li&gt;
&lt;li&gt;确认没有其他 uid=0 账户或异常用户的认证文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;暂时保留&lt;/strong&gt; root 密码登录，等待新管理员入口就绪后再关闭&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这是安全和可运维之间的必要取舍——没有替代入口时直接关闭 root 登录，只会把正常运维锁在外面。&lt;/p&gt;
&lt;h3 id="49-四层验证"&gt;4.9 四层验证
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;验证层次&lt;/th&gt;
 &lt;th&gt;检查内容&lt;/th&gt;
 &lt;th&gt;结论&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;配置层&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;nginx -t&lt;/code&gt;、&lt;code&gt;nginx -T&lt;/code&gt; 全量导出&lt;/td&gt;
 &lt;td&gt;✅ 无语法错误，无恶意 include&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;运行层&lt;/td&gt;
 &lt;td&gt;进程、端口、worker 映射库、内核日志&lt;/td&gt;
 &lt;td&gt;✅ 无崩溃，无异常动态库加载&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;业务层&lt;/td&gt;
 &lt;td&gt;移动端 UA / 桌面端 UA 访问核心页面&lt;/td&gt;
 &lt;td&gt;✅ 200 正常，无跳转&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;支付层&lt;/td&gt;
 &lt;td&gt;支付配置接口、支付回调日志&lt;/td&gt;
 &lt;td&gt;✅ 200 正常&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;只看服务状态 &lt;code&gt;active&lt;/code&gt; 不等于业务可用；只看页面返回 &lt;code&gt;200&lt;/code&gt; 也不等于木马已清理。必须四层同时验证。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="五处置措施总结"&gt;五、处置措施总结
&lt;/h2&gt;&lt;h3 id="已执行操作"&gt;已执行操作
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;将恶意 Lua 模块替换为 no-op 安全空壳&lt;/li&gt;
&lt;li&gt;将恶意 WAF 脚本替换为安全空壳&lt;/li&gt;
&lt;li&gt;移除 init.d 服务脚本中的恶意回灌逻辑&lt;/li&gt;
&lt;li&gt;移除 Nginx 全局配置中的异常 &lt;code&gt;lua_package_path&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;去除攻击者遗留在相关文件上的 &lt;code&gt;immutable&lt;/code&gt; 属性&lt;/li&gt;
&lt;li&gt;隔离隐藏标记文件、恶意动态库、异常数据文件&lt;/li&gt;
&lt;li&gt;清理 root 本机 SSH 私钥驻留&lt;/li&gt;
&lt;li&gt;归档完整事件证据并生成 SHA256 校验值&lt;/li&gt;
&lt;li&gt;恢复 Docker bridge 网关，修复支付反代超时问题&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="后续动作"&gt;后续动作
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;24 小时内：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;持续观察 Nginx 访问日志中的异常状态码&lt;/li&gt;
&lt;li&gt;持续观察内核日志中的 worker 崩溃&lt;/li&gt;
&lt;li&gt;观察支付链路的稳定性&lt;/li&gt;
&lt;li&gt;保存 CDN 安全事件和访问日志&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;1-3 天内：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新建非 root 管理员用户并配置公钥&lt;/li&gt;
&lt;li&gt;验证新入口可用后，关闭 root 密码直接登录&lt;/li&gt;
&lt;li&gt;轮换面板密码、API key、部署密钥和数据库密码&lt;/li&gt;
&lt;li&gt;将关键日志外送或定时同步到异地&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;中期：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;评估系统重装和业务迁移窗口&lt;/li&gt;
&lt;li&gt;用干净系统重新部署服务栈&lt;/li&gt;
&lt;li&gt;只迁移业务数据，不迁移旧系统脚本和二进制&lt;/li&gt;
&lt;li&gt;建立上线后基线：端口清单、文件哈希、日志保留策略&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="六经验教训"&gt;六、经验教训
&lt;/h2&gt;&lt;h3 id="1-偶发跳转必须优先怀疑请求入口层"&gt;1. 偶发跳转必须优先怀疑请求入口层
&lt;/h3&gt;&lt;p&gt;移动端跳转博彩站、桌面端偶发正常——这是典型的&lt;strong&gt;按 UA 或比例触发的流量劫持&lt;/strong&gt;特征。不能只从前端缓存或应用路由找原因，必须第一时间查 Nginx 层的异常。&lt;/p&gt;
&lt;h3 id="2-cdn-520-可能是源站进程崩溃"&gt;2. CDN 520 可能是源站进程崩溃
&lt;/h3&gt;&lt;p&gt;CDN 的 520 错误表示源站连接异常。本次 520 与恶意 &lt;code&gt;.so&lt;/code&gt; 文件导致的 Nginx worker 进程崩溃直接相关。排查 CDN 错误时必须同时看源站内核日志和 worker 状态。&lt;/p&gt;
&lt;h3 id="3-单点删除木马不等于修复"&gt;3. 单点删除木马不等于修复
&lt;/h3&gt;&lt;p&gt;攻击者使用了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;服务脚本持久化（重启复活）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chattr +i&lt;/code&gt; 文件不可变属性（防删除）&lt;/li&gt;
&lt;li&gt;时间戳伪造（掩盖时间线）&lt;/li&gt;
&lt;li&gt;日志清洗（销毁证据）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只替换一个恶意文件会留下重启复活的风险，必须深挖持久化链。&lt;/p&gt;
&lt;h3 id="4-证据保存必须早于清理"&gt;4. 证据保存必须早于清理
&lt;/h3&gt;&lt;p&gt;先打包证据、记录哈希、保留备份，再清理生产路径。否则后续无法解释完整的入侵链，也无法判断是否存在第二阶段攻击。&lt;/p&gt;
&lt;h3 id="5-安全加固不能盲目锁死"&gt;5. 安全加固不能盲目锁死
&lt;/h3&gt;&lt;p&gt;关闭 root 密码登录是正确方向，但前提是&lt;strong&gt;有可验证的新管理员入口&lt;/strong&gt;。没有替代入口就直接关闭，等于把自己也锁在门外。&lt;/p&gt;
&lt;h3 id="6-hids-是日志清洗后唯一的可信证据源"&gt;6. HIDS 是日志清洗后唯一的可信证据源
&lt;/h3&gt;&lt;p&gt;系统日志被清空后，HIDS 日志成为了唯一能证明入侵时间点和攻击行为的关键证据。后续必须保证 HIDS 日志异地存储，不能被同机攻击者一并清理。&lt;/p&gt;
&lt;h3 id="7-运行态问题要和入侵事件分层处理"&gt;7. 运行态问题要和入侵事件分层处理
&lt;/h3&gt;&lt;p&gt;本次排查中发现的支付反代超时问题，经分析是 Docker 网络配置问题，与 Lua 木马无关。应急响应中必须严格区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安全事件（入侵、木马、持久化）&lt;/li&gt;
&lt;li&gt;运行态故障（网络、配置漂移、资源耗尽）&lt;/li&gt;
&lt;li&gt;业务 Bug（代码逻辑、支付流程）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;混为一谈会误导排查方向，浪费时间。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="七应急响应检查清单"&gt;七、应急响应检查清单
&lt;/h2&gt;&lt;p&gt;以下模板可直接复用于类似事件的排查：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;1.&lt;/span&gt; &lt;span class="err"&gt;复现用户侧异常&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;记录&lt;/span&gt; &lt;span class="n"&gt;UA&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="err"&gt;、时间、响应码、跳转目标&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;2.&lt;/span&gt; &lt;span class="err"&gt;分层对比日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CDN&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Nginx&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;应用&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;系统日志，定位异常发生层级&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;3.&lt;/span&gt; &lt;span class="err"&gt;审计&lt;/span&gt; &lt;span class="n"&gt;Web&lt;/span&gt; &lt;span class="err"&gt;服务器配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;导出全量配置，检查&lt;/span&gt; &lt;span class="n"&gt;Lua&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;WAF&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rewrite&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;动态模块&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;4.&lt;/span&gt; &lt;span class="err"&gt;搜索&lt;/span&gt; &lt;span class="n"&gt;IOC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;关键词搜索，但不要在取证前删除任何文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;5.&lt;/span&gt; &lt;span class="err"&gt;取证归档&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;对可疑文件做&lt;/span&gt; &lt;span class="n"&gt;stat&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;lsattr&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;sha256sum&lt;/span&gt;&lt;span class="err"&gt;、备份归档&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;6.&lt;/span&gt; &lt;span class="err"&gt;检查持久化点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;systemd&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;cron&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;ld&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;preload&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="n"&gt;Docker&lt;/span&gt; &lt;span class="n"&gt;entrypoint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;7.&lt;/span&gt; &lt;span class="err"&gt;检查认证面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="err"&gt;账户、&lt;/span&gt;&lt;span class="n"&gt;authorized_keys&lt;/span&gt;&lt;span class="err"&gt;、私钥、面板用户、&lt;/span&gt;&lt;span class="n"&gt;API&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;8.&lt;/span&gt; &lt;span class="err"&gt;检查运行态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;进程、端口、&lt;/span&gt;&lt;span class="n"&gt;worker&lt;/span&gt; &lt;span class="err"&gt;映射库、内核崩溃日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;9.&lt;/span&gt; &lt;span class="err"&gt;最小化清理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;先切断活跃链路，再处理持久化机制和残留文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.&lt;/span&gt; &lt;span class="err"&gt;重新验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;配置层&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;运行层&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;业务层&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;支付层，四层全部验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;11.&lt;/span&gt; &lt;span class="err"&gt;归档与复盘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;归档证据和哈希，记录回滚点与剩余风险&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="八判断边界"&gt;八、判断边界
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;可以确认的：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;存在已认证的 root SSH 入侵行为&lt;/li&gt;
&lt;li&gt;存在 Nginx 服务脚本级持久化机制&lt;/li&gt;
&lt;li&gt;移动端博彩跳转来自服务端 Nginx Lua 恶意模块&lt;/li&gt;
&lt;li&gt;恶意动态库与 Nginx worker 进程崩溃相关&lt;/li&gt;
&lt;li&gt;已知活跃链路已切断，已知残留已隔离&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;不能百分百确认的：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最初 root 凭据是如何泄露的&lt;/li&gt;
&lt;li&gt;是否还存在未知 rootkit 或内核级隐藏组件&lt;/li&gt;
&lt;li&gt;不同时间点的两次操作是否完全同源&lt;/li&gt;
&lt;li&gt;不重装系统的情况下机器是否永远可信&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;因此后续安全策略不应停留在「已清理木马」，而应按「已发生 root 级入侵后的恢复流程」推进——最终闭环仍是重装系统、重建凭据、重新部署业务。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本文由真实应急响应案例脱敏整理，涉及域名、IP、路径等信息已做匿名化处理。&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>