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, 威胁情报, 安全插件, 对象导向, 序列化, 库, 应急响应, 开发者工具, 开源, 数据模型, 数据解析, 数据验证, 暗色界面, 模式验证, 网络安全, 隐私保护