ShamsKibonge/soc-triage-automation-opensearch

GitHub: ShamsKibonge/soc-triage-automation-opensearch

该平台利用 AI 和 OpenSearch 自动将海量安全遥测数据分组为可解释的调查案例,帮助 SOC 分析师减少重复性告警分诊工作并生成带证据链的工单。

Stars: 0 | Forks: 0

# S.H.A.M.S. - SOC Hunting and Mitigation System **AI 辅助的 SOC 分诊平台,用于 OpenSearch 遥测、分析师案例分组、调查追踪以及 MantisBT 工单工作流。** S.H.A.M.S. 将海量的安全遥测数据转化为分组且具可解释性的调查案例。该项目最初作为网络安全专业的高年级毕业设计开发,在此作为 SOC 自动化、告警分诊和安全工程工作流设计的作品集案例研究进行展示。 ## 执行摘要 安全团队往往拥有足够的日志,却没有足够的时间将这些日志转化为清晰、有证据支持的决策。S.H.A.M.S. 通过收集由 OpenSearch 支持的 Suricata 和 Zeek 遥测数据,将相关事件分组为候选案例,利用 AI 辅助分诊推理,执行后续追踪,并准备带有结构化证据的 MantisBT 工单,从而弥补了这一差距。 该项目展示了一个实用的 SOC 工作流: - 从 OpenSearch 收集并规范化遥测数据。 - 将活动分类为不同的调查类别,例如 C2、恶意软件、暴力破解、DNS 隧道、扫描、漏洞利用尝试以及 Web 漏洞利用。 - 将相关日志分组为带有稳定指纹的候选案例。 - 使用 AI 总结证据、推荐追踪路径,并生成分析师可读的判定结果。 - 保留工单和案例历史记录,以便先前的决策能为未来的分诊提供参考。 - 确保分析师始终掌控最终的工单审核与提交。 ## 安全问题 原始的告警仪表盘可能会让初级分析师不知所措。单一安全事件可能会在 Suricata 告警、Zeek DNS 记录、HTTP 记录、SSL 元数据、通知和连接事件中生成大量日志。分析师必须反复回答同样的问题: - 哪些告警值得调查? - 多个事件是否属于同一个案例? - 有哪些证据支持升级、持续监控或关闭? - 下一步应该检查哪个追踪方向? - 该源 IP、目标 IP、主机、特征码或 URL 是否曾出现在之前的工单中? - 能否创建一个带有足够上下文信息的工单,以便其他分析师采取行动? S.H.A.M.S. 正是围绕这一工作流设计的。它并不声称能检测一切。它的重点在于减少重复的分诊工作,并使证据链更易于审查。 ## 架构 ``` flowchart LR A[Network Security Telemetry] --> B[Suricata and Zeek Events] B --> C[Ingestion Pipeline] C --> D[(OpenSearch Indexes)] D --> E[Node/Express Backend] E --> F[Collector and Classifier] E --> G[Case Grouping and Fingerprinting] E --> H[Pivot Executor] E --> I[AI Investigation Service] E --> J[MantisBT Integration] G --> K[(Local Case and Ticket JSON Stores)] I --> K J --> K E --> L[React Frontend] L --> M[Dashboard v1] L --> N[Case Manager v1] L --> O[Ticket Registry] ``` ## SOC 工作流 ``` flowchart TD A[Refresh OpenSearch telemetry] --> B[Categorize events by SOC use case] B --> C[Group related logs into case candidates] C --> D[Analyst reviews case evidence] D --> E{Run AI analysis?} E -->|Yes| F[AI returns assessment, confidence, verdict, and pivots] F --> G{Pivot needed?} G -->|Yes| H[Execute OpenSearch pivot] H --> I[Reassess with pivot results] I --> J{Ticket recommended?} G -->|No| J E -->|No| J J -->|Yes| K[Check MantisBT duplicates] K --> L[Preview and edit ticket] L --> M[Submit to MantisBT] J -->|No| N[Monitor or close as likely false positive] M --> O[Save local ticket history] N --> O ``` ## 遥测工作流 ``` sequenceDiagram participant OS as OpenSearch participant API as S.H.A.M.S. Backend participant AI as OpenAI API participant UI as React Frontend participant MBT as MantisBT UI->>API: Refresh triage summary API->>OS: Query alert, dns, http, notice, conn, ssl datasets OS-->>API: Matching events API->>API: Normalize fields, filter noise, group cases API-->>UI: Case candidates and evidence samples UI->>API: Analyze selected case API->>AI: Structured case evidence AI-->>API: JSON assessment and recommended pivots UI->>API: Execute pivot API->>OS: Lucene query over OpenSearch time range OS-->>API: Pivot hits and summary UI->>API: Create ticket API->>MBT: MantisBT REST issue create API->>API: Save local ticket history ``` ## 技术栈 | 领域 | 技术 | | --- | --- | | 前端 | React, Create React App, CSS | | 后端 | Node.js, Express, JavaScript ES modules | | 遥测 | OpenSearch, OpenSearch Dashboards 链接, Suricata 风格告警, Zeek DNS/HTTP/SSL/notice/conn 记录 | | AI 工作流 | OpenAI chat completions(结构化 JSON 响应) | | 工单系统 | MantisBT REST API | | 存储 | 本地 JSON 文件,用于生成的分诊摘要、案例管理器状态、案例注册表和工单历史 | | 工具 | npm, PowerShell 辅助脚本 | ## 核心功能 - **OpenSearch 遥测收集**:查询 `alert`, `dns`, `http`, `notice`, `conn` 和 `ssl` 数据集,并存储汇总的分诊输出。 - **安全类别分类**:涵盖 C2/信标、恶意软件、漏洞利用尝试、DNS 隧道、横向移动、暴力破解、侦察、Web 漏洞利用、HTTP 协议异常、双用途基础设施以及外部 IP 发现。 - **案例分组**:将事件分组为确定性的案例记录,包含时间戳、日志计数、源/目标指标、端口、主机、URL、DNS 查询、特征码和样本证据。 - **仪表盘 v1**:提供类别摘要、案例证据、AI 分析、追踪执行、重复检查和工单预览/提交。 - **案例管理器 v1**:运行过去一小时的 OpenSearch 自动分组任务,在本地对案例进行排名,使用 AI 调查重点案例,执行有限的追踪,并显示实时进度。 - **追踪执行**:执行 AI 建议的 OpenSearch 追踪,涵盖源 IP、目标 IP、特征码、CVE、目标端口、HTTP URL、主机、DNS 名称、TLS SNI 以及延长时间窗口。 - **MantisBT 工作流**:检查可能的重复项、创建有证据支撑的工单、同步用户工单历史并存储本地分析师记忆。 - **证据链接**:在环境配置支持的情况下,生成用于案例审查的 OpenSearch Dashboards Discover URL。 ## AI 辅助分诊工作流 AI 层的作用是经过刻意限制的。它接收结构化的案例证据,并返回包含以下内容的 JSON: - 初步威胁评估和分析师推理。 - 判定候选:`ESCALATE`, `LIKELY_FALSE_POSITIVE`, 或 `SUSPICIOUS_MONITOR`。 - 置信度得分和攻击分类。 - 工单建议。 - 最多两个用于后续调查的推荐追踪方向。 随后,应用程序通过 OpenSearch 执行已批准的追踪,并可以利用追踪结果重新评估案例。在提交之前,分析师仍需对工单预览进行审核。 ## MantisBT 工单工作流 S.H.A.M.S. 通过 REST API 与 MantisBT 集成: 1. 从选定的遥测数据中构建案例指纹。 2. 使用 IP、特征码、目标、主机和类别在最近的 MantisBT 工单中搜索可能的重复项。 3. 生成包含评估、证据、追踪、OpenSearch 查询/链接、严重程度、优先级和附加上下文的工单预览。 4. 允许分析师编辑工单字段。 5. 将问题提交至 MantisBT。 6. 保存本地工单历史记录,为未来的分诊提供上下文。 ## 截图 ### 仪表盘概览 ![Dashboard v1 类别摘要和分组的 OpenSearch 案例。](https://static.pigsec.cn/wp-content/uploads/repos/cas/84/84b6a67a76a791341dbcf94e7af4bf13f287895583df810160094ead1ff311c7.png) Dashboard v1 汇总了基于 OpenSearch 的告警类别和分组的调查案例。 ### 案例证据 ![包含源、目标、特征码和样本证据的选定案例详情。](https://static.pigsec.cn/wp-content/uploads/repos/cas/ef/eff49d964e0d322cc194a63fe4ee5155bee1505873b9e4d8ee3a480c39de2829.png) 分组后的遥测数据在一个可由分析师审查的案例中保留了源、目标、特征码、时间和样本证据。 ### AI 分析与追踪结果 ![AI 判定、置信度、分析师推理、推荐追踪及追踪结果。](https://static.pigsec.cn/wp-content/uploads/repos/cas/20/209e4c77cb0a0e1a54c95135957e5e351acdd889ca58777d4cda46f04d8f4ccd.png) AI 辅助分诊提供有边界的推理、置信度、判定指导和后续的 OpenSearch 追踪。 ### 工单注册表 ![显示本地工单历史和分析师记忆的工单注册表。](https://static.pigsec.cn/wp-content/uploads/repos/cas/92/92cc0e13afc4a7c75be5b9503a8dc1f503e7b1e8e3b3d28dc160c3c853554de3.png) 工单注册表将已创建、已同步和手动添加的 MantisBT 工单保存为本地分析师记忆。 在最终公开发布之前,其他一些有用的截图将包括 MantisBT 工单预览模态框和案例管理器 v1 的实时运行画面。 ## 仓库布局 ``` . |-- backend/ | |-- server.js | |-- triage_collector.js | |-- opensearch.client.js | |-- mantis.client.js | |-- ai.service.js | |-- pivot_executor.js | |-- .env.example | `-- services/ | |-- caseManagerV1.service.js | |-- caseCandidateSync.service.js | |-- caseFingerprint.service.js | |-- caseStore.service.js | |-- ticketContext.service.js | |-- ticketHistoryStore.service.js | |-- ticketRegistry.service.js | `-- mantis.service.js | |-- frontend/ | |-- src/App.js | |-- src/CaseManagerV1Page.js | |-- src/TicketsPage.js | |-- src/App.css | `-- .env.example | |-- docs/ | |-- PORTFOLIO_NOTES.md | `-- INTERVIEW_PREP.md | `-- README.md ``` ## 安装说明 前置条件: - Node.js 和 npm - 可访问 OpenSearch 或 OpenSearch Dashboards 环境 - 如果使用工单功能,需提供 MantisBT API token - 如果使用 AI 辅助分析,需提供 OpenAI API key 后端: ``` cd backend Copy-Item .env.example .env npm install npm start ``` 前端: ``` cd frontend Copy-Item .env.example .env npm install npm start ``` 默认本地 URL: ``` Backend: http://localhost:5000 Frontend: http://localhost:3000 Health: http://localhost:5000/api/health ``` ## 环境变量 使用包含的示例文件: - `backend/.env.example` - `frontend/.env.example` 重要的后端配置项: - `OPENSEARCH_NODE` - `OPENSEARCH_USERNAME` - `OPENSEARCH_PASSWORD` - `OPENSEARCH_MODE` - `OPENSEARCH_INDEX` - `OPENSEARCH_INDEX_PATTERN_ID` - `MANTIS_URL` - `MANTIS_API_TOKEN` - `MANTIS_USERNAME` - `OPENAI_API_KEY` - `OPENAI_CASE_MANAGER_MODEL` - `CASE_MANAGER_V1_MAX_AI_CASES` - `CASE_MANAGER_V1_MAX_PIVOTS` 运行时数据将写入本地 `backend/data/` 目录下,生成的分诊 JSON 文件可能会写入 `backend/` 目录下。这些文件会被 Git 忽略,如果其中包含真实的遥测数据或客户/学生实验室标识符,则不应公开发布。 ## API 区域 - `GET /api/health` - 后端健康检查。 - `GET /api/triage-summary-v1` - 加载分组的 OpenSearch 汇总数据。 - `GET /api/triage-raw-v1` - 加载收集的原始分诊数据。 - `POST /api/refresh-triage-v1` - 刷新 OpenSearch 遥测收集。 - `POST /api/analyze-case` - 对选定案例运行 AI 分析。 - `POST /api/pivot-query` - 执行 OpenSearch 追踪。 - `POST /api/reassess-case` - 在获取追踪证据后重新评估案例。 - `POST /api/check-duplicates` - 在 MantisBT 中搜索可能的重复工单。 - `POST /api/tickets/create` - 创建 MantisBT 工单。 - `GET /api/tickets/history` - 加载本地工单注册表。 - `POST /api/tickets/sync` - 将 MantisBT 工单同步到本地历史记录。 - `GET /api/cases-v1/status` - 加载案例管理器 v1 状态。 - `POST /api/cases-v1/start` - 启动过去一小时的自动调查运行。 - `POST /api/cases-v1/stop` - 请求安全停止。 ## 安全免责声明 本项目是用于防御性安全工作流自动化的作品集原型。未经适当的审查、身份验证、授权、密钥管理、日志控制和数据保留控制,请勿将其连接到生产系统。 ## 经验教训 - 一个实用的 SOC 工具应从清晰的工作流出发,而不仅仅是提供更多的告警。 - 字段映射至关重要。最终的 OpenSearch 实现必须使用可用字段,例如 `rule.name`, `rule.category`, `dns.host`, `zeek.dns.query`, `http.host`, `http.uri`, `url.full`, `zeek.notice.note`, `zeek.notice.msg` 和 `zeek.ssl.server_name`。 - 当案例分组能够保留证据和可解释性时,其价值才更大。 - 当 AI 辅助受到结构化提示词、追踪限制、JSON 输出和分析师审核的约束时,才最为实用。 - 工单系统集成是检测工程的一部分,因为交接过程必须保留上下文、证据和决策历史。
标签:AI辅助分析, GNU通用公共许可证, Go语言工具, IP 地址批量处理, Metaprompt, MITM代理, Node.js, React, Syscalls, 告警分诊, 安全编排与自动化, 安全运营中心, 插件系统, 数据可视化, 网络映射, 自定义脚本