情报格式与标准:STIX/TAXII、CybOX、MAEC、MISP 格式解析

各位同学,咱们今天聊聊情报格式。说实话,刚入行那会儿,我拿到一份威胁情报,第一反应就是——这玩意儿怎么读?各家厂商给的报告格式五花八门,有的像小说,有的像表格,根本没法自动化处理。后来我才明白,没有统一标准的情报,就像没有通用语言的联合国,交流全靠猜。

所以,这节课咱们就把几个核心标准掰开揉碎了讲。STIX、TAXII、CybOX、MAEC、MISP,这些名字你肯定见过。但它们的区别是什么?什么时候用哪个?我踩过的坑,今天一并告诉你。

1. STIX:情报的通用语言

STIX,全称 Structured Threat Information Expression。说白了,它就是一套描述威胁情报的标准化语言。我习惯把它理解成「威胁界的 JSON Schema」——定义了情报该长什么样,字段该有哪些。

STIX 2.1 是目前的主流版本。它把情报拆成了几个核心对象:

  • Indicator:威胁指标,比如一个恶意 IP、一个哈希值
  • Attack Pattern:攻击模式,比如钓鱼邮件、SQL 注入
  • Campaign:攻击活动,比如 APT29 的某次行动
  • Threat Actor:威胁行为体,比如 Lazarus 组织
  • Relationship:对象之间的关系,比如「这个 Indicator 属于这个 Campaign」

举个例子,你收到一条情报:「IP 192.168.1.100 是 C2 服务器,属于 APT29 的钓鱼活动。」用 STIX 表达,大概长这样:

{
  "type": "indicator",
  "spec_version": "2.1",
  "id": "indicator--12345678-1234-1234-1234-123456789abc",
  "pattern": "[ipv4-addr:value = '192.168.1.100']",
  "pattern_type": "stix",
  "valid_from": "2024-01-01T00:00:00Z"
}

嗯,这里要注意:STIX 的 pattern 语法有点绕。我刚开始写的时候,经常把方括号和引号搞混。建议你直接用工具生成,别手写。

我的经验:STIX 最适合做情报交换。如果你要和外部组织共享情报,用 STIX 准没错。但如果你只是内部用,MISP 可能更顺手。

2. TAXII:情报的运输管道

STIX 定义了情报长什么样,那怎么传输呢?这就是 TAXII 的活了。TAXII,全称 Trusted Automated Exchange of Intelligence Information。你可以把它想象成情报界的 HTTP——定义了客户端和服务器之间怎么交换 STIX 数据。

TAXII 2.0 基于 HTTPS,用 RESTful API 通信。核心概念就两个:

  • Collection:情报集合,相当于一个文件夹
  • Channel:情报通道,用于推送订阅

我遇到过最坑的事是什么?有一次部署 TAXII 服务器,忘了配 HTTPS 证书。结果情报在网络上裸奔,跟明信片似的。后来我学乖了,生产环境必须强制 TLS,不然情报泄露了都不知道。

TAXII 的典型流程是这样的:

  1. 情报生产者把 STIX 对象 POST 到 TAXII 服务器的 Collection
  2. 情报消费者通过 GET 请求拉取 Collection 里的数据
  3. 或者消费者订阅 Channel,服务器主动推送
避坑指南:我曾经遇到过一个场景,两个组织用 TAXII 交换情报,结果因为时区不一致,情报的时间戳全乱了。记住,所有时间字段统一用 UTC,别用本地时间。

3. CybOX:指标的原子单位

CybOX,全称 Cyber Observable Expression。它其实是 STIX 的前身,现在已经被整合进 STIX 2.x 了。但我觉得还是有必要单独讲讲,因为很多老系统还在用。

CybOX 的核心思想是:把网络中的「可观测对象」标准化。比如一个文件、一个进程、一个网络连接,都可以用 CybOX 描述。

举个例子,描述一个文件:

{
  "type": "file",
  "name": "malware.exe",
  "hashes": {
    "MD5": "d41d8cd98f00b204e9800998ecf8427e",
    "SHA-256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
  },
  "size": 1024
}

