使用 attackcti 与 MITRE ATTCK Navigator 分析威胁组织 TTP:Anthropic-Cybersecurity-Skills 实战指南
2026/9/11 20:50:15 网站建设 项目流程

使用 attackcti 与 MITRE ATT&CK Navigator 分析威胁组织 TTP:Anthropic-Cybersecurity-Skills 实战指南

【免费下载链接】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技能为主线,讲解如何用attackctiPython 库通过 STIX/TAXII 协议拉取 MITRE ATT&CK 数据,将 APT 组织的技术、战术与过程(TTP)程序化映射为 ATT&CK Navigator 层(Layer)JSON,从而构建攻击者画像、叠加检测覆盖率并定位防御缺口。读完本文,你将掌握从"查询威胁组织"到"导出可审阅的 Navigator 热力图层"的完整链路,并能复用仓库配套脚本 agent.py 直接落地分析。

背景:为什么需要"威胁组织 TTP + Navigator 层"

MITRE ATT&CK Navigator 是一个用于标注和可视化 ATT&CK 矩阵的 Web 应用。单独使用它只能手工勾选技术点;而一旦与attackcti这类编程库组合,分析师就可以:

  • 通过 TAXII 服务批量查询某威胁组织(如 APT29)在 ATT&CK 中被归因的全部技术;
  • 程序化生成 Navigator 层文件,把组织 TTP 变成可共享、可叠加的可视化图层;
  • 横向对比多个组织(如 APT29、APT28、Lazarus Group)的共享技术与独有技术;
  • 将"威胁组织已观察技术"与"自身检测能力"叠加,精确量化覆盖缺口,为检测工程排期提供依据。

这正是本仓库中该技能的核心应用场景:SOC 分析师在事件调查、检测规则建设、狩猎查询编写以及安全监控覆盖校验时,把威胁情报直接转化为可执行的技术矩阵。

前置条件与适用时机

在开始前需要准备:

  • Python 3.8+,并安装attackctistix2库(脚本依赖见 agent.py);
  • MITRE ATT&CK Navigator(Web UI 或本地实例),用于加载生成的层文件;
  • STIX 2.1 对象与关系的基本理解,包括intrusion-set(威胁组织)、attack-pattern(技术)及二者间的uses关系。

该技能尤其适用于以下场景:

  • 安全事件调查中需要分析威胁组织 TTP 时;
  • 为该领域构建检测规则或威胁狩猎查询时;
  • SOC 分析师需要结构化分析流程时;
  • 针对特定威胁行为者验证安全监控覆盖并识别差距时。

一、整体工作流:从 STIX 查询到 Navigator 层

原技能文档定义了五步核心流程,本文将其逐一展开并补充源码级细节:

  1. 查询 ATT&CK STIX 数据:用attackctiattack_client()初始化客户端,TAXII 服务拉取目标威胁组织;
  2. 提取技术:通过 STIX 关系(组织uses技术)取出与该组织关联的全部技术;
  3. 生成 Navigator 层 JSON:为每条技术附加techniqueIDscorecolorcomment等标注;
  4. 叠加检测覆盖率:将组织 TTP 集合与自身可检测技术集合做差集运算,找出缺口;
  5. 导出层文件:交团队审阅与防御规划。

下面从第一步的底层原理讲起。

二、attackcti:通过 STIX/TAXII 程序化访问 ATT&CK

attackcti是一个专为 ATT&CK 数据设计的 Python 客户端,底层连接 MITRE 公开的 TAXII 服务器,返回 STIX 2.1 对象。仓库配套脚本 agent.py 的初始化方式如下:

from attackcti import attack_client def get_attack_client(): """Initialize ATT&CK STIX/TAXII client.""" return attack_client()

如果attackcti未安装,脚本会提示Install: pip install attackcti并退出(见 agent.py)。参考文档 api-reference.md 列出了常用方法:

方法说明
attack_client()初始化用于 ATT&CK 数据的 STIX/TAXII 客户端
client.get_groups()检索 ATT&CK 中的全部威胁组织
client.get_techniques()检索 ATT&CK 中的全部技术
client.get_techniques_used_by_group(group)获取与指定组织关联的技术
client.get_software()检索全部软件/工具
client.get_software_used_by_group(group)获取指定组织使用的软件
client.get_mitigations()检索全部缓解措施
client.get_data_sources()检索全部数据源

提示:本仓库的映射方法论中,技能到技术的映射同样依赖这些 ATT&CK 标识符(如T1566T1059.001),详见 mappings/mitre-attack/README.md。

2.1 列出全部威胁组织

分析的第一步通常是盘点可用的威胁组织。脚本通过client.get_groups()遍历每个组织对象,抽取名称、ATT&CK 外部 ID 与别名:

