Jhatchi/NexaCorp-DFIR-INC-2026-007
GitHub: Jhatchi/NexaCorp-DFIR-INC-2026-007
一个 DFIR 培训实践项目,通过分析 IDOR 与失效访问控制导致的数据泄露事件,展示 Web 应用安全事件的取证调查与报告方法。
Stars: 0 | Forks: 0
# NexaCorp DFIR: INC-2026-007 - IDOR 与失效的访问控制
针对 NexaCorp 内部员工 Web 门户 NexaPortal 的授权滥用事件评估。2026 年 6 月 19 日,攻击者使用一个有效但未经授权的账户(`m.renard`,自 INC-2026-005 以来留下的据点)登录,通过 `/portal/employees.php?id` 上的不安全直接对象引用(IDOR)遍历了整个员工目录,访问了一个向非管理员会话返回 HTTP 200 状态码的管理页面(失效的访问控制),并下载了完整的员工导出数据。47 名员工的个人数据流出门户。不需要漏洞利用、恶意软件或被盗的会话。本项目作为 BeCode 布鲁塞尔蓝队与红队训练营(Mission 07)期间的个人实践任务独立完成,是 [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001)、[INC-2026-002](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-002)、[INC-2026-003](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-003)、[INC-2026-004](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-004)、[INC-2026-005](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-005) 和 [INC-2026-006](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-006) 的延续。本仓库还包含了汇总的 **第二个月评估报告**(INC-2026-004 至 007)。
[](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-007/actions/workflows/ci.yml)
[](#methodology)
[](https://attack.mitre.org/)
[](https://cwe.mitre.org/data/definitions/639.html)
[](LICENSE)
[](https://www.linkedin.com/in/johan-emmanuel-hatchi/)
本仓库记录了作为 BeCode 网络安全训练营(2025-2026 届)一部分所开展的 SOC 分析师实践活动。这是一个评估实验室:包含取证调查和报告,没有检测规则(阶段 2)的交付物。这是 NexaCorp DFIR 系列中的第七个事件,也是第二个月的结课项目。
## 运维须知
这是针对虚构基础设施的培训实践。NexaCorp Industries 是一个虚构的客户,用作 BeCode 布鲁塞尔训练营的演练场景。NexaPortal(主机 `192.168.10.26`)是一个隔离的实验室环境。未涉及任何生产系统、客户数据或第三方。
此处提到的所有 IP 地址、主机名和账户(`172.16.50.10`、`192.168.10.26`、`m.renard`、`p.renard`、`j.martin` 等)都是实验室本地产物,并非真实的威胁情报。请勿将它们作为 IOC 输入到生产 SIEM 中。
## 概览
| 字段 | 值 |
|---|---|
| 编号 | INC-2026-007 |
| 受影响主机 | NexaPortal (Apache 2.4.57, 192.168.10.26) |
| 攻击者 | 172.16.50.10(外部;与 INC-2026-004 和 INC-2026-005 源头相同) |
| 根本原因 | 未移除的据点(账户 m.renard)以及 IDOR (CWE-639) 和失效的访问控制 (CWE-862) |
| 结果 | 47 名员工的个人数据被窃取;适用 GDPR 第 33 条的通知规定 |
| 事件日期 | 2026 年 6 月 19 日 |
| 证据 | web_access.log, nexaportal_auth.log, wazuh-alerts.json, nexaportal_idor.pcap, employee_directory_export.csv, employee_roster.txt |
| 阶段 | 仅阶段 1 评估(无检测工程阶段) |
| 相关事件 | INC-2026-004, INC-2026-005, INC-2026-006 (Web 应用攻击活动) |
| 调查输出 | 值 |
|---|---|
| 攻击者 IP | 172.16.50.10(外部) |
| 未经授权的账户 | m.renard(不在 IT 账户登记册中;自 INC-2026-005 以来的据点) |
| IDOR 端点与参数 | /portal/employees.php,参数 id (CWE-639) |
| 暴露的记录 | 47 条独立的员工记录 |
| 访问控制失效端点 | /portal/admin/(对非管理员会话返回 HTTP 200;对未授权请求返回 302) |
| 数据窃取端点 | /portal/admin/export_users.php(导出 47 条记录,需报告 GDPR) |
| SIEM 检测盲区 | 在此时间窗口内 Wazuh 触发了 211 次告警,针对该攻击者的为 0(签名规则无法察觉授权滥用) |
## 实践背景
**场景(虚构)。** NexaCorp Industries 报告了 NexaPortal 上的员工数据泄露事件。该实践由 Marc Wauters(IT 基础设施经理)报告;事件发生在 2026 年 6 月 19 日星期五。NexaPortal 在上线时未经安全审查,在 INC-2026-006 之后部署的防护措施(HttpOnly cookie、内容安全策略)虽然已生效但在此处无关紧要,因为攻击者持有有效的登录凭证,而不是依赖 XSS。
**范围。** 这是一个评估实验室:对证据包(Web 和身份验证日志、网络捕获、Wazuh 告警导出、管理导出 CSV 以及 IT 账户登记册)进行取证分析。没有检测规则(阶段 2)的交付物;Wazuh 的检测盲区已作为一项发现被记录在案。
**结课项目。** 本次实践还将本月发生的四起 Web 应用程序事件(INC-2026-004 至 007)汇总到面向管理层的[第二个月评估报告](reports/Month2_Assessment_Report.md)中。
**教育背景。** 作为 Mission 07 在 BeCode 布鲁塞尔蓝队与红队训练营(2025 年 11 月至 2026 年 9 月)期间完成。
## 执行摘要
2026 年 6 月 19 日,攻击者使用 `m.renard` 账户通过 NexaPortal 的身份验证,该账户并不存在于 NexaCorp 的 IT 配置登记册中。它是与 INC-2026-006 中首次出现、并追溯到 INC-2026-005 的同一个未经授权的据点,且从未被移除。通过单一外部源(172.16.50.10,与 INC-2026-004 和 005 中使用的地址相同),该会话通过 IDOR 枚举了员工目录,在短短两分钟内读取了 47 条独立记录,随后访问了一个向非管理员会话返回 HTTP 200 的管理页面,并下载了完整的员工导出数据。
导出的数据涵盖 47 名员工(姓名、企业邮箱、部门、职位、电话号码、薪资范围),属于 GDPR 规定的个人数据,因此适用违规通知要求。整个攻击过程对 SIEM 是不可见的:在该时间窗口内的 211 条 Wazuh 告警中,没有一条与攻击者有关,因为每一个请求都在经过身份验证的会话上返回了 HTTP 200。根本原因不仅仅是孤立的 IDOR 漏洞,而是未能彻底移除 INC-2026-005 之后留下的攻击者账户。
## Kill chain 摘要
攻击者仅凭一个有效的登录凭证就读取并导出了员工数据:
1. **有效登录**:`m.renard` 于 16:23:01 UTC 从 172.16.50.10 进行身份验证。该账户不在 IT 登记册中(INC-2026-005 留下的据点,从未被移除)。
2. **IDOR 枚举**:从 16:23:08 到 16:25:28 UTC,该会话遍历了从 `/portal/employees.php?id=1` 到 `id=47` 的记录,基本为顺序递增,每次响应均为 HTTP 200。共访问了 47 条独立记录。
3. **失效的访问控制**:16:37:50 UTC,`/portal/admin/` 向该非管理员会话返回了 HTTP 200(而未授权的请求会收到 302 重定向)。
4. **数据窃取**:16:38:01 UTC,`/portal/admin/export_users.php` 返回了包含 47 条记录的员工导出数据。
来自不同源(172.16.50.40)充满噪音的暴力破解自始至终均告失败,且与此事件无关;真正的数据泄露是来自 172.16.50.10 的那一次单一有效登录。
## 如何阅读本仓库
| 如果你是... | 从这里开始 | 时间 |
|---|---|---|
| **招聘人员或招聘经理** | 本 README + [报告](reports/INC-2026-007_Findings_Report.md)执行摘要 | 5 分钟 |
| **管理层 / 董事会** | [第二个月评估报告](reports/Month2_Assessment_Report.md)(非技术性、业务影响、GDPR 状况) | 10 分钟 |
| **评估契合度的 SOC 分析师** | [报告](reports/INC-2026-007_Findings_Report.md)技术分析 + [`evidence-summary/ioc-summary.md`](evidence-summary/ioc-summary.md) | 20 分钟 |
| **DFIR 从业者** | 完整[报告](reports/INC-2026-007_Findings_Report.md) + [`methodology/attack-timeline.md`](methodology/attack-timeline.md) + [`notes/journal.md`](notes/journal.md) | 30 分钟 |
| **任何想要 grep、引用或对比差异的人** | [报告的 Markdown 源文件](reports/INC-2026-007_Findings_Report.md) | 视需要而定 |
## 方法论
本次实践遵循标准的事件响应框架:
- **NIST SP 800-61r2**(事件处理)和 **NIST SP 800-86**(取证技术):构建检测与分析工作的结构。
- **SANS PICERL**:识别阶段是评估的核心(日志与捕获数据的关联)。
- **MITRE ATT&CK Enterprise v15**:每项发现都映射到一个或多个技术(参见 [`methodology/attck-mapping.md`](methodology/attck-mapping.md))。
- 弱点分类:**CWE-639** (IDOR) 和 **CWE-862**(缺少授权),归类于 **OWASP Top 10 A01:2021 失效的访问控制**。
**调查方法。** 账户和来源识别(根据 IT 登记册比对身份验证日志),活动重构(从访问日志中分析 IDOR 遍历和管理端访问,并根据导出的 CSV 交叉核对记录数),窃取证明(捕获数据和 CSV),以及对 Wazuh 告警进行检测盲区分析。参见 [`notes/journal.md`](notes/journal.md)。
**证据与时间戳。** 日志时间戳为 UTC;本地时间为 CEST (UTC+2)。为了方便梳理时间线,内容中同时提供了两种时间。
## 使用的工具
- **tshark**:网络捕获分析(确认导出响应为 `text/csv`,恢复管理页面 HTML)。
- **jq**:查询和聚合 Wazuh 告警报出数据。
- **grep / awk / sort / uniq**:访问日志和身份验证日志分析、独立记录统计、与账户登记册的对账。
- **base64**:解码管理页面源代码中泄露的调试 token。
## 检测工程
**本次实践不适用。** 这是一个没有阶段 2 的评估实验室:未编写 Suricata 或其他检测规则。检测问题转而作为一项发现记录在案。在事件窗口期间,Wazuh SIEM 触发了 211 次告警,全部针对无关的扫描器流量(规则 31101、31108、31151);攻击者(172.16.50.10)产生的告警数为零,因为每个请求都在有效的、经过身份验证的会话上返回了 HTTP 200。一个以 4xx 错误和已知扫描器 User-Agent 为触发条件的签名规则集,从结构上就无法发现授权滥用。报告建议将行为检测(单一来源的目录枚举;任何非管理员账户访问管理或导出端点)作为适当的控制手段。
## 仓库布局
```
NexaCorp-DFIR-INC-2026-007/
├── README.md This file
├── LICENSE
├── .gitignore
├── .markdownlint.json
├── .github/
│ └── workflows/
│ └── ci.yml markdownlint + typography validation
├── reports/
│ ├── INC-2026-007_Findings_Report.pdf Full findings report
│ ├── INC-2026-007_Findings_Report.md Markdown source of the report
│ ├── Month2_Assessment_Report.pdf Month 2 capstone (INC-2026-004 to 007), board audience
│ └── Month2_Assessment_Report.md Markdown source of the Month 2 report
├── evidence-summary/
│ └── ioc-summary.md Indicators of compromise
├── methodology/
│ ├── attack-timeline.md Request-level timeline (UTC and CEST)
│ └── attck-mapping.md MITRE ATT&CK mapping table
└── notes/
└── journal.md Investigation journal (post-analysis reconstruction)
```
由于这是一个评估实验室,因此没有 `detection/` 目录。调查结果报告以 PDF 格式提供在 `reports/` 目录中,并附带其 Markdown 源文件。
## 可重复性
证据包属于 BeCode 实验室资产,不对外分发。如果你有自己的副本,核心发现可以从日志中重现:
```
# Attacker account : 成功登录但未出现在 IT register 中
grep SUCCESS logs/nexaportal_auth.log | grep -v -f <(awk -F'|' '{gsub(/ /,"",$1);print $1}' reference/employee_roster.txt)
# IDOR scope : 攻击者读取的不同员工记录
grep '172.16.50.10' logs/web_access.log | grep -oE 'employees\.php\?id=[0-9]+' | sort -u | wc -l
# Broken access control : 对 /portal/admin/ 的请求,对 attacker 返回 200,对未授权 scanners 返回 302
grep '/portal/admin/' logs/web_access.log
```
`export_users.php` 返回的导出大小(3858 字节)与 `exports/employee_directory_export.csv`完全匹配;捕获结果确认响应为 `text/csv`。
## 已知限制
- **据点来源跨越多个事件。** `m.renard` 账户在 INC-2026-006 中被标记为来源不明;本次实践根据攻击活动链条将其视为 INC-2026-005 中建立的据点,同时报告中也指出了此处的证据以及该跨事件的分析框架。
- **未部署检测。** 作为评估实验室,报告提出了行为检测逻辑,但未交付或验证规则;该提案仅为文字说明,而非经过测试的规则集。
- **范围仅限于捕获的时间窗口。** 评估涵盖了 6 月 19 日的证据包;该窗口之外的活动不在评估范围内。
## NexaCorp DFIR 系列
- [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001):Linux 基础设施入侵(vsftpd 后门,Caldera C2)
- [INC-2026-002](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-002):权限提升与持久化(Tor SSH,SUID,后门账户)
- [INC-2026-003](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-003):第一个月跨事件评估
- [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):OS 命令注入与 Web Shell(Web 门户)
- [INC-2026-006](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-006):存储型 XSS 与会话劫持(NexaPortal)
- **INC-2026-007**:本仓库(IDOR 与失效的访问控制;第二个月结课项目)
## 关于
作为 Mission 07,在 [BeCode 布鲁塞尔](https://becode.org)蓝队与红队训练营(2025 年 11 月至 2026 年 9 月)期间完成的个人 DFIR 实践。
作者:**[Johan-Emmanuel Hatchi](https://github.com/Jhatchi)** ([LinkedIn](https://www.linkedin.com/in/johan-emmanuel-hatchi/))。
本人对 2026 年 9 月起在比利时开始的网络安全实习机会持开放态度。正在寻找 SOC / DFIR / 检测工程相关的职位,希望工作范围能涵盖此类端到端的任务(日志与 PCAP 取证、授权滥用分析、基于 GDPR 影响评估以及正式的客户报告)。
## 许可证
[MIT](LICENSE),2026 Johan-Emmanuel Hatchi。
报告文本和方法论笔记基于 MIT 许可证发布:可在署名的前提下自由复制、修改和重用。证据包、实验室基础设施以及原始的实践任务简报仍属于 BeCode 布鲁塞尔的财产,不对外分发。
标签:IDOR, NIST SP 800-61, Web安全, 库, 应急响应, 数据泄露, 权限控制失效, 蓝队分析, 防御加固