你想想看,如果没有 CybOX,每个厂商对「文件」的描述都不一样。有的叫 fileName,有的叫 file_name,有的叫 name。自动化处理?门都没有。

我个人习惯是:只要涉及指标描述,优先用 CybOX 的字段命名方式。这样即使以后换平台,数据迁移也方便。

4. MAEC:恶意行为的解剖刀

MAEC,全称 Malware Attribute Enumeration and Characterization。这玩意儿是专门用来描述恶意软件行为的。STIX 告诉你「谁干了什么」,MAEC 告诉你「恶意软件具体是怎么干的」。

MAEC 的核心概念包括:

  • Malware Subject:被分析的恶意软件样本
  • Behavior:恶意行为,比如创建文件、修改注册表
  • Action:具体操作,比如 WriteFile、CreateProcess
  • Capability:恶意能力,比如键盘记录、屏幕截图

举个例子,一个勒索软件的行为描述:

{
  "type": "malware-subject",
  "id": "malware-subject--abc123",
  "behaviors": [
    {
      "type": "behavior",
      "actions": [
        {
          "type": "action",
          "name": "encrypt-file",
          "target": {
            "type": "file",
            "name": "*.docx"
          }
        }
      ]
    }
  ]
}

我记得有一次做威胁狩猎,发现一个未知样本。用 MAEC 描述它的行为后,直接匹配到了已知的勒索软件家族。这就是标准化的力量——让机器能读懂恶意行为。

重点:MAEC 和 STIX 可以配合使用。STIX 描述威胁上下文,MAEC 描述恶意行为细节。两者结合,情报的完整度会大幅提升。

5. MISP:实战中的情报平台

MISP,全称 Malware Information Sharing Platform。它不是一个标准,而是一个开源平台。但因为它太流行了,我把它放在这里一起讲。

MISP 的核心优势是什么?开箱即用。你不需要自己搭 STIX/TAXII 服务器,MISP 自带了一套完整的情报管理功能。它支持 STIX 导入导出,也支持自定义事件结构。

MISP 的数据模型是这样的:

概念 说明
Event 一个威胁事件,比如一次攻击活动
Attribute 事件中的具体指标,比如 IP、域名、哈希
Object 复杂指标,比如一个完整的网络连接记录
Tag 标签,用于分类和过滤

我建议你从 MISP 入手学习情报格式。为什么呢?因为 MISP 的 Web 界面很直观,你可以直接看到情报的结构,而不需要死磕 JSON。等熟悉了 MISP 的数据模型,再去看 STIX 的 JSON 结构,会轻松很多。

嗯,这里有个坑:MISP 默认的导出格式和标准 STIX 不完全一致。如果你要和外部系统对接,记得用 MISP 的「Export as STIX 2.1」功能,别直接用默认导出。

我的建议:小团队先用 MISP 做情报管理。等规模大了,再考虑搭建 STIX/TAXII 体系。别一上来就搞分布式 TAXII,容易把自己绕晕。

6. 格式对比:什么时候用哪个?

最后,我整理了一张对比表,方便你快速决策:

标准 核心用途 适用场景
STIX 威胁情报结构化描述 跨组织情报交换、自动化分析
TAXII 情报传输协议 STIX 数据的推送和拉取
CybOX 可观测对象标准化 指标描述、日志标准化
MAEC 恶意行为详细描述 恶意软件分析、行为匹配
MISP 情报管理平台 内部情报库、社区共享

说白了,这些标准不是互斥的,而是互补的。我现在的做法是:用 MISP 做情报存储和共享,用 STIX 做对外交换,用 CybOX 做指标描述,用 MAEC 做恶意行为分析。一套组合拳下来,情报的完整度和可用性都上去了。

好了,这节课就到这里。下节课咱们聊聊怎么用这些标准做实际的威胁狩猎。记住,标准是工具,不是目的。别为了用标准而用标准,解决实际问题才是王道。