用途
当 SOC 团队需要将威胁情报源自动摄取到 SIEM 平台、需要把多个 TI 源规范化为 STIX 2.1 通用格式、需要让检测系统基于网络与终端遥测实时匹配 IOC,或需要建立情报源质量评估与去重流程时,可使用本技能。
不适用场景:手动 IOC 查询。临时查询应使用专用富化工具(如 VirusTotal、AbuseIPDB)。
前提条件
- 用于情报源聚合的 MISP 实例或威胁情报平台(TIP)
- STIX/TAXII 客户端库(taxii2-client、stix2 Python 包)
- 已配置 TI 框架的 SIEM 平台(Splunk ES、Elastic Security 或 Sentinel)
- 商业与开源情报源的 API key(AlienVault OTX、Abuse.ch、CISA AIS)
- Python 3.8+ 用于情报源处理自动化
工作流
步骤 1:识别并编目情报源
按类型、格式和更新频率梳理可用情报源。资料列出以下示例:
| 情报源 | 格式 | IOC 类型 | 更新频率 | 成本 |
|---|---|---|---|---|
| AlienVault OTX | STIX/JSON | IP、Domain、Hash、URL | 实时 | 免费 |
| Abuse.ch URLhaus | CSV/JSON | URL、Domain | 每 5 分钟 | 免费 |
| Abuse.ch MalwareBazaar | JSON API | 文件 Hash | 实时 | 免费 |
| CISA AIS | STIX/TAXII 2.1 | 全部类型 | 每日 | 免费(美国政府) |
| CrowdStrike Intel | STIX/JSON | 全部类型 + Actor TTP | 实时 | 商业 |
| Mandiant Advantage | STIX 2.1 | 全部类型 + 报告 | 实时 | 商业 |
步骤 2:摄取 STIX/TAXII 情报源
通过 taxii2client.v21 的 Server 与 Collection 连接 TAXII 2.1 服务器并下载 indicator。示例中使用 CISA AIS 的 TAXII 地址,配合用户名密码认证;可先遍历 server.api_roots 与 api_root.collections 列出可用集合,再用 collection.get_objects(added_after=..., type=["indicator"]) 拉取最近 24 小时新增的 indicator,并用 stix2.parse 解析出 type、pattern、valid_until、confidence 等字段。
步骤 3:摄取开源情报源
- Abuse.ch URLhaus:通过 requests 下载 csv_recent 端点,用 csv.reader 解析(逗号分隔),跳过以 # 开头的注释行,提取 id、dateadded、url、url_status、threat、tags;可筛选 url_status 为 online 的活跃威胁。
- AlienVault OTX:使用 OTXv2 与 API key,通过 otx.getall(modified_since=...) 获取订阅的 pulse,遍历 pulse 的 name、tags 与 indicators。
- Abuse.ch Feodo Tracker(C2 IP):下载 ipblocklist_recommended.json,读取 ip_address、port、malware、first_seen、last_online 等字段。
步骤 4:规范化与去重
将所有情报源转换为 STIX 2.1 格式以实现标准化。示例提供 create_stix_indicator 函数,通过 pattern_map 将 ipv4、domain、url、sha256、md5 映射为对应的 STIX pattern,返回带有 name、pattern、pattern_type、valid_from、confidence、labels 及自定义属性 x_source_feed 的 Indicator 对象。去重时对 "{type}:{value}" 计算 sha256 作为唯一哈希,跳过已见过的 IOC,最后用 Bundle 封装去重后的指标。
步骤 5:推送至 SIEM 威胁情报框架
- Splunk ES:向 /services/data/threat_intel/item/ip_intel 端点 POST 数据,携带 ip、description、weight(confidence // 10)、threat_key、source_feed 字段;示例中通过 SKIP_TLS_VERIFY 环境变量控制是否校验证书,用于实验室自签名证书场景。
- MISP:使用 pymisp 的 PyMISP、MISPEvent、MISPAttribute,创建事件(info、threat_level_id、analysis),为每个指标添加属性(type 依据 pattern 判断为 ip-dst 或 domain,value 从 pattern 中提取,to_ids 置为 True,comment 标注来源),最后调用 misp.add_event 提交。
步骤 6:监测情报源健康度与质量
提供一段 Splunk 查询,统计各 source_feed 的 total_iocs、unique_iocs、feed_count,并关联 notable 事件中的匹配数,计算 match_rate(matches / unique_iocs * 100),按 match_rate 降序排列。
关键概念
- STIX 2.1:结构化威胁信息表达,用于共享威胁情报对象的标准 JSON 格式
- TAXII:可信自动化指标信息交换,通过 REST API 共享 STIX 数据的传输协议
- TIP:威胁情报平台,用于聚合、评分和分发威胁情报的集中式系统
- IOC Scoring:基于来源可靠性和相互印证为指标分配置信值的流程
- Feed Deduplication:在保留多源归因的同时移除跨源重复 IOC
- IOC Expiration:移除老化指标的存活期策略(IP:30 天,Domain:90 天,Hash:1 年)
工具与系统
- MISP:开源威胁情报平台,用于情报源聚合、关联和共享
- AlienVault OTX:免费威胁情报共享平台,提供社区 pulse 情报源
- Abuse.ch:免费威胁情报源套件(URLhaus、MalwareBazaar、Feodo Tracker、ThreatFox)
- OpenCTI:支持 STIX 2.1 原生存储的开源网络威胁情报平台
- TAXII2 Client:用于连接 STIX/TAXII 2.1 服务器自动获取指标的 Python 库
常见场景
- 新情报源接入:评估情报源质量、将字段映射到 STIX、配置自动摄取管道
- 多 SIEM 分发:将 MISP 中规范化后的 IOC 同时推送到 Splunk、Elastic 和 Sentinel
- 降低误报:按来源数量和时效为 IOC 评分,自动使过期指标失效
- 情报源质量审计:对比各情报源的检测匹配率,识别最高价值来源
- 事件 IOC 共享:将调查 IOC 打包为 STIX bundle,通过 TAXII 与 ISAC 共享
输出格式
技能提供每日威胁情报源状态报告示例,包含日期、活跃指标总数,以及各情报源的 IOC 数、匹配数、匹配率和状态(如 HEALTHY),并列出当日操作:新增摄取 IOC 数、过期 IOC 数、移除重复数、SIEM 匹配数(生成 notable 事件数)、误报数。