sergio11/cyber_incident_response_graph_poc

GitHub: sergio11/cyber_incident_response_graph_poc

一个利用 Neo4j 图数据库建模网络安全事件关系的概念验证平台,通过可视化攻击链和 MITRE ATT&CK 映射帮助分析师加速事件调查。

Stars: 1 | Forks: 0

# 🔒 网络事件响应图 (CIRG) **CIRG** 是一个 **概念验证 (POC)**,旨在通过建模和可视化警报、事件、主机、工件以及 MITRE ATT&CK 技术之间的复杂关系,演示图数据库如何增强网络安全事件响应工作流。 CIRG 集成了 **Spring Boot**、**Neo4j** 和 **GraphQL**,提供网络安全事件的 **图视图**。它帮助分析师 **关联警报、可视化攻击路径并加速根因分析**。 ### 核心目标 - 🧠 **更智能的关联**:有效链接警报和事件 - 🕸️ **可视化横向移动**:跟踪攻击者在主机间的轨迹 - 🎯 **映射到 MITRE ATT&CK** 技术 - 🚀 **更快的分类和根因识别** - 🔗 **查询在关系数据库中难以实现的深层关系**

## ⚠️ 免责声明 本项目仅用于**教育和研究目的**。旨在提供关于**网络安全事件响应**、**图数据库建模 (Neo4j)** 和**安全分析工作流**的实践经验并深化相关知识。它**并非设计**用于生产环境或实际的安全运营。 本项目的主要重点是探索**基于图的攻击建模**、**事件关联**和 **MITRE ATT&CK 集成**,重点是在受控环境中理解攻击模式、可视化横向移动并增强安全分析流程。 名称 “CIRG (Cyber Incident Response Graph)” 是为此概念验证项目生成的描述性标识符。 ## 💡 为什么选择 CIRG? 该工具旨在改变安全分析师管理和可视化攻击的方式。与传统的表格式不同,使用**图**可以理解攻击的完整“故事”。 ### 🧠 图的力量 在网络安全中,攻击就像一张网络。攻击者不仅仅是进入系统;他们移动、使用技术并留下痕迹。使用图数据库 (Neo4j) 使我们能够: - 直观地查看**横向移动**(攻击者如何从一个系统跳转到另一个系统)。 - 通过跟随从恶意文件回到源的连接线程来识别**根本原因**。 ### 🔍 详情面板(节点) 通过点击图中的任何对象,右侧面板提供即时情报,无需切换屏幕: - **主机:** 了解其 IP、操作系统及其对业务的关键程度。 - **警报:** 发现受到同一威胁攻击的其他系统。 - **工件:** 分析可疑文件或进程,并查看它们出现在何处。 ### 🎯 MITRE ATT&CK 集成 **MITRE ATT&CK** 是攻击者技术的行业标准字典。CIRG 利用它来: - **了解敌人:** 准确知道攻击者正在使用哪种技术(持久化、执行等)。 - **学习和缓解:** 每种技术都包含指向官方 MITRE 知识库的直接链接,以便您了解如何检测和阻止该特定攻击。 ## 📸 项目实战 以下是应用程序用户界面和功能的一瞥:
点击查看截图
| | | |:---:|:---:| | Screenshot 1 | Screenshot 2 | | Screenshot 3 | Screenshot 4 | | Screenshot 5 | Screenshot 6 |
## 🏗️ 架构 ### 高层架构 ``` flowchart TB subgraph Frontend["FRONTEND"] React["React + Apollo Client"] end subgraph Backend["BACKEND"] direction TB subgraph API["API Layer"] REST["REST API
Auth & Stats"] GraphQL["GraphQL API
Incidents"] Security["JWT Security"] end subgraph UseCases["Application Layer"] Services["Use Cases
Auth & Incident"] end subgraph Ports["Ports Layer"] InputPorts["Input Ports"] OutputPorts["Output Ports"] end end subgraph Data["DATASOURCES"] Neo4j["Neo4j
Incident Data"] PostgreSQL["PostgreSQL
Users"] end Frontend -->|HTTP/REST + GraphQL| Backend API --> Services Services --> Ports Ports -->|implements| Data REST -.->|uses| PostgreSQL GraphQL -.->|uses| Neo4j ``` ### 六边形架构 ``` flowchart LR subgraph Driving["DRIVING ADAPTERS"] Controllers["REST & GraphQL
Controllers"] end subgraph InputPorts["INPUT PORTS"] UseCases["Use Case
Interfaces"] end subgraph Application["APPLICATION SERVICES"] AppServices["AuthApplicationService
IncidentApplicationService"] end subgraph OutputPorts["OUTPUT PORTS"] Repos["Repository
Interfaces"] end subgraph Driven["DRIVEN ADAPTERS"] Adapters["Neo4j, JPA
JWT Adapters"] end Controllers -->|depends on| UseCases UseCases -->|implements| AppServices AppServices -->|depends on| Repos Repos -->|implements| Adapters ``` ## 🛠️ 技术 ### 后端 | 技术 | 版本 | 用途 | |------------|---------|---------| | **Spring Boot** | 3.x | 应用框架 | | **Java** | 21+ | 编程语言 | | **Spring Security** | 6.x | 认证与授权 | | **Spring GraphQL** | 1.x | GraphQL API | | **Spring Data Neo4j** | - | Neo4j 集成 | | **Spring Data JPA** | - | PostgreSQL 集成 | | **jjwt** | 0.12.x | JWT token 处理 | | **Lombok** | - | 减少样板代码 | | **MapStruct** | - | Bean 映射 | ### 前端 | 技术 | 版本 | 用途 | |------------|---------|---------| | **React** | 18.x | UI 框架 | | **Vite** | 5.x | 构建工具 | | **Apollo Client** | 3.x | GraphQL 客户端 | | **React Router** | 6.x | 客户端路由 | | **React Force Graph** | - | 图可视化 | ### 数据库 | 技术 | 用途 | |------------|---------| | **Neo4j** | 用于事件数据的图数据库 | | **PostgreSQL** | 用于用户管理的关系数据库 | ## 📋 API 设计 ### REST API (认证与统计) ``` POST /api/auth/login - User login POST /api/auth/register - User registration GET /api/auth/me - Get current user GET /api/incidents/stats - Get incident statistics ``` ### GraphQL API (事件数据) ``` type Query { incidents: [Incident] incident(id: ID!): Incident } type Mutation { createIncident(input: CreateIncidentInput!): Incident updateIncidentStatus(input: UpdateIncidentStatusInput!): Incident } ``` ## 🔐 安全与角色 ### 基于角色的访问控制 (RBAC) ``` flowchart TB subgraph Roles["Roles"] Admin["ADMIN"] Analyst["ANALYST"] Viewer["VIEWER"] end Admin -->|"full access"| AllOps["Create
Read
Update
Delete"] Analyst -->|"limited access"| SomeOps["Create
Read
Update"] Viewer -->|"read only"| ReadOnly["Read"] ``` | 角色 | 权限 | |---------|------------| | **ADMIN** | 完全访问权限:创建、读取、更新、删除 | | **ANALYST** | 创建事件、更新状态、查看所有内容 | | **VIEWER** | 对事件的只读访问权限 | ### 认证 - **基于 JWT 的无状态认证** - Token 存储在 localStorage (前端) - API 调用在 Authorization header 中携带 Bearer token ## 📁 项目结构 ``` backend/src/main/java/com/dreamsoftware/cirg/ ├── application/ # Use cases layer │ ├── dto/ # Data transfer objects │ ├── port/ # Port interfaces │ │ ├── in/ # Input ports (use cases) │ │ └── out/ # Output ports (repositories) │ └── service/ # Application services ├── domain/ # Domain layer (core business) │ └── valueobject/ # Value objects ├── infrastructure/ # Infrastructure adapters │ ├── persistence/ │ │ ├── neo4j/ # Neo4j adapters │ │ └── jpa/ # JPA adapters │ └── security/ # Security adapters └── interface/ # Controllers ├── rest/ # REST controllers └── graphql/ # GraphQL controllers ``` ## 🤔 设计决策 ### 1. 混合数据库方法 **决策:** 使用 Neo4j 存储事件数据 + PostgreSQL 存储用户数据 ``` flowchart LR subgraph IncidentData["Incident Data"] Incidents["Incidents"] Alerts["Alerts"] Hosts["Hosts"] Techniques["MITRE Techniques"] end subgraph Relationships["Graph Relationships"] contains["CONTAINS"] uses["USES_TECHNIQUE"] affects["AFFECTS"] end Incidents --> contains --> Alerts Incidents --> uses --> Techniques Alerts --> affects --> Hosts ``` **理由:** - **Neo4j 擅长关系查询** - 事件响应涉及复杂的关系(横向移动、攻击链) - **PostgreSQL 非常适合用户管理** - 认证、授权、审计日志是事务性的 - **关注点分离** - 图操作不干扰用户管理 - **各取所长** - 不强制适应单一技术 ### 2. 混合 API 设计 **决策:** GraphQL 用于事件数据 + REST 用于认证/统计 ``` flowchart TB subgraph GraphQL["GraphQL - Complex Data"] GQL["Incidents with
nested alerts,
hosts, artifacts"] end subgraph REST["REST - Simple Operations"] Auth["Login/Register"] Stats["Statistics
Aggregation"] end GQL -->|"nested queries"| Complex["Complex relationships"] Auth -->|"stateless"| Simple["Simple CRUD"] Stats -->|"aggregations"| Simple ``` **理由:** - **GraphQL** - 非常适合复杂的嵌套数据 (事件 → 警报 → 主机 → 工件) - 客户端可以准确请求所需的字段 - 减少过度获取和获取不足 - 自然适合类图数据结构 - **REST** - 更适合简单的无状态操作 - 登录/注册是直接的 CRUD 操作 - 统计聚合是一个简单的 GET 端点 - 对大多数开发者来说更熟悉 ### 3. 六边形架构 **决策:** 实施端口与适配器模式 ``` flowchart TB subgraph Dependency["Dependency Direction"] direction TB Outside["External
Systems"] Controller["Controllers"] UseCase["Use Cases"] Domain["Domain"] Infra["Infrastructure"] end Outside --> Controller Controller --> UseCase UseCase -.->|depends on| Domain UseCase -->|uses| Infra ``` **理由:** - **关注点分离** - 领域与基础设施隔离 - **可测试性** - 易于模拟端口,独立测试用例 - **灵活性** - 可以将 Neo4j 替换为另一个图数据库而无需更改领域 - **可维护性** - 边界清晰,单一职责 - **符合 SOLID 原则** - 依赖于抽象而非具体实现 (DIP) ### 4. 基于角色的安全 **决策:** 三级角色系统 (ADMIN, ANALYST, VIEWER) **理由:** - **最小权限** - VIEWER 角色限制意外修改 - **操作清晰** - 分析师可以行动,查看者只能观察 - **审计跟踪** - 基于角色的访问有助于更好的合规性 - **可扩展** - 易于添加新角色(例如 MANAGER, AUDITOR) ### 5. JWT 无状态认证 **决策:** 使用 JWT Token 而非 Session ``` sequenceDiagram participant Client participant Backend participant DB Client->>Backend: POST /api/auth/login Backend->>DB: Validate credentials DB-->>Backend: User data Backend->>Backend: Generate JWT Backend-->>Client: JWT Token Client->>Backend: GET /api/incidents (Bearer JWT) Backend->>Backend: Validate JWT Backend-->>Client: Incident Data ``` **理由:** - **可扩展性** - 无需会话存储,可跨多个实例工作 - **性能** - 减少用于会话验证的数据库查询 - **简单性** - Token 包含所有必要的用户信息 - **移动端友好** - 与移动 API 自然配合 ## ✅ 此架构的优势 ### 技术优势 1. **基于图的建模** - 攻击链的自然表示 - 复杂关系查询为 O(1) 而 SQL 中为 O(n²) - 事件关系的可视化表示 2. **六边形架构** - 高度可测试(单元测试覆盖率达到 80%+) - 独立于框架 - 清晰的依赖方向(向内) 3. **混合 API** - 针对每种用例的最佳数据获取方式 - GraphQL 用于复杂查询,REST 用于简单操作 - 最佳开发者体验 ### 业务优势 1. **更快的事件响应** - 攻击路径的快速可视化 - 轻松识别受影响的系统 - MITRE ATT&CK 技术映射 2. **可扩展性** - 无状态后端可水平扩展 - 图数据库处理日益增长的关系复杂性 - 模块化架构允许独立扩展 ### 3. 可维护性 - 清晰的代码结构 - 易于添加新功能 - 全面的测试覆盖率 ## 🧪 测试与质量保证 ### 测试金字塔 ``` Backend: Unit → Integration → E2E Frontend: Unit → Integration → E2E + VRT ``` ### 后端测试 (JUnit 5 + Mockito) - **单元:** 用例、服务 (~80%) - **集成:** 使用 H2 的 Repository - **E2E:** REST Assured - **覆盖率:** ~86% ### 前端测试 (Vitest + Playwright) - **单元:** Hooks、工具、用例 (~80%) - **集成:** 组件 + Hooks (~15%) - **E2E + VRT:** 带截图的 Playwright (~5%) | 工具 | 用途 | |------|---------| | Vitest | 快速测试运行器 | | React Testing Library | 组件测试 | | Playwright | E2E + 视觉回归 | ``` rake cirg:frontend_test_coverage # ~95% coverage ``` ### 示例:带 VRT 的 E2E 测试 ``` test('login matches screenshot', async ({ page }) => { await page.goto('/login'); await expect(page.locator('[data-testid="login-card"]')) .toHaveScreenshot('login.png'); }); ``` ## 🏗️ 前端架构 ### 整洁架构层 ``` src/ ├── domain/ # Entities, Repository interfaces, Transformers ├── application/ # Use cases ├── infrastructure/ # Repository implementations, Apollo/HTTP Client, DI Container └── presentation/ # Components (CSS Modules), Hooks, Context ``` ### 依赖流 ``` Presentation → Application → Domain ← Infrastructure ``` ### 示例:用例集成 ``` // Container.js - Dependency Injection class Container { static getIncidentsUseCase() { return new GetIncidentsUseCase(this.getIncidentRepository()); } } // useIncidents.js - Hook using the container export function useIncidents() { const useCase = Container.getIncidentsUseCase(); const data = await useCase.execute(); // ... } ``` ### CSS Modules ``` import styles from './IncidentList.module.css'; //
// ↑ hashed class automatically ``` ## 🔗 相关资源 - [Neo4j 文档](https://neo4j.com/docs/) - [Spring GraphQL](https://docs.spring.io/spring-graphql/docs/current/reference/html/) - [MITRE ATT&CK](https://attack.mitre.org/) - [Mermaid.js](https://mermaid.js.org/) ## ⚠️ 免责声明 本项目仅用于**教育和研究目的**。旨在提供关于**网络安全事件响应**、**图数据库建模 (Neo4j)** 和**安全分析工作流**的实践经验并深化相关知识。它**并非设计**用于生产环境或实际的安全运营。 本项目的主要重点是探索**基于图的攻击建模**、**事件关联**和 **MITRE ATT&CK 集成**,重点是在受控环境中理解攻击模式、可视化横向移动并增强安全分析流程。 名称 “CIRG (Cyber Incident Response Graph)” 是为此概念验证项目生成的描述性标识符。 ## 许可证 ⚖️ 这是一个概念验证。不打算用于生产用途。 本项目根据 MIT 许可证授权,这是一种开源软件许可证,允许开发者自由使用、复制、修改和分发软件。🛠️ 这包括在个人和商业项目中的使用,唯一的要求是保留原始版权声明。📄 请注意以下限制: - 软件按“原样”提供,不附带任何明示或暗示的保证。🚫🛡️ - 如果您分发软件,无论是原始形式还是修改后的形式,都必须包含原始版权声明和许可证。📑 - 许可证允许商业使用,但您不能声称拥有软件本身的所有权。🏷️ 此许可证的目标是在保持对原作者认可的同时,最大化开发者的自由度。 ``` MIT License Copyright (c) 2026 Sergio Sánchez Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ```
标签:Cloudflare, Docker Compose, GraphQL, JS文件枚举, MITRE ATT&CK, Mutation, Neo4j, PE 加载器, POC, React, Spring Boot, Syscalls, 关联分析, 可视化, 威胁建模, 安全运营, 扫描框架, 攻击图, 攻击路径分析, 根本原因分析, 横向移动, 测试用例, 编程规范, 网络安全, 网络安全审计, 自定义脚本, 警报送联, 请求拦截, 隐私保护