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。

威胁情报标准分层与互操作关系 表达层(数据模型) STIX 2.1 SDO / SRO / SCO JSON + Patterning MISP Event / Attribute / Object Galaxy / Taxonomy OpenIOC XML IndicatorItem 主机痕迹匹配 CybOX Observable / Object 已被 SCO 吸收 传输层(交换协议) TAXII 2.1 Discovery / API Root / Collection / Channel MISP REST API /events /attributes /objects 文件 / 邮件 / 手工 XML / CSV / JSON 消费层(融合与检测) TIP 平台 归一化 / 去重 / 评分 SIEM / SOAR 关联规则 / 自动响应 EDR / NDR 主机 / 流量检测 情报共享社区 MISP / ISAC 转换 映射 继承

五、互操作性与转换要点

实际工程中,标准之间需要转换。常见路径有三条:

  1. MISP → STIX 2.1:MISP 自带导出器,但 Attribute 转 Indicator 时,to_ids=false 的属性不应生成检测指标;Galaxy 可映射为 Attack Pattern 或 Threat Actor。
  2. OpenIOC → STIX:OpenIOC 的 IndicatorItem 需映射为 STIX SCO + Indicator pattern,例如 FileItem/FileName 映射为 file:name。
  3. 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,避免双模型维护
选型口诀:表达用 STIX,交换用 TAXII,共享用 MISP,遗留用 OpenIOC,CybOX 只做迁移参考。如果团队没有专职情报工程师,优先选 MISP 做采集与共享,再通过导出器接入 STIX 2.1 消费链路,比一开始就自建 STIX 全栈更稳。
注意:STIX 2.1 的 pattern 语法在不同解析器间存在兼容差异,尤其是 FOLLOWEDBY、WITHIN 等时间操作符。上线前应使用目标平台的解析器做一次往返测试,确认 pattern 能被正确编译为检测规则,而不是只验证 JSON 能导入。