Vibe Coding 威胁建模:从资产、信任边界到可执行滥用用例
安全清单无法回答本次改动会让谁跨过哪条边界。本文把用户流程转成数据流、资产、攻击面和滥用用例,再将缓解措施绑定到代码、负向测试与剩余风险。
本文要点
- 主题聚焦:AI、Vibe Coding、DevOps
- 适合人群:独立开发者、全栈工程师、AI 应用开发者
- 核心价值:快速理解背景、实践路径、常见误区和工程建议
“给项目增加通过 URL 导入文档的功能”看起来只是一个输入框、一个后台任务和几行抓取代码。AI 很快会补出正常路径,却未必主动问:谁可以发起导入,服务端能访问哪些地址,响应会保存在哪里,解析器拿到什么权限,失败日志是否包含文档内容,删除项目后派生索引是否仍可读。等代码写完再跑一份通用扫描,已经很难看见这些跨组件假设。
威胁建模的产物不是一张永不变化的大图,而是对本次变更的安全解释:保护什么、信任在哪里变化、谁可能滥用、现有控制是否足够、还接受什么风险。OWASP 的威胁建模指南强调持续分析系统、识别威胁并决定缓解;NIST SSDF 则把安全实践放进开发生命周期。Vibe Coding 应把这个过程压缩成每轮都能复核的小模型,而不是让模型生成一份与代码脱节的报告。
先冻结改动和保护对象
以一个主用户流程为范围,记录入口、身份、数据、外部服务、持久化、副作用和退出条件。Vibe Coding 完成定义边界可以先固定什么算完成;威胁模型只覆盖这条边界及其直接依赖,不顺手宣称整个产品安全。
资产不能只写“数据库”。分别列出会造成不同损害的对象:会话与 API 凭证、租户私有文档、付款动作、管理员权限、审计证据、服务可用容量。为每项记录机密性、完整性或可用性要求,以及数据 owner 和保留规则。风险等级来自产品影响与可达性,不由 AI 根据字段名自动打分。
再画最小数据流:浏览器、公开 API、应用服务、队列、worker、数据库、对象存储和外部端点。每条箭头标注协议、身份、数据分类、校验位置与是否产生副作用。Vibe Coding 请求路径追踪适合核对真实代码入口;若图里有一个“系统自动处理”的黑盒,就继续拆到责任和权限可判断为止。
信任边界出现在身份、权限或数据解释方式改变的地方。浏览器到服务端是不可信输入进入,API 到高权限 worker 是能力扩大,原始文件到解析器是字节开始被解释,第三方响应进入模板则是外部数据进入执行/展示上下文。网络是否“内网”不是自动可信的理由。
攻击者模型也要写清能力而不是只写“黑客”。匿名网络用户、合法低权限成员、被撤权但会话尚存的用户、拿到单个服务凭证的人和被攻陷的第三方,能到达的入口并不相同。内部人员或后台服务拥有更多正常能力,滥用路径往往不会触发输入格式告警。每个角色只采用已知能力;无法确认 token 受众、队列调用身份或网络可达性时,把它列为验证任务,不默认采用最乐观前提。
把威胁写成可反驳的滥用用例
对每条边界提出具体句式:“具有 X 条件的主体,通过 Y 入口,使 Z 资产发生未授权结果”。例如“普通成员提交另一租户的文档 ID,使导入任务读取并索引该文档”,比“检查越权”更能生成测试。可以用 STRIDE 等分类帮助发现遗漏,但分类已遍历不等于风险已覆盖。
每个滥用用例记录前置条件、攻击者可控输入、越过的边界、预期损害、现有控制、验证方法和 owner。未知的供应商行为、框架默认值或部署网络进入Vibe Coding 假设与未知账本,标为待验证;禁止 AI 用“通常会”“应该已经”补成事实。
按可达性和业务影响排序后,选择处理方式:消除能力、降低权限、增加验证/隔离、转移责任,或由明确 owner 接受剩余风险。一个控制必须绑定到实施点。例如“限制 URL”要落到 scheme、目标范围、DNS/重定向检查和出网策略;“需要鉴权”要落到资源级授权,而非只验证登录。
把模型变成代码门禁
每个高优先级滥用用例至少映射到一个自动化反例。输入、主体状态、资源归属、期望状态码、数据库变化、外部调用和日志泄漏分别断言,可用Vibe Coding 测试矩阵组织组合。只断言请求失败不够:任务未入队、对象未创建、缓存未污染、敏感值未写日志也属于结果。
控制还需要失败校准。临时移除租户过滤、放宽 URL 规则或绕过输出编码时,目标测试应变红;否则测试没有证明控制存在。Vibe Coding 的 AI 生成测试审查提供了坏实现校准与宽断言检查方法。静态扫描、依赖扫描和渗透测试可以补充发现面,但不能替代用例与业务资产的对应关系。
代码变更后做模型差分:是否新增入口、数据类型、第三方、权限、后台任务或保留副本;旧控制是否仍位于真实路径;剩余风险的前提是否变化。范围外风险明确列出,不用一句“其他符合最佳实践”隐藏。
模型还要有失效条件。认证方式、部署拓扑、数据分类、供应商或解析器发生变化时,旧结论自动进入待复核;仅改文案且数据流无变化时可以记录无安全差分。这样团队不会每次从空白开始,也不会拿旧图为新边界背书。
最终验收包应包含数据流版本、资产与边界、优先滥用用例、控制到代码/测试的映射、未关闭未知和风险接受记录。AI 可以从仓库搜索入口、生成候选用例和测试骨架,人必须确认资产价值、攻击者能力与风险接受。这样威胁模型才是约束下一次生成的工程输入,而不是上线前补写的安全叙述。
Related