tanzimulalam/Mirage-CTI

GitHub: tanzimulalam/Mirage-CTI

Mirage 通过多智能体对抗模拟等因果驱动方法,生成符合 STIX 2.1 标准的合成网络威胁情报知识图谱,为 CTI 相关的机器学习研究提供隐私安全的数据支撑。

Stars: 0 | Forks: 0

# Mirage ### 合成网络威胁情报研究平台 **通过因果模拟而非针对每个对象的 LLM 提示词来生成 STIX 2.1 合成 CTI 知识图谱。包含三种生成引擎、用于对比的 schema 强制基准、全面的质量评估以及 RDF 导出。** [![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-3776ab?logo=python&logoColor=white)](https://www.python.org/) [![STIX 2.1](https://img.shields.io/badge/STIX-2.1-f57c00?logoColor=white)](https://oasis-open.github.io/cti-documentation/stix/intro) [![GPT-4o-mini](https://img.shields.io/badge/GPT--4o--mini-Powered-412991?logo=openai&logoColor=white)](https://openai.com/) [![License: MIT](https://img.shields.io/badge/License-MIT-22c55e.svg)](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, 大语言模型, 威胁情报, 开发者工具, 数据生成, 无后门, 特权检测, 网络安全, 逆向工具, 隐私保护