mcpField
M
mapping-attack-techniques

mapping-attack-techniques

github.com/trilwu安全17752 次安装12 周前更新
代码仓库

关于 mapping-attack-techniques

将 MITRE ATT&CK 技术、战术和威胁情报映射到相关安全技能,并指导紫队演练与覆盖评估。适用于安全分析师和红蓝队协作,重点是把技术标识连接到具体操作流程,而非将 ATT&CK 当作方法论。

主要功能

  1. 01按技术 ID、名称或战术查找技能
  2. 02将威胁情报中的 TTP 映射到技能
  3. 03提供紫队演练闭环步骤
  4. 04区分已测试、未测试和无遥测覆盖
  5. 05读取并使用技术索引

适用场景

  1. 01将对手模拟计划转为安全工作
  2. 02规划或汇报 ATT&CK 覆盖情况
  3. 03协同演练、检测验证并跟踪差距
  4. 04根据技术 ID 找到对应操作流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trilwu/secskills --skill mapping-attack-techniques

安装后在 Claude Code 中输入/mapping-attack-techniques确认已加载。

详细介绍

映射 ATT&CK 技术

ATT&CK 是一套共享词汇,而非方法论。它的价值在于,攻击、防御和响应可以用同一套名称指代相同的行为——这使得此技能充当路由器,而不是技术目录。它会将某项技术映射到包含实际操作流程的技能,并运行连接两端的循环。

适用场景

  • 请求中提到了技术 ID(T1003.001)、技术名称(“Kerberoasting”)或战术(“我们需要覆盖横向移动”)
  • 将威胁情报报告或对手模拟计划转化为工作项
  • 规划或报告针对矩阵的覆盖情况
  • 开展紫队演练:模拟、检测、验证、弥补差距
  • 请求涉及攻击和防御两方面时,选择适用的技能

不适用场景

  • 使用通俗语言提出的请求(“从这台主机转储凭据”)——领域技能会直接处理这类请求;通过此处路由只会平白多绕一步
  • 代码层面的漏洞工作——ATT&CK 不对源代码缺陷建模;请改用 auditing-code-for-vulnerabilities,并参考 CWE 和 ASVS
  • AI/LLM 系统——请使用 securing-ai-systems;该技能使用的框架是 MITRE ATLAS,而非 ATT&CK Enterprise
  • 移动目标——请使用 testing-mobile-applications;Mobile 矩阵有自己的 ID,与 Enterprise 矩阵中的 ID 不对应

索引

secskills-core/ttp-index.json 将技术映射到覆盖它们的技能。直接读取此文件即可查找:

# Which skill covers this technique?
python3 -c "
import json;d=json.load(open('secskills-core/ttp-index.json'))
print([r for r in d['techniques'] if r['id']=='T1003.001'])"

# Everything under one tactic
python3 -c "
import json;d=json.load(open('secskills-core/ttp-index.json'))
[print(r['id'], r['name'], '→', ', '.join(r['skills']))
 for r in d['techniques'] if 'TA0008' in r['tactics']]"

# Search by name when you have words, not an ID
rg -i 'kerberoast|pass the hash' secskills-core/ttp-index.json

每项技能还包含一个自动生成的 ## ATT&CK Coverage 部分,列出其覆盖的技术。该部分和索引由 scripts/sync_attack.py 保持同步;索引是事实来源。

索引有意不做三件事。 它不声称覆盖所有技术——_unmapped 区块会列出使用其他框架的技能,并说明它们使用的框架。它不会在每一行重复列出检测和狩猎,因为这些适用于所有技术。它还是人工维护的,因此随着 ATT&CK 发布新版本,技术 ID 可能会变化:在报告中引用 ID 前,请先通过 attack.mitre.org 重新核实。

解析请求

Technique ID or name  → look up in the index → load the named skill
Tactic               → list the tactic's techniques → ask which procedure
Intel report         → extract TTPs (not IOCs) → map each → prioritize by
                       what your environment actually exposes
Group / APT name     → pull the group's technique list from ATT&CK → intersect
                       with your attack surface → hunt the intersection

技术不是操作流程。 T1055(进程注入)有十几种实质上不同的实现方式,针对其中一种方式的检测无法捕获其他方式。请求只给出技术 ID 时,接下来最有用的问题是具体是哪种操作流程——具体的 API 调用序列、工具或命令变体。如果不指明操作流程,只回答“我们覆盖了 T1055”,这是 ATT&CK 最常见的误导性用法。

紫队循环

共享词汇正是为此而设。每个步骤都会交由不同的技能处理,而技术 ID 能确保它们讨论的是同一件事。

