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)。 [![ci](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2f6f753816203027.svg)](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-007/actions/workflows/ci.yml) [![Methodology](https://img.shields.io/badge/methodology-NIST%20SP%20800--61r2-blue.svg)](#methodology) [![Framework](https://img.shields.io/badge/framework-MITRE%20ATT%26CK-red.svg)](https://attack.mitre.org/) [![CWE](https://img.shields.io/badge/CWE--639-IDOR-orange.svg)](https://cwe.mitre.org/data/definitions/639.html) [![License](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 分析师实践活动。这是一个评估实验室:包含取证调查和报告,没有检测规则(阶段 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安全, 库, 应急响应, 数据泄露, 权限控制失效, 蓝队分析, 防御加固