raynacamp0503-svg/socforge

GitHub: raynacamp0503-svg/socforge

一个自托管的 SOC 分析师培训模拟器,通过模拟 SIEM 环境、实时告警和引导式调查评分帮助分析师提升安全事件响应能力。

Stars: 0 | Forks: 0

# SOCForge — SOC 分析师二级培训模拟器 一个全栈、自托管的 SOC 训练靶场,其外观和操作方式类似现代 SIEM —— 拥有深色仪表盘、基于字段的搜索语言、实时告警、案例管理以及带评分的引导式调查。 **每隔几分钟,告警引擎就会向事件存储中注入一次模拟攻击并触发告警。每个告警都会成为一个交互式培训案例:包含目标、分析师检查清单、可选提示、证据收集、处置结论、自动评分,以及一份包含攻击完整解析的生成事件报告。** ## 技术栈 | 层级 | 技术 | |---|---| | 前端 | React 18 + TypeScript + Vite, recharts, 自定义深色主题 | | 后端 | Node.js 22+ / Express (ES modules) | | 数据库 | 通过 Node 内置的 `node:sqlite` 实现的 SQLite (零原生依赖) | | 实时 | Server-Sent Events (`/api/stream`) | | 部署 | Docker Compose (nginx + API) | ## 快速开始 ### 选项 A — Docker (推荐用于演示) ``` docker compose up --build # 打开 http://localhost:8080 ``` SQLite 数据库持久化存储在 `socdata` 卷中。`docker compose down -v` 会重置所有内容。 ### 选项 B — 本地开发 需要 **Node.js 22.13+** (使用内置的 `node:sqlite` 模块)。 ``` # Terminal 1 — API 运行在 :4000 cd server npm install npm run dev # Terminal 2 — UI 运行在 :5173(将 /api 代理到 :4000) cd web npm install npm run dev ``` 打开 http://localhost:5173。首次运行时,服务器会回填 24 小时的噪声事件,并预设 4 个事件 (其中一个作为示例报告预先完成)。首个**实时**告警会在启动后约 25 秒触发,之后每 2–5 分钟触发一次 (通过 `ALERT_MIN_SEC` / `ALERT_MAX_SEC` 进行调整)。 ## 培训教练 (新手模式) 刚接触 SOC 工作?在侧边栏开启 **🎓 培训教练**。这是一个 19 步的交互式教程,它会在每个屏幕上跟随你,并随时为你解释相关概念 —— 什么是 SIEM、事件与告警的区别、基于严重程度和 SLA 的分类、搜索语言、透视 (pivoting)、证据收集、四种处置结论、MITRE ATT&CK 以及检测工程。当某一步骤涉及不同页面时,它会提供一个“带我去”按钮,记住你上次中断的地方 (保存在你的浏览器中),并且可以随时开启/关闭。在最后,它会为你分配第一个独立调查任务。 ## 工作流 (如何进行培训) 1. **关注队列。** 当实时告警触发时会弹出一个 toast 提示。打开该案例。 2. **阅读目标和检测逻辑。** 点击 *在搜索中运行 ↗* 以查看告警背后的原始事件。 3. **处理检查清单。** 对用户/主机/IP 进行透视 (结果表中的每个值都是一个透视链接)。 4. **附加证据** —— 来自相关日志的关键事件,以及你自己的备注。 5. **撰写分析师备注**,选择处置结论 (真正攻击 / 误报 / 良性 / 需要升级),并 **提交并评分**。 6. **阅读反馈**:得分明细、正确的处置结论,以及关于攻击是什么及其原理的完整解析,就像一名 Tier 2 分析师应有的思考方式。 **评分标准:** 检查清单 40 分 · 证据 20 分 · 正确的处置结论 40 分 · **每使用一次提示扣 10 分**。各严重程度的 SLA 计时器:严重 30 分钟,高 1 小时,中 4 小时,低 8 小时。 ## 搜索语言速查表 ``` index=windows EventCode=4625 failed logons sourcetype=sysmon process_name=powershell.exe severity=high user=* any user, high-severity events index=network dest_ip=147.78.47.93 connections to an IP src_ip=10.20.* wildcards anywhere in a value index=proxy POST bare words = free-text match ``` 支持的域:`index`、`sourcetype`、`host`、`user`、`src_ip`、`dest_ip`、`EventCode`/`event_code`、`process_name`、`severity`、`scenario`。`*` 匹配任意内容;未知字段会回退到匹配原始事件 JSON。你可以组合任意数量的条件 (隐式 AND),并从选择器中选取时间范围。 **保存为检测规则:** 任何查询都可以保存为检测规则 —— 随后它会每 60 秒对实时事件运行一次,并触发自己的告警 (具有 10 分钟的冷却时间)。这就是你练习检测工程和调优的方式。 ## 内置场景 (10) | 场景 | 严重程度 | 难度 | MITRE | |---|---|---|---| | 暴力破解登录 | high | beginner | T1110, T1078 | | 可疑 PowerShell | high | intermediate | T1059.001, T1566.001 | | 不可能旅行 | medium | beginner | T1078, T1539 | | 恶意软件信标 | high | intermediate | T1071.001, T1573 | | 新建本地管理员 | medium | beginner | T1136.001, T1098 | | 内部端口扫描 | low | beginner | T1046 | | 可疑 DNS (DGA) | medium | intermediate | T1568.002, T1071.004 | | 类勒索软件文件活动 | critical | advanced | T1486, T1490 | | 权限提升 | high | advanced | T1543.003, T1068 | | 数据窃取 | high | advanced | T1567.002, T1039 | 可以从 **场景** 页面按需触发任何场景。 ## 场景构建器 添加你自己的攻击:将 JSON 文件放入 `server/scenarios/` 目录并重启 API。完整的 schema 模板位于应用程序的场景页面中。亮点: - `events[]` —— 带有 `offsetSec` (相对于告警时间)、`repeat`、`intervalSec` 的模板化日志事件 - 占位符 (`{user}`, `{host}`, `{attacker_ip}`, `{c2_ip}`, `{dga_domain}`, `{cloud_domain}`, `{new_account}`, …) 在每次场景触发时都会用随机化的实体进行填充,因此没有任何两个案例看起来是完全相同的 - `checklist`, `hints`, `expectedEvidence`, `correctDisposition`, `explanation` 驱动培训模式和评分 - `detection` 是作为告警检测逻辑显示的 SPL 风格查询 - `reportTemplate` 将成为生成报告中的“建议响应措施”部分 ## 架构 ``` web/ (React + TS) server/ (Express) ┌─────────────────────┐ /api/* ┌──────────────────────────────┐ │ Dashboard Search │ ───────────► │ routes.js REST API │ │ Queue Case │ │ search.js SPL-like parser │ │ Scenarios Portfolio│ ◄─────────── │ engine.js alert scheduler, │ └─────────────────────┘ SSE stream │ scoring, reports │ │ generator.js noise + seeding │ │ scenarios/ JSON attack defs │ │ db.js SQLite (node:sqlite) └──────────────────────────────┘ ``` - **噪声生成器**:每约 4 秒生成良性事件 (登录、进程创建、DNS、防火墙、代理),因此真实的攻击会隐藏在逼真的背景流量中。 - **告警引擎**:每 2–5 分钟选取一个随机场景,使用随机实体对其进行实例化,注入其事件,创建告警 + 案例,并通过 SSE 进行广播。 - **检测运行器**:每 60 秒对新事件评估一次用户保存的查询。 - **留存策略**:超过 7 天的噪声事件会被清理;与告警关联的事件将被保留。 ## 作品集模式 **作品集** 页面会跟踪已完成的调查、ATT&CK 覆盖率、编写的检测规则以及你的平均得分 —— 并将所有内容导出为单个 Markdown 文件 (`⬇ 导出作品集`),包括自动生成的简历要点、面试谈话要点以及你制作的每份事件报告。 ### 建议截图 (使用约 10 分钟后) 1. 填充了图表的仪表盘 2. 展开了原始事件的搜索控制台 3. 带有实时 SLA 倒计时的告警队列 4. 调查中的案例 (检查清单 + 提示 + 证据) 5. 结案后的评分报告视图 6. 带有累积统计数据的作品集页面 ### 简历要点示例 - 构建了一个全栈 SOC 培训平台 (React/TypeScript, Node/Express, SQLite, Docker),模拟 SIEM,包含自定义的基于字段的查询语言、实时日志生成和基于 SSE 的实时告警。 - 调查并处置了涵盖 15+ 种 MITRE ATT&CK 技术的模拟事件 —— 暴力破解、C2 信标、DGA 检测、勒索软件行为、权限提升和数据窃取。 - 编写并调优了针对实时模拟遥测数据进行验证的自定义检测规则,包括用于控制告警疲劳的阈值和冷却设计。 - 制作了结构化的事件报告,包含执行摘要、ATT&CK 映射、证据链和响应建议。 ### 面试一句话介绍 更多面试问答准备位于应用程序的作品集页面中 (检测工程、告警疲劳、调查演练以及我会改进的地方)。 ## 安全声明 本项目严格属于防御性培训基础设施: - 所有“攻击”都是预先编写好的**日志模板** —— 描述从未发生过的活动的文本记录。 - 不包含任何恶意软件、漏洞利用代码、payload 或任何类型的攻击性工具。 - 除了其自身的数据库外,不会扫描、探测、向任何系统进行身份验证或与任何系统通信。 - 指标 (IP、域名) 均为捏造或保留范围内的值。
标签:Docker Compose, GNU通用公共许可证, MITM代理, Node.js, React, SIEM模拟器, SOC培训, SQLite, Syscalls, 安全教育, 版权保护, 自动化攻击