关于 threat-model
threat-model 是供应用负责人和安全团队评估系统风险的技能。它支持基于代码的初步分析、与负责人访谈或两者结合,并生成供后续审查使用的结构化威胁模型。
主要功能
- 01静态分析源码与 Git 历史
- 02支持初步分析和访谈模式
- 03使用 STRIDE 补查风险缺口
- 04生成结构化 THREAT_MODEL.md
适用场景
- 01梳理继承代码库的风险
- 02与系统负责人共同审查设计
- 03为后续安全审查准备威胁背景
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ anthropics/ defending-code-reference-harness --skill threat-model安装后在 Claude Code 中输入/threat-model确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
bootstrap.mdinterview.mdREADME.mdschema.md详细介绍
threat-model
威胁模型回答**“这个系统可能出什么问题、谁会这么做,以及我们应该如何应对?”**,不受是否已发现任何特定漏洞的影响。它是一张地图;漏洞发现则是金属探测器。好的威胁模型会告诉流水线应该去哪里查找,也会告诉分诊人员哪些发现值得关注。
试金石:如果修补一行代码就能让某个条目消失,那么它是漏洞,而不是威胁。修复所有已知缺陷后,威胁(“攻击者通过解析不可信媒体实现 RCE”)依然存在;而漏洞(“dr_wav.h:412 未对 chunk_size 进行边界检查”)则不会。本技能会生成威胁。漏洞只会作为证据,提高某项威胁的可能性评分。
调用方式:/threat-model [bootstrap-then-interview|bootstrap|interview] <target-dir> [flags]
步骤 0 — 安全前言(始终首先运行)
本技能仅执行静态分析。它会读取源代码、git 历史记录以及用户提供的漏洞报告,并写入一个输出文件(<target-dir>/THREAT_MODEL.md)。它不会构建、执行或模糊测试目标,也不会修改目标,更不会向目标基础设施发起网络请求。
继续之前,请在首次回复中确认并说明:
- 目标目录存在,且是你可以读取的本地检出副本。
- 你不会执行目标目录中的任何代码。
- 如果
--vulns指向一个 URL,或用户要求你“获取 CVE”,你只会查询公开的安全公告数据库(NVD、GitHub Security Advisories、项目自身的问题跟踪器),绝不会访问目标的在线部署环境。
如果用户要求你通过运行漏洞利用来验证某项威胁,请拒绝,并引导他们改用 vuln-pipeline(README 步骤 2)。
步骤 1 — 选择模式
解析 $ARGUMENTS:
| 第一个词元 | 路由到 |
|---|---|
interview | 读取此目录中的 interview.md 并遵循其中的说明。 |
bootstrap | 读取此目录中的 bootstrap.md 并遵循其中的说明。 |
bootstrap-then-interview | 先执行 Bootstrap,再基于草稿进行访谈。见下文。 |
| 其他任何内容或为空 | 询问用户:“本次会话中,是否有系统的负责人或构建者可以回答问题?” 如果有且代码库已检出 → 建议使用 bootstrap-then-interview。如果有但没有代码库 → 使用 interview.md。如果没有 → 使用 bootstrap.md。 |
所有模式都会写入同一份产物(THREAT_MODEL.md,架构定义见 schema.md),
因此下游使用方(流水线 recon/judge、验证 Agent)无需知道产物由哪种模式生成。
interview | bootstrap | |
|---|---|---|
| 需要 | 会话中有应用负责人 | 本地检出代码库;也可以提供过往漏洞 |
| 方法 | 四问框架:通过对话依次梳理 我们在做什么 → 可能出什么问题 → 我们要如何应对 → 我们做得好吗 | 五个阶段:并行研究协作 → 综合第 1-3 节和漏洞表 → 将漏洞归纳为威胁类别 → 使用 STRIDE 补齐缺口 → 输出 |
| 最适合 | 新系统、设计评审,以及风险存在于代码无法体现的业务逻辑中的系统 | 继承而来的系统、第三方代码、开源依赖项,以及任何有 CVE 历史的系统 |
| 来源标签 | interview | bootstrap |
上下文持久性。 访谈模式需要多轮对话;较早读取的工具结果可能会在需要之前被清除。为保持可靠性:
- 不要一开始就完整读取
interview.md或bootstrap.md。在需要时再读取相应模式文件(或相关章节),每次只读一个问题或阶段所需的内容。 - 如果 Read 工具以“文件未更改”为由拒绝重新读取,则说明先前的结果已被清除;改用 Bash 通过
cat <path>重新加载。
访谈主线(即使会话中途无法访问 interview.md,也能据此继续):
| 问题 | 问题内容 | 填写的架构定义章节 |
|---|---|---|
| Q1 | 我们在做什么? | 第 1 节背景、第 2 节资产、第 3 节入口点 |
| Q2 | 可能出什么问题? | 第 4 节威胁行(id、威胁、行动者、攻击面、资产) |
| Q3 | 我们要如何应对? | 第 4 节影响/可能性/状态/控制措施;第 5 节降低优先级的事项;第 8 节建议的缓解措施 |
| Q4 | 我们做得好吗? | 验证排名、检查覆盖情况、第 6 节未决问题 |
bootstrap-then-interview 模式
当负责人可以参与且代码库已检出时,建议采用此路径:让负责人基于代码草稿进行完善,而不是从头描述系统。
- 告诉负责人:“我会先阅读代码,然后带着一份草稿回来(大约 5-10 分钟),之后我们一起过一遍。你希望这样做,还是更愿意直接从头开始?”只有对方同意后才继续;否则改用
interview.md。 - 读取
bootstrap.md并从头到尾遵循其中的说明。写入<target-dir>/THREAT_MODEL.md。 - 随即继续进入访谈模式:读取
interview.md并遵循其中的说明,同时启用--seed <target-dir>/THREAT_MODEL.md。Bootstrap 阶段的第 6 节未决问题将作为 Q1-Q4 的提示;负责人会确认、纠正并补充,而非从零开始。 - 使用完善后的模型覆盖
<target-dir>/THREAT_MODEL.md。将来源设为mode: bootstrap-then-interview。
也可以手动执行相同流程:先运行 bootstrap,然后在之后的会话中运行
interview --seed <THREAT_MODEL.md>。
步骤 2 — 共享输出约定
所有模式都必须生成符合本目录中 schema.md 的 <target-dir>/THREAT_MODEL.md。写入文件前,请立即阅读 schema.md,而不是在路由时阅读;在访谈模式下,路由与生成之间可能相隔许多轮,过早阅读的内容到使用时可能已被遗忘。
写入文件后,向用户打印:
THREAT_MODEL.md的路径。- 按可能性 × 影响排序的前 5 项威胁(ID、一句话描述、L×I)。
- 对于
bootstrap:代码无法解答的任何未决问题(这些问题将为后续的interview流程提供线索)。 - 对于
interview:代码无法验证的任何负责人陈述(这些陈述将作为后续代码审查的线索)。
参考资料
- docs/security.md 和 docs/prompting.md:说明此技能所继承的参与背景与授权框架。