def list_threat_groups(client): """List all threat groups in ATT&CK.""" groups = client.get_groups() results = [] for g in groups: aliases = g.get("aliases", []) results.append({ "name": g.get("name", ""), "id": g.get("external_references", [{}])[0].get("external_id", "") if g.get("external_references") else "", "aliases": aliases, "description": g.get("description", "")[:200], }) return sorted(results, key=lambda x: x["name"])

这里的关键点是:威胁组织在 STIX 中对应intrusion-set对象,其external_references数组中的external_id字段保存了 ATT&CK 组织编号(如G0016对应 APT29)。输出按名称排序,便于快速浏览。

2.2 提取组织使用的技术

get_group_techniques()先做名称/别名匹配定位组织,再调用get_techniques_used_by_group()获取技术列表,最后从每条技术的external_references中解析出mitre-attack来源的external_id(即T1xxx形式的编号)与官方 URL,并附上平台信息:

def get_group_techniques(client, group_name): groups = client.get_groups() target_group = None for g in groups: if g.get("name", "").lower() == group_name.lower(): target_group = g break aliases = [a.lower() for a in g.get("aliases", [])] if group_name.lower() in aliases: target_group = g break if not target_group: return {"error": f"Group '{group_name}' not found"} techniques = client.get_techniques_used_by_group(target_group) results = [] for tech in techniques: ext_refs = tech.get("external_references", []) tech_id = "" url = "" for ref in ext_refs: if ref.get("source_name") == "mitre-attack": tech_id = ref.get("external_id", "") url = ref.get("url", "") break results.append({ "technique_id": tech_id, "name": tech.get("name", ""), "description": tech.get("description", "")[:150], "url": url, "platforms": tech.get("x_mitre_platforms", []), }) return { "group_name": target_group.get("name", ""), "group_id": target_group.get("external_references", [{}])[0].get("external_id", ""), "technique_count": len(results), "techniques": results, }

值得注意的细节是:匹配是大小写不敏感的,且会同时命中别名——例如用户输入Cozy Bear也能定位到 APT29。这一设计让情报报告中的俗称、别名可以直接作为查询入口。

2.3 STIX 2.1 对象字段速查

参考文档对 STIX 2.1 的组织与技术对象字段做了系统梳理,实际解析时按此处理:

组织(intrusion-set)对象字段

