| name | collecting-threat-intelligence-with-misp |
| description | MISP(恶意软件信息共享平台)是一个开源威胁情报平台,用于收集、共享、存储和关联定向攻击的失陷指标(IOC)、威胁情报、金融欺诈信息、漏洞信息或反恐信息。 |
| domain | cybersecurity |
| subdomain | threat-intelligence |
| tags | ["threat-intelligence","cti","ioc","mitre-attack","stix","misp","taxii","threat-sharing"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 MISP 收集威胁情报
概述
MISP(恶意软件信息共享平台)是一个开源威胁情报平台,用于收集、共享、存储和关联定向攻击的失陷指标(IOC)、威胁情报、金融欺诈信息、漏洞信息或反恐信息。本技能涵盖部署 MISP、配置威胁推送、使用 PyMISP API 进行编程访问,以及构建自动化收集流水线,从多个社区和商业来源聚合 IOC。
前置条件
- Python 3.9+,已安装
pymisp 库
- Docker 和 Docker Compose,用于 MISP 部署
- 了解 STIX 2.1 和 TAXII 2.1 协议
- 熟悉 IOC 类型:哈希值、IP 地址、域名、URL、电子邮件地址
- 能够访问 MISP 社区推送的网络(circl.lu、botvrij.eu)
核心概念
MISP 架构
MISP 采用基于事件的模型,将威胁情报组织为包含属性(IOC)、对象(属性的结构化分组)、Galaxy(链接到 MITRE ATT&CK 的威胁行为者/恶意软件集群)和分类标签的事件。MISP 实例之间的同步使用基于 HTTPS 的推/拉模型,并以 API 密钥进行身份验证。
推送类型
- MISP 推送:来自 MISP 社区的原生 JSON/CSV 推送(CIRCL OSINT、botvrij.eu)
- 自由文本推送:解析 IOC 的非结构化文本推送(abuse.ch、Feodo Tracker)
- TAXII 推送:来自商业和政府来源的 STIX/TAXII 2.1 兼容推送
- CSV 推送:具有可配置列映射的结构化 CSV 推送
PyMISP API
PyMISP 是通过 REST API 访问 MISP 平台的官方 Python 库。它支持获取事件、添加/更新事件和属性、上传样本,以及在整个 MISP 数据集中搜索。身份验证使用在 Authorization 请求头中传递的 API 密钥。
实践步骤
步骤 1:使用 Docker 部署 MISP
git clone https://github.com/MISP/misp-docker.git
cd misp-docker
cp template.env .env
docker compose up -d
步骤 2:配置默认推送
通过 Web 界面或 API 启用内置 MISP 推送:
from pymisp import PyMISP
misp = PyMISP('https://misp.local', 'YOUR_API_KEY', ssl=False)
feeds = misp.feeds()
for feed in feeds:
print(f"{feed['Feed']['id']}: {feed['Feed']['name']} - 已启用: {feed['Feed']['enabled']}")
misp.enable_feed(feed_id=1)
misp.cache_feed(feed_id=1)
misp.fetch_feed(feed_id=1)
步骤 3:添加自定义威胁推送
feed_data = {
'name': 'URLhaus 近期 URL',
'provider': 'abuse.ch',
'url': 'https://urlhaus.abuse.ch/downloads/csv_recent/',
'source_format': 'csv',
'input_source': 'network',
'publish': False,
'enabled': True,
'headers': '',
'distribution': 0,
'sharing_group_id': 0,
'tag_id': 0,
'default': False,
'lookup_visible': True
}
result = misp.add_feed(feed_data)
print(f"推送已添加: {result}")
步骤 4:以编程方式搜索和检索事件
from pymisp import PyMISP, MISPEvent
from datetime import datetime, timedelta
misp = PyMISP('https://misp.local', 'YOUR_API_KEY', ssl=False)
result = misp.search(
controller='events',
date_from=(datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d'),
type_attribute='ip-dst',
to_ids=True,
pythonify=True
)
for event in result:
print(f"事件 {event.id}: {event.info}")
for attr in event.attributes:
if attr.type == 'ip-dst' and attr.to_ids:
print(f" IOC: {attr.value} (类别: {attr.category})")
步骤 5:导出 IOC 到下游工具
stix_output = misp.search(
controller='events',
return_format='stix2',
tags=['tlp:white'],
published=True
)
suricata_rules = misp.search(
controller='attributes',
return_format='suricata',
to_ids=True,
type_attribute=['ip-dst', 'domain', 'url']
)
csv_output = misp.search(
controller='attributes',
return_format='csv',
type_attribute='ip-dst',
to_ids=True
)
验收标准
- MISP 实例已部署并可通过 HTTPS 访问
- 至少 3 个社区推送已启用并成功获取数据
- PyMISP 脚本可以完成认证、搜索事件和检索 IOC
- 事件包含正确标记和分类的属性
- 导出为 STIX 2.1 可生成有效的 STIX bundle
- 自动推送获取按计划运行(cron 或 MISP 调度器)
参考资料