关于 mapping-attack-techniques
将 MITRE ATT&CK 技术、战术和威胁情报映射到相关安全技能,并指导紫队演练与覆盖评估。适用于安全分析师和红蓝队协作,重点是把技术标识连接到具体操作流程,而非将 ATT&CK 当作方法论。
主要功能
- 01按技术 ID、名称或战术查找技能
- 02将威胁情报中的 TTP 映射到技能
- 03提供紫队演练闭环步骤
- 04区分已测试、未测试和无遥测覆盖
- 05读取并使用技术索引
适用场景
- 01将对手模拟计划转为安全工作
- 02规划或汇报 ATT&CK 覆盖情况
- 03协同演练、检测验证并跟踪差距
- 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)