Pranith-Jain/stix21-builder

GitHub: Pranith-Jain/stix21-builder

一個純轉換的 STIX 2.1 捆綁建構器,根據輸入的情報項與實體生成確定性、可導入的標準化捆綁包及非規範化視圖。

Stars: 0 | Forks: 0

# stix21-builder [![许可证: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) STIX 2.1 捆绑构建器。给定一个情报项及其提取的实体,生成一个严格、确定性、可直接导入的 STIX 2.1 捆绑包,外加一个平坦的非规范化视图,用于直接 UI 渲染。 最初为 [pranithjain.com](https://pranithjain.com) 的威胁情报平台构建,现提取出来供通用复用。 ## 安装 ``` npm install stix21-builder ``` ## 快速入门 ``` import { buildStixBundle, type ReportInput } from 'stix21-builder'; import { extract } from 'cti-text-extract'; const report: ReportInput = { sourceId: 'unit42', sourceName: 'Unit 42', itemRef: 'https://unit42.example/post/apt28-eu-gov', title: 'APT28 Targets European Government Entities', body: 'MSTIC observed APT28 (Fancy Bear) exploiting CVE-2023-36884 ...', publishedAt: '2026-01-15T00:00:00Z', tlp: 'WHITE', }; const entities = extract(report.title, report.body); const { bundle, view } = await buildStixBundle( report, entities, { enrichments: [], partial: false, overflow: [] } ); // `bundle` is a valid STIX 2.1 bundle, importable into OpenCTI, MISP, // or any TAXII 2.1 client. // `view` is the flat, pre-resolved shape suitable for direct rendering. ``` ## 输出内容 ### `bundle` — 严格的 STIX 2.1 - 每个对象包含 `spec_version: '2.1'` - 基于稳定命名空间派生的有效 UUIDv5 ID(重复运行产生相同 ID) - 每指标模式(`[ipv4-addr:value = '...']`、`[file:hashes.'SHA-256' = '...']` 等) - 关系(`indicates`、`uses`、`targets`) - 使用 OASIS TLP 规范 UUID 的身份与标记定义对象 ### `view` — 平坦非规范化形状 - `threatActors[]`、`malware[]`、`cves[]`、`iocs[]` — 平坦数组 - 每 IoC 组合风险评分、判定、列出该 IoC 的提供商、各提供商最高分 - 每 CVE 的 KEV 列表 + EPSS 评分(若提供) - 若任何增强步骤降级,设总 `partial` 标志 ## ATT&CK 交叉引用(可选) 当参与者/恶意软件 slug 携带已知的 MITRE ATT&CK external_id 时,会添加指向 attack.mitre.org 的 `external_references` 条目。 ATT&CK 链接是 **可选开启** 的,以在不需要时保持捆绑包体积小巧。将 `ATTACK_ID_INDEX` 作为第 6 个参数传入: ``` import { buildStixBundle } from 'stix21-builder'; import { ATTACK_ID_INDEX } from 'stix21-builder/attack-index'; const { bundle } = await buildStixBundle( report, entities, bulk, cveEnrichments, llmEntities, ATTACK_ID_INDEX // 5,376 ATT&CK IDs across enterprise/ics/mobile ); ``` 捆绑的索引文件约 450KB(未压缩),源自 MITRE ATT&CK 官方 STIX 捆绑包(企业、ICS、移动)。它是一个单独的子导出,以便 tree-shaking / 打包工具在未使用时将其剔除。 ## 确定性 相同输入两次调用产生的捆绑 ID、指标 ID 和关系 ID 逐字节相同。这意味着: - 在两个不同报告中观察到的同一个 IoC 在下游折叠为同一个 `indicator--`。 - 运行之间的捆绑差异仅限于数据中实际发生变化的部分。 - 联邦消费者可在无需协调的情况下跨多个来源去重。 ## 设计选择 - **纯转换。** 无 I/O、无网络请求、无 KV。可在 Worker、Node、浏览器中运行。 - **调用者提供实体和增强信息。** 本库仅负责序列化。配合 [`cti-text-extract`](https://github.com/Pranith-Jain/cti-text-extract) 进行实体提取,并使用您自己的提供商栈进行 IoC 增强。 - **严格的 TLP 标记。** 使用官方 OASIS UUID,而非自定义 UUID。捆绑包可平滑导入任何符合标准的 STIX 2.1 消费者。 - **可选 ATT&CK 链接。** 库默认 = 无 ATT&CK 增强(零索引占用)。导入 `stix21-builder/attack-index` 以启用。 ## 本库故意不做的 - **无实体提取。** 调用者传入预提取的实体。配合 [`cti-text-extract`](https://github.com/Pranith-Jain/cti-text-extract)。 - **无 IoC 增强。** 调用者传入预增强的 IoC。 - **无持久化。** 纯转换 — 调用方决定如何存储捆绑包(KV、S3、DB 等)。 - **无流式处理。** 同步构建(除 UUIDv5 的 SHA-1 外)。专为逐项构建设计,而非多兆字节转储。 ## 测试 ``` npm test ``` 23 个 vitest 用例覆盖了捆绑结构、指标模式、TLP 标记、确定性 ID、ATT&CK 链接、CVE 增强、LLM 候选处理以及边界情况(空输入、溢出处理)。 ## 许可证 MIT — 参见 [LICENSE](LICENSE)。
标签:Cloudflare, CVE, GNU通用公共许可证, IoC, MITM代理, MITRE ATT&CK, Node.js, npm, OASIS TLP, OpenCTI, STIX 2.1, TAXII 2.1, UUIDv5, 二进制发布, 威胁情报, 开发者工具, 开源工具, 情报共享, 扁平化视图, 数字签名, 数据包生成器, 数据可视化, 确定性标识, 网络安全, 自动化攻击, 行为模式, 隐私保护