尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

使用 attackcti 与 MITRE ATTCK Navigator 分析威胁组织 TTP:Anthropic-Cybersecurity-Skills 实战指南 使用 attackcti 与 MITRE ATTCK Navigator 分析威胁组织 TTPAnthropic-Cybersecurity-Skills 实战指南【免费下载链接】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导读本文以 Anthropic-Cybersecurity-Skills 仓库中的analyzing-threat-actor-ttps-with-mitre-navigator技能为主线讲解如何用attackctiPython 库通过 STIX/TAXII 协议拉取 MITRE ATTCK 数据将 APT 组织的技术、战术与过程TTP程序化映射为 ATTCK Navigator 层LayerJSON从而构建攻击者画像、叠加检测覆盖率并定位防御缺口。读完本文你将掌握从查询威胁组织到导出可审阅的 Navigator 热力图层的完整链路并能复用仓库配套脚本 agent.py 直接落地分析。背景为什么需要威胁组织 TTP Navigator 层MITRE ATTCK Navigator 是一个用于标注和可视化 ATTCK 矩阵的 Web 应用。单独使用它只能手工勾选技术点而一旦与attackcti这类编程库组合分析师就可以通过 TAXII 服务批量查询某威胁组织如 APT29在 ATTCK 中被归因的全部技术程序化生成 Navigator 层文件把组织 TTP 变成可共享、可叠加的可视化图层横向对比多个组织如 APT29、APT28、Lazarus Group的共享技术与独有技术将威胁组织已观察技术与自身检测能力叠加精确量化覆盖缺口为检测工程排期提供依据。这正是本仓库中该技能的核心应用场景SOC 分析师在事件调查、检测规则建设、狩猎查询编写以及安全监控覆盖校验时把威胁情报直接转化为可执行的技术矩阵。前置条件与适用时机在开始前需要准备Python 3.8并安装attackcti与stix2库脚本依赖见 agent.pyMITRE ATTCK NavigatorWeb UI 或本地实例用于加载生成的层文件对STIX 2.1 对象与关系的基本理解包括intrusion-set威胁组织、attack-pattern技术及二者间的uses关系。该技能尤其适用于以下场景安全事件调查中需要分析威胁组织 TTP 时为该领域构建检测规则或威胁狩猎查询时SOC 分析师需要结构化分析流程时针对特定威胁行为者验证安全监控覆盖并识别差距时。一、整体工作流从 STIX 查询到 Navigator 层原技能文档定义了五步核心流程本文将其逐一展开并补充源码级细节查询 ATTCK STIX 数据用attackcti的attack_client()初始化客户端TAXII 服务拉取目标威胁组织提取技术通过 STIX 关系组织uses技术取出与该组织关联的全部技术生成 Navigator 层 JSON为每条技术附加techniqueID、score、color、comment等标注叠加检测覆盖率将组织 TTP 集合与自身可检测技术集合做差集运算找出缺口导出层文件交团队审阅与防御规划。下面从第一步的底层原理讲起。二、attackcti通过 STIX/TAXII 程序化访问 ATTCKattackcti是一个专为 ATTCK 数据设计的 Python 客户端底层连接 MITRE 公开的 TAXII 服务器返回 STIX 2.1 对象。仓库配套脚本 agent.py 的初始化方式如下from attackcti import attack_client def get_attack_client(): Initialize ATTCK STIX/TAXII client. return attack_client()如果attackcti未安装脚本会提示Install: pip install attackcti并退出见 agent.py。参考文档 api-reference.md 列出了常用方法方法说明attack_client()初始化用于 ATTCK 数据的 STIX/TAXII 客户端client.get_groups()检索 ATTCK 中的全部威胁组织client.get_techniques()检索 ATTCK 中的全部技术client.get_techniques_used_by_group(group)获取与指定组织关联的技术client.get_software()检索全部软件/工具client.get_software_used_by_group(group)获取指定组织使用的软件client.get_mitigations()检索全部缓解措施client.get_data_sources()检索全部数据源提示本仓库的映射方法论中技能到技术的映射同样依赖这些 ATTCK 标识符如T1566、T1059.001详见 mappings/mitre-attack/README.md。2.1 列出全部威胁组织分析的第一步通常是盘点可用的威胁组织。脚本通过client.get_groups()遍历每个组织对象抽取名称、ATTCK 外部 ID 与别名def list_threat_groups(client): List all threat groups in ATTCK. 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, keylambda x: x[name])这里的关键点是威胁组织在 STIX 中对应intrusion-set对象其external_references数组中的external_id字段保存了 ATTCK 组织编号如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: fGroup {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--abc123name组织名称如 APT29aliases组织的替代名称description组织描述与背景external_references引用列表含 ATTCK IDcreated对象创建时间戳modified对象最后修改时间戳技术attack-pattern对象字段字段说明name技术名称如 Spearphishing Attachmentexternal_references[].external_idATTCK 技术 ID如 T1566.001x_mitre_platforms目标平台Windows、Linux、macOS 等kill_chain_phases杀伤链中关联的战术阶段x_mitre_detection该技术的检测建议x_mitre_is_subtechnique是否为子技术三、生成 Navigator 层Layer JSON 结构与语义获取技术列表后核心任务是把结构化数据转换为 Navigator 层文件。仓库脚本中的generate_navigator_layer()给出了完整实现见 agent.pydef generate_navigator_layer(group_data, color#ff6666): Generate ATTCK 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: fTechniques 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.attackstringATTCK 版本如 15versions.navigatorstringNavigator 版本如 5.0versions.layerstring层格式版本如 4.5domainstringenterprise-attack、mobile-attack或ics-attacktechniques[].techniqueIDstringATTCK 技术 IDtechniques[].scoreinteger用于着色的数值评分0-100techniques[].colorstring十六进制颜色覆盖如#ff6666techniques[].commentstring该技术的注释文本techniques[].enabledboolean技术单元格是否启用gradient.colorsarray从最小到最大评分的颜色渐变gradient.minValueinteger最小评分值gradient.maxValueinteger最大评分值filters.platformsarray矩阵中要展示的平台legendItems[].labelstring图例条目标签legendItems[].colorstring图例条目颜色理解评分与着色的配合score与gradient共同决定热力图颜色深浅——当某个技术score设为 1 且渐变区间为[#ffffff, color]0→1时命中技术即显示为color默认红色#ff6666未命中则为白色。若要做覆盖深度热力图如有多少个技能引用该技术则把minValue/maxValue扩到 0–100并按引用数给score赋权。3.2 仓库内的真实 Layer 实例本仓库自身就是 Navigator 层的最佳范例仓库根目录的 mappings/attack-navigator-layer.json 将 700 个技能对 ATTCK Enterprise 矩阵的覆盖情况打包成了一个层文件。它的做法值得借鉴每条技术以score表示被多少技能引用如T1003.001LSASS Memory 的score: 46表示被 12 个技能引用metadata中附上skill_count与具体技能列表让图层自带审计信息使用蓝色渐变区分覆盖深度浅蓝#cfe2f31-2 个技能、中蓝#6fa8dc3-5 个、深蓝#3d85c66-10 个、最深#1155cc11 个详见 mappings/README.md。这个实例证明了同一套 Layer Schema 既可以表达威胁组织 TTP也可以表达防御方技能覆盖两者叠加即为差距分析的基础。四、CLI 实操一条命令完成 TTP 分析与层导出配套脚本 agent.py 封装了上述全部能力为命令行工具。参考文档 api-reference.md 给出了完整的 CLI 用法# 列出全部 ATTCK 威胁组织 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列出全部 ATTCK 组织--compare对比多个组织接收多个参数--layer-output将 Navigator 层 JSON 保存到文件--output将完整报告保存为 JSON 文件运行--group APT29时脚本会输出组织 ID、技术总数及前 20 条技术T1xxx: 名称格式配合--layer-output即生成可直接拖入 Navigator 的层文件。整个审计过程会以 UTC 时间戳打印横幅头见 agent.py适合归档取证。五、多组织对比与共享技术分析威胁情报中的常见问题不是某个组织用什么而是这些组织之间重叠了什么、各自独有什么。compare_groups()用集合运算回答了这个问题见 agent.pydef 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.001PowerShell说明这是高价值、应优先覆盖的共性攻击面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(fActor techniques: {len(actor_techniques)}) print(fDetected: {len(covered)} ({len(covered)/len(actor_techniques)*100:.0f}%)) print(fGaps: {len(gaps)} ({len(gaps)/len(actor_techniques)*100:.0f}%))将这一思想与本技能结合可以形成闭环的实战流程用get_group_techniques()得到组织技术集合actor_techniques用--list-groups与 Navigator 层维护己方可检测技术集合计算gaps actor_techniques - detected_techniques得到未监控技术清单把缺口清单以score: 0、白色着色叠加到组织 TTP 层上生成覆盖 vs 缺口双层对比图按缺口的杀伤链阶段与技术严重程度排定检测规则开发优先级输出给检测工程团队。此外ATTCK 数据源字段x_mitre_data_sources可用于反推若某技术依赖的数据源如进程命令行、网络连接日志尚未采集那即使写了规则也无法检测——这是差距分析中值得补充的第二维度。七、验证标准如何确认分析结果可用参考仓库中 mappings/mitre-attack/README.md 的映射方法论与同领域技能的验证准则一份合格的 TTP 分析应当满足数据可达ATTCK 数据成功通过 TAXII 服务器或本地副本查询映射可追溯威胁组织被映射到具体技术并尽量附带程序procedure示例作为证据层文件合法生成的 Navigator 层 JSON 格式有效能在 Navigator 中正常渲染可通过Open Existing Layer → Upload from local加载验证参考 mappings/README.md 的加载方式缺口可量化差距分析明确列出未监控技术及其占比对比有结论跨组织对比揭示共享与独有 TTP输出可行动结果能直接用于检测工程排期与防御规划。八、最佳实践与注意事项版本一致性Layer 中的versions.attack应与数据源的 ATTCK 版本一致。本仓库实例使用 ATTCK v14/v15、Layer v4.5 格式见 mappings/attack-navigator-layer.json新数据更新时需同步调整避免 ID 漂移导致层渲染错位。子技术粒度ATTCK 同时存在父技术如T1566与子技术如T1566.001。生成层文件时建议同时保留或在 Navigator 中启用expandedSubtechniques仓库实例即设置了expandedSubtechniques: annotated以完整呈现。别名查询攻击者组织常以多个名称出现匹配逻辑务必覆盖aliases字段本仓库脚本已实现。评论信息善用comment与metadata字段把情报上下文来源报告、事件 ID、程序示例写进层文件使图层成为自解释的审计制品。环境依赖attackcti需要网络访问 MITRE TAXII 服务离线环境可考虑本地 ATTCK 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 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),仅供参考
返回列表