使用 MITRE ATT&CK 分析威胁行为者 TTP:从攻击者画像到检测缺口评估的完整实战指南
【免费下载链接】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
导读
本文以 Anthropic-Cybersecurity-Skills 仓库中的analyzing-threat-actor-ttps-with-mitre-attack技能为核心,系统讲解如何将威胁行为者的行为与可观察 IOC 映射到 MITRE ATT&CK 框架,通过 ATT&CK Navigator 构建技术覆盖热力图,识别检测盲区,并产出可执行的威胁情报报告,覆盖 Enterprise、Mobile 与 ICS 三张矩阵。读完本文,你将掌握一套可复现的「威胁情报 → 技术映射 → 可视化 → 缺口分析 → 情报报告」全流程,并能在实际 SOC 与检测工程场景中直接落地。
技能背景与定位
该技能位于仓库的 skills/analyzing-threat-actor-ttps-with-mitre-attack/ 目录,属于threat-intelligence(威胁情报)子域,其官方定义(见 SKILL.md)为:系统化地将威胁行为者行为与观察到的 IOC 映射到 MITRE ATT&CK 框架,用 ATT&CK Navigator 构建技术覆盖热力图,识别检测缺口,并在 Enterprise、Mobile 与 ICS 矩阵上产出可操作的威胁情报报告。
技能在前置元数据(YAML frontmatter)中声明了与多个安全框架的对应关系:
- MITRE ATT&CK 技术:T1566.001(鱼叉式钓鱼附件)、T1059.001(PowerShell)、T1071.001(Web 协议上的应用层协议)、T1547.001(注册表运行键)、T1053.005(计划任务)
- NIST CSF 2.0:ID.RA-01、ID.RA-05(风险评估)、DE.CM-01、DE.AE-02(持续监控与异常事件分析)
- D3FEND 对抗技术:可执行文件拒绝列表、执行隔离、文件元数据一致性校验、内容格式转换、文件内容分析
从仓库的 mappings/mitre-attack/README.md 可以看出,整个仓库将 800+ 个技能统一映射到 ATT&CK,本文涉及的技能正是威胁情报域中对 ATT&CK 技术做「分析侧」映射的核心代表。
何时使用该技能
该技能适合以下四类场景(源自 SKILL.md 的 When to Use 部分):
- 调查安全事件时,需要系统性分析威胁行为者的 TTP(战术、技术与过程);
- 为特定威胁域构建检测规则或威胁狩猎查询时;
- SOC 分析师需要针对此类分析的结构化标准流程时;
- 需要验证现有安全监控对相关攻击技术的覆盖情况时。
本质上,这是一份「攻击者视角转防御视角」的翻译工具:把威胁报告中的描述性内容,转成可量化、可打分、可对比的 ATT&CK 技术 ID 集合。
环境前置条件
在动手前,需要准备(见 SKILL.md 的 Prerequisites):
- Python 3.9+,并安装
mitreattack-python、attackcti、stix2三个库; - MITRE ATT&CK Navigator(Web 在线版或本地部署);
- 理解 ATT&CK 矩阵结构:战术(Tactics)、技术(Techniques)、子技术(Sub-techniques);
- 可访问威胁情报报告,或配置好 MISP / OpenCTI 用于获取威胁行为者数据;
- 熟悉 STIX 2.1 Attack Pattern 对象结构。
仓库为这两个脚本分别声明了依赖:完整命令行工具 scripts/process.py 需要pip install attackcti mitreattack-python stix2 requests,而轻量演示脚本 scripts/agent.py 只需requests,并支持直接加载本地enterprise-attack.json文件。
核心概念
ATT&CK 矩阵结构
Enterprise 矩阵将对抗行为组织为 14 个战术(回答「为什么」,即攻击者目标),其下包含技术(回答「怎么做」)与子技术(具体实现方式)。每一项技术都关联了数据源(Data Sources)、检测建议(Detections)、缓解措施(Mitigations),以及来自真实威胁组织观测到的过程示例(Procedure Examples)。
参考 references/standards.md,14 个战术及其 TA 编号为(按杀伤链顺序):侦察(TA0043)、资源开发(TA0042)、初始访问(TA0001)、执行(TA0002)、持久化(TA0003)、权限提升(TA0004)、防御规避(TA0005)、凭证访问(TA0006)、发现(TA0007)、横向移动(TA0008)、收集(TA0009)、命令与控制(TA0011)、数据渗出(TA0010)、影响(TA0040)。
ATT&CK 采用统一的编号体系,理解编号前缀有助于快速定位对象类型:
| 前缀 | 含义 | 示例 |
|---|---|---|
| T[NNNN] | 技术 | T1059(命令与脚本解释器) |
| T[NNNN].[NNN] | 子技术 | T1059.001(PowerShell) |
| G[NNNN] | 威胁组织 | G0016(APT29) |
| S[NNNN] | 软件 | S0154(Cobalt Strike) |
| M[NNNN] | 缓解措施 | M1049(防病毒/反恶意软件) |
ATT&CK v16+ 采用结构化数据源,例如进程创建、文件创建、网络连接创建、命令执行、模块加载、Windows 注册表键修改等,这些数据源正是后续检测缺口分析的抓手。
威胁组织画像(Threat Group Profiles)
ATT&CK 收录了 140+ 个威胁组织(如 APT28、APT29、Lazarus Group、FIN7),每个组织画像都包含别名、攻击行业、关联战役、使用的软件,以及带过程级细节的技术映射。在 STIX 2.1 中,这些组织以intrusion-set(入侵集合)对象表示,例如 APT29 的别名包括 Cozy Bear、The Dukes、NOBELIUM(见 references/standards.md 的 Intrusion Set 示例)。
ATT&CK Navigator
ATT&CK Navigator 是用于创建自定义 ATT&CK 矩阵可视化的 Web 工具。分析师通过创建 Layer(JSON 文件)为技术标注分数、颜色、注释与元数据,从而可视化威胁行为者覆盖、检测能力或风险评估。本文所附技能与仓库的 mappings/attack-navigator-layer.json(仓库整体技能的 ATT&CK 覆盖层,采用 layer 4.5 / navigator 4.9.1 版本)在格式规范上一脉相承。
数据获取方式:TAXII、STIX Bundle 与离线文件
ATT&CK 官方数据以 STIX 2.x Bundle 形式在 MITRE cti 仓库 发布。获取数据有三种途径:
方式一:TAXII 服务器实时查询。references/api-reference.md 给出了基于stix2+taxii2client的直接查询方式:
from stix2 import TAXIICollectionSource, Filter from taxii2client.v20 import Collection collection = Collection( "https://cti-taxii.mitre.org/stix/collections/95ecc380-afe9-11e4-9b6c-751b66dd541e/" ) src = TAXIICollectionSource(collection) groups = src.query([Filter("type", "=", "intrusion-set")])方式二:下载离线 STIX Bundle。可直接下载 Enterprise 矩阵的完整 JSON:
curl -o enterprise-attack.json https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json方式三:使用 attackcti 客户端(本文 Workflow 主线采用)。attackcti内部封装了对 TAXII 服务器的访问,提供get_groups()、get_enterprise_techniques()、get_techniques_used_by_group()等高层 API。
仓库 scripts/agent.py 演示了「优先加载本地文件、否则请求官方 Bundle」的健壮设计(load_attack_bundle),并展示了 STIX Bundle 的核心对象类型如何被解析:
| STIX 对象类型 | 映射内容 |
|---|---|
attack-pattern | 技术与子技术 |
intrusion-set | 威胁行为者组织 |
relationship | 关联(组织「使用」技术) |
malware | 恶意软件家族 |
tool | 被滥用的合法工具 |
完整工作流:五步走
Step 1:以编程方式查询 ATT&CK 数据
初始化attackcti客户端并拉取基础数据(源自 SKILL.md 与 scripts/process.py):
from attackcti import attack_client import json # 初始化 ATT&CK 客户端(查询 MITRE TAXII 服务器) lift = attack_client() # 获取所有 Enterprise 技术 enterprise_techniques = lift.get_enterprise_techniques() print(f"Total Enterprise techniques: {len(enterprise_techniques)}") # 获取所有威胁组织 groups = lift.get_groups() print(f"Total threat groups: {len(groups)}") # 按名称查找特定组织 apt29 = [g for g in groups if 'APT29' in g.get('name', '')] if apt29: group = apt29[0] print(f"Group: {group['name']}") print(f"Aliases: {group.get('aliases', [])}") print(f"Description: {group.get('description', '')[:200]}")仓库中的 scripts/process.py 将这一步封装成ATTACKAnalyzer.find_group():先按名称精确匹配,再遍历别名匹配(aliases),并缓存get_groups()与get_enterprise_techniques()的结果以避免重复的 TAXII 网络请求。
Step 2:将威胁行为者映射到 ATT&CK 技术
以 APT29 为例,使用其组织 ID(G0016)获取其使用的全部技术,并整理出技术 ID、名称、所属战术与描述:
from attackcti import attack_client lift = attack_client() # 获取 APT29 使用的技术 apt29_techniques = lift.get_techniques_used_by_group("G0016") # APT29 group ID technique_map = {} for entry in apt29_techniques: tech_id = entry.get("external_references", [{}])[0].get("external_id", "") tech_name = entry.get("name", "") description = entry.get("description", "") tactic_refs = [ phase.get("phase_name", "") for phase in entry.get("kill_chain_phases", []) ] technique_map[tech_id] = { "name": tech_name, "tactics": tactic_refs, "description": description[:300], } print(f"\nAPT29 uses {len(technique_map)} techniques:") for tid, info in sorted(technique_map.items()): print(f" {tid}: {info['name']} [{', '.join(info['tactics'])}]")值得注意的是,scripts/process.py 的get_group_techniques()比 SKILL.md 中的示例更严谨:它在external_references中按source_name == "mitre-attack"精确筛选出 ATT&CK 外部 ID,还额外提取了platforms(平台)与data_sources(数据源)字段,为后续缺口分析储备素材。
更深层的映射原理:在 STIX Bundle 中,「组织使用技术」的关系是通过relationship对象表达的——relationship_type == "uses"且source_ref指向组织(intrusion-set)的 ID、target_ref指向技术(attack-pattern)的 ID。scripts/agent.py 的map_group_techniques()正是遍历全部 relationship 对象实现这一关联:
def map_group_techniques(bundle, group_id, techniques): ttps = [] for obj in bundle.get("objects", []): if (obj.get("type") == "relationship" and obj.get("relationship_type") == "uses" and obj.get("source_ref") == group_id): target = obj.get("target_ref", "") if target in techniques: ttps.append(techniques[target]) return ttpsStep 3:生成 ATT&CK Navigator Layer
将技术映射转成符合 Navigator Layer 4.5 规范的 JSON 层文件,红色标注「已观测技术」:
import json def create_navigator_layer(group_name, technique_map, description=""): """Generate ATT&CK Navigator layer JSON for a threat group.""" techniques_list = [] for tech_id, info in technique_map.items(): techniques_list.append({ "techniqueID": tech_id, "tactic": info["tactics"][0] if info["tactics"] else "", "color": "#ff6666", # Red for observed techniques "comment": info["description"][:200], "enabled": True, "score": 100, "metadata": [ {"name": "group", "value": group_name}, ], }) layer = { "name": f"{group_name} TTP Coverage", "versions": { "attack": "16.1", "navigator": "5.1.0", "layer": "4.5", }, "domain": "enterprise-attack", "description": description or f"Techniques attributed to {group_name}", "filters": {"platforms": ["Windows", "Linux", "macOS", "Cloud"]}, "sorting": 0, "layout": { "layout": "side", "aggregateFunction": "average", "showID": True, "showName": True, "showAggregateScores": False, "countUnscored": False, }, "hideDisabled": False, "techniques": techniques_list, "gradient": { "colors": ["#ffffff", "#ff6666"], "minValue": 0, "maxValue": 100, }, "legendItems": [ {"label": "Observed technique", "color": "#ff6666"}, {"label": "Not observed", "color": "#ffffff"}, ], "showTacticRowBackground": True, "tacticRowBackground": "#dddddd", "selectTechniquesAcrossTactics": True, "selectSubtechniquesWithParent": False, "selectVisibleTechniques": False, } return layer # 生成并保存 layer layer = create_navigator_layer("APT29", technique_map, "APT29 (Cozy Bear) TTP analysis") with open("apt29_navigator_layer.json", "w") as f: json.dump(layer, f, indent=2) print("[+] Navigator layer saved to apt29_navigator_layer.json")关于 Layer 格式的关键字段说明(参见 references/standards.md 与仓库实际使用的 mappings/attack-navigator-layer.json):
versions.attack:目标 ATT&CK 版本,映射到attack字段(本文示例为 16.1,仓库覆盖层为 14);domain:enterprise-attack、mobile-attack或ics-attack;techniques[]:每个元素包含techniqueID(ATT&CK ID)、score(0-100 数值分数)、color(十六进制颜色覆盖)、comment(分析师备注)、enabled(显示/隐藏)、metadata[](键值对附加上下文);gradient:定义分数到颜色的渐变映射,常用于按严重程度着色;legendItems:图例,说明每个颜色代表的含义。
仓库 scripts/process.py 的create_navigator_layer()在 SKILL.md 基础上做了增强:它遍历每个技术的全部战术(而非只取第一个),为同一技术在不同战术列分别生成条目;metadata中额外携带platforms信息;filters.platforms扩展到 Azure AD、Office 365、SaaS、Google Workspace 等云平台。生成的 layer 可直接加载到 Navigator 的 Layer 上传界面渲染。
Step 4:识别检测缺口(Detection Gap Analysis)
将威胁行为者技术集合与「当前已能检测的技术集合」做差集运算,量化检测覆盖率:
from attackcti import attack_client lift = attack_client() # 获取所有技术及其数据源 all_techniques = lift.get_enterprise_techniques() # 构建数据源覆盖映射 data_source_coverage = {} for tech in all_techniques: tech_id = tech.get("external_references", [{}])[0].get("external_id", "") data_sources = tech.get("x_mitre_data_sources", []) for ds in data_sources: if ds not in data_source_coverage: data_source_coverage[ds] = [] data_source_coverage[ds].append(tech_id) # 将威胁行为者技术与现有检测能力对比 detected_techniques = {"T1059", "T1071", "T1566"} # 示例:你能检测的技术 actor_techniques = set(technique_map.keys()) covered = actor_techniques.intersection(detected_techniques) gaps = actor_techniques - detected_techniques print(f"\n=== Detection Gap Analysis for APT29 ===") print(f"Actor techniques: {len(actor_techniques)}") print(f"Detected: {len(covered)} ({len(covered)/len(actor_techniques)*100:.0f}%)") print(f"Gaps: {len(gaps)} ({len(gaps)/len(actor_techniques)*100:.0f}%)") print(f"\nUndetected techniques:") for tech_id in sorted(gaps): if tech_id in technique_map: print(f" {tech_id}: {technique_map[tech_id]['name']}")scripts/process.py 将这一逻辑工程化:gap_analysis()接受「已检测技术 ID 集合」(可由--detections指定 JSON 文件加载),输出覆盖百分比、已覆盖集合、每个缺口的详细信息(含数据源与平台),并通过_recommend_data_sources()按「该数据源可覆盖的缺口技术数量」排序,给出投入产出比最高的 TOP 10 数据源采集建议——这正是从缺口分析到检测工程落地决策的关键桥梁。
Step 5:跨组织技术对比
对多个威胁组织做集合运算,找出共有技术与各自独有技术,支撑检测优先级排序与归因判断:
from attackcti import attack_client lift = attack_client() # 对比多个组织 groups_to_compare = { "G0016": "APT29", "G0007": "APT28", "G0032": "Lazarus Group", } group_techniques = {} for gid, gname in groups_to_compare.items(): techs = lift.get_techniques_used_by_group(gid) tech_ids = set() for t in techs: tid = t.get("external_references", [{}])[0].get("external_id", "") if tid: tech_ids.add(tid) group_techniques[gname] = tech_ids # 找出共有与独有技术 all_groups = list(group_techniques.keys()) common_to_all = set.intersection(*group_techniques.values()) print(f"\nTechniques common to all {len(all_groups)} groups: {len(common_to_all)}") for tid in sorted(common_to_all): print(f" {tid}") for gname, techs in group_techniques.items(): unique = techs - set.union(*[t for n, t in group_techniques.items() if n != gname]) print(f"\nUnique to {gname}: {len(unique)} techniques")scripts/process.py 的compare_groups()输出结构更为丰富:包含total_unique_techniques(并集大小)、common_count(交集大小)、每组的total / unique / unique_count / overlap_percentage(重叠百分比),以及technique_frequency——按出现频次排序的技术频率表,直接回答「哪项技术被最多威胁组织使用,值得优先建设检测」。tactic_breakdown()则把技术按 14 个战术重新归类,输出组织在杀伤链各阶段的兵力分布。
五条标准分析工作流
references/workflows.md 将上述能力组织为五条可复用的标准工作流:
Workflow 1:威胁行为者 TTP 映射。威胁报告 → 提取行为 → 映射到 ATT&CK → Navigator Layer → 检测优先级。要点包括:行为提取需逐条描述对抗动作;映射时尽量下钻到子技术精度;Layer 生成后按「可检测性 × 影响」排序技术。
Workflow 2:检测缺口分析。现有检测 → 检测 Layer(绿) → 与威胁 Layer(红)叠加 → 缺口 Layer → 工程积压清单。核心是让「红色威胁」与「绿色检测」在 Navigator 中叠加,找出既无检测又无缓解的空白技术,并按威胁相关性排序形成检测工程 backlog。
Workflow 3:跨行为者对比。对与自身行业/地区相关的多个组织做交集分析,共有技术意味着「一次建设、多点覆盖」的最高投资回报率;独有技术则可用作归因判定的候选指标。
Workflow 4:战役到 TTP 分析。从具体战役的 IOC(恶意软件哈希、C2 域名、钓鱼邮件)出发,经沙箱动态分析提取行为(文件操作、注册表变更、网络连接、进程活动),映射为 TTP 后与已知组织画像比对,形成归因假设。注意:归因是概率性评估,只能基于 TTP 重叠度给出「可能性」而非定论。
Workflow 5:威胁驱动防御(Threat-Informed Defense)。这是「分析」走向「落地」的一环:威胁画像 → 数据源映射 → 遥测审计 → 控制映射 → 缺口识别 → 安全路线图。每一步都产出明确的工程动作。
产出正式情报报告:报告模板
分析完成后,可使用仓库自带的报告模板 assets/template.md 生成正式威胁情报报告。模板包含以下核心结构:
- 报告元数据:报告 ID(TTP-YYYY-NNNN)、日期、威胁行为者、ATT&CK ID(G[NNNN])、分级(如 TLP:AMBER)、分析师;
- 威胁行为者画像:名称、别名、疑似来源、动机(间谍/经济/破坏)、活跃时间、目标行业/区域、关联恶意软件;
- TTP 摘要表:按 14 个战术统计技术数量与关键技术;
- 详细技术映射表:ATT&CK ID、技术、子技术、过程示例(例如 T1566.001 鱼叉式钓鱼附件 → 发送宏文档);
- 检测覆盖统计:已检测 / 部分检测 / 无检测的计数与百分比;
- 按优先级排序的检测缺口表:优先级、ATT&CK ID、技术、所需数据源、工作量(低/中/高);
- 推荐数据源表:数据源、覆盖技术数、当前采集状态;
- Navigator Layer 文件引用:
[group]_navigator_layer.json; - 建议:立即(部署 TOP 3 缺口技术的检测)、短期(开启某数据源采集以覆盖 N 项技术)、长期(为某战术构建行为分析)。
命令行一键化运行
仓库提供的 scripts/process.py 将所有分析封装为命令行工具,安装依赖后即可直接运行:
pip install attackcti mitreattack-python stix2 requests # 生成某组织的 Navigator Layer python process.py --group APT29 --output apt29_layer.json # 跨组织对比 python process.py --compare APT28 APT29 "Lazarus Group" # 检测缺口分析(从 JSON 文件加载已检测技术) python process.py --gap-analysis --detections detections.json --group APT29 # 战术分布统计 python process.py --breakdown --group APT29命令行参数一览:--group指定组织名称、--compare传入多个组织名做对比、--gap-analysis触发缺口分析、--detections指定包含已检测技术 ID 列表的 JSON 文件、--breakdown输出战术分布、--output指定输出文件(默认attack_layer.json)。检测列表 JSON 格式为技术 ID 数组,例如["T1059", "T1071", "T1566"]。
离线环境下,可使用轻量版 scripts/agent.py:先下载enterprise-attack.json,然后运行:
python agent.py APT29 enterprise-attack.json它会输出组织别名、技术数量、按战术分布的可视化条形图,以及基于演示检测集合的缺口列表。该脚本还支持不传组织名时列出前 15 个可用组织,方便快速熟悉数据集。
验证标准
完成分析后,用以下标准检验成果是否合格(源自 SKILL.md 的 Validation Criteria):
- ATT&CK 数据已通过 TAXII 服务器或本地副本成功查询;
- 威胁行为者已映射到具体技术,且附带过程级示例;
- ATT&CK Navigator Layer JSON 合法且能正确渲染;
- 检测缺口分析识别出了未受监控的技术;
- 跨组织对比揭示了共有与独有 TTP;
- 输出结果对检测工程的优先级排序具有可操作性。
与仓库整体 ATT&CK 体系的衔接
本技能并非孤立存在。仓库在 mappings/mitre-attack/README.md 中维护了全部技能到 ATT&CK 的映射方法论(战术 TA00xx 映射、技术 T1xxx 映射、子技术映射),并在 mappings/attack-navigator-layer.json 中以「技能引用数」为分数构建了仓库整体的 ATT&CK 覆盖热力图。本技能生成的单个组织 Layer 与仓库全局 Layer 使用同一套 layer 4.5 规范,可互相叠加对比——例如将本技能的 APT29 覆盖层与仓库技能覆盖层叠加,即可直观看出「组织会用什么」与「我们有哪些技能/检测」之间的差距,这正是 Workflow 2 与 Workflow 5 在企业级落地时的直接体现。
结语
威胁行为者 TTP 分析是威胁情报从「阅读报告」走向「指导防御」的关键转换层。本文以仓库技能为主线,完整覆盖了「查询 ATT&CK 数据 → 映射组织技术 → 生成 Navigator Layer → 检测缺口分析 → 跨组织对比 → 报告输出」的端到端流程,并借助仓库 scripts/process.py 与 scripts/agent.py 的源码实现,说明了底层 STIX relationship 关联、数据源推荐算法与 Layer 生成细节。掌握了这套流程,你便能把任何一份威胁情报报告,转化为一张可量化、可对比、可驱动检测工程落地的 ATT&CK 作战地图。
【免费下载链接】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),仅供参考