界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

collecting-threat-intelligence-with-misp

collecting-threat-intelligence-with-misp

【效率与协作】MISP(恶意软件信息共享平台)是一个开源威胁情报平台,用于收集、共享、存储和关联定向攻击的失陷指标(IOC)、威胁情报、金融欺诈信息、漏洞信息或反恐信息。

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

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
# 编辑 .env 设置 MISP_BASEURL、MISP_ADMIN_EMAIL、MISP_ADMIN_PASSPHRASE
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']}")

# 启用 CIRCL OSINT 推送
misp.enable_feed(feed_id=1)
misp.cache_feed(feed_id=1)
misp.fetch_feed(feed_id=1)

步骤 3:添加自定义威胁推送

# 添加 abuse.ch URLhaus 推送
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)

# 搜索过去 7 天的事件
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 2.1 bundle
stix_output = misp.search(
    controller='events',
    return_format='stix2',
    tags=['tlp:white'],
    published=True
)

# 将 IDS 标记的属性导出为 Suricata 规则
suricata_rules = misp.search(
    controller='attributes',
    return_format='suricata',
    to_ids=True,
    type_attribute=['ip-dst', 'domain', 'url']
)

# 导出为 CSV 以供 SIEM 摄取
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 调度器)

参考资料

我的收藏