clivoa/falcon-hunt-lab

GitHub: clivoa/falcon-hunt-lab

一个基于 Splunk、BOTS v3 数据集和类 CrowdStrike Falcon 遥测的可复现本地威胁狩猎教学实验室,包含课程、CTF 场景和数据转换工具。

Stars: 0 | Forks: 0

# Falcon 实战实验室 **Splunk + BOTS v3 + 类 CrowdStrike-Falcon 遥测数据 — 一个可复现的本地威胁狩猎与 CTF 实验室。** 一个完全可复现的**本地** Splunk 实验室,用于教授威胁狩猎。学生将使用由 Splunk **BOTS v3** 数据集生成的、**类 CrowdStrike-Falcon 端点遥测数据**,调查一起端到端的入侵事件。这些数据与 BOTS 原生的网络/云/身份日志相关联,并通过来自 Splunk Attack Data 的**公开 CrowdStrike 传感器样本**进行验证。它提供了**两个 CTF 风格的调查场景**,包含答案解析以及与真实 Splunk 检测规则的映射。 ## 为什么采用这种设计 - **BOTS v3 是主要场景**:一个真实的、预索引的多源入侵数据集 ("Frothly")。它可以在 `index=botsv3` 中保持可搜索,且时间戳不作更改。 - **Attack Data 是验证/参考源**,而不是场景本身:它提供了公开的 `crowdstrike:events:sensor` 测试样本以及配套的 Sysmon 数据,用于契约测试。 - **生成的数据 ≠ 真实数据**:有关哪些映射是直接的、派生的、合成的或不支持的详细信息,请参阅 `docs/data-mapping.md`。 ## 前置条件 - Docker + Docker Compose(已通过 OrbStack 和 Docker Desktop 测试)。 - **至少 8 GB 可用内存**(Splunk 容器内存上限为 8 GB)以及约 4 GB 磁盘空间。 - 首次下载数据集/镜像需要互联网连接。 ### CPU 架构 / Apple Silicon 官方 `splunk/splunk` 镜像**仅支持 amd64**(所有版本标签)。在 Intel/AMD64 架构上原生运行。在 **Apple Silicon** 上通过模拟运行:已在 `docker-compose.yml` 中设置 `platform: linux/amd64`。请在 Docker Desktop/OrbStack 中启用 **Rosetta**,并为 Docker 分配 **≥8 GB 内存**(Splunk 容器内存上限为 8 GB)。首次启动需要几分钟;索引速度比 Intel 平台慢,但功能完全正常(本实验室在 arm64 架构的 Mac 上通过 OrbStack + Rosetta 构建并验证完成)。 **AVX 注意事项(在 Apple Silicon 上尤为重要):** 如果 Splunk 9.3+ 无法检测到 AVX 指令集,启动时会直接失败,而模拟的 CPU 会触发此检查——导致无限重启崩溃循环。本实验室设置了 `SPLUNK_SKIP_PREINSTALL_CPU_CHECKS_CORRUPTING_DATA_IF_UNSUPPORTED=1`(通过 `.env` 中的 `SPLUNK_SKIP_CPU_CHECK=1` 实现)以跳过此检查。在这里这样做是安全的:macOS 15+ 上的 Rosetta 确实支持 AVX,而且本实验室是临时性的。在具有真实 AVX 支持的原生 amd64 主机上,这是一个无害的空操作;在那里你可以设置 `SPLUNK_SKIP_CPU_CHECK=0` 以强制执行检查。 ## 快速开始 ``` cp .env.example .env # then EDIT the placeholder secrets make setup # build tools image make start # start Splunk (wait for healthy) make bootstrap # download + install BOTS + configure + replay + convert + validate make report # view the validation report ``` `make bootstrap` 是幂等的——重复运行是安全的。各步骤如下: ``` make download-bots install-bots configure download-attack-data replay-attack-data convert validate ``` ## 访问 - Splunk Web:**http://127.0.0.1:8000** —— 用户名 `admin`,密码记录于 `.env`(`SPLUNK_PASSWORD`)。所有端口均仅绑定到 `127.0.0.1`。 ## 索引 | 索引 | 内容 | 面向学生 | |---|---|---| | `botsv3` | 原始预索引 BOTS v3(未更改) | 是(通过宏调用第三方数据) | | `crowdstrike_lab` | 由 BOTS v3 生成的类 Falcon 事件 | **是(主要使用)** | | `attack_data` | 选定的非 CrowdStrike Attack Data(配套 Sysmon) | 用于对比 | | `crowdstrike_reference` | 未修改的公开 CrowdStrike 样本 | 仅限指导教师 | | `lab_internal` | 转换器/重放状态与清单 | 否 | 生成的 sourcetype:`crowdstrike:falcon:lab`。参考 sourcetype:`crowdstrike:events:sensor`。 ### 数据集范围宏(来自 `TA-falcon-like-lab`) `` `falcon_generated_logs` ``、`` `falcon_reference_logs` ``、`` `bots_endpoint_logs` ``、`` `bots_third_party_logs` ``、`` `attack_data_logs` ``、`` `all_hunting_logs` ``。学生的实战狩猎使用 `` `falcon_generated_logs` `` + `` `bots_third_party_logs` ``(避免对相同活动重复计数)。 ## 转换器 `converter/` 是一个 Python 包(`falconlab`),包含由 YAML 驱动的映射规则(`converter/mappings/*.yml`)。它是确定性的、幂等的、可测试的,并且支持试运行(dry-run): ``` docker compose run --rm converter python -m falconlab convert --dry-run docker compose run --rm converter python -m falconlab convert --only sysmon ``` 幂等性:数据摄入以内容 `generation_id` 作为键;重复运行不会产生重复数据。请参阅 `docs/data-mapping.md` 和 `docs/troubleshooting.md`。 安全重新运行 / 重置: ``` make reset-generated # wipe generated+replayed indexes ONLY (botsv3 preserved) make clean # remove containers + volumes (all data) ``` ## 数据模型 (CIM) 内置了一个由实验室编写的兼容 CIM 的适配层(`Lab_CIM_Compat`),使得 `tstats` 可以开箱即用。如需使用真实的 Splunk CIM,请将 Splunkbase 上的安装包放入 `apps/staging/` 目录,并重新运行 `make configure`(它会自动禁用该适配层)。请参阅 `docs/cim-mapping.md`。数据模型加速默认关闭(因为数据量小且日期为 2018 年);该指南说明了如何选择全时间范围的汇总区间、确认构建状态,并安全地将搜索从 `summariesonly=false` 切换为 `summariesonly=true`。 ## 测试与验证 ``` make test # unit + contract tests (no Splunk needed) make test-integration # live SPL/tstats checks against the running lab make validate # integrity + live checks + validation report ``` 验证报告将写入 `datasets/generated/reports/validation_report.{md,json}`。 ## 学生工作流 1. 阅读 `docs/exercises/README.md`。 2. 学习模块 1–22(`docs/exercises/NN-*.md`);解答位于 `docs/solutions/` 中。 3. 始终使用 `earliest=0 latest=+10y` 进行搜索(数据来自 2018 年)。 指导教师标准答案(解答)位于 `ground_truth/` 中——**请勿外传**。 ## 🚩 CTF 场景 包含两个调查风格的 CTF,带有编号目标和精确答案 flag —— `docs/ctf/README.md`(通过 `make ctf` 启动): 1. **Operation Frothly Foothold(泡沫行动立足点)** —— 使用**原生 SPL 和 CIM 数据模型**,在 `crowdstrike_lab` 中狩猎 BOTS v3 入侵事件。揭露 C2 通信、`fodhelper` UAC 绕过、PowerShell Empire 以及恶意管理员账户。 2. **Falcon Sees the Thief(Falcon 洞察窃贼)** —— 阅读**真实的** CrowdStrike Falcon 传感器遥测数据(`crowdstrike_reference`),追踪 LSASS/SAM/NTDS 凭据窃取行为。 每个目标都映射到生产环境的 **Splunk 研究检测规则**(`docs/ctf/detections-map.md`,源自 https://research.splunk.com/detections/)。 答案解析:`ground_truth/ctf/answers.md`(供指导教师查看)。 ## 直接下载数据集(而非自行构建) 如果你只想要数据(无需下载 BOTS 或运行转换器),可以获取打包好的数据集,并通过 HEC 将其加载到任何 Splunk 实例中: ``` make dataset # builds dist/falcon-hunt-lab-dataset-v1.0.0.tar.gz (~2.4 MB) make load-dataset # loads it into this lab's Splunk # 或者,独立针对任何配置了 HEC 和三个索引的 Splunk: python3 scripts/dataset_loader.py --bundle dist/falcon-hunt-lab-dataset-v1.0.0.tar.gz \ --hec-url https://127.0.0.1:8088 --hec-token ``` 该捆绑包包含生成的 `crowdstrike_lab` 事件、公开的 CrowdStrike 参考样本以及配套的 Sysmon 数据——并提供了一个仅依赖标准库的加载器、一份 `MANIFEST.json`(包含数量统计和 SHA-256 校验值)以及溯源信息/NOTICE。BOTS v3 本身未包含在捆绑包中(335 MB,CC0 协议)——如果需要完整的多源场景,请单独下载。请参阅 `docs/ctf` 中的场景 1,了解仅加载捆绑包即可进行的实战狩猎。 ## 文档 - `docs/architecture.md` · `docs/data-mapping.md` · `docs/cim-mapping.md` - `docs/attack-data-reference.md` · `docs/troubleshooting.md` · `docs/references.md` - `docs/ctf/` —— CTF 场景、答案解析指引、检测映射。 - `docs/exercises/` + `docs/solutions/` —— 22 个模块的课程体系。 - `docs/research/` —— CrowdStrike 事件目录、BOTS 清单、转换矩阵(每项映射背后的证据支撑)。 ## 面向新用户(纯净检出的可复现性) ``` git clone https://github.com/clivoa/falcon-hunt-lab.git && cd falcon-hunt-lab cp .env.example .env # generate a strong SPLUNK_PASSWORD + SPLUNK_HEC_TOKEN make setup start bootstrap # ~15–25 min first run (downloads BOTS + image) make validate report # confirm all green, read the report open http://127.0.0.1:8000 # admin / your SPLUNK_PASSWORD ``` 所有内容均已锁定版本且具备幂等性;重新运行任何步骤都是安全的。所有必需的外部数据均由脚本按照各自的许可协议自行下载(不包含任何专有数据提交)。如果某步骤卡住,请参阅 `docs/troubleshooting.md`。 ## 已知限制 - 生成的事件仅为近似值;有几个真实的 Falcon 字段被刻意留空(请参阅 `docs/data-mapping.md`)。 - `DnsRequest` 是合成的(用于填补数据缺口);BOTS 不包含 Sysmon EID 22。 - BOTS v3 中没有 Sysmon EID 7/22,因此从 BOTS 转换的 `ModuleLoad` 数量为 0(保留该规则是为了处理其他数据源)。 ## 许可与再分发 原始项目代码和文档采用 [Apache License 2.0](LICENSE) 许可。第三方归属说明请参阅 `NOTICE`。BOTS v3 (CC0) 和 Splunk Attack Data (Apache-2.0) 的许可协议予以保留。Splunk Enterprise、Splunk CIM 插件以及任何 Splunkbase 安装包均**受独立的许可协议约束**,在此**不进行**再分发——你需要根据其使用条款自行下载。请勿在此实验室中使用真实的企业 CrowdStrike 遥测数据或真实的客户/代理 ID。
标签:Docker, PB级数据处理, 安全教学, 安全运维, 安全防御评估, 安全靶场, 版权保护, 请求拦截, 逆向工具