Pranith-Jain/stix21-builder
GitHub: Pranith-Jain/stix21-builder
一個純轉換的 STIX 2.1 捆綁建構器,根據輸入的情報項與實體生成確定性、可導入的標準化捆綁包及非規範化視圖。
Stars: 0 | Forks: 0
# stix21-builder
[](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, 二进制发布, 威胁情报, 开发者工具, 开源工具, 情报共享, 扁平化视图, 数字签名, 数据包生成器, 数据可视化, 确定性标识, 网络安全, 自动化攻击, 行为模式, 隐私保护