摘要:OpenAI开源威胁建模Skill,从STRIDE方法论转向代码证据驱动。流程分八步,核心要求每一条架构论断必须指向具体文件路径,威胁按滥用路径枚举而非组件清单,并在报告生成中强制暂停提问关键假设。输出格式严格遵循契约,适合安全评审、合规审计场景。
让AI给一个代码仓库做威胁建模,大多数模型会还给你什么?
一份看起来非常专业的报告:组件清单覆盖常见的网关、缓存、数据库;一段攻击面描述,套用OWASP的分类法;几条OWASP引用,证明自己懂行;一堆“建议验证输入”式的缓解措施。每条都对,但没有一条能对到你的代码上。

你拿着它去评审,说不出哪里错,也说不清该改哪里。这是传统威胁建模工具的通病——把方法论当成模板,把模板当成答案。
OpenAI显然被这个问题折磨过。他们在 openai/skills 仓库里放了 security-threat-model 这个 Skill,核心主张只有一句:威胁模型必须锚定在仓库证据上。
从STRIDE到“证据链”
STRIDE是微软在1999年提出的威胁建模框架,把威胁分成六类:欺骗(Spoofing)、篡改(Tampering)、否认(Repudiation)、信息泄露(Information Disclosure)、拒绝服务(Denial of Service)、权限提升(Elevation of Privilege)。过去二十年,几乎所有的威胁建模工具都在做同一件事:把STRIDE套进模板里,输出一份通用清单。

OpenAI Security Threat Model Skill换了一个坐标系。它不问“这个系统有哪些STRIDE威胁”,而是问“这个仓库的代码里,哪些地方实际存在风险”。
每一条架构论断都要能指到具体文件路径和符号,找不到证据的组件不许出现在报告里。这不是在填表,是在查案子——证据链必须完整,假设必须明确标注,不能靠猜。
流程的八个步骤
整个流程分八步,前五步是分析,后三步是收敛。

第一步和第二步:界定范围。 识别主要组件、数据存储、外部集成,弄清系统以什么形态运行(服务/CLI/库/worker),把runtime行为和CI构建、测试示例严格分开。规矩很简单:没有证据不许声称。你不知道某个组件干什么,宁可写进假设也不能编。第三步和第四步:制造威胁。 信任边界被定义成组件之间的具体边,每一条都要注明协议、认证、加密、校验、限流。攻击者能力清单旁边必须并列一份非能力清单,明确写清攻击者做不到什么——这是防止风险虚高最有效的手段。威胁不按组件枚举,而是按滥用路径走:攻击者目标 → 到达资产的多步路径 → 最终影响。
第五步:排序。 用显式的可能性和影响推断,不用神秘的风险评分。每个威胁给出 low/medium/high 的可能性和影响理由,再合成 critical/high/medium/low 的优先级。
第六步:分水岭。 模型必须停下来,把影响范围或排序的关键假设总结成3到6条,问你1到3个定向问题——覆盖服务负责人、部署模型、认证授权等关键信息。然后等你的回答。
这听起来简单,却是大多数AI安全工具不敢做的设计——它把交付速度让位给了交付正确。
第七和第八步:收敛。 根据你的回答调整威胁排序,生成最终报告,输出契约写在 references/prompt-template.md 里。设计哲学:速度让位于正确
这个Skill最值得琢磨的设计,是那个“先提问再交付”的暂停点。
大多数AI工具追求的是“快”——你丢一个问题,它秒回一个答案。但威胁建模这件事,快是错的。一个基于错误假设的威胁模型,比没有威胁模型更危险——它会让你花时间去修不存在的漏洞,而真正的风险被埋在了没人看的地方。
OpenAI的设计选择是:在报告生成到一半的时候,强制停下来,把关键假设列出来,问你1到3个问题。如果你不回答,模型就带着假设继续走,但会明确标注“这个优先级判断基于未确认的假设”。如果你回答了,模型用你的答案重新校准排序。
这不是技术问题,是产品决策——在“快”和“对”之间选了“对”。

输出契约:写得像法律条文
这个Skill的输出格式写在 references/prompt-template.md 里,不是建议,是契约。报告必须按固定顺序出十个章节,威胁表有13列-。格式错了,后面每一步都会跟着歪。
这种严格程度在AI工具里很少见。大多数AI工具的输出是“参考格式”——差不多就行。但这个Skill的输出是“必须格式”——差一点都不行。原因很简单:威胁模型是要拿去给团队评审、给管理层汇报、给合规审计看的。格式不统一,评审就变成了解读格式的体力活。
安装与使用
依赖门槛低到可以忽略。就是一个 SKILL.md 加两个 references 文档,没有脚本、没有二进制、没有要配的Token。
安装入口有两条:Smithery 走 skills CLI,Codex 生态走内置安装器:
npx skills add https://github.com/openai/skills --skill security-threat-model # 或者 Codex 的 $skill-installer $skill-installer security-threat-model
装完先打开 references/prompt-template.md——这是整个Skill的咽喉。
初次使用最常见的卡点,是输入信息给得太少。prompt-template 里有一串上下文字段:预期用途、部署模型、数据敏感度、公网暴露面、认证授权预期、明确排除项。不知道就标成假设,但留空不填,模型只能靠猜——猜出来的威胁排序大概率偏离你的真实场景。
威胁建模的实操化转身
STRIDE提供了分类法,但分类法不是答案。OpenAI Security Threat Model Skill把威胁建模从“填表”变成了“查案子”——从方法论驱动变成了证据驱动。
它不依赖你懂STRIDE,它依赖你的仓库里有代码、有配置、有证据。它不输出通用清单,它输出针对你仓库的具体威胁路径。它不追求快,它追求对。
资源 | 地址 |
Smithery 页面 | https://smithery.ai/skills/openai/security-threat-model |
GitHub 仓库 | https://github.com/openai/skills/tree/main/skills/.curated/security-threat-model |
OpenAI Skills 总览 | https://github.com/openai/skills |
这不是一个工具。这是一套关于“AI应该怎么做安全”的设计哲学:让AI读代码,而不是读模板。
