Anthropic-Cybersecurity-Skills:AI Agent 视角下的 IOC 分析实战——多源富集、置信度评分与 BLOCK/MONITOR/INVESTIGATE 处置框架
2026/9/10 14:40:51 网站建设 项目流程

Anthropic-Cybersecurity-Skills:AI Agent 视角下的 IOC 分析实战——多源富集、置信度评分与 BLOCK/MONITOR/INVESTIGATE 处置框架

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, 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

威胁情报工作中最基础、也最容易被自动化滥用的环节,是对失陷指标(Indicator of Compromise, IOC)的分析与富集:一条钓鱼邮件、一条 SIEM 告警或一个外部威胁情报源抛给你 URL、IP、文件哈希、邮箱地址之后,如何快速判定其恶意性置信度、归因到已知攻击活动,并给出「封禁 / 监控 / 加白」的处置决策?本文以 analyzing-indicators-of-compromise 技能 为主体,完整还原其五步工作流(规范化分类 → 多源富集 → 活动归因 → 置信度评分 → 记录分发),并结合该技能自带的 API 参考文档 与 可直接运行的富集脚本,讲清 VirusTotal、AbuseIPDB、MalwareBazaar、MISP 等数据源的具体调用方式与打分规则,帮助你把 IOC 分诊流程沉淀为可复制、可被 AI Agent 直接执行的标准化能力。

技能定位:在 Anthropic-Cybersecurity-Skills 库中的角色

Anthropic-Cybersecurity-Skills 是一个包含 817 个结构化网络安全技能、覆盖 29 个安全领域、遵循 agentskills.io 开放标准的开源技能库,每个技能都映射到 MITRE ATT&CK、NIST CSF 2.0、MITRE ATLAS、D3FEND、NIST AI RMF 与 MITRE F3 六个框架。IOC 分析技能(analyzing-indicators-of-compromise)属于cybersecurity域下的threat-intelligence子域,目录结构如下:

  • SKILL.md:技能主体,包含触发条件、前置条件、五步工作流、核心概念表、工具清单与常见陷阱;
  • references/api-reference.md:各富集数据源(VirusTotal v3、AbuseIPDB v2、MalwareBazaar、URLScan.io、Shodan)的 curl 调用示例、响应字段表与置信度评分框架;
  • scripts/agent.py:可运行的 Python 富集 Agent,实现了 IOC 分类、defang/refang、私网 IP 过滤、三源查询与自动打分。

从 SKILL.md 的 frontmatter 可以看到该技能的框架映射关系:NIST CSF 侧映射ID.RA-01(识别资产)、ID.RA-05(识别外部风险)、DE.CM-01(控制点管理)、DE.AE-02(安全事件监测);MITRE ATT&CK 侧映射T1071(应用层协议)、T1105(入站工具传输)、T1041(非 C2 协议)、T1567(云数据外传)——这些正是 IOC 最常出现在 C2 与外传通道中的技术点;同时它还与 MITRE F3 框架的钓鱼信息收集(T1598)、钓鱼初始访问(T1660)、获取域名基础设施(T1583.001)与伪造网站(F1020.002)建立了关联,说明该技能也被设计用于金融欺诈场景下钓鱼基础设施的 IOC 研判。

技能描述中明确了激活边界:当请求涉及 VirusTotal、AbuseIPDB、MalwareBazaar、MISP 或 IOC 富集流水线时应触发本技能;同时文档特别强调——不要孤立地用本技能做高风险封禁决策,必须将自动富集结果与分析师判断结合使用,尤其是涉及 CDN、云服务商等共享基础设施时。

适用场景与前置条件

SKILL.md 给出了三个典型触发场景:

  1. 钓鱼邮件或告警快速分诊:一封钓鱼邮件或一条安全告警产生了一批 IOC(URL、IP、文件哈希),需要在数分钟内完成初步定性;
  2. 批量 IOC 摄入前评分:自动化威胁情报源推送大批量 IOC,需要在进入封禁控制(防火墙、DNS、代理黑名单)之前完成置信度打分;
  3. 事件调查中的上下文富集:调查中观察到一批网络工件(域名、IP),需要补充归属、历史行为等上下文信息以支撑归因。

