jmscory/ThreatFlow
GitHub: jmscory/ThreatFlow
ThreatFlow:基于OCaml的威胁情报推理引擎,提供可解释的漏洞修复建议。
Stars: 0 | Forks: 0
# 威胁流



ThreatFlow 是一个用 OCaml 编写的确定性威胁情报推理引擎。它将 CVE、KEV、ATT&CK 和行为者情报融合到一个类型图中,然后产生优先级高、可解释的修复建议。
## 目录
- [什么是 ThreatFlow](#what-threatflow-is)
- [架构快照](#architecture-snapshot)
- [亮点](#highlights)
- [为什么确定性很重要](#why-deterministic-matters)
- [系统概述](#system-overview)
- [数据需求](#data-requirements)
- [上游数据源映射](#upstream-feed-mapping)
- [快速入门](#quick-start)
- [商业案例研究](#business-case-study)
- [场景](#scenarios)
- [演示镜像](#demo-images)
- [本地工作站](#the-native-workstation)
- [验证](#validation)
- [基准测试](#benchmarking)
- [存储库布局](#repository-layout)
- [文档](#documentation)
- [限制](#limitations)
- [许可证](#license)
## 什么是 ThreatFlow
ThreatFlow 是一个面向分析师的漏洞操作推理系统。
它旨在回答:
- 哪些漏洞现在最紧急?
- 支持这种排名的证据是什么?
- 哪些威胁行为者和 ATT&CK 技术与每个暴露相关?
ThreatFlow 是基于规则的且可重复的。对于相同的输入数据,它会产生相同的结果。
## 架构快照
```
flowchart LR
A[Local CVE Data] --> E[Typed Ingest]
B[KEV Data] --> E
C[ATT&CK Data] --> E
D[Actor Data] --> E
E --> F[Security Graph]
F --> G[Rule Inference]
G --> H[Exposure and Confidence Scoring]
H --> I[Explainable Recommendations]
I --> J[CLI Search Query Explain Export]
```
## 演示镜像
以下视觉图像是从捆绑的样本数据生成的,并从本地图中导出的。
知识图谱快照:

详细的 APT29 业务上下文图:

## 亮点
- 对 CVE、CISA KEV、MITRE ATT&CK 和行为者记录进行类型化摄取。
- 内存中的知识图谱,具有遍历和路径分析。
- 基于规则的 Actor -> 技术 -> CVE 推理。
- 暴露和置信度评分,包括因素分解。
- 人类可读和 JSON 格式的可解释模板。
- 基于 Cmdliner 的专业 CLI,具有搜索、查询、解释、摄取和图形导出。
## 为什么确定性很重要
ThreatFlow 是为分析师需要证明决策、回放结果和比较跨时间输出的环境而设计的。这带来了比不透明的推荐系统三个实际优势:
- 可重复性:相同的数据集每次都会产生相同的优先级和解释。
- 可审计性:每个排名都与可见的证据相关联,例如 KEV 存在、行为者活动、ATT&CK 技术和 CVSS 严重性。
- 运营信任:团队可以调整规则、审查输出差异,并在受监管或事件后环境中使用引擎,而无需争论隐藏的模型行为。
## 系统概述
ThreatFlow 管道:
1. 解析和验证威胁情报源。
2. 构建一个类型化安全图。
3. 推断额外的关系。
4. 通过暴露和置信度评分漏洞。
5. 发出可解释的建议和图形导出。
主要运行时数据源是本地 JSON 文件:
- `data/cves.json`
- `data/kev.json`
- `data/techniques.json`
- `data/actors.json`
核心执行通过 CLI 可执行文件完成:
- `threatflow search`
- `threatflow query`
- `threatflow explain`
- `threatflow ingest`
- `threatflow graph export`
## 数据需求
ThreatFlow 预期在数据目录(默认:`data/`)中存在本地 JSON 文件。
正式数据合同在 [docs/DATA_CONTRACTS.md](docs/DATA_CONTRACTS.md) 中记录,并且可机器读取的架构在 [schemas](schemas)下可用。
运行时所需:
- `data/cves.json`
- `data/kev.json`
- `data/techniques.json`
- `data/actors.json`
主要的 CLI 工作流程(`search`、`query`、`explain`、`graph export`)从所有四个文件构建一个引擎。缺少文件或无效的 JSON 将导致启动失败。
最小预期的结构:
- `cves.json`:CVE 记录数组,具有如 `id`、`description`、`cvss`、`published`、`cwes`、`affected_products` 等字段。
- `kev.json`:KEV 记录数组,具有如 `cve_id`、`vendor_project`、`product`、`date_added`、`due_date`、`known_ransomware_use` 等字段。
- `techniques.json`:ATT&CK 技术记录数组,具有如 `id`、`name`、`tactics`、`platforms` 等字段。
- `actors.json`:行为者记录数组,具有如 `id`、`name`、`aliases`、`motivations`、`sophistication`、`targeted_sectors`、`techniques`、`exploited_cves` 等字段。
数据质量预期:
- ID 应该在文件之间匹配以增强推理(例如 `actors.exploited_cves` 应该引用 `cves.id`,并且 `actors.techniques` 应该引用 `techniques.id`)。
- 空文件是有效的 JSON,但会降低输出质量。
- `ingest` 可以在完整运行之前验证单个源文件。
## 上游数据源映射
在用真实情报导出替换样本文件时使用此映射。
- NVD CVE 数据源 -> `data/cves.json`
- CISA KEV 数据源 -> `data/kev.json`
- MITRE ATT&CK STIX 包 -> `data/techniques.json`
- 内部行为者跟踪或 CTI 供应商导出 -> `data/actors.json`
上游数据源的验证工作流程:
```
dune exec threatflow -- ingest cves path/to/nvd-feed.json
dune exec threatflow -- ingest kev path/to/cisa-kev.json
dune exec threatflow -- ingest attack path/to/enterprise-attack.json
```
行为者数据应采用 ThreatFlow 行为者 JSON 形状:
```
dune exec threatflow -- ingest actors data/actors.json
```
验证后,将标准化文件放置在 `data/` 中,使用标准名称,并运行正常命令(`search`、`query`、`explain`、`graph export`)。
## 快速入门
要求:
- opam
- OCaml
- Dune
安装依赖项:
```
opam update
opam install . --deps-only --with-test
```
构建和验证:
```
dune build
dune runtest
```
运行首次演示体验:
```
./examples/demo.sh
```
如果您想手动执行主要命令:
```
dune exec threatflow -- search --cvss-min 0 --limit 5
dune exec threatflow -- query "FIND CVE WHERE cvss >= 8"
dune exec threatflow -- explain CVE-2024-0001 --format human
```
## 商业案例研究
场景:一个漏洞操作团队正在处理新的待办事项列表,并需要决定是否中断计划中的面向互联网产品的维护问题。
来自捆绑的样本集的输入数据:
- `CVE-2024-0001` 是 `EdgeGateway` 上的远程代码执行问题,CVSS 为 `9.8`。
- 该 CVE 存在于 KEV 数据集中,并标记为已知勒索软件使用。
- 威胁行为者数据将 `ALPHA SPIDER` 与 CVE 以及同一攻击路径中的 ATT&CK 技术相关联。
ThreatFlow 推断:
- 该 CVE 在捆绑的数据集中排名第一。
- 解释将紧迫性与 KEV 存在、勒索软件关联、ATT&CK 技术覆盖和行为者兴趣联系起来。
- 结果不仅仅是“高严重性”,而是“高严重性,具有活跃的利用上下文和对手相关性。”
为什么这对运营很重要:
- 补丁团队可以证明将 `EdgeGateway` 修复工作提前于较低上下文漏洞。
- 领导层获得非计划维护的防御性理由。
- 分析师可以将解释输出作为审计证据,而不是依赖于主观的优先级注释。
此场景的建议操作:
- 首先修补或隔离受影响的 `EdgeGateway` 暴露
- 验证面向公共访问路径的补偿性控制措施
- 在修复票据和变更审批轨迹中使用解释输出
### APT28 配置文件注释(自带数据)
捆绑的样本行为者集包括 `ALPHA SPIDER` 和 `APT29`。如果您的环境跟踪 APT28(也称为 `FANCY BEAR`),请将其作为 `data/actors.json` 中的第一类行为者记录添加,以便 ThreatFlow 可以将其包含在推理和解释输出中。
ThreatFlow 中 APT28 的实用建模指南:
- 将已知别名(`APT28`、`FANCY BEAR`、`STRONTIUM`)映射到 `aliases`
- 保持 `motivations` 与您的 CTI 团队使用的间谍活动和破坏报告保持一致
- 将 `targeted_sectors` 限制在您自己的观察到的目标模式
- 仅包括您可以在证据中防御的技术和 CVE
示例行为者记录形状:
```
{
"id": "TA-APT28",
"name": "APT28",
"aliases": ["FANCY BEAR", "STRONTIUM"],
"motivations": ["espionage"],
"sophistication": "strategic",
"targeted_sectors": ["government", "defense", "energy"],
"techniques": ["T1190", "T1068"],
"exploited_cves": ["CVE-2024-0100"]
}
```
添加 APT28 数据后,验证并重新运行排名/解释命令:
```
dune exec threatflow -- ingest actors data/actors.json
dune exec threatflow -- search --cvss-min 7 --limit 10
dune exec threatflow -- explain CVE-2024-0100 --format human
```
## 场景
投资组合优先级:
```
dune exec threatflow -- search --text CVE --cvss-min 7 --limit 10
```
分析师 DSL 查询:
```
dune exec threatflow -- query "FIND CVE WHERE cvss >= 8"
```
解释 CVE 的优先级:
```
dune exec threatflow -- explain CVE-2024-0001 --format human
dune exec threatflow -- explain CVE-2024-0001 --format json
```
验证摄取有效负载:
```
dune exec threatflow -- ingest kev data/kev.json
dune exec threatflow -- ingest attack data/techniques.json
dune exec threatflow -- ingest actors data/actors.json
dune exec threatflow -- ingest cves data/cves.json
```
导出图形工件:
```
dune exec threatflow -- graph export --format json --out artifacts/graph.json
dune exec threatflow -- graph export --format mermaid --out artifacts/graph.mmd
```
## 本地工作站
ThreatFlow 是为在本地以最小依赖项运行而设计的:
- 本地 JSON 数据文件,以确保确定性可重复性。
- 不需要外部数据库。
- 以 CLI 为首的工作流程,适用于分析师和工程使用。
这使得它适用于投资组合演示、离线分析和可审计的安全工作流程。
## 验证
验证通过 Alcotest 套件构建到存储库中。
当前的测试覆盖率包括:
- 摄取解析和验证行为
- 图插入/遍历/删除行为
- 解析器语法行为和错误处理
- 推理和推理准确性
- 可解释性输出
运行所有测试:
```
dune runtest
```
## 基准测试
运行基线基准:
```
./bench/run.sh --iterations 5
```
收集的指标:
- `engine_build`:加载本地 JSON 并构建内存中的引擎
- `query_cvss_ge_8`:运行代表性的 DSL CVE 过滤器
- `explain_cve`:生成面向人类推荐解释
- `graph_to_json`:将当前图序列化为 JSON
捆绑数据集比较目标:
- `engine_build` 应保持在 `5.0 ms` 以下
- `query_cvss_ge_8` 应保持在 `1.0 ms` 以下
- `explain_cve` 应保持在 `1.0 ms` 以下
- `graph_to_json` 应保持在 `2.0 ms` 以下
这些目标是针对样本数据集的轻量级回归护栏,旨在捕获核心路径中的明显减速,而不是代表大规模吞吐量声明。
示例输出:
```
ThreatFlow benchmark
iterations: 5
dataset: cves=3 techniques=2 kevs=1 actors=2
metric avg_ms best_ms worst_ms target_ms status
--------------------------------------------------------------------------
engine_build 0.046 0.044 0.048 5.000 pass
query_cvss_ge_8 0.000 0.000 0.001 1.000 pass
explain_cve 0.003 0.002 0.003 1.000 pass
graph_to_json 0.014 0.012 0.016 2.000 pass
```
要扩展基准测试套件,请向 `bench/benchmark.ml` 中添加另一个确定性的 `measure` 调用,并保持工作负载与捆绑数据集相关。有关其他说明,请参阅 `bench/README.md`。
## 存储库布局
```
ThreatFlow/
artifacts/ # Generated demo images and export outputs
bench/ # Minimal benchmark harness and wrapper script
bin/ # CLI entrypoint
data/ # Sample/local intelligence inputs
docs/ # Architecture, explainability, CLI UX, testing strategy
examples/ # First-time user demo walkthrough
LICENSE # MIT license
lib/ # Core modules (ingest, graph, reasoning, DSL, engine)
schemas/ # JSON Schema contracts for runtime datasets
test/ # Test suites
```
## 文档
- `docs/ARCHITECTURE.md`
- `docs/EXPLAINABILITY_ARCHITECTURE.md`
- `docs/CLI_UX.md`
- `docs/DATA_CONTRACTS.md`
- `docs/TESTING_STRATEGY.md`
## 限制
- 默认数据集是本地样本,不是实时数据源提取。
- 图形可视化导出是 Mermaid 源和渲染图像工件,而不是交互式 UI。
- 评分是确定性和基于规则的;它不是一个机器学习的模型。
## 许可证
ThreatFlow 在 MIT 许可证下发布。请参阅 [LICENSE](LICENSE)。
标签:Homebrew安装, Web安全扫描, 漏洞数据库