Jhatchi/NexaCorp-DFIR-INC-2026-002

GitHub: Jhatchi/NexaCorp-DFIR-INC-2026-002

该项目是一次基于虚构场景的 Linux 后渗透取证调查与 Wazuh 检测工程实战演练,通过日志分析重建攻击链并交付经过对抗模拟验证的检测规则。

Stars: 0 | Forks: 0

# NexaCorp DFIR: INC-2026-002 - 权限提升与持久化 针对 `bru-app-01`(NexaCorp 位于布鲁塞尔的内部应用服务器)的协同 Linux 后渗透攻击活动的取证调查,包括 Wazuh 检测覆盖分析以及通过实时 MITRE Caldera 对抗模拟验证的规则调优建议。作为 BeCode 布鲁塞尔蓝队与红队训练营(任务 02)期间的个人独立项目执行,是 [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001) 的直接延续。 [![ci](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-002/actions/workflows/ci.yml) [![方法论](https://img.shields.io/badge/methodology-NIST%20SP%20800--61r2-blue.svg)](#方法论) [![框架](https://img.shields.io/badge/framework-MITRE%20ATT%26CK-red.svg)](https://attack.mitre.org/) [![检测](https://img.shields.io/badge/Wazuh-4%20rules%20delivered-green.svg)](detection/) [![许可证](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Johan--Emmanuel%20Hatchi-0A66C2?logo=linkedin&logoColor=white)](https://www.linkedin.com/in/johan-emmanuel-hatchi/) 本仓库记录了作为 BeCode 网络安全训练营(2025-2026 届)一部分的 SOC 分析师项目。它从主机和审计日志证据中重建了 Linux 后渗透攻击活动,随后提供了包含已验证规则调优建议的 Wazuh 检测覆盖分析。这是 NexaCorp DFIR 系列的第二个安全事件。 ## 目录 - [操作声明](#operational-notice) - [概览](#at-a-glance) - [项目背景](#engagement-context) - [执行摘要](#executive-summary) - [攻击链摘要](#kill-chain-summary) - [如何阅读本报告](#how-to-read-this-report) - [发现摘要](#findings-summary) - [检测工程](#detection-engineering) - [方法论](#methodology) - [使用的工具](#tools-used) - [仓库结构](#repository-layout) - [可重复性](#reproducibility) - [已知限制](#known-limits) - [NexaCorp DFIR 系列](#nexacorp-dfir-series) - [致谢](#acknowledgments) - [关于](#about) - [许可证](#license) ## 操作声明 **这是一次针对虚拟基础设施的实验室演练。** NexaCorp 是用作 BeCode 布鲁塞尔任务 02 场景的虚构客户。被攻陷的主机 `bru-app-01` 是为该练习配置的隔离 Debian 12 虚拟机,针对其运行的 MITRE Caldera 对抗模拟是实验室方法论的一部分,而不是真实的入侵行为。没有任何真实的组织、网络或个人受到攻击。 本报告中发布的所有 IP 地址、主机名、账户名和失陷标情报(`10.10.10.42`、`192.168.100.199`、`bru-app-01`、`tgt-blue11`、`svc_api`、`it_support`、作为 IOC 引用的 Tor 出口节点范围等)均为**实验室本地产物**,而非真实的威胁情报。请勿将其作为 IOC 投入到生产环境 SIEM 中。引用的 Tor 出口节点是故事叙述中使用的公共基础设施,与任何真实攻击活动无关。 **发布已获授权**,由 BeCode 实验室教练 (Thomas B.) 于 2026-05-17 授权。完整的保密声明见调查结果报告。 ## 概览 | 项目元数据 | 值 | |---|---| | 编号 | `BCC-2026 / INC-2026-002` | | 阶段 | 阶段 1(离线取证)+ 阶段 2(在 Wazuh 中实时运行 Caldera 模拟)| | 完成日期 | 2026-05-27 | | 状态 | 完成(阶段 1 + 阶段 2)| | 调查产出 | 值 | |---|---| | 发现 | **7** 个(2 个严重,3 个高危,1 个中危,1 个低危)| | 映射的 MITRE ATT&CK 技术 | 12 | | 分析的日志来源 | auth.log, audit.log, syslog, cron.log + INCIDENT_METADATA | | Wazuh 检测覆盖范围 | 4 个后渗透任务中有 2 个被可靠检测,1 个不精确,1 个未检测到 | | 检测工程交付物 | **4 条规则**(2 条调优已部署,1 条新规则已部署,1 条提议中)| | 对抗模拟 | MITRE Caldera 5.x,`lab2-linux-privesc` 配置文件,运行 5.5 分钟,捕获 13 条攻击告警 | ## 项目背景 **场景(虚构)。** 在 [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001)(NexaCorp 位于列日的服务器被攻陷)发生后的接下来一周里,Wazuh SIEM 在另一台机器上生成了新的告警:位于布鲁塞尔的内部应用服务器 `bru-app-01`。证据表明,前一起事件中的威胁行为者在 2026 年 5 月 16 日至 17 日的夜间转向了 bru-app-01,并提权至 root。 **任务。** 从证据包中重建完整的攻击链,描述已被访问和持久化潜伏的内容,并回答四个执行层面的问题:攻击者是如何进入的、他们做了什么、他们入侵到了什么程度,以及 NexaCorp 现在必须立即采取什么行动。第二阶段增加了实时检测工程:针对实际目标运行 MITRE Caldera,观察现有 Wazuh 规则集实时捕获的内容,然后提出调优和新规则以弥补差距。 **从客户处收到的证据包。** | 产物 | 覆盖范围 | 备注 | |---|---|---| | `auth.log` | 完整的事件窗口 | SSH 认证,PAM,useradd | | `audit.log` | 22:47:02 至 23:41:54(部分)| 捕获提权后的活动。提权发生时 (19:43:01) 和 useradd 发生时 (19:47:07) 不在此窗口内 | | `syslog` | 完整的事件窗口 | 常规系统事件 | | `cron.log` | 完整的事件窗口 | 仅可见合法的 svc_api API 健康检查 | | `INCIDENT_METADATA.txt` | 无 | NexaCorp 初始摘要,分析锚定时间戳 | **教育背景。** 在 **BeCode 布鲁塞尔蓝队与红队训练营(2025 年 11 月至 2026 年 9 月)** 期间作为任务 02 交付:一次独立的、限时的 DFIR + 检测工程项目。方法论、工具和报告格式遵循现实世界的标准(NIST SP 800-61r2, SANS PICERL, MITRE ATT&CK, MITRE Caldera)。 ## 执行摘要 在 **布鲁塞尔当地时间 2026-05-16 17:43:43**,一名威胁行为者使用其本不应拥有的有效 SSH 私钥,以服务账户 `svc_api` 的身份通过认证登录了 bru-app-01。该私钥几乎可以肯定是在前一周列日服务器被攻陷([INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001))期间被收集的,当时同一行为者拥有 shell 访问权限。最初的登录源自 Tor 出口节点 `185.220.101.68`,随后在大约两小时内进行了 40 次连续的公钥登录,全部来自 `185.220.101.0/24` 网段内的 IP,保持一致的 3 分钟间隔,这符合自动化信标而非交互式活动的特征。 与信标通道并行,行为者从 36 个不同的 Tor 出口 IP 发起了 39 次故意低频率的 SSH 认证失败,针对 8 个与 NexaCorp 相关的用户名(`svc_api`、`api`、`nexacorp`、`deploy`、`backup`、`admin`、`root`、`ubuntu`)。该模式低于典型的 fail2ban 阈值,并与成功的公钥登录同时运行:这是作为掩护的侦察噪音,而不是真正的访问途径。 在 **当地时间 19:43:01**,行为者通过滥用 `/usr/bin/find` 上的 SUID 配置错误(模式为 `0104755`,在 Debian 12 上并非标准配置)提权到了 root。审计日志捕获了 55 个带有 `key="suid_escalation"` 的事件,显示了典型的 `uid=1000 / euid=0` 差异。此次提权被用于以大约 60 秒的节奏链式执行了六个不同的命令:进程枚举、日志搜索、敏感数据探测、直接读取 `/etc/shadow`(27 次),以及跨 `/home` 和 `/root/.ssh` 的系统性 SSH 密钥扫描(54 次 `find /home -name id_rsa` 调用)。 在 **当地时间 19:47:07**,行为者创建了后门用户 `it_support` (UID 1002),并在 useradd 之后 50 毫秒设置了攻击者自定义的密码。元数据还报告了位于 `/etc/cron.d/svc-updater` 的 cron 持久化文件,并在阶段 2 中通过运行中的系统进行了间接验证。 完整的三个事件攻击链(INC-2026-001 + INC-2026-002 + INC-2026-003)汇总在 2026-05-29 交付的第 1 个月评估报告中:参见 [INC-2026-003](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-003)。 **阶段 2(实时 Caldera 运行)。** `lab2-linux-privesc` 对抗配置文件于 2026-05-27 被触发,针对 `tgt-blue11` 运行了 5.5 分钟。在阶段 1 行为者执行的四个后渗透任务中,现有的 Wazuh 规则集仅可靠地检测到了两个(通过规则 100201 检测 `/etc/shadow` 访问,通过规则 100202 检测 useradd),作为附带效应不精确地检测到了一个(SSH 密钥收集,被因间接文件系统遍历而触发的 SUID 枚举规则 100204 捕获),而完全漏掉了 cron 持久化。一个包含四项改进的检测包解决了所有漏洞:参见下方的 [检测工程](#detection-engineering)。 **核心 IOC(仅限实验室,请勿投入真实 SIEM):** | 类型 | 值 | 背景 | |---|---|---| | 源 IP(初始访问)| `185.220.101.68` | Tor 出口节点,首次成功的公钥登录 | | 源范围(信标)| `185.220.101.0/24` | 全部 40 次成功登录 | | 源范围(侦察掩护)| `162.247.74.0/24`, `45.142.212.0/24`, `89.248.167.0/24`, `193.32.162.0/24` | 39 次失败的 SSH 尝试 | | 被攻陷的账户 | `svc_api` (uid 1000) | 服务账户,密钥认证 | | 后门账户 | `it_support` (uid/gid 1002), `/bin/bash` | 于 19:47:07 通过 useradd 创建 | | 持久化 | `/etc/cron.d/svc-updater` | Cron 文件,依据元数据及系统检查 | | 提权途径 | `/usr/bin/find` 模式 `0104755` | SUID 配置错误 | | SSH 密钥指纹 | `RSA SHA256:3Qx7kY9pLmNvWz2Hj8bFcA` | 所有 40 次登录的单一指纹 | ## 攻击链摘要 攻击者将有效凭据访问链接成了在 `bru-app-01` 上的 root 权限和持久化: 1. **侦察掩护**:36 个 Tor 出口 IP 对 8 个用户名发起 39 次低频 SSH 失败,低于 fail2ban 阈值,作为噪音运行(发现 I1)。 2. **初始访问**:使用被盗的 SSH 私钥通过 Tor 以服务账户 `svc_api` 身份进行认证,几乎可以肯定是在 INC-2026-001 期间收集的(发现 I2)。 3. **权限提升**:通过 `/usr/bin/find` 上的 SUID 配置错误获取 root(发现 I3)。 4. **凭据转储**:27 次读取 `/etc/shadow`(发现 I4)。 5. **SSH 密钥收集**:跨 `/home` 和 `/root/.ssh` 的系统性扫描(发现 I6)。 6. **后门账户**:创建带有攻击者自定义密码的 `it_support` (uid 1002)(发现 I5)。 7. **持久化**:位于etc/cron.d/svc-updater` 的 cron 文件(发现 I7)。 ## 如何阅读本报告 本仓库的组织方式使您可以根据自己的角色深入到适当的深度: | 如果您是... | 从这里开始 | 时间 | |---|---|---| | **招聘人员或招聘经理** | 此 README + 粗略浏览 [PDF](reports/INC-2026-002_Findings_Report.pdf) 执行摘要 | 5 分钟 | | **评估匹配度的 SOC 分析师** | [PDF 第 5 节(发现)和第 9 节(阶段 2 实时检测)](reports/INC-2026-002_Findings_Report.pdf) + [`detection/`](detection/) | 25 分钟 | | **DFIR 从业者** | 完整的 [PDF](reports/INC-2026-002_Findings_Report.pdf) + [`notes/journal.md`](notes/journal.md) 了解调查轨迹 | 60 分钟 | | **检测工程师** | [`detection/README.md`](detection/README.md) 了解原理 + 四条 XML 规则 + [`detection/auditd-config.conf`](detection/auditd-config.conf) | 30 分钟 | | **任何想要 grep、引用或 diff 的人** | [报告的 Markdown 源码](reports/INC-2026-002_Findings_Report.md) | 按需 | **标准交付物:** `reports/` 中的 PDF。Markdown 源码是相同的内容,保留在仓库中是为了便于搜索和版本控制。 **调查轨迹:** `notes/journal.md` 是分析师的工作笔记本,涵盖范围、方法论、假设、发现日志、IOC 清单和时间线重建。它通过展示结论是**如何**得出的,来补充正式报告。 **检测规则集:** `detection/` 包含四个 Wazuh XML 规则文件(两个调优,一个新规则已部署,一个提议中)以及 cron 持久化规则所需的 auditd 监控配置。`detection/README.md` 记录了每条规则的原理、与阶段 1 发现的映射关系以及已部署与提议状态。 ## 发现摘要 7 项发现(`I1` 到 `I7`)在[调查结果报告](reports/INC-2026-002_Findings_Report.md)中有详细记录。每个条目都包括证据、可重复性命令、MITRE ATT&CK 映射和修复指南。 | ID | 严重性 | 标题 | 主要 MITRE 技术 | 报告章节 | |---|---|---|---|---| | **I1** | 🟢 低危 | 作为掩护的 Tor 侦察(39 次失败登录,8 个枚举用户名)| T1595.002, T1110.001 | 5.1 | | **I2** | 🟠 高危 | 通过 Tor 使用被盗 SSH 私钥以 `svc_api` 身份进行初始访问 | T1078.003, T1133, T1552.004 | 5.2 | | **I3** | 🔴 严重 | 通过 `/usr/bin/find` 上的 SUID 配置错误提权至 root | T1548.001 | 5.3 | | **I4** | 🔴 严重 | 凭据转储:27 次读取 `/etc/shadow` | T1003.008 | 5.4.1 | | **I5** | 🟠 高危 | 创建后门用户:`it_support` (uid 1002) 及攻击者自定义密码 | T1136.001 | 5.4.2 | | **I6** | 🟡 中危 | 跨 `/home` 和 `/root/.ssh` 的系统性 SSH 密钥收集(54 次调用)| T1552.004 | 5.4.3 | | **I7** | 🟠 高危 | 位于 `/etc/cron.d/svc-updater` 的 Cron 持久化(阶段 1 部分证明,阶段 2 验证)| T1053.003 | 5.4.4 | **严重性分布:** 2 个严重 / 3 个高危 / 1 个中危 / 1 个低危 **章节映射说明。** 调查结果报告内部使用编号 `5.1`, `5.2`, `5.3`, `5.4.1` 到 `5.4.4`。此 README 中的 `I1` 到 `I7` 标签与这些章节一一对应(上方的“报告章节”列),以便与 [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001) 进行交叉引用。 **阅读顺序建议:** 从 I2(访问途径和与 INC-2026-001 的联系)开始,然后是 I3(使一切成为可能的提权),接着是 I4 到 I7(root 访问权限促成了什么)。I1 提供了掩护背景。 ## 检测工程 阶段 2 运行了 MITRE Caldera 的 `lab2-linux-privesc` 对抗配置文件,针对目标虚拟机 `tgt-blue11`,以观察现有的 Wazuh 规则集在面对实时的后渗透攻击活动时的表现。这次 5.5 分钟的运行产生了 13 条可归因于攻击的 Wazuh 告警,并暴露了三类检测缺陷:由良性守护进程活动触发的规则(误报)、仅作为无关规则的副作用被检测到的任务(检测不精确),以及根本没有产生告警的任务(盲点)。 交付物是 **4 条 Wazuh XML 规则**,用于解决这些发现,并带有明确的部署状态: | 规则 | 类型 | 状态 | 解决 | 发现 | |---|---|---|---|---| | [`100201`](detection/100201-shadow-access-tuned.xml) | 调优 | **已部署** | Wazuh FIM 和 cron 守护进程对 `/etc/shadow` 产生的误报 | I4 | | [`100202`](detection/100202-useradd-tuned.xml) | 调优 | **已部署** | Wazuh syscollector 执行 `useradd -D` 产生的误报 | I5 | | [`100205`](detection/100205-cron-persistence-new.xml) | 新规则 | **已部署** | `/etc/cron.d/` 文件创建的盲点 | I7 | | [`100203`](detection/100203-suid-escalation-proposed.xml) | 新规则 | **提议(在本次实验室运行中未部署)** | 阶段 1 任务 3 差距:捕获了 55 个 SUID 提权事件,但没有触发 Wazuh 规则 | I3 | **为什么一条规则是“提议”而不是已部署的。** Caldera 对抗配置文件从 root 开始运行(它作为 systemd 服务运行,而不是通过 SSH 认证的入侵者),因此完全跳过了 SUID 提权阶段。`100203` 规则设计弥补了阶段 1 中真实的检测漏洞,但在本实验室的架构内无法通过实时攻击遥测数据进行验证。将其从提议提升至已部署需要使用 Atomic Red Team 或手动 SSH 重放来执行 privesc 步骤。区分已部署并验证的规则与已设计但未测试的规则,对于将此工作视为真实产出的招聘人员来说非常重要。 **Auditd 配套配置。** 规则 `100205` 仅在代理的 auditd 被配置为监控 cron 目录时才会触发。所需的监控配置位于 [`detection/auditd-config.conf`](detection/auditd-config.conf) 中,并在 [`detection/README.md`](detection/README.md) 中有相关文档记录。 **阶段 2 误报分析。** Caldera 运行暴露了四类良性噪音:Wazuh 自我监控(对 `/etc/shadow` 的 FIM 探测)、Wazuh 资产清单(用于默认值查找的 `useradd -D`)、cron 守护进程用户缓存重建,以及 systemd 清理遍历 SSH 目录。这四类都有 `auid=4294967295`(未设置),但 Caldera 本身也是如此(其后没有 SSH 登录),因此排除了将 `auid` 作为调优鉴别因素的可能。解决方法是按可执行文件路径排除和参数模式匹配,正如上述两条调优规则中所实现的那样。 ## 方法论 本项目采用三个行业标准框架叠加进行。 ### NIST SP 800-61r2:计算机安全事件处理指南 NIST 的 4 阶段模型(准备、检测与分析、遏制 / 根除 / 恢复、事后活动)提供了高级结构。在本项目中,**交付物的阶段 1 对应 NIST 的“检测与分析”**(离线日志取证,攻击者时间线重建)。**阶段 2 对应 NIST 的“经验教训”**,转化为预防性控制措施(四条 Wazuh 规则和报告第 8 节中优先排序的建议列表)。 ### SANS PICERL:战术调查流程 PICERL(准备、识别、遏制、根除、恢复、经验教训)是 SANS 的事件响应流程。在本项目中的应用: | PICERL 阶段 | 本项目 | |---|---| | **准备** | 教练验证过的实验室环境、明确的范围(取证 + 检测工程)、由项目协调员交接的证据包 | | **识别** | auth.log + audit.log + cron.log 关联,基于假设的重建(初始访问途径、提权机制、持久化清点)| | **遏制 / 根除 / 恢复** | 在报告第 8 节中记录为 P0 建议(密钥轮换、移除后门用户、移除 cron 文件、SUID 基线审计),但未执行:项目范围是取证分析和检测工程,而非主动响应 | | **经验教训** | 阶段 2 检测工程:四条 Wazuh 规则及误报分析(报告第 9 节)| ### MITRE ATT&CK:技术映射 每个发现都映射到一项或多项 MITRE ATT&CK 技术,以便客户将此事件与其现有的威胁模型进行关联。在 7 项发现中总共引用了 **12 项不同的技术**: - **侦察:** T1595.002 - **初始访问:** T1078.003, T1133 - **凭据访问:** T1110.001, T1552.004, T1003.008 - **命令与控制:** T1572 - **权限提升:** T1548.001 - **发现:** T1057, T1083 - **持久化:** T1136.001, T1053.003 每个发现的完整技术表在**报告第 6 节**中,各项发现的深入分析在第 5 节中。 ### 可重复性 报告中的每一项陈述都可以追溯到证据包中的某一行日志,并附有重现它所需的准确的 `grep` 或 `awk` 过滤器。调查命令记录在报告中每个发现小节的内文中。有关快速入门,请参阅 [PDF](reports/INC-2026-002_Findings_Report.pdf) 中的**附录 A(调查工具)**以及下方的**[可重复性](#reproducibility)部分**。 ## 使用的工具 **离线日志取证(阶段 1)** - 标准 Unix 工具链:`grep`、`awk`、`sort`、`uniq`、`xxd` 用于日志挖掘、模式提取和二进制检查 - `auditctl` 参考文档,用于解码审计系统调用记录和规则键 - 无需专门的商业 DFIR 工具:整个阶段 1 的调查可利用报告中记录的命令,通过证据包进行重现 **SIEM 和主机遥测(阶段 1 + 阶段 2)** - [Wazuh](https://wazuh.com/)(管理器 + 仪表板,版本 4.x):通过 Threat Hunting / Discover 进行告警审查,在 `data.audit.exe`、`data.audit.key`、`data.audit.auid`、`data.audit.execve.a*` 上进行字段级过滤,规则查找和规则集编辑 - Linux 审计守护进程(`auditd`):在目标上进行系统调用记录,使用带键标记的规则用于 `shadow_access`、`useradd`、`suid_escalation`、`ssh_keys`,以及提议的记录在 [`detection/auditd-config.conf`](detection/auditd-config.conf) 中的 `cron_persistence` 监控 **对抗模拟(阶段 2)** - [MITRE Caldera 5.x](https://caldera.mitre.org/):`lab2-linux-privesc` 对抗配置文件,将 Sandcat 代理部署为 systemd 服务,针对 `tgt-blue11` 进行了 5.5 分钟的运行 - `lab attack` 实验室框架:针对学习者分配的目标触发 Caldera 操作 **参考框架** - [NIST SP 800-61r2](https://csrc.nist.gov/publications/detail/sp/800-61/rev-2/final):计算机安全事件处理指南 - [SANS PICERL](https://www.sans.org/blog/incident-handlers-handbook/):战术调查流程 - [MITRE ATT&CK Enterprise v15](https://attack.mitre.org/):技术归因 - [MITRE Caldera 文档](https://caldera.readthedocs.io/):对抗框架参考 ## 仓库结构 ``` NexaCorp-DFIR-INC-2026-002/ ├── README.md (this file) ├── LICENSE (MIT) ├── .gitignore ├── .github/ │ └── workflows/ │ └── ci.yml markdownlint + typography + XML validation ├── reports/ │ ├── INC-2026-002_Findings_Report.pdf canonical 39-page deliverable │ └── INC-2026-002_Findings_Report.md same content, Markdown source ├── detection/ │ ├── README.md rationale, deployment status, mapping to findings │ ├── 100201-shadow-access-tuned.xml Wazuh tuning (deployed) │ ├── 100202-useradd-tuned.xml Wazuh tuning (deployed) │ ├── 100203-suid-escalation-proposed.xml Wazuh new rule (proposed) │ ├── 100205-cron-persistence-new.xml Wazuh new rule (deployed) │ └── auditd-config.conf auditd watches required by 100205 ├── evidence-summary/ │ └── ioc-summary.md indicators of compromise (SIEM-ingestible) ├── methodology/ │ ├── attack-timeline.md incident timeline (CEST) │ └── attck-mapping.md MITRE ATT&CK mapping table └── notes/ └── journal.md analyst investigation notebook ``` **文件分类:** | 路径 | 作用 | 受众 | |---|---|---| | `reports/*.pdf` | 标准交付物,正式报告 | 客户、招聘人员、审计员 | | `reports/*.md` | 相同内容,易于 grep 的源码 | 任何需要引用或对比的人 | | `detection/*.xml` | Wazuh 可用规则集(XML 格式)| SOC / 检测工程师 | | `detection/auditd-config.conf` | 规则 `100205` 所需的 auditd 监控配置 | SOC / 检测工程师 | | `detection/README.md` | 每条规则的原理和部署状态 | 检测工程师入职引导 | | `notes/journal.md` | 调查工作笔记本 | 研究方法的 DFIR 从业者 | | `.github/workflows/ci.yml` | 自动化 markdownlint、排版和 XML 验证(`xmllint`,当存在 `detection/*.xml` 时运行),在 push 时触发 | CI | ## 可重复性 调查结果报告中的每一项主张都可以追溯到证据包中的某一行日志。证据包本身不对外发布(BeCode 实验室资产),但命令和查询已被记录,以便任何拥有自己副本的人都能重现分析。 ### 重现关键发现(日志分析) 需要证据包(`auth.log`, `audit.log`, `cron.log`, `syslog`, `INCIDENT_METADATA.txt`): ``` # 侦察量与时间窗口 grep "Failed password" auth.log | wc -l # expect 39 grep "Failed password" auth.log | head -1 # first attempt grep "Failed password" auth.log | tail -1 # last attempt grep "Failed password" auth.log | grep -oE "from [0-9.]+" | sort -u # 36 distinct IPs grep "Failed password" auth.log | grep -oE "invalid user [^ ]+" | sort -u # 8 enumerated usernames # 通过 SSH publickey 获取初始访问权限 grep "Accepted publickey" auth.log | wc -l # expect 40 grep "Accepted publickey" auth.log | head -1 # initial access timestamp grep "Accepted publickey" auth.log | grep -oE "SHA256:[A-Za-z0-9+/=]+" | sort -u # single key fingerprint # 通过 SUID find 提权 grep "/usr/bin/find" audit.log | grep 'key="suid_escalation"' | wc -l # expect 55 grep "type=PROCTITLE" audit.log | awk -F'proctitle=' '{print $2}' \ | sort | uniq -c | sort -rn # 6 unique commands # I4 / I6:Shadow dump 和 SSH key 收集 grep '/etc/shadow' audit.log | wc -l # shadow reads grep 'find /home -name id_rsa' audit.log | wc -l # 54 key sweeps # I5:创建后门用户 grep -i "useradd\|new user\|chpasswd" auth.log ``` ### 重现阶段 2 实时检测(Wazuh + Caldera) 需要 Wazuh 管理器 (4.x)、一台启用了 auditd 的目标虚拟机上的代理,以及部署了 `lab2-linux-privesc` 对抗配置文件的 Caldera 5.x 实例。本项目中使用的确切实验室框架命令记录在 [`detection/README.md`](detection/README.md) 中。 验证四条交付的 Wazuh 规则: ``` # 1. 验证 XML 语法(与 CI 运行的检查相同) xmllint --noout detection/*.xml # 2. 将规则放入 Wazuh manager 的自定义规则目录 sudo cp detection/100201-shadow-access-tuned.xml /var/ossec/etc/rules/ sudo cp detection/100202-useradd-tuned.xml /var/ossec/etc/rules/ sudo cp detection/100205-cron-persistence-new.xml /var/ossec/etc/rules/ # (100203 仅为建议,未经验证请勿部署) # 3. 在每个 agent 上设置 auditd watches(cron 持久化规则的先决条件) sudo cp detection/auditd-config.conf /etc/audit/rules.d/cron-persistence.rules sudo augenrules --load # 4. 重启 Wazuh manager 以加载新的 ruleset sudo systemctl restart wazuh-manager # 5. 确认解析 / 完整性检查 sudo /var/ossec/bin/wazuh-logtest ``` ## 已知限制 - **audit.log 覆盖窗口。** 可用的 `audit.log` 仅跨越 2026-05-16 当地时间 22:47:02 至 23:41:54。攻击参考时间戳 (19:43:01) 和 useradd 创建 it_support (19:47:07) 不在此窗口内。这两个事件都通过其他来源(用于 useradd 的 auth.log)和元数据文件(提权时刻)得到确认,但这些特定事件的直接审计系统调用记录缺失。 - **阶段 1 证据中没有文件写入追踪。** auth.log 和 syslog 不捕获文件写入操作。Cron 持久化文件 `/etc/cron.d/svc-updater` 由元数据断言并由阶段 2 实时检查确认,但在阶段 1 日志中无法直接看到。 - **it_support 的 sudo 授权没有日志印证。** 元数据声明此后门账户具有 sudo 权限,但在可用日志中没有出现相关条目。作为阶段 2 系统检查项记录。 - **Caldera 模拟不执行上游攻击链。** Caldera 以 root systemd 服务启动,跳过了 SSH 公钥初始访问和 SUID find 提权阶段。因此,阶段 2 的检测验证范围仅限于后渗透任务(4A 到 4D)。SUID 提权规则(`100203`)仍是提议规则,而非已部署并验证的规则。完整的检测验证覆盖需要使用 Atomic Red Team 或手动 SSH 重放来执行任务 1 到 3。 - **Caldera 和良性守护进程共享 `auid=4294967295`。** 未设置的审计登录 UID 不能作为调优的有效鉴别因素,因为合法的 Caldera 检测与产生误报的守护进程(Wazuh modulesd, cron, systemd-tmpfile)共享此特征。因此调优基于可执行文件路径和参数模式进行。 - **时区标准化。** INCIDENT_METADATA.txt 断言为 UTC,但与 auth.log 时间戳的交叉关联证实元数据实际上是布鲁塞尔当地时间 (CEST, UTC+02:00)。本报告中的所有时间戳均标准化为当地时间。 - **范围是取证 + 检测工程,而非实时响应。** 遏制、根除、取证获取(内存镜像、磁盘镜像)以及跨 NexaCorp 基础设施的信任关系审计在报告中记录为 **P0 建议**,但未执行:本项目没有多主机访问权限。后续项目将需要跟进以闭环这些问题。 ## NexaCorp DFIR 系列 - [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001):Linux 基础设施被攻陷(vsftpd 后门,Caldera C2) - **INC-2026-002**:本仓库 - [INC-2026-003](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-003):第 1 个月跨事件评估 - [INC-2026-004](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-004):SQL 注入(Web 门户) - [INC-2026-005](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-005):操作系统命令注入和 Web Shell(Web 门户) - [INC-2026-006](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-006):存储型 XSS 和会话劫持(Web 门户) - [INC-2026-007](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-007):IDOR 和访问控制失效;第 2 个月期末项目 - [INC-2026-008](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-008):AD 侦察和 Kerberoasting(第 3 个月的第一个事件) ## 关于 在 [BeCode 布鲁塞尔](https://becode.org) 蓝队与红队训练营(2025 年 11 月至 2026 年 9 月)期间于 2026-05-27 交付的独立 DFIR + 检测工程项目,任务 02。 作者:**Johan-Emmanuel Hatchi**,常驻布鲁塞尔的法国公民,BeCode 布鲁塞尔网络安全学生(2025 年 11 月至 2026 年 9 月),正在积极寻找 2026 年 9 月的实习机会。 [GitHub](https://github.com/Jhatchi) - [LinkedIn](https://www.linkedin.com/in/johan-emmanuel-hatchi/) 乐于接受 2026 年 9 月在比利时的网络安全实习机会。寻找 SOC L1/L2、初级 DFIR 或检测工程职位,且此类端到端工作(离线取证、SIEM 调优、对抗模拟、正式客户报告)在职责范围内。 ## 许可证 [MIT](LICENSE),2026 Johan-Emmanuel Hatchi。 `detection/*.xml` 中的 Wazuh 规则、auditd 配置和报告文本均在相同的 MIT 许可证下发布:可免费复制、改编和重新部署,但需注明出处。证据包、实验室基础架构和项目简报仍属于 BeCode 布鲁塞尔的资产,不对外发布。
标签:CSV导出, Wazuh, Web报告查看器, 安全, 库, 应急响应, 数字取证, 自动化脚本, 超时处理, 防御加固