tanzimulalam/Mirage-CTI
GitHub: tanzimulalam/Mirage-CTI
Mirage 通过多智能体对抗模拟等因果驱动方法,生成符合 STIX 2.1 标准的合成网络威胁情报知识图谱,为 CTI 相关的机器学习研究提供隐私安全的数据支撑。
Stars: 0 | Forks: 0
# Mirage
### 合成网络威胁情报研究平台
**通过因果模拟而非针对每个对象的 LLM 提示词来生成 STIX 2.1 合成 CTI 知识图谱。包含三种生成引擎、用于对比的 schema 强制基准、全面的质量评估以及 RDF 导出。**
[](https://www.python.org/)
[](https://oasis-open.github.io/cti-documentation/stix/intro)
[](https://openai.com/)
[](LICENSE)
## 摘要
Mirage 生成**隐私保护的网络威胁情报 (CTI) 知识图谱**(STIX 2.1 格式),且不会暴露真实的受害者或攻击者数据。大多数 CTI 数据集无法共享;该平台生成的合成图谱适用于 ML 系统的训练与评估。我们不声称其对真实运营级 CTI 具有保真度:因为目前不存在可用于此项比较的运营级参考语料库,而这种缺失本身也是本论文的一项发现。
其核心设计将拓扑构建与语义标注分离开来(**拓扑优先,语义其次**)。这取代了为每个对象调用一次 LLM 的旧模式:
```
v1 (legacy): LLM per object → Pydantic repair loop → post-hoc relationship stitching
v2 (Mirage): topology/causal engine → IR DSL → deterministic compiler → STIX 2.1 bundle
```
中间表示 (IR) 将结构生成与语义标注解耦:
```
TA:abc123 -uses-> MAL:def456
MAL:def456 -targets-> INFRA:host-1
MAL:def456 -exploits-> VUL:CVE-2019-0708
```
编译器负责生成 UUID、实例化 STIX 2.1 对象,并通过精心策划的白名单强制执行关系词汇表。合规性检查过程不涉及 LLM。
## 三种生成引擎 + Schema 强制基准
| 引擎 | 方法论 | 典型输出规模 |
|--------|-------------|---------------------|
| **Legacy v1** *(schema 强制基准)* | 针对每个对象的 LLM 生成,通过 Pydantic 进行 schema 强制。作为对比基准保留;不是 IR 引擎。 | 12–20 个对象 |
| **Procedural** | 无标度拓扑构建(通过 NetworkX 实现 Barabási–Albert 模型),随后对每种节点类型进行 LLM 引导的语义标注。 | 10–100 个节点 |
| **Wargaming** | 在随机化的主机网络上进行有状态的 Red/Blue 代理模拟。STIX 边表示已解决模拟动作的因果产物。 | 20–60 个节点 |
| **Evolutionary** | 遗传算法:以 wargaming 为种群的初始化 → LLM 引导的变异和交叉算子 → 基于适应度的质量多代选择。 | 20–60 个节点 |
### Wargaming 引擎参数
| 参数 | 值 | 依据 |
|-----------|-------|-----------|
| `TURNS_PER_HOST` | 1.5 | `max_turns = max(25, ⌊num_hosts × 1.5⌋)`;确保较大网络具有足够的探索深度 |
| `ALERT_THRESHOLD` | 3 | Blue 隔离主机所需的最低告警累积数 |
| 入口节点选择 | `out_degree ≥ 2`(分层回退) | 确保攻击者具有横向移动路径 |
| 核心资产放置 | 从入口节点出发的有向可达集 | 保证模拟在结构上是可获胜的 |
## 质量评估协议
每个生成的 bundle 都会在四个维度上进行评分:
| 维度 | 指标 | 描述 |
|-----------|--------|-------------|
| 合规性 | `compliance_rate` | STIX 2.1 规范有效性:必填字段、类型约束、标识符格式 |
| 结构性 | `largest_component_fraction` | 图的连通性和组件连贯性 |
| 语义 | `pass_rate` | CTI 领域规则依从性(例如,恶意软件必须引用目标) |
| 多样性 | Shannon entropy | 关系类型和 SDO 多样性的熵 |
这四个分数被组合成一个加权后的总分。
## 评估结果
每个引擎 N=50,GPT-4o-mini,`num_hosts=20`。来源:`output/cross_engine_comparison.csv。单独的鲁棒性检查(`scripts/model_variation.py`)在 GPT-4o-2024-08-06 下运行了相同的引擎;结构和语义分数没有变化。完整结果见`output/gpt4o/model_variation_results.txt`。
| 引擎 | 合规性 | 结构性 | 语义 | 多样性 (H) | 平均组件数 |
|--------|-----------|-----------|---------|--------------|-----------------|
| Legacy v1 *(基准)* | 1.00 ± 0.00 | 0.98 ± 0.01 | 0.83 ± 0.09 | 2.73 ± 0.07 | 7.08 |
| Procedural | 1.00 ± 0.00 | 0.81 ± 0.15 | 0.61 ± 0.09 | 2.66 ± 0.27 | 4.86 |
| Wargaming | 1.00 ± 0.00 | 0.95 ± 0.08 | **1.00 ± 0.00** | 1.65 ± 0.15 | **1.64** |
| Evolutionary | 1.00 ± 0.00 | 0.98 ± 0.06 | **1.00 ± 0.00** | 1.51 ± 0.37 | **1.44** |
Wargaming 结果分布 (N=50):84% 攻击者获胜 / 10% Blue 驱逐 / 6% 回合预算耗尽。
判别器 (RandomForest, 5-fold) 和 MMD 结果:
- 对比 schema 强制基准的 AUC = 1.000(适用于所有三个 IR 引擎)。MMD(RBF kernel,1000 次置换):wargaming 对比 schema 强制 = 0.96 (p < 0.001);wargaming 对比规模匹配的 ER = 0.74 (p < 0.001)。
- 对比 MITRE ATT&CK 的 AUC = 1.000 属于负面发现。MITRE 是一个精心策划的知识库,而非运营事件 CTI,且 ER 随机图对照组同样能被清晰地区分开来。有意义的比较应针对 schema 强制基准进行。
**数据说明。** 报告的指标源自 `output/checkpoint_N50.csv`,在生成时计算。未在原始生成期间缓存的运行所对应的 bundle 文件已在相同的固定配置下重新生成;因此,随机引擎的逐 bundle 重新评分将与检查点值有所不同。
## 仓库结构
```
Mirage/
├── app.py # Flask server — /generate-graph endpoint
├── requirements.txt
│
├── sakura/ # Core v2 pipeline
│ ├── engines/
│ │ ├── procedural.py # Scale-free topology + semantic painting
│ │ ├── wargaming.py # Red/Blue agent simulation
│ │ └── evolutionary.py # GA: mutation + crossover + fitness
│ ├── ir/
│ │ ├── dsl.py # IR DSL parser + shorthand map
│ │ └── compiler.py # Deterministic STIX 2.1 compiler
│ ├── quality/
│ │ ├── compliance.py # STIX 2.1 spec validation
│ │ ├── structural.py # Graph topology metrics
│ │ ├── semantic.py # CTI domain rule checks
│ │ └── diversity.py # Shannon entropy + type variety
│ ├── relationships/
│ │ └── stix_relationship_whitelist.py # Valid (source, relation, target) triples
│ ├── evaluation/
│ │ ├── discriminator.py # RandomForest AUC vs MITRE / vs Legacy
│ │ ├── features.py # Graph-level feature extraction
│ │ └── fetcher.py # MITRE ATT&CK STIX reference fetcher
│ └── export/
│ ├── batch_generator.py # Cross-engine evaluation harness
│ └── triple_exporter.py # RDF / N-Triples / CSV export
│
├── legacy_stix_object_builder.py # v1 per-object LLM generator (baseline only)
├── StixObjectLang/ # v1 SDO schema templates (deprecated)
│
├── static/
│ ├── css/sakura.css # Design system tokens
│ ├── js/graph.js # ForceGraph2D visualisation
│ └── js/sakura.js # UI interaction logic
│
├── templates/
│ ├── index.html # Generator UI
│ └── results.html # Quality report + graph visualisation
│
├── scenario_configs/ # YAML scenario presets
│ ├── iot_botnet.yaml
│ ├── apt_campaign.yaml
│ └── ransomware_supply_chain.yaml
│
├── scripts/
│ ├── diag_wargaming.py # Deterministic wargaming diagnostic (no LLM)
│ └── rerun_evolutionary.py # Evolutionary re-run with corrected turn budget
│
├── _archive/
│ └── two_pass_redblue.py # Rejected two-shot wargaming variant
│
└── tests/
├── test_ir.py
├── test_quality.py
├── test_whitelist.py
└── test_export.py
```
## 快速开始
### 前置条件
```
pip install -r requirements.txt
```
需要在 `.env` 或 shell 环境中提供 OpenAI API 密钥:
```
export OPENAI_API_KEY=sk-...
```
### 运行 Web 界面
```
python app.py
```
访问 **http://localhost:5000**。
### 通过 REST API 生成
```
# Wargaming 引擎 — 20 主机网络
curl -X POST http://localhost:5000/generate-graph \
-H "Content-Type: application/json" \
-d '{"engine":"wargaming","num_hosts":20}'
# Evolutionary 引擎
curl -X POST http://localhost:5000/generate-graph \
-H "Content-Type: application/json" \
-d '{"engine":"evolutionary","num_hosts":20}'
# Legacy 基线
curl -X POST http://localhost:5000/generate-graph \
-H "Content-Type: application/json" \
-d '{"engine":"legacy","sdo_counts":{"threat-actor":1,"malware":3,"attack-pattern":5}}'
```
**响应 schema:**
```
{
"bundle": { "...STIX 2.1 bundle..." },
"quality_report": {
"overall_score": 85.0,
"compliance": { "score": 100.0 },
"structural": { "score": 83.0 },
"semantic": { "score": 100.0 },
"diversity": { "score": 52.0 }
},
"story": "Wargaming engine (20 hosts, 30 turns): Attacker Wins (Crown Jewel Compromised).",
"engine": "wargaming"
}
```
### 复现评估表
```
python -m sakura.export.batch_generator # N=50 for paper results
```
输出 `output/cross_engine_comparison.csv`。预期运行时间:在 N=50 (GPT-4o-mini) 下为 2–4 小时。测试工具会在每个 bundle 之后进行检查点保存,并在中断时自动恢复。
## 已知局限性
1. 对比 MITRE 的 AUC 属于负面发现。MITRE ATT&CK 是一个精心策划的知识库,而非运营事件 CTI。以此为标准衡量真实性不能提供任何有用信息;随机图同样能被很好地分辨出来。
2. 归纳式 KGE 迁移已作为完整实验运行(`scripts/kge_inductive.py`,InductiveNodePiece,PyKEEN 1.11.1),结果为空。Mirage 归纳式 MRR = 0.036 +/- 0.034,Hits@1 = 0.005,而实体级别的随机概率为 0.029。Erdos-Renyi 对照组的表现同样如此 (MRR = 0.095)。标准的归纳式 KGE 迁移无法将“构造即连贯”的生成器与随机图区分开来。配套的 TransE 实验位于 `scripts/kge_experiment.py`。`sakura/evaluation/kge_transfer.py` 是为下游集成保留的存根。
3. Evolutionary 多样性在 1 代之后发生崩溃。这在 2 次 API 调用预算下是预期之中的。如果需要更丰富的种群进化,请增加 `max_generations` 和 `max_api_calls`。
## 引用
```
@software{mirage2026,
title = {Mirage: A Topology-First Framework for Synthetic CTI Knowledge Graph Generation},
author = {Anonymous Author(s)},
year = {2026},
url = {https://anonymous.4open.science/r/Project-Mirage}
}
```
## 许可证
MIT。详见 [LICENSE](LICENSE)。
IEEE Research · STIX 2.1 · GPT-4o-mini · Python 3.9+
标签:DLL 劫持, Python, 大语言模型, 威胁情报, 开发者工具, 数据生成, 无后门, 特权检测, 网络安全, 逆向工具, 隐私保护