字段说明
idSTIX 对象 ID(如intrusion-set--abc123
name组织名称(如 APT29)
aliases组织的替代名称
description组织描述与背景
external_references引用列表,含 ATT&CK ID
created对象创建时间戳
modified对象最后修改时间戳

技术(attack-pattern)对象字段

字段说明
name技术名称(如 Spearphishing Attachment)
external_references[].external_idATT&CK 技术 ID(如 T1566.001)
x_mitre_platforms目标平台(Windows、Linux、macOS 等)
kill_chain_phases杀伤链中关联的战术阶段
x_mitre_detection该技术的检测建议
x_mitre_is_subtechnique是否为子技术

三、生成 Navigator 层:Layer JSON 结构与语义

获取技术列表后,核心任务是把结构化数据转换为 Navigator 层文件。仓库脚本中的generate_navigator_layer()给出了完整实现(见 agent.py):

def generate_navigator_layer(group_data, color="#ff6666"): """Generate ATT&CK Navigator layer JSON from group technique data.""" techniques = [] for tech in group_data.get("techniques", []): tid = tech.get("technique_id", "") if not tid: continue techniques.append({ "techniqueID": tid, "score": 1, "color": color, "comment": tech.get("name", ""), "enabled": True, }) layer = { "name": f"{group_data.get('group_name', 'Unknown')} TTPs", "versions": { "attack": "15", "navigator": "5.0", "layer": "4.5", }, "domain": "enterprise-attack", "description": f"Techniques used by {group_data.get('group_name', '')} " f"({group_data.get('group_id', '')})", "filters": {"platforms": ["Windows", "Linux", "macOS", "Cloud"]}, "sorting": 0, "layout": {"layout": "side", "showID": True, "showName": True}, "hideDisabled": False, "techniques": techniques, "gradient": { "colors": ["#ffffff", color], "minValue": 0, "maxValue": 1, }, "legendItems": [ {"label": f"{group_data.get('group_name', '')} techniques", "color": color}, ], "metadata": [], "showTacticRowBackground": True, "tacticRowBackground": "#dddddd", } return layer

原技能文档给出的最小输出示例如下,与本实现的结构一致:

{ "name": "APT29 TTPs", "domain": "enterprise-attack", "techniques": [ {"techniqueID": "T1566.001", "score": 1, "comment": "Spearphishing Attachment"}, {"techniqueID": "T1059.001", "score": 1, "comment": "PowerShell"} ] }

3.1 Navigator Layer JSON Schema 详解

参考文档 api-reference.md 对 Layer Schema 做了逐字段说明,这是手工构造或校验层文件时的权威速查表:

字段类型说明
namestring层显示名称
versions.attackstringATT&CK 版本(如 "15")
versions.navigatorstringNavigator 版本(如 "5.0")
versions.layerstring层格式版本(如 "4.5")
domainstringenterprise-attackmobile-attackics-attack
techniques[].techniqueIDstringATT&CK 技术 ID
techniques[].scoreinteger用于着色的数值评分(0-100)
techniques[].colorstring十六进制颜色覆盖(如#ff6666
techniques[].commentstring该技术的注释文本
techniques[].enabledboolean技术单元格是否启用
gradient.colorsarray从最小到最大评分的颜色渐变
gradient.minValueinteger最小评分值
gradient.maxValueinteger最大评分值
filters.platformsarray矩阵中要展示的平台
legendItems[].labelstring图例条目标签
legendItems[].colorstring图例条目颜色

理解评分与着色的配合scoregradient共同决定热力图颜色深浅——当某个技术score设为 1 且渐变区间为["#ffffff", color](0→1)时,命中技术即显示为color(默认红色#ff6666),未命中则为白色。若要做覆盖深度热力图(如"有多少个技能引用该技术"),则把minValue/maxValue扩到 0–100,并按引用数给score赋权。

3.2 仓库内的真实 Layer 实例

本仓库自身就是 Navigator 层的最佳范例:仓库根目录的 mappings/attack-navigator-layer.json 将 700+ 个技能对 ATT&CK Enterprise 矩阵的覆盖情况打包成了一个层文件。它的做法值得借鉴:

  • 每条技术以score表示被多少技能引用(如T1003.001LSASS Memory 的score: 46,表示被 12 个技能引用);
  • metadata中附上skill_count与具体技能列表,让图层自带审计信息;
  • 使用蓝色渐变区分覆盖深度:浅蓝#cfe2f3(1-2 个技能)、中蓝#6fa8dc(3-5 个)、深蓝#3d85c6(6-10 个)、最深#1155cc(11+ 个),详见 mappings/README.md。

这个实例证明了同一套 Layer Schema 既可以表达"威胁组织 TTP",也可以表达"防御方技能覆盖",两者叠加即为差距分析的基础。

四、CLI 实操:一条命令完成 TTP 分析与层导出

配套脚本 agent.py 封装了上述全部能力为命令行工具。参考文档 api-reference.md 给出了完整的 CLI 用法:

# 列出全部 ATT&CK 威胁组织 python agent.py --list-groups # 分析指定组织 python agent.py --group "APT29" # 生成 Navigator 层文件 python agent.py --group "APT29" --layer-output apt29_layer.json # 对比多个组织 python agent.py --compare "APT29" "APT28" "Lazarus Group" # 保存完整报告为 JSON python agent.py --group "APT29" --layer-output apt29.json --output report.json

对应的命令行参数定义(见 agent.py):

参数说明
--group要分析的威胁组织名称(如 APT29)
--list-groups列出全部 ATT&CK 组织
--compare对比多个组织(接收多个参数)
--layer-output将 Navigator 层 JSON 保存到文件
--output将完整报告保存为 JSON 文件

运行--group "APT29"时,脚本会输出组织 ID、技术总数及前 20 条技术(T1xxx: 名称格式);配合--layer-output即生成可直接拖入 Navigator 的层文件。整个审计过程会以 UTC 时间戳打印横幅头(见 agent.py),适合归档取证。

五、多组织对比与共享技术分析

威胁情报中的常见问题不是"某个组织用什么",而是"这些组织之间重叠了什么、各自独有什么"。compare_groups()用集合运算回答了这个问题(见 agent.py):

def compare_groups(client, group_names): all_techniques = {} group_techs = {} for name in group_names: data = get_group_techniques(client, name) if "error" in data: continue techs = {t["technique_id"] for t in data.get("techniques", [])} group_techs[data.get("group_name", name)] = techs for t in data.get("techniques", []): all_techniques[t["technique_id"]] = t["name"] shared = set.intersection(*group_techs.values()) if group_techs else set() unique_per_group = {} for name, techs in group_techs.items(): unique_per_group[name] = techs - set.union(*(v for k, v in group_techs.items() if k != name)) return { "groups_compared": list(group_techs.keys()), "total_unique_techniques": len(set.union(*group_techs.values())) if group_techs else 0, "shared_techniques": [{"id": t, "name": all_techniques.get(t, "")} for t in shared], "shared_count": len(shared), "unique_per_group": {k: len(v) for k, v in unique_per_group.items()}, }

这套逻辑的产出非常直观:

  • shared_techniques:所有被对比组织共同使用的技术。若多个组织的交集中出现T1059.001(PowerShell),说明这是高价值、应优先覆盖的共性攻击面;
  • unique_per_group:每个组织的独有技术,用于识别组织特异性行为,为差异化防御提供线索;
  • total_unique_techniques:并集规模,反映整体威胁面大小。

例如--compare "APT29" "APT28" "Lazarus Group"会输出三个组织的名称、总技术数、共享技术数量及前 10 条共享技术。将共享技术生成一个 Navigator 层,就能在矩阵上一眼看出共性热区。

六、检测覆盖差距分析:把 TTP 变成防御行动

生成层文件只是手段,最终目标是找出检测缺口。同仓库的姊妹技能 analyzing-threat-actor-ttps-with-mitre-attack 给出了标准的差距分析范式:把"行为者技术集合"与"你当前能检测的技术集合"做集合运算。

# 对比威胁组织技术与你现有的检测能力 detected_techniques = {"T1059", "T1071", "T1566"} # 示例:你能检测的技术 actor_techniques = set(technique_map.keys()) covered = actor_techniques.intersection(detected_techniques) gaps = actor_techniques - detected_techniques 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}%)")

将这一思想与本技能结合,可以形成闭环的实战流程:

  1. get_group_techniques()得到组织技术集合(actor_techniques);
  2. --list-groups与 Navigator 层维护己方"可检测技术"集合;
  3. 计算gaps = actor_techniques - detected_techniques,得到未监控技术清单
  4. 把缺口清单以score: 0、白色着色叠加到组织 TTP 层上,生成"覆盖 vs 缺口"双层对比图;
  5. 按缺口的杀伤链阶段与技术严重程度排定检测规则开发优先级,输出给检测工程团队。

此外,ATT&CK 数据源字段(x_mitre_data_sources)可用于反推:若某技术依赖的数据源(如进程命令行、网络连接日志)尚未采集,那即使写了规则也无法检测——这是差距分析中值得补充的第二维度。

七、验证标准:如何确认分析结果可用

参考仓库中 mappings/mitre-attack/README.md 的映射方法论与同领域技能的验证准则,一份合格的 TTP 分析应当满足:

  • 数据可达:ATT&CK 数据成功通过 TAXII 服务器或本地副本查询;
  • 映射可追溯:威胁组织被映射到具体技术,并尽量附带程序(procedure)示例作为证据;
  • 层文件合法:生成的 Navigator 层 JSON 格式有效,能在 Navigator 中正常渲染(可通过"Open Existing Layer → Upload from local"加载验证,参考 mappings/README.md 的加载方式);
  • 缺口可量化:差距分析明确列出未监控技术及其占比;
  • 对比有结论:跨组织对比揭示共享与独有 TTP;
  • 输出可行动:结果能直接用于检测工程排期与防御规划。

八、最佳实践与注意事项

  • 版本一致性:Layer 中的versions.attack应与数据源的 ATT&CK 版本一致。本仓库实例使用 ATT&CK v14/v15、Layer v4.5 格式(见 mappings/attack-navigator-layer.json),新数据更新时需同步调整,避免 ID 漂移导致层渲染错位。
  • 子技术粒度:ATT&CK 同时存在父技术(如T1566)与子技术(如T1566.001)。生成层文件时建议同时保留,或在 Navigator 中启用expandedSubtechniques(仓库实例即设置了"expandedSubtechniques": "annotated")以完整呈现。
  • 别名查询:攻击者组织常以多个名称出现,匹配逻辑务必覆盖aliases字段(本仓库脚本已实现)。
  • 评论信息:善用commentmetadata字段把情报上下文(来源报告、事件 ID、程序示例)写进层文件,使图层成为自解释的审计制品。
  • 环境依赖attackcti需要网络访问 MITRE TAXII 服务;离线环境可考虑本地 ATT&CK STIX 副本,再以相同数据结构喂给层生成逻辑。

结语

从 STIX/TAXII 数据查询、技术提取、Navigator 层生成,到多组织对比与检测缺口分析,analyzing-threat-actor-ttps-with-mitre-navigator技能把"威胁情报 → 可视矩阵 → 防御决策"的链路完整打通。你既可以一行命令直接使用 agent.py,也可以参考 api-reference.md 的 Schema 自行扩展(如叠加检测覆盖层、加入数据源分析),再对照仓库自身的 attack-navigator-layer.json 实例校准输出格式,快速产出可供团队审阅与排期的威胁驱动防御依据。

【免费下载链接】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),仅供参考

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

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

立即咨询