别再把权限写进提示词:Agent 外部控制面的可运行设计

别再把权限写进提示词:Agent 外部控制面的可运行设计

8月的智能体安全新闻里,最值得工程团队警惕的变化,不是又多了一个提示词注入案例。

真正变化是,攻击者开始绕过模型回答,直接借智能体的工具、身份与网络出口完成动作。

当一个 Agent 既能读不可信网页,又能调用 MCP、写配置、连内部系统时,提示词里的“不要做坏事”已经不是控制措施。

它最多是一段希望模型记住的文字,而不是一个能够在请求出口拦截动作的安全边界。

一次真实链条,让问题从模型安全变成系统安全

这不是某家产品的偶发缺陷。

它揭示了智能体架构中一个稳定存在的耦合关系。

模型负责理解输入,工具负责执行动作,而身份系统往往把过宽的权限一起交给了模型侧进程。

攻击者不必攻破身份系统,只要影响模型对输入的解释,就可能借用那份既有权限。

这也是为什么传统的内容过滤只能降低风险,不能独立完成授权。

过滤器判断的是内容看起来是否危险,控制面判断的是这次动作是否被业务明确授予。

两类判断都需要,但不能相互替代。

前者帮助减少模型受到干扰的机会,后者保证干扰发生后仍有硬边界。

7月31日,Adversa AI 汇总了当月二十项智能体安全资源。

其中多起事件的共同入口,不是攻击者直接执行代码,而是让智能体读取带有恶意内容的数据。

报告提到,隐藏在网页中的微小文本可以诱导 AWS Kiro 重写自己的 MCP 配置,并启动攻击者控制的服务器。

另有研究把“智能体数据注入”定义为一类间接提示词攻击,影响对象覆盖了多个常见的代码与浏览器智能体。

这类事件不需要证明模型“有恶意”。

模型只要把不可信内容误判为高优先级指令,再把原本授予它的权限照常用出去,风险就已经成立。

因此,工程团队不能只问模型会不会服从恶意文本。

更该问的是,服从之后它还能碰到什么资源、持有什么凭据,以及谁会在请求真正执行前复核这一步。

8月8日的 AI Agent Store 周报给出了另一个信号。

Redpanda 把策略引擎放在 MCP 边界之外,强调策略不能依赖 Agent 自己愿不愿意合作。

这个方向很重要,因为最关键的权限判断一旦仍在 Agent 的上下文里,攻击者就仍有机会影响它。

控制必须从“请模型遵守”变成“系统只允许这些动作发生”。

为什么把规则塞进 system prompt 不够

更具体地说,提示词规则没有独立的执行主体。

它不能吊销令牌,不能关闭网络出口,也不能拒绝资源服务已经收到的请求。

它只能影响模型接下来生成哪一段文本或哪个工具参数。

这使它天然适合表达业务偏好,却不适合承担最终权限裁决。

当攻击输入与任务指令发生竞争时,模型还要依赖上下文排序、训练分布和当时的推理状态作出判断。

工程上不能把最坏情况下的安全性押在这种概率判断上。

真正的授权系统应当可以给出确定回答。

当域名不在白名单、资源不属于任务、方法不被允许时,请求必须直接失败。

很多团队的第一版防护都会写得很长。

例如要求 Agent 忽略网页里的指令,不泄露密钥,不安装未知工具,不修改配置,也不访问未授权地址。

这些规则并非没有价值。

它们适合约束正常路径上的行为选择。

问题在于,system prompt 与网页正文、检索结果、邮件内容、本地文档,最终都会进入同一个模型上下文。

模型需要在同一个输入空间里判断哪些话是规则,哪些话是数据,哪些话是攻击。

上下文隔离做得再好,也无法让自然语言规则获得操作系统权限那样的强制性。

一旦模型误判,提示词本身没有能力撤销已经发出的网络请求。

可以把它类比为在 shell 脚本顶部写一句“请不要删除生产数据库”。

这句话可能提醒操作者,但不会改变数据库账号拥有的权限。

真正可靠的限制应当落在凭据范围、网络出口、API 网关和审计系统里。

智能体同样如此,因为模型的语言判断无法自动收缩进程已经拿到的网络、文件和服务权限。

这种架构的危险点不在某一个函数写错了。

危险点在于把“理解不可信内容”和“携带高权限执行动作”绑在了同一个决策体上。

无论提示词有多长,宽范围令牌仍然可以访问所有目标。

模型一旦产出错误动作,系统没有独立的拒绝位置。

把权限从智能体身上拆下来

拆分之后,Agent 的角色会变得更清楚。

它负责理解任务、归纳证据、提出候选动作,并将动作序列化为可检查的请求。

它不再持有可跨任务复用的万能凭据。

控制面则负责验证身份、计算策略、签发能力、代理访问和记录证据。

这种分工并没有削弱 Agent 的生产力。

它让 Agent 的每项能力都有可解释的来源和可撤销的边界。

如果某项任务确实需要更高权限,系统可以明确扩展那一次任务的能力。

权限提升成为有记录的业务动作,而不是模型临场判断后的隐式结果。

外部控制面的核心不是再训练一个更会拒绝的模型。

它是把授权判断移到模型不可改写的边界上。

Agent 可以提出工具调用意图,但不能自己决定令牌范围、目标域名、可写资源和费用上限。

这些决定由独立的策略执行点完成,并且该执行点不接受模型输出对策略本身的修改。

一个可落地的调用链通常有五层。

第一层是任务身份,明确这次调用属于谁、为了什么业务目标、有效多久。

第二层是能力令牌,只包含本次工具需要的最小范围。

第三层是策略网关,在请求离开 Agent 前校验工具、参数、目标与速率。

第四层是资源侧二次校验,确保网关之外的服务也不接受越权身份。

第五层是不可变审计记录。

审计不是事后