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) 的直接延续。
[](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-002/actions/workflows/ci.yml)
[](#方法论)
[](https://attack.mitre.org/)
[](detection/)
[](LICENSE)
[](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报告查看器, 安全, 库, 应急响应, 数字取证, 自动化脚本, 超时处理, 防御加固