使用 MITRE ATT&CK Navigator 分析威胁行为体 TTP:attackcti API 参考与 Layer 文件实战指南
【免费下载链接】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-navigator技能(SKILL.md)及其 API 参考文档(api-reference.md)整理而成的技术指南。文章完整覆盖 attackcti 库的全部 API 方法、STIX 2.1 对象字段、ATT&CK Navigator Layer JSON Schema 与 CLI 用法,并结合仓库内 agent.py 源码与 attack-navigator-layer.json 真实层文件,帮助分析师以编程方式将 APT 组织的 TTP 映射到 ATT&CK 矩阵、生成 Navigator 热力图并进行防御覆盖差距评估。读完本文,你将能够独立搭建一套"查询 STIX/TAXII → 提取群体-技术关系 → 生成 Layer JSON → 多层叠加对比"的完整分析流水线。
1. 背景与适用场景
MITRE ATT&CK Navigator 是一个用于标注与可视化 ATT&CK 矩阵的 Web 应用,其核心交换载体是Layer 文件——一种带有分数、颜色、注释与元数据的 JSON 格式。将 Navigator 与 attackcti(通过 TAXII 协议查询 ATT&CK STIX 数据的 Python 库)结合,分析师可以:
- 程序化地将特定威胁组织(如 APT29)的 TTP 映射为 Navigator Layer 文件;
- 横向比较多个威胁组织的技术差异(共有 / 独有技术);
- 将攻击者画像与自身检测能力叠加,识别未覆盖的检测缺口。
典型应用场景包括:安全事件调查中需要刻画威胁行为体画像、围绕特定组织构建检测规则或威胁狩猎查询、SOC 需要结构化分析流程、以及验证既有安全监控对相关攻击技术的覆盖度。
前置条件:Python 3.8+,安装attackcti与stix2库;可访问 MITRE ATT&CK Navigator(Web UI 或本地实例);具备 STIX 2.1 对象与关系的基本理解。
2. attackcti Python 库 API 参考
attackcti 是查询 ATT&CK 数据的核心客户端。仓库中的 agent.py 通过from attackcti import attack_client初始化客户端,其全部方法如下:
| 方法 | 说明 |
|---|---|
attack_client() | 初始化 ATT&CK 数据的 STIX/TAXII 客户端 |
client.get_groups() | 检索 ATT&CK 中所有威胁组织(group) |
client.get_techniques() | 检索 ATT&CK 中所有技术(technique) |
client.get_techniques_used_by_group(group) | 获取与指定组织关联的技术 |
client.get_software() | 检索 ATT&CK 中所有软件/工具 |
client.get_software_used_by_group(group) | 获取指定组织使用的软件 |
client.get_mitigations() | 检索 ATT&CK 中所有缓解措施 |
client.get_data_sources() | 检索 ATT&CK 中所有数据源 |
源码级说明:attack_client()内部完成 STIX/TAXII 客户端的初始化;get_techniques_used_by_group()返回的是与该组织存在uses关系的 Technique 对象列表,因此攻击者画像完全由官方 ATT&CK 数据驱动,而非人工整理,保证了映射的权威性。
get_groups()返回的对象是 STIX 2.1 的Intrusion Set类型。仓库中list_threat_groups()函数(agent.py)正是遍历该结果,抽取组织的name、aliases、description以及external_references[0].external_id(即 G 编码,如 G0016),并按名称排序输出。
3. STIX 2.1 对象字段参考
3.1 Intrusion Set(组织对象)字段
get_groups()返回的每个组织对象(如 APT29)包含以下关键字段:
| 字段 | 说明 |
|---|---|
id | STIX 对象 ID(例如intrusion-set--abc123) |
name | 组织名称(例如 APT29) |
aliases | 组织的别名列表(如 Cozy Bear / Midnight Blizzard) |
description | 组织描述与背景信息 |
external_references | 引用列表,包含 ATT&CK ID(G 编码) |
created | 对象创建时间戳 |
modified | 最近修改时间戳 |
源码印证:get_group_techniques()(agent.py)先按名称或别名精确匹配目标组织——先比较name,再在aliases中查找,从而支持用别名(如 "Cozy Bear")定位同一组织;随后取出target_group["id"](STIX 对象 ID)作为关联查询的锚点,并用external_references[0].external_id记录 G 编码。
3.2 Technique(技术对象)字段
get_techniques_used_by_group()返回的每个 Technique 对象包含以下字段:
| 字段 | 说明 |
|---|---|
name | 技术名称(例如 Spearphishing Attachment) |
external_references[].external_id | ATT&CK 技术 ID(例如 T1566.001) |
x_mitre_platforms | 目标平台(Windows、Linux、macOS 等) |
kill_chain_phases | 杀伤链中关联的战术(tactic) |
x_mitre_detection | 针对该技术的检测指导 |
x_mitre_is_subtechnique | 是否为子技术 |
源码印证:在 agent.py 中,遍历每个 technique 的external_references,仅当ref.get("source_name") == "mitre-attack"时提取external_id(技术 ID)与官方url,同时收集x_mitre_platforms平台信息与截断后的description。这种过滤方式可避免把非 ATT&CK 的外部引用(如 CVE、厂商公告)误当技术编号。
4. ATT&CK Navigator Layer JSON Schema
Layer 文件是 Navigator 的可视化配置与数据载体。其 Schema 字段定义如下:
| 字段 | 类型 | 说明 |
|---|---|---|
name | string | 层显示名称 |
versions.attack | string | ATT&CK 版本(例如 "15") |
versions.navigator | string | Navigator 版本(例如 "5.0") |
versions.layer | string | 层格式版本(例如 "4.5") |
domain | string | enterprise-attack、mobile-attack或ics-attack |
techniques[].techniqueID | string | ATT&CK 技术 ID |
techniques[].score | integer | 着色用数值分数(0-100) |
techniques[].color | string | 颜色覆盖(十六进制,如#ff6666) |
techniques[].comment | string | 该技术的注释文本 |
techniques[].enabled | boolean | 技术单元格是否启用 |
gradient.colors | array | 从最低分到最高分的颜色渐变 |
gradient.minValue | integer | 最低分值 |
gradient.maxValue | integer | 最高分值 |
filters.platforms | array | 矩阵中显示的平台 |
legendItems[].label | string | 图例条目标签 |
legendItems[].color | string | 图例条目颜色 |
仓库实例印证:本仓库根目录的 mappings/attack-navigator-layer.json 正是一个完整的 Layer v4.5 文件,它使用versions.attack = "14"、versions.navigator = "4.9.1"、domain = "enterprise-attack",并通过filters.platforms声明了 Linux、macOS、Windows、Network、Containers、IaaS 等平台。其每个 technique 条目包含techniqueID、score(按引用技能数归一化到 1-100)、comment(注明被多少个技能引用)以及metadata(记录skill_count与引用技能列表)——这正是本文分析场景中"以 Layer 承载丰富注解"的最佳示范。查看方式见 mappings/README.md:在 ATT&CK Navigator 中点击Open Existing Layer→Upload from local选择该 JSON 即可渲染整个仓库的 ATT&CK 覆盖热力图。
源码生成逻辑:generate_navigator_layer()(agent.py)展示了如何从组织数据构建 Layer:每个技术条目以techniqueID为主键,附上score: 1、自定义color、技术名称作为comment并置enabled: True;顶层配置包含layout(side 布局、显示 ID 与名称)、hideDisabled: False、白色到目标色的gradient、以及标注组织技术集的legendItems。
5. CLI 实战用法
仓库的 agent.py 通过 argparse 暴露了完整命令行接口,核心用法如下:
# 列出所有 ATT&CK 威胁组织 python agent.py --list-groups # 分析指定组织 python agent.py --group "APT29" # 分析组织并生成 Navigator Layer 文件 python agent.py --group "APT29" --layer-output apt29_layer.json # 比较多个组织 python agent.py --compare "APT29" "APT28" "Lazarus Group" # 分析组织并同时保存 Layer 与完整报告(JSON) python agent.py --group "APT29" --layer-output apt29.json --output report.json参数说明(对应 main() 的 argparse 定义):
| 参数 | 类型 | 说明 |
|---|---|---|
--group | string | 要分析的威胁组织名称(如 APT29),支持别名匹配 |
--list-groups | flag | 列出所有 ATT&CK 组织 |
--compare | nargs="+" | 比较多个组织,可传多个名称 |
--layer-output | string | 将 Navigator Layer JSON 保存到指定文件 |
--output | string | 将完整审计报告保存为 JSON |
执行流程(run_audit(),agent.py):程序先输出带时间戳(UTC)的分析头;--list-groups打印前 30 个组织(格式G00XX: name);--group打印组织 ID、技术数量及前 20 项技术(Txxxx.xxx: name),并在指定--layer-output时写出 Layer 文件;--compare输出被比较组织、去重后的技术总数、共有技术与各组织独有技术数量;最终--output将groups、group_techniques、comparison等全部结果聚合写入报告 JSON。
6. 端到端分析工作流
将上述 API 与 CLI 串起来,即可构成完整流程:
- 查询 ATT&CK STIX 数据:用
attack_client()初始化客户端,get_groups()获取组织列表; - 提取组织关联技术:通过
get_techniques_used_by_group()依据 STIXuses关系取得技术对象,按source_name == "mitre-attack"过滤出技术 ID(见 agent.py); - 生成 Layer JSON:调用
generate_navigator_layer()产出带注释的 Layer 文件; - 叠加检测覆盖:将攻击者技术集与自身已检测技术集做交集/差集运算,量化检测覆盖百分比,识别缺口技术;
- 导出并评审:将 Layer 交给团队在 Navigator 中渲染,供检测工程与防御规划使用。
7. 多组织对比与检测差距评估
对比分析:compare_groups()(agent.py)为每个组织建立技术 ID 集合,随后计算所有组织的交集(共有技术,常被共用即值得优先防御)与每个组织的相对差集(独有技术,用于区分不同攻击者的特征)。输出结构包含groups_compared、total_unique_techniques、shared_techniques(含 ID 与名称)、shared_count与unique_per_group。
差距评估思路:将攻击者技术集合与检测能力集合做集合运算——covered = actor ∩ detected,gaps = actor - detected,即可量化"已检测 / 未检测"的比例。未覆盖技术应优先补建检测规则或数据源,已覆盖技术则可用于验证监控有效性。SKILL.md 中提供的 APT29 检测缺口分析(SKILL.md)即以红绿双色 Layer 呈现缺口(红 = 未检测缺口,绿 = 已检测),并配套按 14 个战术维度(reconnaissance → impact)的 TTP 分布分解,便于面向检测工程输出可执行结论。
8. 相关仓库资源导航
- api-reference.md:本文依据的 API 参考原文;
- agent.py:完整可运行的 TTP 映射与 Layer 生成代理;
- SKILL.md:配套技能文档,含多组织对比与缺口分析的 Python 示例;
- mappings/attack-navigator-layer.json:仓库级 Layer v4.5 实例(Enterprise ATT&CK v14,覆盖 218+ 技术);
- mappings/README.md:Layer 文件的查看方式、覆盖统计与颜色刻度说明;
- ATTACK_COVERAGE.md:291 项技术、14 个战术维度的全仓库覆盖映射。
注意事项:本文涉及的版本信息(Layer 格式 4.5、Navigator 5.x、ATT&CK 14-16)以当前仓库实际内容与 agent.py 生成逻辑为准;运行脚本前需先安装attackcti依赖,且首次查询需访问可用的 TAXII 数据源。
【免费下载链接】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),仅供参考