情报格式与标准: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 语法有点绕。我刚开始写的时候,经常把方括号和引号搞混。建议你直接用工具生成,别手写。
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 的典型流程是这样的:
- 情报生产者把 STIX 对象 POST 到 TAXII 服务器的 Collection
- 情报消费者通过 GET 请求拉取 Collection 里的数据
- 或者消费者订阅 Channel,服务器主动推送
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 描述它的行为后,直接匹配到了已知的勒索软件家族。这就是标准化的力量——让机器能读懂恶意行为。
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」功能,别直接用默认导出。
6. 格式对比:什么时候用哪个?
最后,我整理了一张对比表,方便你快速决策:
| 标准 | 核心用途 | 适用场景 |
|---|---|---|
| STIX | 威胁情报结构化描述 | 跨组织情报交换、自动化分析 |
| TAXII | 情报传输协议 | STIX 数据的推送和拉取 |
| CybOX | 可观测对象标准化 | 指标描述、日志标准化 |
| MAEC | 恶意行为详细描述 | 恶意软件分析、行为匹配 |
| MISP | 情报管理平台 | 内部情报库、社区共享 |
说白了,这些标准不是互斥的,而是互补的。我现在的做法是:用 MISP 做情报存储和共享,用 STIX 做对外交换,用 CybOX 做指标描述,用 MAEC 做恶意行为分析。一套组合拳下来,情报的完整度和可用性都上去了。
好了,这节课就到这里。下节课咱们聊聊怎么用这些标准做实际的威胁狩猎。记住,标准是工具,不是目的。别为了用标准而用标准,解决实际问题才是王道。