前置条件(Prerequisites)清单:

  • VirusTotal API Key(免费或 Enterprise 版),用于多引擎杀毒与沙箱结果查询;
  • AbuseIPDB API Key,用于 IP 信誉检查;
  • 一个 MISP 实例或 TIP(威胁情报平台),用于与已知攻击活动交叉比对;
  • requestsvt-py库的 Python 环境,或已内置上述连接器的 SOAR 平台。

配套的 agent.py 对依赖做了降级处理:脚本顶部用try/except ImportError探测requests库,缺失时仅返回错误标记而不崩溃,分类与 defang 等纯本地功能仍然可用——这体现了技能「无密钥也能离线跑通流程骨架」的设计思路。

五步工作流详解

Step 1:规范化与 IOC 类型分类

在发起任何外部查询之前,先对每条 IOC 做规范化并判定类型。SKILL.md 给出的分类规则如下:

IOC 类型处理规则
IPv4/IPv6 地址检查是否为 RFC 1918 私网地址(是则跳过外部富集),校验格式合法性
域名/FQDN做 defang 处理以便安全书写(evil[.]com),用tldextract提取注册域名
URL分离出域名与路径两部分分别处理;检查是否存在重定向器
文件哈希识别哈希类型(MD5/SHA-1/SHA-256),优先使用 SHA-256 保证唯一性
邮箱地址拆分为域名(可查 MX/DMARC)与本地部分(做模式分析)两部分

文档同时要求:在文档与工单中一律 defang IOC.替换为[.]://替换为[://]),防止被误点击或被自动化扫描器触发。

agent.py 中的classify_ioc()正是这组规则的代码化实现,用一串正则表达式完成类型判定,匹配顺序值得注意——先判 IPv4、再判 64/40/32 位十六进制串(SHA-256/SHA-1/MD5)、然后才是https?://前缀的 URL、邮箱、最后兜底为域名模式,避免一个 32 位十六进制字符串被误判为域名:

def classify_ioc(value): """Classify an IOC by type: ipv4, domain, url, sha256, sha1, md5, email.""" value = value.strip() if re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$", value): return "ipv4" if re.match(r"^[a-fA-F0-9]{64}$", value): return "sha256" if re.match(r"^[a-fA-F0-9]{40}$", value): return "sha1" if re.match(r"^[a-fA-F0-9]{32}$", value): return "md5" if re.match(r"^https?://", value): return "url" if re.match(r"^[^@]+@[^@]+\.[^@]+$", value): return "email" if re.match(r"^[a-zA-Z0-9][a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$", value): return "domain" return "unknown"

