grrttmrtn1/mitre-map
GitHub: grrttmrtn1/mitre-map
面向企业防御团队的检测覆盖率管理平台,将 SIEM 检测与安全工具映射到 MITRE ATT&CK 和 D3FEND 框架,结合威胁组织追踪、合规映射和紫队演习实现检测能力的闭环管理。
Stars: 1 | Forks: 1
# MitreMap
**面向网络防御团队的企业检测覆盖率平台。**
MitreMap 可将您的 SIEM 检测和安全工具映射到完整的 MITRE ATT&CK Enterprise 框架,将它们与 MITRE D3FEND 对抗措施和 ATT&CK 缓解措施相关联,针对跟踪的威胁组织对您的风险暴露进行评分,并突出显示优先级缺口——所有这些都在一个深色模式的仪表板中完成。
## 功能特性
### 身份验证与用户管理
- **登录页面** — 使用 JWT 访问令牌(15 分钟过期)和 30 天 httpOnly 刷新 Cookie 进行邮箱/密码登录
- **多用户角色** — `admin`(完全访问权限),`analyst`(读/写),`readonly`(仅查看)
- **OIDC / SSO** — 可配置的 OAuth2/OIDC 提供商;新用户在首次登录时自动配置为 `analyst`
- **引导模式** — 无锁定:应用程序在创建第一个用户或 API 密钥之前开放运行
- **引导管理员** — 在 `.env` 中设置 `ADMIN_EMAIL` + `ADMIN_PASSWORD`,以便在首次运行时生成初始管理员
- **用户管理** — 用户的完整 CRUD 操作、密码重置(使所有活动会话失效)以及激活/非激活切换
### 覆盖率情报
- **ATT&CK 矩阵热力图** — 包含父技术和子技术的完整 14 战术矩阵;每个单元格的状态(`full` / `detected` / `mitigated` / `tuning` / `planned` / `gap`)
- **D3FEND 映射** — 跨越 Harden / Detect / Isolate / Deceive / Evict 的 68 项对抗措施,映射到 ATT&CK 技术
- **覆盖率快照** — 时间点基线;趋势线显示一段时间内的覆盖率百分比
- **缺口分析** — 根据威胁组织暴露程度、合规性影响和现有缓解措施对每个未检测到的技术进行排名
### 检测管理
- 针对具有多选技术、严重性、置信度、误报率的 SIEM 检测的完整 CRUD 操作
- **批量操作** — 多选行、批量更新状态或删除
- **CSV 导入** — 粘贴或上传带有分号分隔的技术 ID 的检测 CSV 文件
- **SIGMA 规则导入** — 粘贴 YAML,预览提取的 ATT&CK 技术 ID,作为检测导入
- 按状态、严重性和源平台进行过滤
### 安全栈管理
- 具有供应商、类别和状态跟踪的工具清单
- 每个工具的 D3FEND 对抗措施和 ATT&CK 缓解措施链接
- 覆盖率贡献 — 每个工具对整体覆盖率矩阵的贡献
### 威胁情报
- **18 个追踪的威胁组织** — APT29、APT28、Lazarus、APT41、FIN7、Sandworm、Turla、Scattered Spider、Wizard Spider 等
- **完整 CRUD** — 创建、编辑和删除威胁组织;使用内联可搜索选择器分配 ATT&CK 技术的任何子集
- **每个 TTP 的程序** — 记录组织使用的每项技术的特定观察到的行为:命令行、脚本、工件路径、文字描述或参考链接。每个程序都有类型、颜色编码,并且可以在详细信息面板中内联编辑。
- 每个组织的检测覆盖率,带有技术级状态(detected / exposed)
- 每个组织的暴露百分比和风险级别
- 分面板详细信息视图,包含完整的技术和程序细分
### 风险评分
- **总体风险评分(0–100)** — 根据覆盖率缺口、暴露的威胁组织和高组织重叠技术进行加权
- 按战术划分的风险评分 — 条形图识别暴露最高的杀伤链阶段
- 按技术划分的风险评分 — 用于热力图优先级排序的可排序表格
### 合规映射
- **NIST CSF 2.0** — 所有 6 个功能(GV / ID / PR / DE / RS / RC)及控制级别的覆盖情况
- **CIS Controls v8** — 映射到 ATT&CK 技术的 18 项控制措施
- 每个框架的缺口报告 — 显示哪些控制措施没有活动的检测覆盖
### 报告与导出
**报告构建器** — 从模块化部分(覆盖总结、风险评分、缺口表、威胁环境、战术细分、合规缺口)撰写自定义执行和操作报告,并导出为 PDF 或复制为 Markdown。
| 导出 | 格式 | 端点 |
|---|---|---|
| ATT&CK Navigator 层 | JSON | `GET /api/exports/navigator` |
| 检测 | CSV | `GET /api/exports/detections/csv` |
| 安全工具 | CSV | `GET /api/exports/tools/csv` |
| 覆盖率矩阵 | JSON | `GET /api/exports/coverage/json` |
| 执行摘要 | JSON API | `GET /api/reports/executive` |
| 威胁环境 | JSON API | `GET /api/reports/threat-landscape` |
| 优先级缺口 | JSON API | `GET /api/reports/gaps` |
### ATT&CK 实时更新
- **版本跟踪** — 活动的 ATT&CK 版本存储在数据库中并显示在设置中
- **更新检查** — 管理员可以检查 GitHub 上是否有更新的 ATT&CK 版本,而无需离开应用程序
- **一键更新** — 从官方 MITRE 仓库获取最新的企业 STIX 包,并在单个事务中更新插入所有战术、技术、缓解措施和关系;可选择特定版本
- **已弃用技术跟踪** — 被更新移除或撤销的技术会记录在 `deprecated_techniques` 中,并在可用时提供被取代的指针
- **迁移扫描** — 扫描所有检测中是否引用了已弃用的技术 ID,并列出需要更新的检测
### Atomic Red Team 与自定义测试
- **ART 测试库** — 浏览按技术分组的已导入 Atomic Red Team 测试;每个测试显示名称、GUID、平台、执行器类型和生成的命令
- **实时 ART 植入** — 在首次运行时,服务器从 GitHub 获取完整的 Atomic Red Team 索引并自动植入所有测试;如果网络不可用,则回退到静态基线
- **YAML 导入** — 粘贴来自 Red Canary Atomic Red Team 仓库的任何 `atomics/*.yaml` 文件;按 GUID 跳过重复项
- **自定义测试** — 针对非来源于 ART 的自身检测测试的完整 CRUD;每个测试标记为 `source: custom`,并与导入的 ART 测试分开管理
- **测试结果** — 记录每次检测的测试结果(`untested` / `tested` / `validated` / `failed`),并附带备注和运行归属
- **覆盖率统计** — 每个 ATT&CK 技术的测试(ART + 自定义)数量的技术级计数
### 红队 / 紫队演习
将进攻性测试与防御性覆盖率闭环的正式演习管理。每次演习包含四个选项卡的工作流:
- **计划** — 创建演习(类型:`red_team` / `purple_team` / `tabletop`),分配目标威胁组织,并定义技术范围。在创建时选择威胁组织后,其所有 TTP 都会自动填充到范围中。
- **执行** — 对于范围内的每个技术,浏览可用的 ART 测试,记录结果(`detected` / `partial` / `not_detected` / `blocked` / `n/a`),并附带每次测试运行的内联备注。
- **发现** — 记录结构化的发现(类型:`gap` / `detection_validated` / `detection_failed` / `control_weakness` / `new_ttp`),包括严重性、相关技术、描述和修复建议。
- **报告** — 自动生成的紫队报告:执行摘要 KPI(检测率、范围技术、执行测试、发现)、逐技术的覆盖率细分、按严重性分组的发现以及检测缺口列表。
- **演习状态** — `planning` / `active` / `completed` / `cancelled`,包含负责人/操作员、开始/结束日期以及范围/交战规则说明。
### ATT&CK 数据源
- **源清单** — 跟踪您的组织收集了哪些日志源(Windows Event Logs、Sysmon、CloudTrail 等);已分类且可搜索
- **收集状态** — `collecting` / `partial` / `not_collecting`,每个源都有一个自由文本的 collection-method 和备注字段
- **技术映射** — 将每个数据源链接到它能够实现检测的 ATT&CK 技术;内联显示检测覆盖情况
- **缺口分析** — 识别未检测到的技术并对缺口进行分类:无已知数据源、有收集源但无规则,或未知
### TAXII 威胁情报源
直接将来自任何 TAXII 2.1 服务器的外部威胁情报摄入到 MitreMap 中——在分析师审查之前,任何内容都不会触及您的数据。
- **服务器管理** — 通过 URL 注册 TAXII 2.1 服务器,支持 `none`、`basic` 或 `bearer` 身份验证;针对内部/自签名端点的 SSL 验证切换
- **连接测试** — 从服务器列出可用集合,而无需提交完整获取
- **计划作业** — 创建基于 cron 的摄入作业(每小时、每天、每周或自定义表达式),在后台自动获取
- **手动获取** — 随时从任何配置好的服务器触发临时获取
- **分析师审查队列** — 摄入的 STIX 对象(入侵集合、攻击模式、关系)作为待处理项暂存;分析师可以单独批准或拒绝每个项目,或者一次性批准/拒绝整批项目
- **建议操作** — 每个待处理项已预分类:`create_group`、`update_group`、`create_technique` 或 `link_technique`;批准的项目将自动应用到威胁组织和技术表
- **批次历史** — 按服务器浏览所有过去的摄入批次,包含待处理/已批准/已拒绝的计数和时间戳
- **获取状态** — 每个服务器显示上次获取状态(`running` / `success` / `error`)、项目数、跳过重复数以及失败时的错误消息
### API 测试区
- 交互式内置 API 资源管理器 — 按资源分组浏览每个端点,填充路径/查询/请求体参数,并使用您存储的 API 密钥触发实时请求。响应以语法高亮内联显示。
### OpenAPI / Swagger 文档
- **机器可读规范** — 完整的 OpenAPI 3.0 规范,通过 `GET /api/openapi.json` 提供
- **Swagger UI** — 位于 `/api/docs` 的交互式文档浏览器;无需身份验证即可浏览
### 协作
- **标签** — 应用于任何实体(检测、技术、工具、缺口)的颜色编码标签
- **评论** — 在任何实体上的线索式分析师备注
- **分配** — 将缺口或检测分配给分析师,带有优先级、截止日期和状态跟踪
- **审计日志** — 记录每个创建/更新/删除/导入/清除事件,包含操作者(远程调用时为 API 密钥名称)、源 IP 和变更差异
### 管理
- **API 密钥** — 创建具有范围的 API 密钥(`read` / `write` / `admin`),可选择过期时间;密钥在静态存储时使用 SHA-256 哈希,并且仅在创建时显示一次
- **API 密钥强制执行** — 一旦存在任何密钥,所有 API 流量都需要有效的 `Authorization: Bearer ` 标头。引导绕过允许在尚无密钥时创建密钥,因此您永远不会被锁定。
- **数据管理** — 具有实时行计数的按数据集清除(检测、工具、威胁组织、标签、评论、分配、快照、审计日志);可在危险区域进行完全擦除
## 架构
```
┌─────────────────────────────────────────────────────┐
│ Browser │
│ React 18 · React Router · Recharts · Tailwind CSS │
└──────────────┬──────────────────────────────────────┘
│ /api/* (same-origin in production)
│ Vite proxy in development
┌──────────────▼──────────────────────────────────────┐
│ Express 4 · TypeScript · Node 20 │
│ HTTPS in production (self-signed or custom cert) │
│ │
│ Routes │
│ ├── /api/auth Login · logout · OIDC SSO │
│ ├── /api/users User management │
│ ├── /api/attack ATT&CK tactics/techniques │
│ │ ├── /check-updates Compare DB vs latest STIX │
│ │ ├── /apply-update Live STIX upsert │
│ │ ├── /version Active ATT&CK version │
│ │ ├── /deprecated Deprecated techniques │
│ │ └── /migration-scan Detection hygiene scan │
│ ├── /api/d3fend D3FEND techniques │
│ ├── /api/detections SIEM detection CRUD │
│ ├── /api/tools Security tool CRUD │
│ ├── /api/coverage Matrix & stats │
│ ├── /api/tags Entity tagging │
│ ├── /api/assignments Analyst assignments │
│ ├── /api/comments Threaded comments │
│ ├── /api/audit Audit log │
│ ├── /api/snapshots Coverage snapshots │
│ ├── /api/threat-groups APT / cybercrime groups │
│ ├── /api/compliance NIST CSF 2.0 · CIS v8 │
│ ├── /api/sigma SIGMA rule import │
│ ├── /api/atomic ART tests, custom tests │
│ │ └── /custom Custom test CRUD │
│ ├── /api/exercises Exercise management │
│ │ ├── /:id/techniques Technique scope CRUD │
│ │ ├── /:id/tests Test run CRUD │
│ │ ├── /:id/findings Finding CRUD │
│ │ └── /:id/report Purple team report │
│ ├── /api/data-sources ATT&CK data source mgmt │
│ ├── /api/exports Navigator / CSV / JSON │
│ ├── /api/reports Pre-computed reports │
│ ├── /api/risk Risk scoring │
│ ├── /api/api-keys API key management │
│ ├── /api/admin Data purge / admin ops │
│ ├── /api/motivations Threat group motivations │
│ ├── /api/countries Threat group countries │
│ ├── /api/taxii TAXII 2.1 feed management │
│ │ ├── /servers Server CRUD + test/fetch │
│ │ ├── /jobs Scheduled ingest jobs │
│ │ ├── /batches Ingest batch review │
│ │ └── /pending Per-item approve/reject │
│ ├── /api/openapi.json OpenAPI 3.0 spec │
│ └── /api/docs Swagger UI │
│ │
│ Auth middleware: JWT Bearer · API key · bootstrap │
│ Knex.js query builder · versioned migrations │
│ better-sqlite3 (synchronous WAL-mode SQLite) │
└──────────────┬──────────────────────────────────────┘
│
┌──────────────▼──────────────────────────────────────┐
│ SQLite · mitremap.db │
│ │
│ attack_tactics · attack_techniques │
│ attack_mitigations · technique_mitigations │
│ attack_version_info · deprecated_techniques │
│ d3fend_techniques · attack_d3fend │
│ tools · tool_d3fend · tool_mitigations │
│ detections · tags · entity_tags │
│ comments · assignments · audit_log │
│ coverage_snapshots · threat_groups │
│ group_techniques · group_technique_procedures │
│ compliance_frameworks · compliance_controls │
│ technique_compliance · api_keys │
│ users · refresh_tokens · oidc_providers │
│ data_sources · technique_data_sources │
│ org_data_sources · art_tests (source: atomic|custom)│
│ detection_art_results │
│ exercises · exercise_techniques │
│ exercise_test_runs · exercise_findings │
│ taxii_servers · taxii_ingest_jobs │
│ taxii_pending_ingests │
└─────────────────────────────────────────────────────┘
```
**关键设计选择:**
- **SQLite + WAL 模式** — 零依赖持久化;WAL 日志实现并发读取而不阻塞写入。足以满足一个分析师团队的需要;如果需要横向扩展,请切换到 PostgreSQL(参见 [POSTGRES.md](POSTGRES.md))。
- **全局 HTTPS** — 生产环境始终运行 TLS。如果未提供 `SSL_CERT_PATH`/`SSL_KEY_PATH`,服务器会自动生成 `selfsigned` 证书,因此不存在纯 HTTP 回退。
- **多态实体模型** — `entity_tags`、`comments` 和 `assignments` 都使用 `(entity_type, entity_id)` 键,因此相同的模式无需单独的连接表即可处理检测、技术、工具和缺口。
- **同步 DB 层** — `better-sqlite3` 是同步的,消除了服务器上的异步瀑布错误,同时保持 API 单。
- **无库的 SIGMA 解析** — 一个最小的逐行 YAML 解析器提取 MitreMap 需要的少量字段(`title`、`id`、`level`、`tags`),而无需完整的 YAML 依赖。
- **引导安全认证** — 认证中间件在请求时检查是否有任何用户或 API 密钥。零配置 → 开放访问(引导模式)。这可以防止永久锁定,并意味着全新安装无需预置凭据即可工作。
- **JWT + 刷新令牌会话模型** — 短期 JWT(15 分钟)保持服务器无状态;30 天的 httpOnly 刷新 Cookie(静态存储时使用 SHA-256 哈希)处理静默更新,而不会在 JavaScript 内存中暴露长期有效的凭据。
- **Knex.js 迁移** — 数据库模式通过编号的迁移文件进行版本控制。在启动时自动应用;可安全重复运行。
- **实时 ATT&CK 更新** — 专用的 STIX 获取模块查询官方 `mitre-attack/attack-stix-data` GitHub 仓库;更新在单个数据库事务中以更新插入语义运行,从而保留现有的覆盖率数据。
- **非 root 容器** — Docker 以专用 `mitremap` 用户(uid 1001)身份运行服务器;`gosu` 在安装任何企业 CA 证书后,在入口点处理从 root 的权限降级。
## 快速开始
### 前置条件
- Node.js ≥ 20
- npm ≥ 9
### 开发
```
git clone mitremap
cd mitremap
# 安装所有 workspace deps
npm install
# 同时启动 server (端口 4000) + client dev server (端口 3000)
npm run dev
```
打开 [http://localhost:3000](http://localhost:3000)。Vite 开发服务器将所有 `/api` 请求代理到端口 4000 上的 Express。
数据库在首次运行时在 `server/data/mitremap.db` 自动创建,并植入以下内容:
- 完整的 MITRE ATT&CK Enterprise(14 种战术,技术 + 子技术,缓解措施)— 首次运行时从 GitHub 实时获取;如果离线则回退到静态 v14.1 基线
- 68 个带有 ATT&CK 映射的 D3FEND 对抗措施
- 18 个带有技术关联的主要威胁组织
- NIST CSF 2.0 和 CIS Controls v8 合规映射
- 带有技术映射的 ATT&CK 数据源目录
- 完整的 Atomic Red Team 测试库 — 首次运行时从 GitHub 实时获取;如果离线则回退到静态基线
- 30 多个演示检测和 10 个安全工具
- 8 个预先应用于检测的演示标签
## Docker
### 设置
在启动之前将 `.env.example` 复制到 `.env` 并填写所需的值:
```
cp .env.example .env
# 编辑 .env — 至少设置 JWT_SECRET、ADMIN_EMAIL 和 ADMIN_PASSWORD
```
```
JWT_SECRET=replace-with-a-strong-random-secret
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=changeme
```
### 单条命令
```
docker compose up -d
```
应用程序可在 **[https://localhost:8443](https://localhost:8443)** 访问。
首次启动时会自动生成自签名 TLS 证书。接受浏览器警告或提供您自己的证书(参见下方 [自定义 TLS 证书](#custom-tls-certificate))。
SQLite 数据库持久化在命名 Docker 卷(`mitremap-data`)中。
### 自定义端口
```
MITREMAP_PORT=9443 docker compose up -d
```
### 自定义 TLS 证书
在 `.env` 中将 `SSL_CERT_PATH` 和 `SSL_KEY_PATH` 设置为容器内的路径,然后挂载您的证书目录:
```
SSL_CERT_PATH=/app/certs/server.crt
SSL_KEY_PATH=/app/certs/server.key
```
在 `docker-compose.yml` 中取消对 certs 卷的注释:
```
volumes:
- ./certs:/app/certs:ro
```
### 企业 CA 证书
信任内部/企业 CA 的两种选择:
**选项 A — 运行时注入(无需重新构建)**
挂载您的 CA 证书并在 `.env` 中设置 `ENTERPRISE_CA_BUNDLE`:
```
ENTERPRISE_CA_BUNDLE=/app/certs/enterprise-root-ca.crt
```
在 `docker-compose.yml` 中取消对 certs 卷的注释:
```
volumes:
- ./certs:/app/certs:ro
```
入口点在启动服务器之前将证书安装到操作系统信任库中。
**选项 B — 烘焙到镜像中**
在构建之前将任何 `*.crt` 文件放入仓库根目录的 `certs/` 目录中。它们将被复制到镜像中并在构建时安装。
```
mkdir -p certs
cp /path/to/enterprise-root-ca.crt certs/
docker compose build
```
### 仅构建(无 compose)
```
docker build -t mitremap:latest .
docker run -d \
-p 8443:4000 \
-e JWT_SECRET=your-secret \
-e NODE_ENV=production \
-v mitremap-data:/app/server/data \
--name mitremap \
mitremap:latest
```
### 备份数据库
```
docker exec mitremap \
sqlite3 /app/server/data/mitremap.db ".backup '/app/server/data/backup.db'"
docker cp mitremap:/app/server/data/backup.db ./mitremap-backup-$(date +%Y%m%d).db
```
### 升级
```
git pull
docker compose build --no-cache
docker compose up -d
```
现有数据库卷在重建过程中得以保留;模式在启动时会自动迁移。
### PostgreSQL
MitreMap 默认使用 SQLite。将 `DATABASE_URL` 设置为 `postgres://` 连接字符串以切换到 PostgreSQL——无需更改代码。有关完整的设置说明、Docker Compose 示例和模式兼容性说明,请参见 [POSTGRES.md](POSTGRES.md)。
```
DATABASE_URL=postgres://mitremap:changeme@localhost:5432/mitremap
```
## API 参考
所有端点都在 `/api` 下。除非另有说明,响应均为 JSON。
一旦创建了至少一个 API 密钥,每个请求都必须包含:
```
Authorization: Bearer
```
### 身份验证
| 方法 | 路径 | 描述 |
|---|---|---|
| `POST` | `/api/auth/login` | 登录 `{ email, password }` — 返回 JWT + 设置刷新 Cookie |
| `POST` | `/api/auth/refresh` | 使用刷新 Cookie 换取新的 JWT |
| `POST` | `/api/auth/logout` | 使刷新令牌失效并清除 Cookie |
| `GET` | `/api/auth/me` | 当前用户信息 |
| `GET` | `/api/auth/oidc/providers` | 列出已配置的 OIDC 提供商 |
| `POST` | `/api/auth/oidc/providers` | 创建 OIDC 提供商 `{ name, slug, issuer_url, client_id, client_secret }` |
| `PUT/DELETE` | `/api/auth/oidc/providers/:id` | 更新/删除 OIDC 提供商 |
| `GET` | `/api/auth/oidc/:slug` | 发起 OIDC 登录流程(重定向) |
| `GET` | `/api/auth/oidc/:slug/callback` | OIDC 回调处理程序(重定向到应用程序) |
### 用户
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/users` | 列出用户(id, email, name, role, is_active) |
| `POST` | `/api/users` | 创建用户 `{ email, name, password, role? }` — 角色:`admin`、`analyst`、`readonly` |
| `PUT` | `/api/users/:id` | 更新 name / role / is_active |
| `DELETE` | `/api/users/:id` | 删除用户并撤销所有会话 |
| `POST` | `/api/users/:id/reset-password` | 重置密码 `{ password }` — 使所有刷新令牌失效 |
### ATT&CK
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/attack/tactics` | 列出所有战术 |
| `GET` | `/api/attack/techniques` | 列出技术(查询参数:`tactic`,`include_subtechniques=true`) |
| `GET` | `/api/attack/techniques/:id` | 技术详情,包含缓解措施、D3FEND 和检测 |
| `GET` | `/api/attack/mitigations` | 列出所有缓解措施 |
| `GET` | `/api/attack/mitigations/:id` | 缓解措施详情,包含技术和涵盖工具 |
| `GET` | `/api/attack/version` | 数据库中活动的 ATT&CK 版本 |
| `GET` | `/api/attack/check-updates` | 将数据库版本与最新的 GitHub 版本进行比较(管理员) |
| `POST` | `/api/attack/apply-update` | 获取并应用 ATT&CK STIX 更新 `{ version? }`(管理员) |
| `GET` | `/api/attack/deprecated` | 列出已弃用/已撤销的技术 |
| `GET` | `/api/attack/migration-scan` | 引用了已弃用技术 ID 的检测 |
### 检测
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/detections` | 列表(过滤器:`status`、`severity`、`source`、`technique`) |
| `POST` | `/api/detections` | 创建检测 |
| `PUT` | `/api/detections/:id` | 更新检测 |
| `DELETE` | `/api/detections/:id` | 删除检测 |
| `PATCH` | `/api/detections/bulk` | 批量状态更新 `{ ids, status }` |
| `DELETE` | `/api/detections/bulk` | 批量删除 `{ ids }` |
| `POST` | `/api/detections/import` | 导入检测数组 |
### SIGMA 导入
| 方法 | 路径 | 描述 |
|---|---|---|
| `POST` | `/api/sigma/parse` | 解析 SIGMA YAML,返回预览 `{ title, technique_ids, ... }` |
| `POST` | `/api/sigma/import` | 将 SIGMA 规则字符串数组作为检测导入 |
### 覆盖率与风险
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/coverage/stats` | KPI 和按战术的细分 |
| `GET` | `/api/coverage/matrix` | 完整的 ATT&CK 矩阵,包含每个单元格的状态 |
| `GET` | `/api/coverage/gaps` | 缺口技术,包含 D3FEND / 缓解建议 |
| `GET` | `/api/risk/score` | 总体风险评分及组件细分 |
| `GET` | `/api/risk/by-tactic` | 按战术划分的风险评分 |
| `GET` | `/api/risk/by-technique` | 按技术划分的风险评分 |
### 威胁组织
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/threat-groups` | 列出所有组织 |
| `POST` | `/api/threat-groups` | 创建组织 `{ id, name, aliases, country, motivation, url, description, technique_ids }` |
| `GET` | `/api/threat-groups/:id` | 带有技术和检测覆盖率的详情 |
| `PUT` | `/api/threat-groups/:id` | 更新组织字段和技术分配 |
| `DELETE` | `/api/threat-groups/:id` | 删除组织及级联关联 |
| `POST` | `/api/threat-groups/:id/techniques` | 添加技术 `{ technique_ids }` |
| `DELETE` | `/api/threat-groups/:id/techniques` | 移除技术 `{ technique_ids }`(为空 = 移除所有) |
| `GET` | `/api/threat-groups/:id/exposure` | 按技术划分的暴露/检测/缓解细分 |
| `GET` | `/api/threat-groups/:id/procedures` | 该组织在所有技术中的所有程序 |
| `POST` | `/api/threat-groups/:id/techniques/:technique_id/procedures` | 添加程序 `{ type, content, source? }` |
| `PUT` | `/api/threat-groups/:id/procedures/:proc_id` | 更新程序字段 |
| `DELETE` | `/api/threat-groups/:id/procedures/:proc_id` | 删除程序 |
**程序类型:** `command` · `script` · `description` · `artifact` · `reference`
```
{
"type": "command",
"content": "powershell.exe -nop -w hidden -enc JABjAGwAaQBlAG4AdA...",
"source": "FireEye UNC2452 Report, Dec 2020"
}
```
### API 密钥
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/api-keys` | 列出密钥(已掩码 — 原始密钥在创建后永不返回) |
| `POST` | `/api/api-keys` | 创建密钥 `{ name, scopes, expires_at? }` — 仅一次返回原始密钥 |
| `PATCH` | `/api/api-keys/:id` | 更新 name / scopes / expiry |
| `DELETE` | `/api/api-keys/:id` | 撤销密钥 |
**范围:** `read`、`write`、`admin`。密钥变更(创建/更新/撤销)和数据清除操作需要 Admin 范围;`read` 范围足以列出密钥和查看可清除的数据集。密钥在静态存储时使用 SHA-256 哈希;`masked_key` 字段显示前 8 个和后 4 个字符。
### 管理 / 数据管理
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/admin/purgeable` | 每个可清除数据集的实时行计数(`read` 范围) |
| `DELETE` | `/api/admin/purge/:dataset` | 清除一个数据集:`detections`、`audit`、`snapshots`、`comments`、`assignments`、`threat_groups`、`tags`、`tools`(`admin`范围) |
| `DELETE` | `/api/admin/purge-all` | 擦除所有可变数据(FK 安全排序)(`admin` 范围) |
### 动机与国家
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET/POST` | `/api/motivations` | 列出 / 创建威胁组织动机 |
| `PUT/DELETE` | `/api/motivations/:id` | 更新 / 删除动机 |
| `GET/POST` | `/api/countries` | 列出 / 创建威胁组织国家 |
| `PUT/DELETE` | `/api/countries/:id` | 更新 / 删除国家 |
### 合规
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/compliance/frameworks` | 带有覆盖率 % 的框架 |
| `GET` | `/api/compliance/frameworks/:id` | 带有按控制覆盖率的框架详情 |
| `GET` | `/api/compliance/gap?framework_id=` | 无检测覆盖的控制 |
### 协作
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET/POST` | `/api/tags` | 列出 / 创建标签 |
| `PUT/DELETE` | `/api/tags/:id` | 更新 / 删除标签 |
| `GET/POST` | `/api/tags/:type/:id` | 获取 / 添加实体标签 |
| `DELETE` | `/api/tags/:type/:id/:tagId` | 移除实体标签 |
| `GET/POST` | `/api/comments/:type/:id` | 列出 / 添加评论 |
| `PUT/DELETE` | `/api/comments/:id` | 编辑 / 删除评论 |
| `GET/POST` | `/api/assignments` | 列出 / 创建分配 |
| `PUT/DELETE` | `/api/assignments/:id` | 更新 / 删除分配 |
| `GET` | `/api/audit` | 审计日志(过滤器:`entity_type`、`entity_id`、`actor`、`action`) |
### Atomic Red Team 与自定义测试
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/atomic/tests` | 列出所有测试(ART + 自定义) |
| `GET` | `/api/atomic/tests/:technique_id` | 特定技术的测试 |
| `GET` | `/api/atomic/coverage` | 技术级测试计数和总体覆盖率 % |
| `POST` | `/api/atomic/import` | 导入 ART YAML `{ yaml }` — 返回 `{ imported, skipped, total }` |
| `POST` | `/api/atomic/custom` | 创建自定义测试 `{ technique_id, name, description?, platform?, executor_type?, command? }` |
| `PUT` | `/api/atomic/custom/:id` | 更新自定义测试字段 |
| `DELETE` | `/api/atomic/custom/:id` | 删除自定义测试 |
| `POST` | `/api/atomic/results` | 记录测试结果 `{ detection_id, art_test_id, status, notes?, run_by? }` |
| `PUT` | `/api/atomic/results/:id` | 更新结果 status / notes |
| `DELETE` | `/api/atomic/results/:id` | 删除结果 |
**测试结果状态:** `untested` · `tested` · `validated` · `failed`
### 演习
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/exercises` | 列出所有演习(带汇总计数) |
| `POST` | `/api/exercises` | 创建演习 `{ name, type?, status?, threat_group_id?, lead?, start_date?, end_date?, scope_notes?, description? }` — 威胁组织技术自动填充 |
| `GET` | `/api/exercises/:id` | 包含技术、测试运行和发现的演习详情 |
| `PUT` | `/api/exercises/:id` | 更新演习字段 |
| `DELETE` | `/api/exercises/:id` | 删除演习及级联 |
| `POST` | `/api/exercises/:id/techniques` | 添加技术 `{ technique_ids }` |
| `DELETE` | `/api/exercises/:id/techniques/:technique_id` | 从范围中移除技术 |
| `POST` | `/api/exercises/:id/tests` | 添加测试运行 `{ art_test_id, outcome?, notes?, ran_by? }` |
| `PUT` | `/api/exercises/:id/tests/:run_id` | 更新测试运行 outcome / notes |
| `DELETE` | `/api/exercises/:id/tests/:run_id` | 删除测试运行 |
| `POST` | `/api/exercises/:id/findings` | 添加发现 `{ title, finding_type?, severity?, technique_id?, description?, recommendation? }` |
| `PUT` | `/api/exercises/:id/findings/:finding_id` | 更新发现 |
| `DELETE` | `/api/exercises/:id/findings/:finding_id` | 删除发现 |
| `GET` | `/api/exercises/:id/report` | 紫队报告 — 检测率、技术细分、缺口、按严重性分组的发现 |
**演习类型:** `red_team` · `purple_team` · `tabletop`
**演习状态:** `planning` · `active` · `completed` · `cancelled`
**测试运行结果:** `pending` · `detected` · `partial` · `not_detected` · `blocked` · `n_a`
**发现类型:** `gap` · `detection_validated` · `detection_failed` · `control_weakness` · `new_ttp`
**发现严重性:** `critical` · `high` · `medium` · `low` · `informational`
### ATT&CK 数据源
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/data-sources` | 列出所有数据源,包含组织收集状态和技术计数 |
| `POST` | `/api/data-sources` | 创建数据源 `{ name, category, description? }` |
| `PUT` | `/api/data-sources/:id` | 更新数据源字段 |
| `DELETE` | `/api/data-sources/:id` | 删除数据源及所有关联 |
| `GET` | `/api/data-sources/:id/techniques` | 映射到此源的技术(包含 `has_detection` 标志) |
| `POST` | `/api/data-sources/:id/techniques` | 添加技术映射 `{ technique_id }` |
| `DELETE` | `/api/data-sources/:id/techniques/:technique_id` | 移除技术映射 |
| `PUT` | `/api/data-sources/:id/status` | 设置组织收集状态 `{ status, collection_method?, notes? }` |
| `GET` | `/api/data-sources/technique/:technique_id` | 映射到特定技术的数据源 |
| `GET` | `/api/data-sources/analysis` | 缺口分析:按数据源可用性分类的未检测技术 |
**收集状态:** `collecting` · `partial` · `not_collecting`
### TAXII 源集成
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/taxii/servers` | 列出所有 TAXII 服务器(不含凭据) |
| `POST` | `/api/taxii/servers` | 注册服务器 `{ name, url, api_root?, collection_id?, auth_type?, username?, password?, token?, ssl_verify?, notes? }` |
| `PUT` | `/api/taxii/servers/:id` | 更新服务器字段 |
| `DELETE` | `/api/taxii/servers/:id` | 删除服务器及级联作业 |
| `POST` | `/api/taxii/servers/:id/test` | 测试连接 — 返回可用集合 |
| `POST` | `/api/taxii/servers/:id/fetch` | 触发临时获取(在后台运行,立即返回) |
| `GET` | `/api/taxii/batches` | 列出摄入批次,包含待处理/已批准/已拒绝计数 |
| `GET` | `/api/taxii/batches/:batch_id/items` | 批次中包含建议数据的项目 |
| `POST` | `/api/taxii/batches/:batch_id/approve` | 批准批次中的所有待处理项目 |
| `POST` | `/api/taxii/batches/:batch_id/reject` | 拒绝批次中的所有待处理项目 |
| `POST` | `/api/taxii/pending/:id/approve` | 批准单个待处理项目 |
| `POST` | `/api/taxii/pending/:id/reject` | 拒绝单个待处理项目 |
| `GET` | `/api/taxii/jobs` | 列出所有计划的摄入作业 |
| `POST` | `/api/taxii/jobs` | 创建作业 `{ server_id, name, schedule }` — `schedule` 是一个 cron 表达式 |
| `PUT` | `/api/taxii/jobs/:id` | 更新作业名称、计划或启用标志 |
| `DELETE` | `/api/taxii/jobs/:id` | 删除作业并停止其计划 |
| `POST` | `/api/taxii/jobs/:id/run` | 手动触发计划作业 |
**验证类型:** `none` · `basic` · `bearer`
**建议操作:** `create_group` · `update_group` · `create_technique` · `link_technique`
**待处理项目状态:** `pending` · `approved` · `rejected`
### 导出
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/exports/navigator` | ATT&CK Navigator 层 JSON(下载) |
| `GET` | `/api/exports/detections/csv` | 检测 CSV(下载) |
| `GET` | `/api/exports/tools/csv` | 工具 CSV(下载) |
| `GET` | `/api/exports/coverage/json` | 覆盖率矩阵 JSON(下载) |
### API 文档
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/api/openapi.json` | OpenAPI 3.0 规范(机器可读,无需身份验证) |
| `GET` | `/api/docs` | Swagger UI(交互式浏览器,无需身份验证) |
## 技术栈
| 层 | 技术 |
|---|---|
| 前端 | React 18、TypeScript、React Router v6、Recharts、Tailwind CSS |
| 构建工具 | Vite 5 |
| 后端 | Node.js 20、Express 4、TypeScript |
| 数据库 | SQLite(通过 `better-sqlite3`,WAL 模式)或 PostgreSQL 14+(通过 `pg`)— 设置 `DATABASE_URL` |
| 模式迁移 | Knex.js(版本化迁移文件,在启动时或通过 `npm run migrate` 运行) |
| 身份验证 | JWT(`jsonwebtoken`)、bcrypt(`bcryptjs`)、OIDC(Authorization Code 流程) |
| TAXII | TAXII 2.1 客户端(原生 `http`/`https`);用于计划摄入作业的 `node-cron` |
| API 文档 | OpenAPI 3.0 规范 + Swagger UI(`swagger-ui-express`) |
| 测试 | Vitest(单元 + 集成测试,内存 SQLite 硬件加速) |
| TLS | `selfsigned`(自动自签名证书)或通过 `SSL_CERT_PATH`/`SSL_KEY_PATH` BYO 证书 |
| 运行时工具 | `tsx`(TS 开发运行器)、`concurrently` |
| 容器 | Docker(多阶段 Alpine 构建,非 root `mitremap` 用户,`gosu` 权限降级) |
## 项目结构
```
mitremap/
├── server/
│ └── src/
│ ├── index.ts # Express app entry (HTTP dev / HTTPS prod)
│ ├── middleware/
│ │ └── auth.ts # requireApiKey — Bearer token + SHA-256 validation
│ ├── db/
│ │ ├── database.ts # getKnex(), logAudit(), raw* helpers
│ │ ├── knex.ts # Knex connection + migration runner
│ │ ├── seed.ts # Idempotent seeding
│ │ └── migrations/
│ │ ├── 001_core_schema.ts # Base schema
│ │ ├── 002_new_features.ts # Auth, ART, data sources, ATT&CK versioning
│ │ ├── 003_custom_tests.ts # source column on art_tests
│ │ ├── 004_exercises.ts # Exercises, test runs, findings
│ │ ├── 005_exercises_blocked.ts # blocked column on exercise_test_runs
│ │ ├── 006_taxii.ts # TAXII servers, jobs, pending ingests
│ │ ├── 007_taxii_fetch_status.ts# last_fetch_* columns on taxii_servers
│ │ └── 008_taxii_skipped.ts # last_fetch_skipped column
│ ├── data/
│ │ ├── attack.ts # ATT&CK tactics, techniques, mitigations
│ │ ├── d3fend.ts # D3FEND techniques + ATT&CK mappings
│ │ ├── stix-fetch.ts # Live ATT&CK STIX fetcher (GitHub)
│ │ ├── threat-groups.ts
│ │ ├── compliance.ts # NIST CSF 2.0, CIS Controls v8
│ │ ├── atomic-tests.ts # Live ART fetch + static baseline
│ │ ├── data-sources.ts # Seed ATT&CK data sources
│ │ └── demo.ts # Demo tools and detections
│ ├── taxii/
│ │ ├── client.ts # TAXII 2.1 HTTP client (basic + bearer auth)
│ │ ├── parser.ts # STIX bundle → proposed-action records
│ │ ├── ingest.ts # runFetch(), applyPendingItem(), rejectPendingItem()
│ │ └── scheduler.ts # node-cron job lifecycle
│ ├── scripts/
│ │ └── migrate.ts # Standalone migration runner (dist/scripts/migrate.js)
│ ├── openapi.ts # OpenAPI 3.0 spec definition
│ ├── __tests__/ # Vitest unit/integration tests
│ │ ├── auth.test.ts
│ │ ├── coverage.test.ts
│ │ ├── database.test.ts
│ │ ├── detections.test.ts
│ │ ├── risk.test.ts
│ │ └── helpers/testDb.ts # In-memory SQLite test harness
│ └── routes/ # One file per resource group
│ ├── attack.ts # Tactics, techniques, live updates, versioning
│ ├── auth.ts # Login, refresh, logout, OIDC
│ ├── users.ts # User CRUD + password reset
│ ├── atomic.ts # ART import, custom tests, coverage, results
│ ├── data-sources.ts # ATT&CK data source management
│ ├── exercises.ts # Exercise / purple team workflow
│ ├── taxii.ts # TAXII servers, jobs, pending-item review
│ ├── threat-groups.ts # CRUD + technique assignment + procedures
│ ├── api-keys.ts # API key lifecycle (hash, mask, revoke)
│ └── admin.ts # Data purge endpoints
├── client/
│ └── src/
│ ├── api.ts # Typed fetch wrappers for every endpoint
│ ├── types.ts # Shared TypeScript interfaces
│ ├── components/
│ │ ├── Sidebar.tsx
│ │ ├── Modal.tsx
│ │ ├── StatusBadge.tsx
│ │ ├── CoverageBar.tsx
│ │ ├── TagBadge.tsx
│ │ ├── CommentThread.tsx
│ │ ├── AssignmentPanel.tsx
│ │ └── ReportBuilder.tsx # Modular report composer
│ ├── context/
│ │ └── AuthContext.tsx # JWT auth state, OIDC, role helpers
│ └── pages/
│ ├── LoginPage.tsx # Email/password + OIDC login
│ ├── Dashboard.tsx
│ ├── AttackMatrix.tsx # Heatmap with subtechnique support
│ ├── Detections.tsx
│ ├── Tools.tsx
│ ├── DefenseMapping.tsx
│ ├── GapAnalysis.tsx
│ ├── ThreatGroups.tsx # Per-TTP procedure editor
│ ├── AtomicTests.tsx # ART + custom test browser/editor
│ ├── DataSources.tsx # ATT&CK data source management
│ ├── Exercises.tsx # Red/purple team exercise workflow
│ ├── TaxiiIngest.tsx # TAXII feed management + review queue
│ ├── Reports.tsx
│ ├── ApiPlayground.tsx # Interactive API explorer
│ └── Settings.tsx # API keys · users · ATT&CK updates · data mgmt
├── certs/ # Optional: TLS / enterprise CA certs (not committed)
├── entrypoint.sh # Docker entrypoint: CA injection → gosu privilege drop
├── Dockerfile
├── docker-compose.yml
├── .env.example # Copy to .env before running docker compose
├── POSTGRES.md # PostgreSQL setup and compatibility guide
└── package.json # npm workspaces root
```
## 许可证
MIT
## 功能特性
### 身份验证与用户管理
- **登录页面** — 使用 JWT 访问令牌(15 分钟过期)和 30 天 httpOnly 刷新 Cookie 进行邮箱/密码登录
- **多用户角色** — `admin`(完全访问权限),`analyst`(读/写),`readonly`(仅查看)
- **OIDC / SSO** — 可配置的 OAuth2/OIDC 提供商;新用户在首次登录时自动配置为 `analyst`
- **引导模式** — 无锁定:应用程序在创建第一个用户或 API 密钥之前开放运行
- **引导管理员** — 在 `.env` 中设置 `ADMIN_EMAIL` + `ADMIN_PASSWORD`,以便在首次运行时生成初始管理员
- **用户管理** — 用户的完整 CRUD 操作、密码重置(使所有活动会话失效)以及激活/非激活切换
### 覆盖率情报
- **ATT&CK 矩阵热力图** — 包含父技术和子技术的完整 14 战术矩阵;每个单元格的状态(`full` / `detected` / `mitigated` / `tuning` / `planned` / `gap`)
- **D3FEND 映射** — 跨越 Harden / Detect / Isolate / Deceive / Evict 的 68 项对抗措施,映射到 ATT&CK 技术
- **覆盖率快照** — 时间点基线;趋势线显示一段时间内的覆盖率百分比
- **缺口分析** — 根据威胁组织暴露程度、合规性影响和现有缓解措施对每个未检测到的技术进行排名
### 检测管理
- 针对具有多选技术、严重性、置信度、误报率的 SIEM 检测的完整 CRUD 操作
- **批量操作** — 多选行、批量更新状态或删除
- **CSV 导入** — 粘贴或上传带有分号分隔的技术 ID 的检测 CSV 文件
- **SIGMA 规则导入** — 粘贴 YAML,预览提取的 ATT&CK 技术 ID,作为检测导入
- 按状态、严重性和源平台进行过滤
### 安全栈管理
- 具有供应商、类别和状态跟踪的工具清单
- 每个工具的 D3FEND 对抗措施和 ATT&CK 缓解措施链接
- 覆盖率贡献 — 每个工具对整体覆盖率矩阵的贡献
### 威胁情报
- **18 个追踪的威胁组织** — APT29、APT28、Lazarus、APT41、FIN7、Sandworm、Turla、Scattered Spider、Wizard Spider 等
- **完整 CRUD** — 创建、编辑和删除威胁组织;使用内联可搜索选择器分配 ATT&CK 技术的任何子集
- **每个 TTP 的程序** — 记录组织使用的每项技术的特定观察到的行为:命令行、脚本、工件路径、文字描述或参考链接。每个程序都有类型、颜色编码,并且可以在详细信息面板中内联编辑。
- 每个组织的检测覆盖率,带有技术级状态(detected / exposed)
- 每个组织的暴露百分比和风险级别
- 分面板详细信息视图,包含完整的技术和程序细分
### 风险评分
- **总体风险评分(0–100)** — 根据覆盖率缺口、暴露的威胁组织和高组织重叠技术进行加权
- 按战术划分的风险评分 — 条形图识别暴露最高的杀伤链阶段
- 按技术划分的风险评分 — 用于热力图优先级排序的可排序表格
### 合规映射
- **NIST CSF 2.0** — 所有 6 个功能(GV / ID / PR / DE / RS / RC)及控制级别的覆盖情况
- **CIS Controls v8** — 映射到 ATT&CK 技术的 18 项控制措施
- 每个框架的缺口报告 — 显示哪些控制措施没有活动的检测覆盖
### 报告与导出
**报告构建器** — 从模块化部分(覆盖总结、风险评分、缺口表、威胁环境、战术细分、合规缺口)撰写自定义执行和操作报告,并导出为 PDF 或复制为 Markdown。
| 导出 | 格式 | 端点 |
|---|---|---|
| ATT&CK Navigator 层 | JSON | `GET /api/exports/navigator` |
| 检测 | CSV | `GET /api/exports/detections/csv` |
| 安全工具 | CSV | `GET /api/exports/tools/csv` |
| 覆盖率矩阵 | JSON | `GET /api/exports/coverage/json` |
| 执行摘要 | JSON API | `GET /api/reports/executive` |
| 威胁环境 | JSON API | `GET /api/reports/threat-landscape` |
| 优先级缺口 | JSON API | `GET /api/reports/gaps` |
### ATT&CK 实时更新
- **版本跟踪** — 活动的 ATT&CK 版本存储在数据库中并显示在设置中
- **更新检查** — 管理员可以检查 GitHub 上是否有更新的 ATT&CK 版本,而无需离开应用程序
- **一键更新** — 从官方 MITRE 仓库获取最新的企业 STIX 包,并在单个事务中更新插入所有战术、技术、缓解措施和关系;可选择特定版本
- **已弃用技术跟踪** — 被更新移除或撤销的技术会记录在 `deprecated_techniques` 中,并在可用时提供被取代的指针
- **迁移扫描** — 扫描所有检测中是否引用了已弃用的技术 ID,并列出需要更新的检测
### Atomic Red Team 与自定义测试
- **ART 测试库** — 浏览按技术分组的已导入 Atomic Red Team 测试;每个测试显示名称、GUID、平台、执行器类型和生成的命令
- **实时 ART 植入** — 在首次运行时,服务器从 GitHub 获取完整的 Atomic Red Team 索引并自动植入所有测试;如果网络不可用,则回退到静态基线
- **YAML 导入** — 粘贴来自 Red Canary Atomic Red Team 仓库的任何 `atomics/*.yaml` 文件;按 GUID 跳过重复项
- **自定义测试** — 针对非来源于 ART 的自身检测测试的完整 CRUD;每个测试标记为 `source: custom`,并与导入的 ART 测试分开管理
- **测试结果** — 记录每次检测的测试结果(`untested` / `tested` / `validated` / `failed`),并附带备注和运行归属
- **覆盖率统计** — 每个 ATT&CK 技术的测试(ART + 自定义)数量的技术级计数
### 红队 / 紫队演习
将进攻性测试与防御性覆盖率闭环的正式演习管理。每次演习包含四个选项卡的工作流:
- **计划** — 创建演习(类型:`red_team` / `purple_team` / `tabletop`),分配目标威胁组织,并定义技术范围。在创建时选择威胁组织后,其所有 TTP 都会自动填充到范围中。
- **执行** — 对于范围内的每个技术,浏览可用的 ART 测试,记录结果(`detected` / `partial` / `not_detected` / `blocked` / `n/a`),并附带每次测试运行的内联备注。
- **发现** — 记录结构化的发现(类型:`gap` / `detection_validated` / `detection_failed` / `control_weakness` / `new_ttp`),包括严重性、相关技术、描述和修复建议。
- **报告** — 自动生成的紫队报告:执行摘要 KPI(检测率、范围技术、执行测试、发现)、逐技术的覆盖率细分、按严重性分组的发现以及检测缺口列表。
- **演习状态** — `planning` / `active` / `completed` / `cancelled`,包含负责人/操作员、开始/结束日期以及范围/交战规则说明。
### ATT&CK 数据源
- **源清单** — 跟踪您的组织收集了哪些日志源(Windows Event Logs、Sysmon、CloudTrail 等);已分类且可搜索
- **收集状态** — `collecting` / `partial` / `not_collecting`,每个源都有一个自由文本的 collection-method 和备注字段
- **技术映射** — 将每个数据源链接到它能够实现检测的 ATT&CK 技术;内联显示检测覆盖情况
- **缺口分析** — 识别未检测到的技术并对缺口进行分类:无已知数据源、有收集源但无规则,或未知
### TAXII 威胁情报源
直接将来自任何 TAXII 2.1 服务器的外部威胁情报摄入到 MitreMap 中——在分析师审查之前,任何内容都不会触及您的数据。
- **服务器管理** — 通过 URL 注册 TAXII 2.1 服务器,支持 `none`、`basic` 或 `bearer` 身份验证;针对内部/自签名端点的 SSL 验证切换
- **连接测试** — 从服务器列出可用集合,而无需提交完整获取
- **计划作业** — 创建基于 cron 的摄入作业(每小时、每天、每周或自定义表达式),在后台自动获取
- **手动获取** — 随时从任何配置好的服务器触发临时获取
- **分析师审查队列** — 摄入的 STIX 对象(入侵集合、攻击模式、关系)作为待处理项暂存;分析师可以单独批准或拒绝每个项目,或者一次性批准/拒绝整批项目
- **建议操作** — 每个待处理项已预分类:`create_group`、`update_group`、`create_technique` 或 `link_technique`;批准的项目将自动应用到威胁组织和技术表
- **批次历史** — 按服务器浏览所有过去的摄入批次,包含待处理/已批准/已拒绝的计数和时间戳
- **获取状态** — 每个服务器显示上次获取状态(`running` / `success` / `error`)、项目数、跳过重复数以及失败时的错误消息
### API 测试区
- 交互式内置 API 资源管理器 — 按资源分组浏览每个端点,填充路径/查询/请求体参数,并使用您存储的 API 密钥触发实时请求。响应以语法高亮内联显示。
### OpenAPI / Swagger 文档
- **机器可读规范** — 完整的 OpenAPI 3.0 规范,通过 `GET /api/openapi.json` 提供
- **Swagger UI** — 位于 `/api/docs` 的交互式文档浏览器;无需身份验证即可浏览
### 协作
- **标签** — 应用于任何实体(检测、技术、工具、缺口)的颜色编码标签
- **评论** — 在任何实体上的线索式分析师备注
- **分配** — 将缺口或检测分配给分析师,带有优先级、截止日期和状态跟踪
- **审计日志** — 记录每个创建/更新/删除/导入/清除事件,包含操作者(远程调用时为 API 密钥名称)、源 IP 和变更差异
### 管理
- **API 密钥** — 创建具有范围的 API 密钥(`read` / `write` / `admin`),可选择过期时间;密钥在静态存储时使用 SHA-256 哈希,并且仅在创建时显示一次
- **API 密钥强制执行** — 一旦存在任何密钥,所有 API 流量都需要有效的 `Authorization: Bearer 标签:AMSI绕过, ATT&CK框架, D3FEND, JWT认证, OIDC, Web安全, 企业安全, 威胁情报, 威胁检测, 安全仪表盘, 安全合规, 安全态势管理, 开发者工具, 权限管理, 模型越狱, 测试用例, 漏洞分析, 网络代理, 网络安全, 网络资产管理, 自动化攻击, 蓝队分析, 请求拦截, 路径探测, 防御覆盖率, 隐私保护