mitre-attack/attack-data-model

GitHub: mitre-attack/attack-data-model

MITRE 官方的 TypeScript 库,基于 STIX 2.1 标准为 ATT&CK 数据集提供类型安全的解析、校验和对象关系导航能力。

Stars: 69 | Forks: 20

# MITRE ATT&CK® 数据模型 **一个使用 STIX 2.1 处理 MITRE ATT&CK 数据的 TypeScript 库** ATT&CK 数据模型 (ADM) 揟供了一个类型安全、面向对象的接口,用于处理 MITRE ATT&CK 数据集。 该库基于 STIX 2.1 标准构建,使用 Zod schemas 和 TypeScript 类型来确保数据完整性,同时提供 ATT&CK 对象之间直观的关系导航。 **[点击此处](https://mitre-attack.github.io/attack-data-model) [1](#footnotes)** 以在用户友好的界面中浏览 ATT&CK schemas。 ## 主要特性 - **类型安全的数据解析**:ADM 使用 Zod schemas 验证 STIX 2.1 bundles,确保数据模型的合规性和类型安全。 - **轻松的关系导航**:每个对象实例都包含指向相关对象的指针,简化了在 techniques、tactics 和其他 ATT&CK 元素之间的导航过程。 - **支持多种数据源**:从不同来源加载 ATT&CK 数据集,包括 GitHub、本地文件、URL 和 TAXII 2.1 服务器(更多数据源正在开发中)。 - ATT&CK 数据的解析、验证和序列化 - 用于面向对象数据操作的 ES6 类 ## 支持的数据源 - **`attack`**:从官方 MITRE ATT&CK STIX 2.1 GitHub 仓库加载 ATT&CK 数据。这是 MITRE ATT&CK 内容的权威来源。 - **`file`**:从包含 STIX 2.1 bundle 的本地 JSON 文件加载 ATT&CK 数据。 - **`url`**:从提供 STIX 2.1 内容的 URL 端点加载 ATT&CK 数据。 - **`taxii`**:(即将推出)从 TAXII 2.1 服务器加载 ATT&CK 数据。 ## 安装 ### 快速开始(最新版本) 要从 npm 安装最新版本的 ADM: ``` npm install @mitre-attack/attack-data-model ``` ### 选择合适的版本 您需要的 ADM 库版本取决于您正在使用的 ATT&CK 数据集版本。该库遵循自己的版本控制方案(独立于 ATT&CK 发布版本),以支持持续开发,同时保持与特定 ATT&CK 数据版本的兼容性。 #### 版本兼容性指南 | 如果您正在使用... | 安装 ADM 版本 | 命令 | | ---------------------------- | ------------------- | ---------------------------------------------------- | | ATT&CK v18.x(即将推出) | 5.x(即将推出) | `npm install @mitre-attack/attack-data-model@^5.0.0` | | ATT&CK v15.x 到 v17.x | 4.x(最新) | `npm install @mitre-attack/attack-data-model@^4.0.0` | | 旧版 ATT&CK ( { // Instantiating a DataSourceRegistration object will validate that the data source is accessible and readable const dataSource = new DataSourceRegistration({ source: 'attack', // Built-in index to retrieve ATT&CK content from the official MITRE ATT&CK STIX 2.1 GitHub repository domain: 'enterprise-attack', version: '15.1', // Omitting 'version' will default to the latest version available in the repository parsingMode: 'relaxed', // 'strict' or 'relaxed' - 'relaxed' mode will attempt to parse and serialize data even if it contains errors or warnings }); try { // Register the data source and retrieve the unique ID const uuid = await registerDataSource(dataSource); if (uuid) { // Load the dataset using the unique ID const attackEnterpriseLatest = loadDataModel(uuid); // Access ATT&CK objects by type using object properties const techniques = attackEnterpriseLatest.techniques; const tactics = attackEnterpriseLatest.tactics; const technique = techniques[0]; // Type hinting is supported for all object properties if (technique.x_mitre_is_subtechnique) { // Access related objects with helpful getter methods console.log(technique.getParentTechnique()); } } } catch (error) { console.error(error); } })(); ``` ### 解析和验证 Tactic ``` import { tacticSchema } from '@mitre-attack/attack-data-model'; const validTactic = { id: 'x-mitre-tactic--4ca45d45-df4d-4613-8980-bac22d278fa5', type: 'x-mitre-tactic', name: 'Execution', description: 'The adversary is trying to run malicious code.', x_mitre_shortname: 'execution', // ... other required fields }; try { const parsedTactic = tacticSchema.parse(validTactic); console.log('Tactic parsed successfully:', parsedTactic.name); } catch (error) { console.error('Validation error:', error); } ``` ### 处理无效数据 ``` import { tacticSchema } from '@mitre-attack/attack-data-model'; import { z } from 'zod'; const invalidTactic = { // Missing required fields id: 'x-mitre-tactic--4ca45d45-df4d-4613-8980-bac22d278fa5', type: 'x-mitre-tactic', }; try { tacticSchema.parse(invalidTactic); } catch (error) { if (error instanceof z.ZodError) { console.log('Validation errors:', error.errors); } } ``` 有关更详细的示例,请参阅仓库中的 [examples](./examples/README.md) 文件夹。 ## 工作原理 1. **数据注册**:数据集通过 `registerDataSource` 注册。您指定数据源(例如 `attack`、`file`、`url`、`taxii`)并提供任何必要的选项(例如 ATT&CK 数据集的 `domain` 和 `version`)。此函数返回已注册数据源的唯一标识符。 2. **数据加载**:`loadDataModel` 函数用于通过其唯一标识符加载已注册的数据模型。 3. **解析和验证**:一旦数据被加载,它就会由 Zod schemas 进行解析,确保数据符合预期的 STIX 2.1 规范。 4. **序列化**:有效对象被转换为 TypeScript 类实例,从而允许类型安全的交互和关系导航。 5. **关系映射**:该库自动处理数据集中的所有“relationship”对象,在 techniques、tactics、groups 和其他 ATT&CK 对象之间创建链接。 ## 解析模式 - **严格模式**:数据必须通过所有验证检查才能被摄取。如果任何对象被拒绝,注册将中止。 - **宽松模式**:无效对象会被记录,但库将忽略解析错误并尝试加载数据集。请谨慎使用,因为这可能会导致意外的下游使用错误。 ## 兼容性矩阵 我们的 [兼容性文档](https://mitre-attack.github.io/attack-data-model/principles/versioning-philosophy) 跟踪 ATT&CK Data Model (ADM) TypeScript API (`@mitre-attack/attack-data-model`) 版本与 MITRE ATT&CK 数据集 (`mitre-attack/attack-stix-data`) 版本之间的兼容性。 ## 贡献 我们欢迎贡献!请参阅我们的贡献者指南以获取更多信息: ## 脚注 1 [schemas 站点](https://mitre-attack.github.io/attack-data-model) 是根据 `@latest` 发布渠道 / `main` 分支的内容动态生成的。我们目前不维护以前版本的单独文档,尽管我们希望在未来能做到。 ## 许可证 本项目根据 Apache 2.0 许可证授权。 ## 声明 版权所有 2020-2025 The MITRE Corporation。 本项目使用了 ATT&CK [ATT&CK 使用条款](https://attack.mitre.org/resources/terms-of-use/)
标签:Cloudflare, ES6, MITRE ATT&CK, STIX 2.1, TAXII, TypeScript, Zod, 威胁情报, 安全插件, 对象导向, 序列化, 库, 应急响应, 开发者工具, 开源, 数据模型, 数据解析, 数据验证, 暗色界面, 模式验证, 网络安全, 隐私保护