脚本中的is_private_ip()(agent.py#L53-L64)把「RFC 1918 跳过外部富集」这条规则落到了具体网段:10.0.0.0/8172.16.0.0/12(即首段 172 且次段 16–31)、192.168.0.0/16,并额外覆盖了127.0.0.0/8回环地址。在enrich_ioc()中(agent.py#L192-L194),命中私网 IP 会直接标注RFC 1918 private IP - skipping external enrichment并返回,避免把内网地址发给外部 API 浪费配额、也避免泄露内部网络信息。

defang 的实现同样值得参考:defang_ioc()http://替换为hxxp://https://替换为hxxps://,再用re.sub(r"\.(?=\w)", "[.]", value)把点后跟单词字符的点号统一改写为[.];与之配对的refang_ioc()则反向还原(含[://]的还原),用于把文档中的失活 IOC 恢复为可查询形态——「文档中 defang、查 API 前 refang」这一对逆操作是 IOC 处理流水线里必须闭环的一步。

Step 2:多源富集(VirusTotal / AbuseIPDB / MalwareBazaar)

这是整个技能的核心环节。SKILL.md 为三类数据源各给出了一段 Python 示例,下面完整保留,并补充 API 参考文档中对应的 curl 调用与响应字段说明。

VirusTotal(文件哈希、URL、IP、域名)——利用多引擎统计判断恶意倾向:

import vt client = vt.Client("YOUR_VT_API_KEY") # File hash lookup file_obj = client.get_object(f"/files/{sha256_hash}") detections = file_obj.last_analysis_stats print(f"Malicious: {detections['malicious']}/{sum(detections.values())}") # Domain analysis domain_obj = client.get_object(f"/domains/{domain}") print(domain_obj.last_analysis_stats) print(domain_obj.reputation) client.close()

对应的 API v3 端点(摘自 api-reference.md):

# 文件哈希查询 curl -H "x-apikey: $VT_KEY" \ "https://www.virustotal.com/api/v3/files/<sha256>" # 域名查询 curl -H "x-apikey: $VT_KEY" \ "https://www.virustotal.com/api/v3/domains/<domain>" # IP 查询 curl -H "x-apikey: $VT_KEY" \ "https://www.virustotal.com/api/v3/ip_addresses/<ip>"

VirusTotal 响应中应重点关注的字段:

字段说明
last_analysis_stats.malicious判定为恶意的 AV 引擎数量
last_analysis_stats.undetected判定为干净的引擎数量
reputation社区信誉分
popular_threat_classification威胁标签共识(社区投票得出的威胁名称)

AbuseIPDB(IP 地址)——获取社区举报维度的滥用置信度:

import requests response = requests.get( "https://api.abuseipdb.com/api/v2/check", headers={"Key": "YOUR_KEY", "Accept": "application/json"}, params={"ipAddress": "1.2.3.4", "maxAgeInDays": 90} ) data = response.json()["data"] print(f"Confidence: {data['abuseConfidenceScore']}%, Reports: {data['totalReports']}")

curl 形式:

curl -G "https://api.abuseipdb.com/api/v2/check" \ -H "Key: $ABUSE_KEY" -H "Accept: application/json" \ -d "ipAddress=1.2.3.4" -d "maxAgeInDays=90"

响应字段:abuseConfidenceScore(0–100 滥用置信度)、totalReports(时间窗内举报数)、countryCode(来源国)、isp(运营商)、isTor(是否 Tor 出口节点)。maxAgeInDays=90与 AbuseIPDB 的 90 天举报历史窗口对应,是文档推荐的默认时间窗。

MalwareBazaar(abuse.ch,文件哈希)——免费恶意软件样本库,命中即意味着该哈希已被社区分析师提交过:

response = requests.post( "https://mb-api.abuse.ch/api/v1/", data={"query": "get_info", "hash": sha256_hash} ) result = response.json() if result["query_status"] == "ok": print(result["data"][0]["tags"], result["data"][0]["signature"])

响应字段:signature(恶意软件家族名)、tags(关联标签)、file_type(文件类型)、first_seen(首次提交日期)、reporter(提交分析师)。

agent.py 把上述三个数据源封装成了四个查询函数,并统一了超时(timeout=30)与返回结构,可以直接作为集成参考:

  • query_virustotal_hash()(L67-L83):从data.attributes提取last_analysis_stats,返回malicioustotaltype_descriptionpopular_threat_classification.suggested_threat_labeltags
  • query_virustotal_domain()(L86-L101):额外提取registrarcreation_date——注册时间短的域名本身就是风险信号,这也是文档「用 Shodan/VT 上下文判断归属」思路的一部分;
  • query_abuseipdb()(L104-L120):默认max_age_days=90,返回滥用置信度、举报数、国家、ISP、域名与 Tor 标记;
  • query_malwarebazaar()(L123-L139):仅在query_status == "ok"且存在data时取第一条记录。

enrich_ioc()(L179-L214)体现了按类型分发的查询路由:哈希类 IOC 查 VirusTotal + MalwareBazaar;IPv4 查 AbuseIPDB(有密钥时)+ VirusTotal;域名查 VirusTotal。每个结果对象都附带ioctypedefangedtimestamp(UTC ISO 格式),天然满足 Step 5 的记录要求。

除上述三源之外,API 参考文档还补充了两个数据源的调用方式,用于不同场景:

URLScan.io(钓鱼 URL 分诊)——抓取 URL 的截图、DOM 与网络请求:

# 提交扫描 curl -X POST "https://urlscan.io/api/v1/scan/" \ -H "API-Key: $KEY" -H "Content-Type: application/json" \ -d '{"url": "http://suspicious.com", "visibility": "private"}' # 拉取结果 curl "https://urlscan.io/api/v1/result/<uuid>/"

Shodan(IP 上下文富集)——判断 IP 背后的托管商、开放端口与 Banner:

curl "https://api.shodan.io/shodan/host/<ip>?key=$SHODAN_KEY"

Shodan 响应字段:ports(开放端口)、os(操作系统)、org(组织)、asn(自治系统号)、hostnames(关联主机名)。

Step 3:活动归因(Campaign Attribution)

单点富集只回答「这个东西坏不坏」,归因要回答「它属于哪个活动、和谁有关」。SKILL.md 给出两步:

1. 查询 MISP 中匹配该 IOC 的既有事件

from pymisp import PyMISP misp = PyMISP("https://misp.example.com", "API_KEY") results = misp.search(value="evil-domain.com", type_attribute="domain") for event in results: print(event["Event"]["info"], event["Event"]["threat_level_id"])

type_attribute="domain"指定了只按domain类型的属性做匹配,避免把evil-domain.com与同名 IP/URL 属性混淆;命中后输出的threat_level_id直接可用于后续置信度合成。

2. 用 Shodan 查 IP 上下文(托管商、开放端口、Banner),核心目的是判别该 IP 属于 bulletproof hosting(接盘黑产)还是正规云厂商——后者存在误报风险,这正是 SKILL.md 开头「Do not use」警告的具体展开:共享基础设施(CDN、云服务商)上的恶意内容如果按 IP 封禁,会连带影响成千上万的正常站点。

Step 4:置信度评分与处置决策

SKILL.md 给出的分层决策框架(tiered decision framework):

处置置信区间判定标准
Block(封禁)高置信 ≥ 70%VT 检测数 ≥15;或 AbuseIPDB 分数 ≥70;或匹配已知恶意软件家族/活动
Monitor/Alert(监控/告警)中置信 40–69%VT 检测数 5–14;AbuseIPDB 分数中等;无活动归因
Whitelist/Investigate(加白/继续调查)低置信 <40%VT 检测数 ≤4;无滥用举报;确认为合法服务(如 Google、Cloudflare CDN 段 IP)
False Positive(误报)正常业务服务被错误标记;记录在案并从后续告警中排除

api-reference.md 中的评分框架表与其一致:

ScoreDispositionCriteria
>= 70BLOCK15+ VT detections, AbuseIPDB >= 70%, or MalwareBazaar match
40-69MONITOR5-14 VT detections, moderate abuse score
< 40INVESTIGATELow detection, no campaign attribution

agent.py 的score_ioc()则把这个框架实现成了可解释的加权累加模型,每一条加分都带原因字符串,方便事后审计:

信号加分附加原因记录
VT 恶意检测数 ≥15+40VT: N detections (high)
VT 恶意检测数 5–14+20VT: N detections (moderate)
VT 恶意检测数 1–4+5VT: N detections (low)
AbuseIPDB 分数 ≥70+30AbuseIPDB: N% confidence
AbuseIPDB 分数 30–69+15AbuseIPDB: N% confidence
MalwareBazaar 命中+30MalwareBazaar: <signature>

最终分数 ≥70 判BLOCK,40–69 判MONITOR,<40 判INVESTIGATE。从源码结构看,三源满分组合(40+30+30=100)恰好覆盖文档定义的三个档位边界;而 MalwareBazaar 单独命中即 +30,若再叠加任一 VT 中高分信号即可越过 BLOCK 线,这与参考文档「MalwareBazaar match」直接列为 BLOCK 条件的表述相互印证。

脚本的__main__部分(L217-L251)内置了 5 条演示 IOC(含一条192.168.1.100私网地址用于演示跳过逻辑),未设置VT_API_KEY/ABUSEIPDB_API_KEY环境变量时只执行分类与 defang 演示并提示设置密钥——这意味着可以直接python3 scripts/agent.py离线体验流程骨架,设置密钥后再跑真实富集。

Step 5:记录与分发

研判结论必须落到系统里才算闭环。SKILL.md 要求在 TIP/MISP 中记录四组信息:

  • 采集到的全部富集数据(时间戳、来源、分数);
  • 处置决策及其理由;
  • 已执行的封禁动作(防火墙、代理、DNS sinkhole);
  • 关联的事件工单号。

并要求将结果导出为 STIX indicator 对象,confidence字段按评分填入。agent.py输出结构中已经预置了timestamp(UTC)、reasons(决策理由列表)与defanged三字段,正是为这一步准备的:直接把这些字段灌入 STIX/TIP 记录即可,无需二次加工。

核心概念速查

继承 SKILL.md 的 Key Concepts 表,这是 IOC 分诊岗位的通用词汇表:

术语定义
IOC失陷指标——表明潜在失陷的可观测网络或主机工件
Enrichment(富集)从多个情报源为原始 IOC 附加上下文数据的过程
Defanging(失活)改写 IOC(.替换为[.]等)以防止文档中被意外激活
False Positive Rate(误报率)良性工件被错误标记为恶意的比例;调优封禁阈值的关键指标
Sinkhole把恶意域名解析重定向到良性 IP 的 DNS 服务,用于「检测但不完全阻断」
TTLIOC 在封禁控制中的存活期:IP 类指标建议 30 天后过期,域名类 90 天后过期

defang 的完整对照规则(来自 api-reference.md):

原始写法失活写法
http://hxxp://
https://hxxps://
.com[.]com
evil.comevil[.]com

工具与数据源速查

工具定位
VirusTotal多引擎恶意软件扫描与情报平台,70+ AV 引擎、沙箱报告、社区评论
AbuseIPDB社区维护的 IP 信誉库,含 90 天滥用举报历史
MalwareBazaar (abuse.ch)免费恶意软件哈希库,带 YARA 规则关联与家族标签
URLScan.io免费 URL 分析服务,抓取截图、DOM 与网络请求,用于钓鱼 URL 分诊
Shodan全网扫描数据,提供托管商、开放端口、Banner 信息用于 IP 富集

常见陷阱:来自 SKILL.md 的五条实战教训

  1. 封禁共享基础设施:CDN 段 IP(Cloudflare104.21.x.x、AWS CloudFront 等)可能承载恶意内容,但按 IP 封禁会瘫痪其上成千上万的合法站点——对这类 IOC 应转向封域名、封 URL 或 sinkhole。
  2. 迷信 VT 分数:低检测数 ≠ 良性。零日恶意软件与定制 APT 工具最初往往 0 分;必须结合沙箱行为、MISP 命中与被动 DNS 判断。
  3. 忘记 defang:把活 IOC 直接粘贴进邮件或 Confluence 文档,可能触发自动 URL 扫描器甚至钓鱼工具本身。
  4. 无过期策略:没有 TTL 的 IOC 会在黑名单中无限累积,随着基础设施被合法用户回收而持续产生误报——这也是 Key Concepts 中「IP 30 天 / 域名 90 天 TTL」规则存在的原因。
  5. 单一来源依赖:VirusTotal 聚合的是各家 AV 的共识,所有引擎都可能集体误判或滞后于新型恶意软件;高风险决策至少使用 3 个独立数据源交叉验证。

小结:把 IOC 分诊变成可执行流水线

回到这个技能的设计意图:它把「拿 IOC → 分类 → 多源查 → 打分 → 定处置 → 落记录」这条分析师脑子里的隐性流程,拆解成了带 API 示例、字段表和可运行脚本的显式流程,并前置声明了适用边界(不孤立做高风险封禁决策)。在 Anthropic-Cybersecurity-Skills 这类 agentskills.io 标准技能库中,它的价值在于 AI Agent 可以在钓鱼邮件分诊、批量情报摄入、事件调查三个场景下直接复现这套流程——分类与 defang 逻辑可离线验证(scripts/agent.py),真实富集只需注入VT_API_KEYABUSEIPDB_API_KEY两个环境变量;而加权打分模型保留了每一步的理由输出,让 Agent 给出的 BLOCK/MONITOR/INVESTIGATE 结论天然可解释、可审计。对于安全运营团队,这正是把「IOC 分诊 SOP」沉淀为机器可执行能力的典型范式。

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询