mcpField
T
threat-model

threat-model

github.com/anthropics安全7.7k1.2k 次安装12 周前更新
代码仓库

关于 threat-model

threat-model 是供应用负责人和安全团队评估系统风险的技能。它支持基于代码的初步分析、与负责人访谈或两者结合,并生成供后续审查使用的结构化威胁模型。

主要功能

  1. 01静态分析源码与 Git 历史
  2. 02支持初步分析和访谈模式
  3. 03使用 STRIDE 补查风险缺口
  4. 04生成结构化 THREAT_MODEL.md

适用场景

  1. 01梳理继承代码库的风险
  2. 02与系统负责人共同审查设计
  3. 03为后续安全审查准备威胁背景

安装

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

$npx skills add https://github.com/anthropics/defending-code-reference-harness --skill threat-model

安装后在 Claude Code 中输入/threat-model确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

bootstrap.md
interview.md
README.md
schema.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)。它不会构建、执行或模糊测试目标,也不会修改目标,更不会向目标基础设施发起网络请求。

继续之前,请在首次回复中确认并说明:

  1. 目标目录存在,且是你可以读取的本地检出副本。
  2. 你不会执行目标目录中的任何代码。
  3. 如果 --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)无需知道产物由哪种模式生成。

interviewbootstrap
需要会话中有应用负责人本地检出代码库;也可以提供过往漏洞
方法四问框架:通过对话依次梳理 我们在做什么 → 可能出什么问题 → 我们要如何应对 → 我们做得好吗五个阶段:并行研究协作 → 综合第 1-3 节和漏洞表 → 将漏洞归纳为威胁类别 → 使用 STRIDE 补齐缺口 → 输出
最适合新系统、设计评审,以及风险存在于代码无法体现的业务逻辑中的系统继承而来的系统、第三方代码、开源依赖项,以及任何有 CVE 历史的系统
来源标签interviewbootstrap

上下文持久性。 访谈模式需要多轮对话;较早读取的工具结果可能会在需要之前被清除。为保持可靠性:

  • 不要一开始就完整读取 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 模式

当负责人可以参与且代码库已检出时,建议采用此路径:让负责人基于代码草稿进行完善,而不是从头描述系统。

  1. 告诉负责人:“我会先阅读代码,然后带着一份草稿回来(大约 5-10 分钟),之后我们一起过一遍。你希望这样做,还是更愿意直接从头开始?”只有对方同意后才继续;否则改用 interview.md。
  2. 读取 bootstrap.md 并从头到尾遵循其中的说明。写入 <target-dir>/THREAT_MODEL.md。
  3. 随即继续进入访谈模式:读取 interview.md 并遵循其中的说明,同时启用 --seed <target-dir>/THREAT_MODEL.md。Bootstrap 阶段的第 6 节未决问题将作为 Q1-Q4 的提示;负责人会确认、纠正并补充,而非从零开始。
  4. 使用完善后的模型覆盖 <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,而不是在路由时阅读;在访谈模式下,路由与生成之间可能相隔许多轮,过早阅读的内容到使用时可能已被遗忘。

写入文件后,向用户打印:

  1. THREAT_MODEL.md 的路径。
  2. 按可能性 × 影响排序的前 5 项威胁(ID、一句话描述、L×I)。
  3. 对于 bootstrap:代码无法解答的任何未决问题(这些问题将为后续的 interview 流程提供线索)。
  4. 对于 interview:代码无法验证的任何负责人陈述(这些陈述将作为后续代码审查的线索)。

参考资料

评论

支持 Markdown