3. 威胁情报标准与数据模型
威胁情报融合工程的第一道难题不是“有没有情报”,而是“情报能不能被机器读懂、被系统交换、被平台关联”。同一份 IOC,在 A 平台是“恶意域名”,在 B 平台是“C2 基础设施”,在 C 平台又变成“攻击者资产”,如果缺少统一的数据模型和交换协议,融合就退化为人工复制粘贴。本节围绕 STIX 2.x、TAXII、MISP、OpenIOC、CybOX 五类标准,讲清它们的结构、表达能力、互操作边界,并给出可落地的选型依据。
一、先分清“数据模型”与“交换协议”
初学者最容易混淆的一点是:STIX 和 MISP 是数据模型/表达格式,TAXII 是传输协议,OpenIOC 和 CybOX 是早期指标表达规范。它们不在同一层,不能简单比较“谁更好”。
- STIX 2.x:结构化威胁信息表达,用 SDO(域对象)和 SRO(关系对象)描述威胁实体及其关系,如 Indicator、Malware、Attack Pattern、Identity、Relationship、Sighting。
- TAXII 2.1:威胁情报可信自动交换协议,定义 Collections、Channels、API Root 等资源,负责“怎么把 STIX 传过去”。
- MISP:开源威胁情报共享平台与数据模型,核心是 Event + Attribute + Object + Galaxy,强调社区共享与关联分析。
- OpenIOC:基于 XML 的入侵指标表达,用 IndicatorItem 描述“在什么位置、用什么条件、匹配什么值”。
- CybOX:网络可观测对象表达,定义 Observable、Object、Action 等,是 STIX 1.x 的重要基础,现已基本被 STIX 2.x 的 SCO 吸收。
二、STIX 2.x 的结构与表达能力
STIX 2.x 采用 JSON 序列化,每个对象都有 type、id、created、modified 等公共属性。它的核心价值在于“关系可表达”:一个 Indicator 可以通过 indicates 关系指向 Malware,Malware 又通过 uses 指向 Attack Pattern,Attack Pattern 再通过 targets 指向 Identity。这样,孤立 IOC 就被提升为带语义的威胁知识。
下面是一个简化的 STIX 2.1 Indicator 示例,用于表达某恶意域名的检测逻辑:
{
"type": "indicator",
"spec_version": "2.1",
"id": "indicator--a1b2c3d4-...",
"created": "2025-01-10T08:00:00.000Z",
"modified": "2025-01-10T08:00:00.000Z",
"name": "C2 domain indicator",
"pattern": "[domain-name:value = 'evil-c2.example.com']",
"pattern_type": "stix",
"valid_from": "2025-01-10T08:00:00Z",
"labels": ["malicious-activity"],
"confidence": 85
}
其中 pattern 使用 STIX Patterning 语言,支持比较、逻辑组合、时间窗口等。例如 [ipv4-addr:value = '203.0.113.10' AND network-traffic:dst_port = 443] 可以表达“访问该 IP 的 443 端口”。这比单纯列 IP 列表的表达能力强得多,但也要求解析器支持 Patterning 语法。
三、TAXII 2.1:让 STIX 动起来
TAXII 2.1 基于 HTTPS 和 JSON,核心资源包括:
- Discovery:
/taxii2/,返回 API Roots 列表。 - API Root:
/api1/,包含 Collections 和 Status。 - Collection:
/api1/collections/{id}/objects/,支持 GET 拉取和 POST 推送 STIX 对象。 - Channel:用于发布订阅式推送。
典型拉取流程是:先 GET Discovery,再 GET Collections,最后带 added_after 参数增量拉取对象。TAXII 只负责传输,不定义情报语义,因此它常与 STIX 搭配使用,形成“STIX 表达 + TAXII 交换”的标准组合。
四、MISP、OpenIOC、CybOX 的定位
MISP 的优势在于社区生态和事件化组织。一个 MISP Event 可以包含多个 Attribute,并支持 to_ids 标记、Galaxy 分类、Taxonomy 标签。它原生支持 STIX 2.1 导入导出,但转换时要注意:MISP 的 Attribute 粒度较细,转成 STIX 后可能生成大量 Indicator 和 Observed Data,需要做去重和关系补全。
OpenIOC 以 XML 表达指标,结构为 Indicator → IndicatorItem → Context/Document。它适合主机侧痕迹检测,但表达能力偏“匹配”,缺少关系语义和版本化机制,目前多用于遗留系统对接。
CybOX 是 STIX 1.x 时代的可观测对象模型,定义了 File、Process、Network Connection 等对象。STIX 2.x 用 SCO(Cyber Observable Object)继承了这一思想,因此新项目应直接使用 STIX 2.1 SCO,而不是再引入 CybOX。
五、互操作性与转换要点
实际工程中,标准之间需要转换。常见路径有三条:
- MISP → STIX 2.1:MISP 自带导出器,但 Attribute 转 Indicator 时,
to_ids=false的属性不应生成检测指标;Galaxy 可映射为 Attack Pattern 或 Threat Actor。 - OpenIOC → STIX:OpenIOC 的 IndicatorItem 需映射为 STIX SCO + Indicator pattern,例如
FileItem/FileName映射为file:name。 - STIX 1.x/CybOX → STIX 2.1:使用官方 stix2-elevator 工具,但需人工校验关系是否丢失。
转换时最容易出问题的是时间语义和置信度。STIX 有 valid_from、valid_until,MISP 有 timestamp,OpenIOC 没有统一有效期。融合时必须统一到 UTC,并明确“情报有效期”与“观测时间”的区别,否则会把过期 IOC 当成实时告警。
六、选型依据:按场景而不是按名气
| 场景 | 推荐标准 | 理由 |
|---|---|---|
| 新建威胁情报平台,需长期演进 | STIX 2.1 + TAXII 2.1 | 关系表达强、版本化清晰、厂商支持广 |
| 加入社区共享、快速获取事件 | MISP | 生态成熟、事件化组织、Taxonomy 丰富 |
| 对接旧主机检测系统 | OpenIOC | 遗留系统兼容,改造成本低 |
| 已有 STIX 1.x 资产 | STIX 2.1 迁移 | CybOX 已并入 SCO,避免双模型维护 |
pattern 语法在不同解析器间存在兼容差异,尤其是 FOLLOWEDBY、WITHIN 等时间操作符。上线前应使用目标平台的解析器做一次往返测试,确认 pattern 能被正确编译为检测规则,而不是只验证 JSON 能导入。