grokify/threat-model-spec
GitHub: grokify/threat-model-spec
以代码化方式构建与共享威胁模型,覆盖从定义到验证与导出的完整流程。
Stars: 0 | Forks: 0
# 威胁模型规范
[][go-ci-url]
[][go-lint-url]
[][go-sast-url]
[][goreport-url]
[][docs-godoc-url]
[][viz-url]
[][license-url]
威胁模型规范是一个用于以代码形式创建安全威胁建模图形的开源库。它提供了一个基于 JSON 的中间表示(IR),可以渲染为 D2 图和 STIX 2.1,以便进行威胁情报共享。
## 架构
```
┌──────────────────────┐
│ ThreatModel │
│ (Canonical Source) │
└──────────┬───────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ DFD │ │ Attack │ │ Sequence │
│ Diagram │ │ Chain │ │ Diagram │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
└─────────────────────┼─────────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ D2 │ │ STIX │ │ Validate │
│ Renderer │ │ Exporter │ │ │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ .d2 │ │ .json │ │ pass/ │
│ → .svg │ │ STIX │ │ fail │
└──────────┘ │ Bundle │ └──────────┘
└──────────┘
```
**输入:** 威胁模型 JSON,包含共享元数据、框架映射和多个图表视图
**输出:**
- **D2 图表** → 通过 D2 CLI 生成的 SVG/PNG(每个图表视图一个)
- **STIX 2.1 捆绑包** → 威胁情报共享
- **验证结果** → 架构和引用检查
## 功能特性
- 💻 **图表即代码** — 使用 JSON 定义威胁模型,渲染为 D2/SVG
- 📊 **多种图表类型** — DFD、攻击链、时序图
- 🗺️ **框架映射** — MITRE ATT&CK、MITRE ATLAS、OWASP Top 10、STRIDE、CWE、CVSS
- 📤 **STIX 2.1 导出** — 以标准格式共享威胁情报
- 🎨 **D2 样式** — 颜色标记的 STRIDE 注释、信任边界、攻击流程
- ✅ **验证** — 类型特定字段验证
## 安装
### Go 库
```
go get github.com/grokify/threat-model-spec
```
### CLI 工具
```
go install github.com/grokify/threat-model-spec/cmd/tms@latest
```
## 快速开始
### 定义威胁模型(JSON)
威胁模型是包含共享元数据和多个图表视图的规范格式:
```
{
"id": "websocket-localhost-takeover",
"title": "WebSocket Localhost Takeover",
"description": "Attack exploiting missing origin validation",
"mappings": {
"mitreAttack": [
{"tacticId": "TA0001", "techniqueId": "T1189", "techniqueName": "Drive-by Compromise"}
],
"owasp": [
{"category": "api", "id": "API2:2023", "name": "Broken Authentication"}
]
},
"diagrams": [
{
"type": "attack-chain",
"title": "Attack Chain",
"elements": [
{"id": "attacker", "label": "Attacker", "type": "external-entity"},
{"id": "victim", "label": "Victim", "type": "process"}
],
"attacks": [
{"step": 1, "from": "attacker", "to": "victim", "label": "WebSocket to localhost"}
]
}
]
}
```
也支持单图表文件(DiagramIR 格式),适用于更简单的用例。
### 生成图表
```
# 从 ThreatModel 生成 D2 图表
tms generate threat-model.json -o diagram.d2
# 也渲染为 SVG
tms generate threat-model.json -o diagram.d2 --svg
# 导出为 STIX 2.1
tms generate threat-model.json --stix -o threat-model.stix.json
# 仅验证
tms validate threat-model.json
```
## 图表类型
| 类型 | 描述 | 关键字段 |
|------|-------------|------------|
| `dfd` | 数据流图表 | elements, boundaries, flows |
| `attack-chain` | 攻击序列 | elements, attacks, targets |
| `sequence` | 时间有序消息 | actors, messages, phases |
## 框架映射
| 框架 | 字段 | 示例 |
|-----------|-------|---------|
| MITRE ATT&CK | `mitreAttack` | `{"tacticId": "TA0001", "techniqueId": "T1189"}` |
| MITRE ATLAS | `mitreAtlas` | `{"tacticId": "AML.TA0002", "techniqueId": "AML.T0024"}` |
| OWASP | `owasp` | `{"category": "api", "id": "API2:2023"}` |
| STRIDE | `stride` | `{"category": "S", "name": "Spoofing"}` |
| CWE | `cwe` | `{"id": "CWE-346", "name": "Origin Validation Error"}` |
| CVSS | `cvss` | `{"version": "3.1", "vector": "CVSS:3.1/..."}` |
## D2 样式参考
### STRIDE 威胁注释
| 类别 | 颜色 | 描述 |
|----------|-------|-------------|
| S - 伪造 | 红色 | 身份伪造 |
| T - 篡改 | 黄色 | 数据篡改 |
| R - 否认 | 紫色 | 不可否认性失败 |
| I - 信息泄露 | 蓝色 | 信息泄漏 |
| D - 拒绝服务 | 橙色 | 可用性攻击 |
| E - 权限提升 | 绿色 | 权限提升 |
### 信任边界
| 类型 | 颜色 | 用途 |
|------|-------|---------|
| `browser` | 蓝色 | 浏览器沙箱 |
| `localhost` | 紫色 | 本地主机隐式信任 |
| `network` | 绿色 | 网络区域 |
| `breached` | 深红色 | 已破坏边界 |
## 示例
参见 [examples/openclaw/](examples/openclaw/) 获取 OpenClaw WebSocket 漏洞的完整威胁模型:
- **[openclaw.json](examples/openclaw/openclaw.json)** — 包含所有图表视图的规范威胁模型
- 数据流图表(DFD)— 系统架构与信任边界
- 攻击链 — 带有 MITRE ATT&CK 映射的攻击步骤
- 攻击序列 — 时间有序的交互
- 带渲染图表的 HTML 文章
## 要求
- Go 1.24+
- [D2](https://d2lang.com) v0.6+ 用于 SVG 渲染
## 许可证
MIT 许可证 — 参见 [LICENSE](LICENSE)
## 参考
- [D2 语言](https://d2lang.com)
- [MITRE ATT&CK](https://attack.mitre.org/)
- [MITRE ATLAS](https://atlas.mitre.org/)
- [OWASP Top 10](https://owasp.org/Top10/)
- [STRIDE 威胁模型](https://docs.microsoft.com/en-us/azure/security/develop/threat-modeling-tool-threats)
- [STIX 2.1](https://oasis-open.github.io/cti-documentation/stix/intro.html)
标签:D2图表, EVTX分析, Go库, Go语言, IR, JSON中间表示, meg, Mutation, STIX, STIX 2.1, XML 请求, 代码即文档, 代码安全, 信息安全, 可视化, 威胁建模, 威胁建模工具, 威胁情报, 威胁情报共享, 安全合规, 安全威胁, 安全建模, 安全开发, 安全设计, 序列图, 开发者工具, 开源库, 搜索引擎爬虫, 攻击链, 数据流图, 日志审计, 架构图, 漏洞枚举, 程序破解, 网络代理, 自动化建模, 风险分析