bertdavies/Diamond-Modeler

GitHub: bertdavies/Diamond-Modeler

一个基于 Diamond Model 的网络威胁情报分析与可视化工作台,支持 AI 智能体集成和自动化归因假设生成。

Stars: 0 | Forks: 0

# Diamond Modeler **作者:** Albert Davies **许可协议:** CC BY-NC-SA 4.0 — 对 CTI 社区免费,商业使用需获许可 Diamond Modeler 是一个交互式 Web 应用程序,用于为网络威胁情报 (CTI) 构建、可视化和分析 [Diamond Model](https://www.activeresponse.org/wp-content/uploads/2013/07/diamond.pdf) 图。 ## 为什么选择 Diamond Modeler? Diamond Modeler 的真正威力在于它是一个**智能体编排系统 (agentic orchestration systems) 的后端**。包含的 **Agent Skill** (`diamond-modeler-skill/`) 通过 REST API 赋予任何 AI Agent 对 Diamond Model 图的完整 CRUD 访问权限。这意味着自主 Agent 可以摄取威胁情报报告,将其分解为映射到 Kill Chain 阶段或 MITRE ATT&CK 战术的 Diamond Model,构建连接图,并生成归因假设 —— 所有这些都可以在规模化条件下通过编程实现,无需人工干预。 也就是说,Diamond Modeler 旨在三个层面上工作: ### 1. 智能体集成 (推荐) 将包含的技能安装到您的编排框架中。AI Agent 随后可以: - 将原始威胁情报转换为结构化的 Diamond Model - 为每个 Kill Chain 阶段 (`KC1`–`KC7`) 或 MITRE ATT&CK 战术 (`TA0001`–`TA0043`) 创建一个 Diamond - 用指标和丰富的上下文注释填充所有四个顶点 - 自动链接共享指标的 Diamond - 以 JSON 格式导出/导入整个分析 - 触发由 OpenAI 驱动的归因假设生成 有关完整说明,请参阅 `diamond-modeler-skill/SKILL.md`,Python 客户端请参阅 `diamond-modeler-skill/scripts/diamond_modeler.py`。 ### 2. 独立模式与 OpenAI 归因 将 Diamond Modeler 作为独立的 Web 应用程序运行。通过 UI 手动构建您的图,然后点击 **Generate hypotheses** 将完整的 Diamond 集发送到由 OpenAI 驱动的分析流水线。它会生成一份可下载的 PDF 报告,其中包含排名的归因假设、置信度水平和支持证据。需要 OpenAI API 密钥(通过 UI 或 `.env` 设置)。 ### 3. 工作台模式 (无需 API 密钥) 将 Diamond Modeler 纯粹用作 Diamond 建模工作台。创建 Diamond,用指标填充顶点,并让应用程序在指标重叠处自动生成链接。将您的分析导出为 JSON 或 PNG。无需 OpenAI 密钥 —— 归因完全是可选的。 ## 工作原理 每个 **Diamond** 代表一个入侵活动单元,具有四个顶点: | Vertex | 捕获内容 | |---|---| | **Adversary** | 威胁行为者名称、别名、动机 | | **Victimology** | 目标、组织、行业、地理位置 | | **Capability** | 工具、恶意软件家族、TTP | | **Infrastructure** | IP、域名、电子邮件地址、C2 服务器 | Diamond 被放置在交互式 Cytoscape 图上。当两个 Diamond 共享一个或多个指标时,应用程序会自动在它们之间绘制一条带标签的边,使重叠立即可见。 ## 示例:使用 Kill Chain 阶段对入侵进行建模 一种常见的模式是为每个 Kill Chain 阶段创建一个 Diamond,并用在该阶段观察到的指标填充每个 Diamond: | Diamond (标签) | Adversary | Capability | Infrastructure | Victimology | |---|---|---|---|---| | **KC1 UNC4736** | UNC4736 | LinkedIn 抓取, Google dorking | cdn-update[.]com | ACME Corp | | **KC3 UNC4736** | UNC4736 | 鱼叉式钓鱼, 宏 DOCX | cdn-update[.]com, 198.51.100.12 | ACME Corp | | **KC4 UNC4736** | UNC4736 | CVE-2024-1234, PowerShell 释放器 | 198.51.100.12 | ACME Corp | | **KC6 UNC4736** | UNC4736 | Cobalt Strike 信标 | 203.0.113.45, cdn-update[.]com | ACME Corp | | **KC7 UNC4736** | UNC4736 | Mimikatz, HTTPS 数据窃取 | 203.0.113.45, exfil-drop[.]net | ACME Corp | 由于 Diamond 共享指标(例如 `cdn-update[.]com`、`198.51.100.12`、`UNC4736`、`ACME Corp`),图会自动链接它们,生成连接的 Kill Chain 可视化。 同样的方法也适用于 MITRE ATT&CK 战术 —— 将 Diamond 标记为 `TA0043 UNC4736`、`TA0001 UNC4736` 等。 ### 生成归因假设 填充 Diamond 后,点击控制面板中的 **Generate hypotheses**。这将把整套 Diamond 发送到由 OpenAI 驱动的分析流水线,该流水线将: 1. 汇总所有 Diamond 的指标。 2. 交叉引用已知的威胁行为者档案、TTP 和基础设施模式。 3. 生成一份 PDF 报告,其中包含排名的归因假设、置信度水平和支持证据。 PDF 将直接在浏览器中下载。 ## 功能特性 - **创建和编辑 Diamond**,具有四个顶点 (Adversary, Victimology, Capability, Infrastructure) - 当 Diamond 共享指标时**自动生成链接** - 由 Cytoscape.js 驱动的**交互式图** (平移、缩放、拖动) - **图注释** —— 图画布上的便利贴,用于批注 - 导航栏中的**深色模式**切换 - **导出 PNG** —— 图的高分辨率截图 - **导出 / 导入图** —— 以 JSON 文件形式分享分析 - **生成假设** —— 由 OpenAI 驱动的归因分析,可下载 PDF - **Agent Skill** —— 用于智能体编排的完整 REST API 客户端 - **关于页面** —— 在浏览器中渲染此 README ## Agent Skill `diamond-modeler-skill/` 目录包含 AI Agent 与 Diamond Modeler 交互所需的一切: ``` diamond-modeler-skill/ ├── SKILL.md # Skill definition and usage instructions ├── scripts/ │ └── diamond_modeler.py # Python client (DiamondModelerClient) └── references/ └── API_REFERENCE.md # Full REST API endpoint reference ``` Python 客户端为 Kill Chain (`create_kill_chain_diamonds`) 和 MITRE ATT&CK (`create_mitre_tactic_diamonds`) 工作流提供了专用方法,并内置了阶段/战术代码映射和标签格式化。 ## UI 指南 ### 导航栏 | 元素 | 描述 | |---|---| | **Diamond Modeler** | 应用程序标题 (左侧) | | **About** | 打开渲染为 HTML 的此 README | | **月亮/太阳图标** | 切换深色模式 | ### 左侧面板 (滑出式抽屉) | 部分 | 描述 | |---|---| | **Create New Diamond** | 表单:标签、注释、颜色和可折叠的顶点部分。每个顶点每行接受一个指标。 | | **Existing Diamonds** | 已保存 Diamond 的列表。点击编辑,弹出查看详情,X 删除。 | | **Create New Note** | 向图画布添加可拖动的便利贴。 | | **Controls** | 见下文。 | ### 控制 | 按钮 | 操作 | |---|---| | **Set OpenAI API Key** | 将密钥存储在 `.env` 中以用于当前会话 | | **Export PNG** | 下载图的高清 PNG | | **Export graph** | 将完整分析下载为 JSON | | **Import graph** | 上传之前导出的 JSON,替换当前数据 | | **Generate hypotheses** | 运行 OpenAI 归因分析并下载 PDF 报告 | | **Clear all** | 删除所有 Diamond、边和图注释 | ### 图交互 - **点击 Diamond** —— 打开一个详细弹出窗口,其中指标按顶点分组 - **悬停在 Diamond 上** —— 显示 "Click to expand" 工具提示 - **点击共享指标徽章** —— 展开以显示两个 Diamond 之间的所有共享指标 - **拖动 Diamond** —— 在画布上重新定位 - **平移** —— 点击并拖动背景 - **缩放** —— 滚动轮,或使用 +/- 按钮 ## 示例 项目中附带了一个 Scattered Spider Kill Chain 分析示例,位于 `examples/scattered_spider.json`。通过 UI (Controls -> Import graph) 或 API 导入它,可以看到涵盖侦察、交付、安装和目标行动的四个链接 Diamond。 Graph overview Diamond model details ## 快速开始 ``` git clone https://github.com/your-username/diamond-modeler.git cd diamond-modeler python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt cp .env.example .env # Optional: add your OpenAI key for attribution python run.py ``` 然后打开 http://localhost:8000。 ## 配置 | 变量 | 必需 | 默认值 | 描述 | |---|---|---|---| | `DATABASE_URL` | 否 | `sqlite:///./diamond_modeler.db` | SQLite 连接字符串 | | `OPENAI_API_KEY` | 仅用于假设生成 | — | 通过 `.env` 或 UI 设置 (Controls -> Set OpenAI API Key) | ## REST API 参考 ### 页面 | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/` | 重定向到 `/graph/` | | `GET` | `/graph/` | 图 UI 页面 | | `GET` | `/about` | 渲染为 HTML 的 README | ### Diamond | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/create-diamond` | 创建一个 Diamond (表单数据:label, notes, colour, indicators) | | `GET` | `/diamonds/` | 列出/搜索 Diamond (可选 `?query=`) | | `GET` | `/diamonds/{id}` | Diamond 摘要 JSON | | `GET` | `/diamonds/{id}/details` | 完整 Diamond 详情 JSON (包括每个顶点的指标) | | `GET` | `/diamonds/{id}/edit` | 预填充以供编辑的 Diamond 数据 | | `PUT` | `/diamonds/{id}` | 更新一个 Diamond (表单数据) | | `DELETE` | `/diamonds/{id}` | 删除单个 Diamond | | `DELETE` | `/diamonds/remove-all/` | 删除所有 Diamond、顶点、指标和边 | ### 图与链接 | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/graph` | 用于 Cytoscape 的图 JSON (`{ elements: { nodes, edges } }`) | | `POST` | `/links/` | 创建手动链接 (`{ src_diamond_id, dst_diamond_id, reason }`) | | `POST` | `/regenerate-links` | 从指标重叠重建所有自动链接 | ### 导出 / 导入 | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/api/export-analysis` | 将完整分析导出为 JSON | | `POST` | `/api/import-analysis` | 从 JSON 导入分析 (替换当前数据) | ### 归因 | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/conduct-attribution` | 运行假设生成。成功时返回 PDF,失败时返回 JSON。 | ### 设置 | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/api/settings/openai-api-key` | 设置 OpenAI API 密钥 (`{ "api_key": "sk-..." }`) | | `GET` | `/api/settings/openai-api-key` | 检查密钥是否已配置 (`{ "set": true/false }`) | ## 技术栈 - **后端:** FastAPI, SQLModel, SQLite, Alembic - **前端:** Jinja2 templates, JavaScript, Cytoscape.js - **UI 主题:** [BootstrapDash](https://www.bootstrapdash.com/) 的 [Star Admin 2](https://github.com/BootstrapDash/star-admin2-free-admin-template) (MIT License) - **归因:** OpenAI SDK, ReportLab - **Agent Skill:** Python `requests` 客户端 ## 数据库表 | 表 | 用途 | |---|---| | `diamond` | 核心 Diamond 记录 (label, notes, colour, timestamps) | | `vertex` | 每个 Diamond 的每个顶点类型一条记录 | | `indicator` | 经过标准化处理的指标值及类型分类 | | `vertexindicator` | 顶点和指标之间的多对多连接 | | `edge` | Diamond 之间的链接 (自动或手动) | ## 开发 ### 迁移 ``` alembic upgrade head alembic revision --autogenerate -m "describe change" ``` ### 项目结构 ``` . ├── app/ # FastAPI backend │ ├── main.py # Routes and endpoints │ ├── models.py # SQLModel / Pydantic models │ ├── database.py # Engine and session │ ├── services.py # Business logic │ └── indicators.py # Indicator normalisation ├── attribution/ # OpenAI-powered hypothesis generation ├── diamond-modeler-skill/ # Agent skill for agentic integration │ ├── SKILL.md # Skill definition │ ├── scripts/ # Python API client │ └── references/ # API documentation ├── templates/ # Jinja2 HTML templates ├── examples/ # Example analysis JSON files ├── static/ # Static assets ├── alembic/ # Database migrations ├── run.py # Dev server entry point ├── requirements.txt └── README.md ``` ## 贡献 欢迎贡献。请提交 Issue 或发起 Pull Request。 ## 许可证 本项目采用 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可。您可以自由地出于非商业目的共享和改编它,但需注明出处并在相同许可下发布。商业用途需要作者的事先书面许可。有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:CRUD, FTP漏洞扫描, JSON, LLM, Mutation, OpenAI, PDF报告生成, Python, REST API, Unmanaged PE, 入侵分析, 内存规避, 可视化, 后端开发, 威胁情报, 安全编排, 开发者工具, 归因分析, 情报分析工具, 技能, 数据可视化, 无后门, 杀伤链, 网络安全, 网络调试, 自动化, 逆向工具, 钻石模型, 隐私保护