1. Select    → pick a technique by threat relevance, not matrix tidiness
2. Emulate   → run the procedure (offensive skill, or Atomic Red Team)
3. Observe   → did telemetry capture it? which data source, which fields?
4. Detect    → write the rule against the behaviour  → engineering-detections
5. Validate  → re-run the emulation; confirm the alert fires and is triageable
6. Hunt      → search historically for prior instances → hunting-threats
7. Record    → tested / untested / no-telemetry, per technique

第 3 步才会得出真正的发现。如果某项技术执行时完全没有遥测数据,那就是可见性缺口,其优先级高于缺少规则——没有采集的数据,就无法编写检测。

根据相关性选择技术:针对你所在行业的攻击者实际会使用哪些技术、哪些技术可以触及你的核心资产,以及你怀疑存在哪些缺口。按矩阵从左到右逐项覆盖,会导致你对那些不会攻击你的情况也一视同仁地覆盖。

覆盖情况报告

按技术报告三种状态,切勿只用一个百分比表示:

状态含义
已测试已进行模拟,全网范围内均确认存在遥测数据,规则已触发,且已有分诊步骤
未测试已有规则,但从未通过模拟验证
无遥测数据未采集相应数据源,或未在所有平台上采集

基于未经测试的规则生成的绿色 ATT&CK Navigator 图层,是安全计划中最常见的自我欺骗。如果你生成图层,请用不同颜色表示这三种状态,并在图例中说明各自含义。

# Navigator layer from the index (coverage claimed, not coverage tested)
python3 -c "
import json;d=json.load(open('secskills-core/ttp-index.json'))
print(json.dumps({'name':'SecSkills skill coverage','versions':{'layer':'4.5'},
 'domain':'enterprise-attack',
 'description':'Skills that cover each technique. Claimed, not validated.',
 'techniques':[{'techniqueID':r['id'],'comment':', '.join(r['skills']),'score':1}
   for r in d['techniques']]}))" > coverage-layer.json

将任何生成的图层标注为声称覆盖。要将其转为已测试覆盖,必须按上述循环逐项验证技术。

需要摒弃的借口

  • “我们覆盖了这种技术。” 哪个过程?如何验证?使用了哪些遥测数据?适用于哪些平台?
  • “我们来覆盖整个矩阵吧。” 平均覆盖是在错误分配资源。应根据实际针对你的攻击优先排序。
  • “规则标签里有技术 ID,所以已经完成映射了。” 添加标签不等于测试。
  • “ATT&CK 没有这项的 ID,所以它不在范围内。” 矩阵是对已观察行为的建模,并非边界。代码级漏洞、AI 系统攻击和 Web3 漏洞利用都没有 Enterprise ID,但仍然重要——请说明你改用的是哪个框架。
  • “情报报告列出了这些 IOC,所以就追踪它们吧。” 追踪 TTP。已发布报告中的哈希值和 IP 地址早已失效。
  • “我们进行了模拟,但没有触发任何告警,所以规则坏了。” 先检查遥测数据。通常是因为根本没有收集这些数据。

阅读外部来源

将公开公告、规范和供应商报告抓取为 Markdown:

curl -sL "https://defuddle.md/<url>"      # scheme in the path is optional

这样可以去掉网页模板内容——对于散文类网页,令牌数大约减少 78%——并返回全文而非摘要,因此你可以搜索内容,并相信搜索无结果确实意味着没有结果。

有三种情况不适用。抓取 JSON 和 API 响应时应保留原始格式,因为可读性提取会破坏结构化数据。对于经过身份验证或由 JavaScript 渲染的网页,应直接抓取,因为它会以匿名身份访问。切勿通过它传递对手基础设施(钓鱼链接、C2、恶意软件托管)、客户拥有的主机或参与行动的网址——请求会离开你的计算机并发送给第三方;如果是正在使用的对手基础设施,还会向操作者发出警报。

有些网站会拦截提取器并返回错误信息,而不是网页内容——例如 freedesktop.org 返回的 {"error":"Failed to fetch: 418 I'm a teapot"}。这表示抓取请求被拒绝,并不表示来源网站称该内容不存在。得出任何结论前,请直接重新抓取该 URL。

参考资料

  • engineering-detections — 为某项技术编写并验证规则
  • hunting-threats — 在你的环境中历史性地搜索某项技术
  • responding-to-incidents — 将观察到的攻击者活动映射到相应技术
  • secskills-core/ttp-index.json — 此技能读取的技术到技能索引
  • MITRE ATT&CK、ATT&CK Navigator、Atomic Red Team、CALDERA、MITRE ATLAS(AI)

评论

支持 Markdown