ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

使用 MITRE ATTCK 分析威胁行为者 TTP:从攻击者画像到检测缺口评估的完整实战指南

使用 MITRE ATTCK 分析威胁行为者 TTP:从攻击者画像到检测缺口评估的完整实战指南 使用 MITRE ATTCK 分析威胁行为者 TTP从攻击者画像到检测缺口评估的完整实战指南【免费下载链接】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-attack技能为核心系统讲解如何将威胁行为者的行为与可观察 IOC 映射到 MITRE ATTCK 框架通过 ATTCK Navigator 构建技术覆盖热力图识别检测盲区并产出可执行的威胁情报报告覆盖 Enterprise、Mobile 与 ICS 三张矩阵。读完本文你将掌握一套可复现的「威胁情报 → 技术映射 → 可视化 → 缺口分析 → 情报报告」全流程并能在实际 SOC 与检测工程场景中直接落地。技能背景与定位该技能位于仓库的 skills/analyzing-threat-actor-ttps-with-mitre-attack/ 目录属于threat-intelligence威胁情报子域其官方定义见 SKILL.md为系统化地将威胁行为者行为与观察到的 IOC 映射到 MITRE ATTCK 框架用 ATTCK Navigator 构建技术覆盖热力图识别检测缺口并在 Enterprise、Mobile 与 ICS 矩阵上产出可操作的威胁情报报告。技能在前置元数据YAML frontmatter中声明了与多个安全框架的对应关系MITRE ATTCK 技术T1566.001鱼叉式钓鱼附件、T1059.001PowerShell、T1071.001Web 协议上的应用层协议、T1547.001注册表运行键、T1053.005计划任务NIST CSF 2.0ID.RA-01、ID.RA-05风险评估、DE.CM-01、DE.AE-02持续监控与异常事件分析D3FEND 对抗技术可执行文件拒绝列表、执行隔离、文件元数据一致性校验、内容格式转换、文件内容分析从仓库的 mappings/mitre-attack/README.md 可以看出整个仓库将 800 个技能统一映射到 ATTCK本文涉及的技能正是威胁情报域中对 ATTCK 技术做「分析侧」映射的核心代表。何时使用该技能该技能适合以下四类场景源自 SKILL.md 的 When to Use 部分调查安全事件时需要系统性分析威胁行为者的 TTP战术、技术与过程为特定威胁域构建检测规则或威胁狩猎查询时SOC 分析师需要针对此类分析的结构化标准流程时需要验证现有安全监控对相关攻击技术的覆盖情况时。本质上这是一份「攻击者视角转防御视角」的翻译工具把威胁报告中的描述性内容转成可量化、可打分、可对比的 ATTCK 技术 ID 集合。环境前置条件在动手前需要准备见 SKILL.md 的 PrerequisitesPython 3.9并安装mitreattack-python、attackcti、stix2三个库MITRE ATTCK NavigatorWeb 在线版或本地部署理解 ATTCK 矩阵结构战术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文件。核心概念ATTCK 矩阵结构Enterprise 矩阵将对抗行为组织为 14 个战术回答「为什么」即攻击者目标其下包含技术回答「怎么做」与子技术具体实现方式。每一项技术都关联了数据源Data Sources、检测建议Detections、缓解措施Mitigations以及来自真实威胁组织观测到的过程示例Procedure Examples。参考 references/standards.md14 个战术及其 TA 编号为按杀伤链顺序侦察TA0043、资源开发TA0042、初始访问TA0001、执行TA0002、持久化TA0003、权限提升TA0004、防御规避TA0005、凭证访问TA0006、发现TA0007、横向移动TA0008、收集TA0009、命令与控制TA0011、数据渗出TA0010、影响TA0040。ATTCK 采用统一的编号体系理解编号前缀有助于快速定位对象类型前缀含义示例T[NNNN]技术T1059命令与脚本解释器T[NNNN].[NNN]子技术T1059.001PowerShellG[NNNN]威胁组织G0016APT29S[NNNN]软件S0154Cobalt StrikeM[NNNN]缓解措施M1049防病毒/反恶意软件ATTCK v16 采用结构化数据源例如进程创建、文件创建、网络连接创建、命令执行、模块加载、Windows 注册表键修改等这些数据源正是后续检测缺口分析的抓手。威胁组织画像Threat Group ProfilesATTCK 收录了 140 个威胁组织如 APT28、APT29、Lazarus Group、FIN7每个组织画像都包含别名、攻击行业、关联战役、使用的软件以及带过程级细节的技术映射。在 STIX 2.1 中这些组织以intrusion-set入侵集合对象表示例如 APT29 的别名包括 Cozy Bear、The Dukes、NOBELIUM见 references/standards.md 的 Intrusion Set 示例。ATTCK NavigatorATTCK Navigator 是用于创建自定义 ATTCK 矩阵可视化的 Web 工具。分析师通过创建 LayerJSON 文件为技术标注分数、颜色、注释与元数据从而可视化威胁行为者覆盖、检测能力或风险评估。本文所附技能与仓库的 mappings/attack-navigator-layer.json仓库整体技能的 ATTCK 覆盖层采用 layer 4.5 / navigator 4.9.1 版本在格式规范上一脉相承。数据获取方式TAXII、STIX Bundle 与离线文件ATTCK 官方数据以 STIX 2.x Bundle 形式在 MITRE cti 仓库 发布。获取数据有三种途径方式一TAXII 服务器实时查询。references/api-reference.md 给出了基于stix2taxii2client的直接查询方式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 矩阵的完整 JSONcurl -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以编程方式查询 ATTCK 数据初始化attackcti客户端并拉取基础数据源自 SKILL.md 与 scripts/process.pyfrom attackcti import attack_client import json # 初始化 ATTCK 客户端查询 MITRE TAXII 服务器 lift attack_client() # 获取所有 Enterprise 技术 enterprise_techniques lift.get_enterprise_techniques() print(fTotal Enterprise techniques: {len(enterprise_techniques)}) # 获取所有威胁组织 groups lift.get_groups() print(fTotal threat groups: {len(groups)}) # 按名称查找特定组织 apt29 [g for g in groups if APT29 in g.get(name, )] if apt29: group apt29[0] print(fGroup: {group[name]}) print(fAliases: {group.get(aliases, [])}) print(fDescription: {group.get(description, )[:200]})仓库中的 scripts/process.py 将这一步封装成ATTACKAnalyzer.find_group()先按名称精确匹配再遍历别名匹配aliases并缓存get_groups()与get_enterprise_techniques()的结果以避免重复的 TAXII 网络请求。Step 2将威胁行为者映射到 ATTCK 技术以 APT29 为例使用其组织 IDG0016获取其使用的全部技术并整理出技术 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精确筛选出 ATTCK 外部 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生成 ATTCK Navigator Layer将技术映射转成符合 Navigator Layer 4.5 规范的 JSON 层文件红色标注「已观测技术」import json def create_navigator_layer(group_name, technique_map, description): Generate ATTCK 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 fTechniques 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, indent2) print([] Navigator layer saved to apt29_navigator_layer.json)关于 Layer 格式的关键字段说明参见 references/standards.md 与仓库实际使用的 mappings/attack-navigator-layer.jsonversions.attack目标 ATTCK 版本映射到attack字段本文示例为 16.1仓库覆盖层为 14domainenterprise-attack、mobile-attack或ics-attacktechniques[]每个元素包含techniqueIDATTCK ID、score0-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(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}%)) 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 映射。威胁报告 → 提取行为 → 映射到 ATTCK → 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 生成正式威胁情报报告。模板包含以下核心结构报告元数据报告 IDTTP-YYYY-NNNN、日期、威胁行为者、ATTCK IDG[NNNN]、分级如 TLP:AMBER、分析师威胁行为者画像名称、别名、疑似来源、动机间谍/经济/破坏、活跃时间、目标行业/区域、关联恶意软件TTP 摘要表按 14 个战术统计技术数量与关键技术详细技术映射表ATTCK ID、技术、子技术、过程示例例如 T1566.001 鱼叉式钓鱼附件 → 发送宏文档检测覆盖统计已检测 / 部分检测 / 无检测的计数与百分比按优先级排序的检测缺口表优先级、ATTCK 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 CriteriaATTCK 数据已通过 TAXII 服务器或本地副本成功查询威胁行为者已映射到具体技术且附带过程级示例ATTCK Navigator Layer JSON 合法且能正确渲染检测缺口分析识别出了未受监控的技术跨组织对比揭示了共有与独有 TTP输出结果对检测工程的优先级排序具有可操作性。与仓库整体 ATTCK 体系的衔接本技能并非孤立存在。仓库在 mappings/mitre-attack/README.md 中维护了全部技能到 ATTCK 的映射方法论战术 TA00xx 映射、技术 T1xxx 映射、子技术映射并在 mappings/attack-navigator-layer.json 中以「技能引用数」为分数构建了仓库整体的 ATTCK 覆盖热力图。本技能生成的单个组织 Layer 与仓库全局 Layer 使用同一套 layer 4.5 规范可互相叠加对比——例如将本技能的 APT29 覆盖层与仓库技能覆盖层叠加即可直观看出「组织会用什么」与「我们有哪些技能/检测」之间的差距这正是 Workflow 2 与 Workflow 5 在企业级落地时的直接体现。结语威胁行为者 TTP 分析是威胁情报从「阅读报告」走向「指导防御」的关键转换层。本文以仓库技能为主线完整覆盖了「查询 ATTCK 数据 → 映射组织技术 → 生成 Navigator Layer → 检测缺口分析 → 跨组织对比 → 报告输出」的端到端流程并借助仓库 scripts/process.py 与 scripts/agent.py 的源码实现说明了底层 STIX relationship 关联、数据源推荐算法与 Layer 生成细节。掌握了这套流程你便能把任何一份威胁情报报告转化为一张可量化、可对比、可驱动检测工程落地的 ATTCK 作战地图。【免费下载链接】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),仅供参考
返回列表