)
Anthropic-Cybersecurity-Skills 实战构建自动化威胁情报 Feed 集成管线STIX/TAXII → SIEM【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills导读本篇指南以 building-threat-intelligence-feed-integration 技能为核心系统讲解如何在 SOC 场景下构建一条多源情报采集 → STIX 2.1 标准化 → 去重评分 → 推送 SIEM/MISP → 健康度监控的自动化威胁情报TIFeed 集成管线。读完本文你将掌握 TAXII 2.1 服务器接入、Abuse.ch / AlienVault OTX / CISA AIS 等开源与商业 Feed 的摄取方法、STIX 2.1 归一化与去重实现以及将 IOC 推送到 Splunk ES 威胁情报框架和 MISP 的完整工程实践。技能定位何时启用、何时禁用该技能位于本仓库soc-operationsSOC 运营子域下YAML frontmatter 中标注了完整的框架映射NIST CSF 2.0 的DE.CM-01持续监控、DE.AE-02不良事件分析、RS.MA-01事件管理、DE.AE-06事件关联分析以及 MITRE ATTCK 的T1071应用层协议、T1105入侵工具传输、T1588.001获取能力恶意软件/工具。适用场景SOC 团队需要将威胁情报 Feed 自动接入 SIEM 平台实现 IOC 与网络/端点遥测的实时匹配告警多个 TI 源需要归一化为统一格式STIX 2.1后再分发需要建立 Feed 质量评估与跨源去重流程。明确不适用该技能不用于单条 IOC 的人工查证——临时查询请使用 VirusTotal、AbuseIPDB 等专用富化工具本技能聚焦的是批量的、自动化的、可运营的情报流水线。前置条件用于聚合的 MISP 实例或威胁情报平台TIPSTIX/TAXII 客户端库Python 包taxii2-client≥2.3与stix2≥3.0以及 HTTP 库requests≥2.28已配置 TI 框架的 SIEM 平台Splunk ES、Elastic Security 或 Microsoft Sentinel商业及开源 Feed 的 API KeyAlienVault OTX、Abuse.ch、CISA AISPython 3.8 用于 Feed 处理自动化。仓库配套脚本 scripts/agent.py 是这条管线的最小可运行实现其顶部导入即对应上述依赖import requests from taxii2client.v21 import Collection from stix2 import Indicator, Bundle, parse依赖版本约束可参考 references/api-reference.mdrequests2.28、taxii2-client2.3、stix23.0。六步工作流Step 1识别并编目情报源按类型、格式与更新频率建立 Feed 台账这是整条管线的选型依据Feed 源格式IOC 类型更新频率成本AlienVault OTXSTIX/JSONIP、域名、Hash、URL实时免费Abuse.ch URLhausCSV/JSONURL、域名每 5 分钟免费Abuse.ch MalwareBazaarJSON API文件 Hash实时免费CISA AISSTIX/TAXII 2.1全部类型每日免费美国政府CrowdStrike IntelSTIX/JSON全部类型 攻击者 TTP实时商业Mandiant AdvantageSTIX 2.1全部类型 报告实时商业编目时需为每个源记录格式决定解析器、IOC 类型决定 STIX pattern 映射、更新频率决定调度窗口与成本/许可决定是否可进入生产。在仓库配套脚本中每个源对应一个独立的摄取函数ingest_taxii_feed()、ingest_urlhaus_feed()、ingest_feodotracker()互不耦合便于后续按需增删源。Step 2摄取 STIX/TAXII FeedTAXII 2.1 是 STIX 数据的标准传输协议REST API。接入 CISA AIS 风格服务器的完整流程如下from taxii2client.v21 import Server, Collection from stix2 import parse # 连接 TAXII 服务器示例CISA AIS server Server( https://taxii.cisa.gov/taxii2/, useryour_username, passwordyour_password ) # 列出可用集合 for api_root in server.api_roots: print(fAPI Root: {api_root.title}) for collection in api_root.collections: print(f Collection: {collection.title} (ID: {collection.id})) # 从集合拉取指标 collection Collection( https://taxii.cisa.gov/taxii2/collections/COLLECTION_ID/, useryour_username, passwordyour_password ) # 获取过去 24 小时新增的指标 from datetime import datetime, timedelta added_after (datetime.utcnow() - timedelta(days1)).strftime(%Y-%m-%dT%H:%M:%S.000Z) response collection.get_objects(added_afteradded_after, type[indicator]) for obj in response.get(objects, []): indicator parse(obj) print(fType: {indicator.type}) print(fPattern: {indicator.pattern}) print(fValid Until: {indicator.valid_until}) print(fConfidence: {indicator.confidence}) print(---)仓库实现ingest_taxii_feed()scripts/agent.py将上述逻辑封装为可复用函数关键点是collection.get_objects(added_after..., type[indicator])仅拉取指定时间窗内新增的indicator类型对象避免重复消费历史数据hours_back参数默认为 24 小时。该函数会把原始 STIX 对象精简为id、pattern、valid_from、source四个字段进入统一内部表示。Step 3摄取开源 FeedAbuse.ch URLhaus 源CSV 格式注意跳过#注释行import requests import csv from io import StringIO # 下载 URLhaus 近期 URL response requests.get(https://urlhaus.abuse.ch/downloads/csv_recent/) reader csv.reader(StringIO(response.text), delimiter,) indicators [] for row in reader: if row[0].startswith(#): continue indicators.append({ id: row[0], dateadded: row[1], url: row[2], url_status: row[3], threat: row[5], tags: row[6] }) print(fIngested {len(indicators)} URLs from URLhaus) # 只保留在线活跃威胁 active [i for i in indicators if i[url_status] online] print(fActive threats: {len(active)})仓库实现ingest_urlhaus_feed()scripts/agent.py改用 URLhaus 官方 JSON APIhttps://urlhaus-api.abuse.ch/v1/urls/recent/limit/100/POST并显式设置timeout30避免网络阻塞拖死整个调度任务。两种方式可根据网络环境选择CSV 全量快照适合一次性回填JSON API 适合增量轮询。AlienVault OTX Pulse 源from OTXv2 import OTXv2, IndicatorTypes otx OTXv2(YOUR_OTX_API_KEY) # 获取最近订阅的 pulses过去 24 小时 pulses otx.getall(modified_since2024-03-14T00:00:00) for pulse in pulses: print(fPulse: {pulse[name]}) print(fTags: {pulse[tags]}) for indicator in pulse[indicators]: print(f IOC: {indicator[indicator]} ({indicator[type]}))Abuse.ch Feodo TrackerC2 IP 列表response requests.get(https://feodotracker.abuse.ch/downloads/ipblocklist_recommended.json) c2_data response.json() for entry in c2_data: print(fIP: {entry[ip_address]}:{entry[port]}) print(fMalware: {entry[malware]}) print(fFirst Seen: {entry[first_seen]}) print(fLast Online: {entry[last_online]})仓库实现ingest_feodotracker()scripts/agent.py对每条 C2 记录提取ip_address、port、malware、first_seen统一标注type: ipv4与source: feodotracker为下一步归一化做好准备。Step 4归一化与去重STIX 2.1不同源的字段命名各异必须统一转换为 STIX 2.1 的Indicator对象。核心是pattern 映射表每种 IOC 类型对应一种标准 STIX 模式语言表达式from stix2 import Indicator, Bundle import hashlib def create_stix_indicator(ioc_value, ioc_type, source, confidence50): 将原始 IOC 转换为 STIX 2.1 indicator pattern_map { ipv4: f[ipv4-addr:value {ioc_value}], domain: f[domain-name:value {ioc_value}], url: f[url:value {ioc_value}], sha256: f[file:hashes.SHA-256 {ioc_value}], md5: f[file:hashes.MD5 {ioc_value}], } return Indicator( namef{ioc_type}: {ioc_value}, patternpattern_map[ioc_type], pattern_typestix, valid_from2024-03-15T00:00:00Z, confidenceconfidence, labels[source], custom_properties{x_source_feed: source} ) # 跨源去重 seen_iocs set() unique_indicators [] for ioc in all_collected_iocs: ioc_hash hashlib.sha256(f{ioc[type]}:{ioc[value]}.encode()).hexdigest() if ioc_hash not in seen_iocs: seen_iocs.add(ioc_hash) unique_indicators.append( create_stix_indicator(ioc[value], ioc[type], ioc[source]) ) bundle Bundle(objectsunique_indicators) print(fUnique indicators: {len(unique_indicators)})仓库实现将这一过程拆为两个独立函数职责单一normalize_to_stix()scripts/agent.py用 lambda 表达式构造pattern_map未知类型回退到url模式保证任何源的数据都不会因类型缺失而中断deduplicate()scripts/agent.py以sha256(type:value)为键做去重日志会明确输出Deduplicated: N - M unique indicators便于观测 Feed 重叠率。去重的语义要点去重仅丢弃重复值但labels与x_source_feed自定义属性保留了多源归因信息这是后续 Feed 质量评分的基础——一个被多个独立源共同标记的 IOC其可信度显著高于单一来源。Step 5推送至 SIEM 威胁情报框架与 MISP推送至 Splunk ES Threat Intelligenceimport requests splunk_url https://splunk.company.com:8089 headers {Authorization: fBearer {splunk_token}} for indicator in unique_indicators: # 从 STIX pattern 中提取 IOC 值 ioc_value indicator.pattern.split()[1] # 上传至 Splunk ES 威胁情报集合 data { ip: ioc_value, description: indicator.name, weight: indicator.confidence // 10, threat_key: indicator.id, source_feed: indicator.get(x_source_feed, unknown) } requests.post( f{splunk_url}/services/data/threat_intel/item/ip_intel, headersheaders, datadata, verifynot os.environ.get(SKIP_TLS_VERIFY, ).lower() true, # 实验室环境自签名证书可设 SKIP_TLS_VERIFYtrue )仓库实现push_to_splunk_ti()scripts/agent.py有两个值得注意的工程细节认证头使用fSplunk {session_key}会话 key 模式与上方示例的 Bearer Token 模式对应不同认证体系请以你部署环境实际支持的鉴权方式为准以 HTTP 201 作为成功判定标准计数pushed未逐条抛错而是汇总日志——生产环境中应改为批量接口或异步队列以提升吞吐。推送至 MISP 集中管理from pymisp import PyMISP, MISPEvent, MISPAttribute misp PyMISP(https://misp.company.com, YOUR_MISP_API_KEY) # 为本次批量导入创建事件 event MISPEvent() event.info fTI Feed Import - {datetime.now().strftime(%Y-%m-%d)} event.threat_level_id 2 # 中危 event.analysis 2 # 已完成分析 # 将指标作为属性添加 for ioc in unique_indicators: attr MISPAttribute() attr.type ip-dst if ipv4 in ioc.pattern else domain attr.value ioc.pattern.split()[1] attr.to_ids True attr.comment fSource: {ioc.get(x_source_feed, mixed)} event.add_attribute(**attr) result misp.add_event(event) print(fMISP Event created: {result[Event][id]})attr.type的判断体现了从 STIX pattern 反推 MISP 属性类型的常见适配技巧pattern 含ipv4-addr则映射为ip-dst否则归为domain。to_ids True标记该属性进入 IDS 告警匹配comment保留来源便于溯源。Step 6监控 Feed 健康度与质量持续运营的核心是匹配率评估——某个 Feed 的 IOC 在 SIEM 中实际命中告警的比例直接决定其取舍。以下 Splunk SPL 查询统计各 Feed 的匹配率indexthreat_intel sourcetypethreat_intel_manager | stats count AS total_iocs, dc(threat_key) AS unique_iocs, dc(source_feed) AS feed_count by source_feed | join source_feed [ search indexnotable sourceThreat Intelligence | stats count AS matches by source_feed ] | eval match_rate round(matches / unique_iocs * 100, 2) | sort - match_rate | table source_feed, unique_iocs, matches, match_rate该查询先用threat_intel索引统计每个 Feed 的唯一 IOC 数再与notable事件即告警按source_feed关联计算命中率并按降序排列——高匹配率 Feed 保持、低匹配率 Feed 需要排查质量或过期问题。核心概念速查术语定义STIX 2.1结构化威胁信息表达Structured Threat Information Expression——共享威胁情报对象的标准 JSON 格式TAXII可信自动化指标信息交换Trusted Automated eXchange of Indicator Information——通过 REST API 共享 STIX 数据的传输协议TIP威胁情报平台——集中聚合、评分与分发威胁情报的系统IOC 评分基于来源可靠性与多方佐证为指标赋予置信度的过程Feed 去重跨源移除重复 IOC同时保留多源归因信息IOC 过期基于 TTL 策略清理过期指标IP30 天域名90 天Hash1 年配套脚本与工具仓库为该技能提供了完整可运行的参考实现 scripts/agent.py 与函数级 API 文档 references/api-reference.md。CLI 用法# 从多个源摄取 python agent.py --urlhaus --feodo --output ti_bundle.json # 从 TAXII Feed 摄取 python agent.py --taxii-url https://taxii.example.com/taxii2/ \ --taxii-collection https://taxii.example.com/taxii2/collections/abc/ \ --taxii-user user --taxii-pass pass脚本的main()scripts/agent.py清晰展示了整条管线的编排顺序分源摄取 → 汇总 →deduplicate()→normalize_to_stix()→export_stix_bundle()导出为 JSON 格式的 STIX Bundle 文件。外部 API 依赖关系汇总如下源自 references/api-reference.mdAPI端点认证用途TAXII 2.1可配置Basic authSTIX 指标摄取URLhaushttps://urlhaus-api.abuse.ch/v1/无恶意 URL FeedFeodo Trackerhttps://feodotracker.abuse.ch/downloads/无C2 IP 黑名单Splunk REST/services/data/threat_intel/item/ip_intelSession keyTI 推送生态中的常用系统还包括MISP开源威胁情报平台聚合/关联/共享、AlienVault OTX免费社区 Pulse Feed、Abuse.chURLhaus、MalwareBazaar、Feodo Tracker、ThreatFox 免费 Feed 套件、OpenCTI原生支持 STIX 2.1 存储的开源威胁情报平台、TAXII2 Client连接 STIX/TAXII 2.1 服务器自动取数的 Python 库。常见场景与运营建议新 Feed 接入先评估质量、将字段映射到 STIX、再配置自动摄取管线对应 Step 1–2多 SIEM 分发以 MISP 为中转将归一化后的 IOC 同时推送至 Splunk、Elastic、Sentinel对应 Step 5误报削减按来源数量与时效对 IOC 打分自动过期陈旧指标Feed 质量审计对比各 Feed 的检测命中率识别最高价值情报源对应 Step 6 的 SPL 查询事件 IOC 共享将调查所得的 IOC 打包为 STIX Bundle通过 TAXII 与 ISAC信息共享与分析中心共享。输出与验收每日情报 Feed 状态报告管道落地后建议以如下格式产出每日运营报告作为 Feed 健康度的验收依据示例数据THREAT INTEL FEED STATUS — Daily Report ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Date: 2024-03-15 Total IOCs: 45,892 active indicators Feed Health: Feed IOCs Matches Match Rate Status Abuse.ch URLhaus 12,340 47 0.38% HEALTHY AlienVault OTX 18,567 23 0.12% HEALTHY Abuse.ch Feodo 1,203 12 1.00% HEALTHY CISA AIS 8,945 8 0.09% HEALTHY CrowdStrike Intel 4,837 31 0.64% HEALTHY Actions Today: New IOCs ingested: 1,247 IOCs expired: 892 Duplicates removed: 156 SIEM matches: 121 notable events generated False positives: 3 (CDN IPs removed from feed)报告中的Match Rate直接对应 Step 6 的 SPL 计算结果Actions Today则反映管线各环节的增量吞吐。当某个 Feed 长期匹配率为 0 或误报集中在特定类型如 CDN 共享 IP时应触发降权或剔除流程。至此一条可运营、可度量、可审计的威胁情报 Feed 集成管线即告建成——这也是本技能在 NIST CSF 2.0 检测与响应 与 MITRE ATTCK 框架映射下所对应的实战落地形态。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考