
网络攻击归因证据分析实战基于 Diamond Model 与 ACH 的威胁行为体归属判定【免费下载链接】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导读攻击归因Attribution是威胁情报分析的终极难题面对一次网络攻击活动如何系统性地收集证据判断它出自哪个威胁行为体Threat Actor并给出可辩护、可量化的置信度结论本文以 Anthropic-Cybersecurity-Skills 仓库中的 analyzing-campaign-attribution-evidence 技能文档为骨架完整介绍基于钻石模型Diamond Model of Intrusion Analysis与分析竞争性假设ACH, Analysis of Competing Hypotheses的归因证据分析方法论并深入到仓库配套的 agent.py 与 process.py 源码讲解证据权重、置信度分级、基础设施重叠、TTP 一致性、恶意代码相似性等维度的可运行实现。读完本文你将能构建一套置信度加权Confidence-Weighted的归因评估流程并产出结构化的归因报告。什么是攻击归因证据分析攻击归因是指通过系统化评估证据确定某次网络行动由哪个威胁行为体或组织发动的分析过程。它区别于简单的 IOCs 匹配——归因不仅回答这是什么恶意软件还要回答这是谁干的、证据有多强、还有哪些替代假设。在本仓库中该技能被归类于threat-intelligence子领域并映射到 MITRE ATTCK 的资源开发与命令控制相关技术T1587.001 中的统计显示整个技能库扫描了 742 个技能、覆盖 218 个唯一 ATTCK 技术本技能正是其中连接分析与归因的关键一环。何时使用本技能调查需要分析攻击归因证据的安全事件为某个领域构建检测规则或威胁狩猎查询SOC 分析师需要标准化的归因分析流程验证与相关攻击技术对应的安全监控覆盖是否充分。归因证据的六大类别技能文档明确将归因证据划分为六个相互独立的类别独立性的意义在于多类证据交叉印证才可能形成高置信度结论单一类别如仅凭 IP 重叠极易被误导基础设施重叠Infrastructure Overlap共享的 C2 服务器、域名、IP 网段、托管服务商。TTP 一致性TTP Consistency跨行动中匹配的 ATTCK 技术与子技术。恶意代码相似性Malware Code Similarity共享代码库、编译器、PDB 路径、加密例程。运营模式Operational Patterns活动时间工作时间、时区、目标选择模式、作战节奏。语言痕迹Language Artifacts内嵌字符串、变量名、特定语言的报错信息。受害者画像Victimology目标行业、地理区域与组织画像的一致性。置信度分级高置信度High Confidence多个独立证据类别同时收敛于同一行为体中置信度Moderate Confidence若干证据类别匹配但仍存在模糊性低置信度Low Confidence证据有限可能存在伪旗False Flag或共享工具链的干扰。置信度分级是归因报告的灵魂agent.py 将其细化为四档数值区间分数区间置信度含义0.8–1.0HIGH强归因置信度0.5–0.8MEDIUM中等归因建议进一步分析0.2–0.5LOW弱归因证据不足0.0–0.2NEGLIGIBLE无法进行有意义的归因ACH分析竞争性假设ACH 是 CIA 传统的情报分析方法论将证据与多个竞争性假设逐一比对每个证据对每个假设被标记为一致consistent不一致inconsistent或中性neutral。不一致证据最少的假设胜出——这一反直觉的要点在于归因分析真正排除的是假设而不是证明某个假设。api-reference.md 给出了一张经典 ACH 矩阵示例Evidence \ Hypothesis | APT28 | APT29 | Lazarus | Unknown ----------------------------------------------------------------- Infrastructure overlap | | - | - | N TTP consistency | | | - | N Malware similarity | | - | - | N Timing (UTC3) | | | - | N Language (Russian) | | | - | N评分符号含义强一致2、一致1、N中性0、-不一致-1、--强不一致-2。矩阵中 APT28 与 APT29 均与多类证据一致最终判定还需结合不一致证据的惩罚权重进一步区分。归因工作流从证据收集到报告整个分析流程沿袭标准情报工作流规划 → 收集 → 处理规范化、去噪→ 分析框架化、关联→ 产出 → 分发 → 反馈。落实到归因场景技能文档给出了四个核心步骤下面逐步展开并补充源码级实现。第一步收集归因证据并建立 ACH 框架使用stix2库的MemoryStore与Filter构建AttributionAnalyzer类负责证据登记、假设注册、逐条评估与排名from stix2 import MemoryStore, Filter from collections import defaultdict class AttributionAnalyzer: def __init__(self): self.evidence [] self.hypotheses {} def add_evidence(self, category, description, value, confidence): self.evidence.append({ category: category, description: description, value: value, confidence: confidence, timestamp: None, }) def add_hypothesis(self, actor_name, actor_id): self.hypotheses[actor_name] { actor_id: actor_id, consistent_evidence: [], inconsistent_evidence: [], neutral_evidence: [], score: 0, } def evaluate_evidence(self, evidence_idx, actor_name, assessment): Assess evidence against a hypothesis: consistent/inconsistent/neutral. if assessment consistent: self.hypotheses[actor_name][consistent_evidence].append(evidence_idx) self.hypotheses[actor_name][score] self.evidence[evidence_idx][confidence] elif assessment inconsistent: self.hypotheses[actor_name][inconsistent_evidence].append(evidence_idx) self.hypotheses[actor_name][score] - self.evidence[evidence_idx][confidence] * 2 else: self.hypotheses[actor_name][neutral_evidence].append(evidence_idx) def rank_hypotheses(self): Rank hypotheses by attribution score. ranked sorted( self.hypotheses.items(), keylambda x: x[1][score], reverseTrue, ) return [ { actor: name, score: data[score], consistent: len(data[consistent_evidence]), inconsistent: len(data[inconsistent_evidence]), confidence: self._score_to_confidence(data[score]), } for name, data in ranked ] def _score_to_confidence(self, score): if score 80: return HIGH elif score 40: return MODERATE else: return LOW注意评分设计中的两个关键决策不一致证据按双倍权重扣分confidence * 2体现排除法优先的 ACH 原则置信度映射阈值80/40决定了最终结论的措辞。仓库配套的 process.py 提供了工程化的AttributionEngine类支持从 JSON 文件批量加载证据与假设并可通过 CLI 运行python process.py --evidence evidence.json --hypotheses actors.json --output report.json python process.py --compare-ttps --campaign campaign_techs.json --actor APT29其rank()方法在置信度判定上额外引入了一个约束——存在任何不一致证据inconsistent_count 0时不允许判定 HIGH从源码层面强制了高置信度必须无冲突证据的严谨性见 process.py。第二步基础设施重叠分析基础设施C2、域名、IP、ASN、注册商是归因中分量最重的客观证据之一。技能文档提供了跨两个行动campaign的基础设施比对函数并给出了一套可解释的加权评分规则def analyze_infrastructure_overlap(campaign_a_infra, campaign_b_infra): Compare infrastructure between two campaigns for attribution. overlap { shared_ips: set(campaign_a_infra.get(ips, [])).intersection( campaign_b_infra.get(ips, []) ), shared_domains: set(campaign_a_infra.get(domains, [])).intersection( campaign_b_infra.get(domains, []) ), shared_asns: set(campaign_a_infra.get(asns, [])).intersection( campaign_b_infra.get(asns, []) ), shared_registrars: set(campaign_a_infra.get(registrars, [])).intersection( campaign_b_infra.get(registrars, []) ), } overlap_score 0 if overlap[shared_ips]: overlap_score 30 if overlap[shared_domains]: overlap_score 25 if overlap[shared_asns]: overlap_score 15 if overlap[shared_registrars]: overlap_score 10 return { overlap: {k: list(v) for k, v in overlap.items()}, overlap_score: overlap_score, assessment: STRONG if overlap_score 40 else MODERATE if overlap_score 20 else WEAK, }评分权重直观反映了证据强度排序共享 IP30 分 共享域名25 分 共享 ASN15 分 共享注册商10 分总分 40 以上判定 STRONG、20 以上 MODERATE、否则 WEAK。权重设计背后的逻辑是同一 IP 往往指向同一运营者而注册商这类信息可能被大量无关主体共用只能作为弱佐证。agent.py 给出了另一种基于集合比率的度量overlap / max(campaign, actor)适用于已知行为体基础设施库与当前行动逐项比对api-reference.md 则补充了利用 PassiveTotal / RiskIQ WHOIS 历史与被动 DNS、以及 VirusTotal 域名通信文件关系接口来扩充基础设施证据的实践手段。第三步跨行动 TTP 对比TTP 对比需要以 ATTCK 技术 ID 为精确锚点避免用战术级tactic这种粗粒度描述做归因。技能文档的对比函数同时输出共同技术、各自独有技术以及 Jaccard 相似度与重叠百分比两个量化指标from attackcti import attack_client def compare_campaign_ttps(campaign_techniques, known_actor_techniques): Compare campaign TTPs against known threat actor profiles. campaign_set set(campaign_techniques) actor_set set(known_actor_techniques) common campaign_set.intersection(actor_set) unique_campaign campaign_set - actor_set unique_actor actor_set - campaign_set jaccard len(common) / len(campaign_set.union(actor_set)) if campaign_set.union(actor_set) else 0 return { common_techniques: sorted(common), common_count: len(common), unique_to_campaign: sorted(unique_campaign), unique_to_actor: sorted(unique_actor), jaccard_similarity: round(jaccard, 3), overlap_percentage: round(len(common) / len(campaign_set) * 100, 1) if campaign_set else 0, }Jaccard 相似度衡量两个集合的交并比0~1重叠百分比衡量当前行动技术中有多大比例出现在已知行为体画像中。仓库的 process.py 实现了同一逻辑并支持通过attackcti的attack_client()按行为体名称如 APT29实时拉取 MITRE ATTCK Groups 中该组织的技术清单进行自动比对api-reference.md 还给出了用mitreattack-python与 STIX2 relationship 查询source_refgroup_id、relationship_typeuses的等价实现。第四步生成归因报告def generate_attribution_report(analyzer): Generate structured attribution assessment report. rankings analyzer.rank_hypotheses() report { assessment_date: 2026-02-23, total_evidence_items: len(analyzer.evidence), hypotheses_evaluated: len(analyzer.hypotheses), rankings: rankings, primary_attribution: rankings[0] if rankings else None, evidence_summary: [ { index: i, category: e[category], description: e[description], confidence: e[confidence], } for i, e in enumerate(analyzer.evidence) ], } return report报告结构遵循 template.md 定义的格式报告元数据Report ID、日期、TLP 分类、分析师、置信度、执行摘要、关键发现、详细分析含证据、置信度、MITRE ATTCK 技术 ID、影响评估、IOC 表、短期/中期/长期建议与参考资料。元数据中的TLPTraffic Light Protocol分类CLEAR/GREEN/AMBER/RED与 STIX 2.1/TAXII 2.1 规范一同被 standards.md 列为该分析必须遵循的标准因为它决定了归因结论能否在组织间共享。从文档到可执行源码中的完整归因流水线如果仅用 STIX 对象串联上述模块整个归因在技术生态上可以进一步标准化。api-reference.md 展示了如何用 STIX 2.1 表达归因结果——campaign对象描述行动本身relationship对象通过attributed-to关系将 campaign 关联到intrusion-set行为体并携带数值型confidence0~100{ type: campaign, name: Operation DarkShadow, first_seen: 2024-01-15T00:00:00Z, last_seen: 2024-03-20T00:00:00Z, objective: Espionage targeting defense sector }{ type: relationship, relationship_type: attributed-to, source_ref: campaign--abc123, target_ref: intrusion-set--def456, confidence: 75 }综合评分引擎agent.py 将六大证据类别映射为五个可计算维度并给出明确的归一化权重证据维度权重评估函数TTP 一致性0.30evaluate_ttp_consistency()基础设施重叠0.25evaluate_infrastructure_overlap()恶意代码相似性0.25evaluate_malware_similarity()时间模式0.10evaluate_timing_pattern()语言痕迹0.10evaluate_language_artifacts()最终归因得分compute_attribution_score()为各维度得分乘权重的加权和再落入前述四档置信度区间见 agent.py。从实现细节看agent.py时间模式将时间戳统一转为 UTC 小时处理Z后缀叠加假设的行为体时区偏移后统计 8:00–18:00 工作时段占比从而反推运营者所在时区——例如所有活动集中在 UTC3 的 9~12 点指向东欧时区行为体语言痕迹用正则特征识别俄语Cyrillic、codepage 1251、中文GB2312、codepage 936、韩语EUC-KR、波斯语codepage 1256与英语特征对恶意软件字符串、文档元数据进行语言指纹统计。这一维度正是语言痕迹证据类别在工程上的落地恶意代码相似性将样本特征如xor_0x55、互斥量名、UA 字符串、加密算法标识与已知样本特征集合做匹配率计算用于支持共享代码库/加密例程的归因判断。端到端演示agent.py 内置了可运行的演示入口python agent.py模拟Operation DarkShadow对 APT29 的归因评估基础设施出现 2/3 共享、TTP 出现 4/5 重叠含 T1566.001 鱼叉邮件、T1059.001 命令脚本、T1053.005 计划任务、T1071.001 Web 协议等、样本特征 3/4 匹配、时间戳折算后落于工作时段、字符串中检测到俄语痕迹——这些输出可逐项与六大证据类别对应形成完整的证据链演示。钻石模型与归因可信度钻石模型把每一次入侵描述为四个顶点的相互作用Adversary对手— Capability能力— Infrastructure基础设施— Victim受害者。归因视角下各顶点的证据价值不同api-reference.md 将其归纳为顶点描述归因价值Adversary威胁行为体身份直接归因Capability恶意软件、漏洞利用、工具间接归因共享工具链InfrastructureC2、域名、IP强归因运营重叠Victim目标、行业、区域情境归因目标模式钻石模型还强调枢轴分析Pivot通过任一顶点向其他顶点延伸调查如从 C2 域名 WHOIS 记录反查其他域名、从恶意软件样本哈希反查共享基础设施。agent.py 的diamond_model_analysis()函数在结构化证据的同时自动生成枢轴机会建议如从 C2 基础设施枢轴到相关行动从恶意样本枢轴到共享基础设施。归因可信度因此是证据广度 × 证据独立性 × 冲突排除的综合产物仅凭单一基础设施重叠结论脆弱因为攻击者会复用商业 VPS 与匿名域名而当基础设施重叠、TTP 一致、代码特征匹配、时间时区吻合、语言痕迹相同五个独立维度同时收敛时才足以支撑高置信度判定。验证标准与实操清单技能文档为每次归因分析定义了可检查的验证标准Validation Criteria可直接用作自评清单证据收集覆盖全部六个归因类别ACH 矩阵正确地将证据对照多个竞争性假设进行评估基础设施重叠分析识别出共享指标TTP 对比使用 ATTCK 技术 ID 保证精确性归因置信度分级有充分依据报告包含替代假设与伪旗False Flag考量。最后两条尤为重要一份合格的归因报告必须主动列出被排除的替代假设例如证据同样支持某共享工具链的脚本小子但因时间模式与语言痕迹不一致而排除并显式讨论伪旗可能——这正是 ACH排除法思想在交付物中的体现。适用前提与限制本技能依赖以下环境与知识前提见 SKILL.mdPython 3.9安装attackcti、stix2、networkx库可访问威胁情报平台MISP、OpenCTI以扩充证据理解钻石模型与 ACH 方法论熟悉 MITRE ATTCK 威胁组织画像具备恶意软件分析与基础设施追踪能力。同时必须清醒认识归因分析的边界攻击者会刻意制造伪旗如借鉴他国语言、复制他人 TTP 或复用开源工具来污染证据托管服务与匿名基础设施可能削弱共享 IP/域名的证据强度新出现的行为体或工具链可能不包含在现有 ATTCK 画像中。因此归因结论永远是一种置信度表述而非绝对事实应随着新证据持续更新——这也是仓库在 workflows.md 中强调连续监控 → 变化检测 → 告警/更新工作流的原因。以本仓库技能与源码为起点你可以构建一套证据驱动、可复现、可辩护的归因分析流水线为每一次事件响应给出经得起推敲的归属判断。【免费下载链接】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),仅供参考