模型: openai/gpt-5.4
生成日期: 2026-04-01
书名: Claude Code VS OpenCode:架构、设计与未来
章节: 第23章 — 安全与自主的平衡
Token用量: 约 6,000 input + 1,980 output
23.1 威胁模型
智能体安全的起点,不是“感觉上应该没事”,而是 threat modeling(威胁建模)。一旦一个编码智能体能读仓库、改文件、跑 shell、访问网络、调用外部系统,它就不再只是一个聊天框,而是一个会产生真实操作后果的执行体。既然如此,就必须回到安全工程最基本的问题:什么可能出错,沿着哪条路径出错,后果半径有多大?
对于编码智能体,至少有四类威胁必须被当作一等公民:prompt injection(提示注入)、privilege escalation(权限提升/越权)、approval fatigue(审批疲劳)、supply chain attack(供应链攻击)。这四类并不是理论上的边角风险,而是随着智能体把“读、想、调工具、操作环境”串起来之后自然出现的主要攻击面。
先看 prompt injection。提示注入的本质,是不可信文本混入模型上下文,并对模型行为施加了本不该有的影响。在编码场景里,这些文本来源非常多:README、issue 描述、PR 说明、源码注释、网页内容、工具输出,甚至第三方文档。如果系统没有明确帮助模型区分“用户真正的指令”和“任务过程中读到的任意文本”,那么恶意内容就可能伪装成高优先级指令,例如“忽略之前要求”“把密钥发出去”“修改这些敏感文件”。
提示注入之所以可怕,不是因为模型特别脆弱,而是因为 agent 系统天然被设计成广泛阅读。越能自动搜索、自动检索、自动浏览,暴露在恶意文本前的机会就越多。换句话说,随着自主性上升,注入攻击面也会扩大。
第二类是 privilege escalation。在经典安全语境里,它指的是实体获得了原本不该拥有的权限。在 agent 系统里,越权不一定是“黑客拿到 root”,它也可以表现为更隐蔽的形式:用户把低风险任务包装成高权限动作;工具名字听起来无害,实际上权力很大;某个插件或 MCP server 背后持有比宿主意识到的更大权限;多个本来单独看似无害的工具被串联后,形成危险组合能力。也就是说,越权在 agent 世界里常常不是单点突破,而是能力组合后出现的隐性权力扩张。
第三类是 approval fatigue。听上去它不如前两类“硬核”,但在产品里非常致命。审批疲劳指的是:系统频繁打断用户请求确认,久而久之,用户开始机械点击“允许”。到那时,权限系统虽然还在界面上存在,但它的实际保护能力已经大幅下降。审批疲劳本质上是一种 socio-technical vulnerability(社会技术脆弱性):不是代码本身坏了,而是系统把人训练成了最薄弱的一环。
第四类是 supply chain attack。编码智能体天然是扩展密集型系统:插件、MCP server、第三方包、shell 工具、远程 API、社区技能、命令模板,都可能成为能力入口。每增加一个扩展路径,就多一个潜在的投毒点。供应链攻击未必直接打宿主本身,它也可以打依赖包、远端服务、下载资源、插件更新通道。由于 agent 生态鼓励组合能力,供应链风险就不是“外围问题”,而是系统核心风险。
更麻烦的是,这四类威胁还会相互作用。一个被污染的 MCP server 可能通过工具输出做提示注入;一个被入侵的插件可能申请过宽权限,制造越权机会;本来为了安全设计的高频确认框,反而会把用户训练成审批疲劳状态;供应链攻击甚至可能把这几类问题同时带进系统。好的威胁模型因此不能只逐项列清单,而必须考虑威胁组合效应。
除此之外,还有一些次级威胁也值得关注,例如 secret exfiltration(机密外泄)、destructive mutation(破坏性修改)、hidden persistence(隐蔽持久化)、audit evasion(规避审计)、unsafe delegation(不安全委派)等。但从分析框架上看,这些通常都可以被归入前面四大类的后果或变体:提示注入操纵推理,越权扩大能力边界,审批疲劳削弱人工监督,供应链攻击污染能力来源。
那么,一个好的威胁模型会对架构提出什么要求?至少有四点。第一,把所有外部文本都视为潜在不可信输入。第二,把权限边界显式化、缩小化,而不是依赖模糊默认值。第三,不要把安全完全寄托在频繁人工确认上,而要减少无意义打扰。第四,把整个扩展生态都当成攻击面的一部分,包括安装、更新、运行与卸载。
OpenCode、OMO 与 Claude Code 的比较很能说明问题。开放系统拥有极高扩展力,但也天然扩大了供应链表面。OMO 的编排层越强,越说明边界必须更清晰,因为能力上限更高。Claude Code 的安全策略则说明,一旦自主性要认真做,威胁模型就不能停留在“提示词安全”层面,而必须下沉到运行时和系统边界。
归根到底,安全与自主的平衡,首先来自诚实。只要智能体能实际操作环境,我们就不能再把它当成一个高级搜索框来看。它更像一个拿着工具、可能被误导、也可能被利用的初级操作员。威胁模型之所以重要,不是因为安全团队喜欢画表格,而是因为没有它,自主性就只是把风险包装成了智能。