← 返回文章列表

AI Agent 安全指南:提示注入、越权与沙箱隔离

以不可信输入、最小权限和可审计执行为核心,防御提示注入、数据泄露与高风险工具调用。

Agent 把语言风险变成了执行风险

传统聊天模型生成错误内容,主要影响答案质量。Agent 连接搜索、文件、数据库和外部消息后,一段恶意文本可能影响真实动作。安全设计必须假设三件事:用户输入不可信,工具返回不可信,模型决策也不天然可信。

最重要的原则是把模型当作一个可能犯错的规划组件,而不是权限主体。它可以建议动作,但工具执行器必须独立完成认证、授权、参数校验和审计。

提示注入为什么难以彻底消除

直接提示注入来自用户,例如要求“忽略系统规则”。间接提示注入藏在网页、邮件、代码注释或知识库文档里。当 Agent 读取这些内容时,模型可能把数据中的句子误当成新指令。

仅在系统 Prompt 中写“不要被注入”不够,因为模型仍需理解文本语义。更可靠的防御是缩小后果:

  • 将系统规则、用户请求和外部数据放在明确的不同边界;
  • 外部内容只作为证据,不能直接改变允许工具集合;
  • 读取数据的 Agent 不自动拥有发送、删除或付款权限;
  • 高风险动作需要确定性政策检查和人工批准;
  • 工具只返回任务所需字段,先脱敏再进入模型。

即使模型被诱导,攻击也应该停在权限层,而不是到达真实系统。

最小权限要落实到每次运行

不要给所有 Agent 共用一个管理员密钥。权限应来自当前用户和当前任务,并且有明确作用域。例如“读取工单 123 关联客户”不等于“搜索全部客户”;“创建邮件草稿”不等于“发送邮件”。

工具令牌可以短期有效,只包含当前运行所需权限。执行器在每次调用时检查用户、资源、动作和风险等级,不能信任模型传来的 role: admin

把工具分成只读、可逆写入、外部影响和不可逆操作。默认只开放低风险工具,随着任务进入特定阶段再临时授予能力。任务结束或取消后立即撤销。

沙箱隔离代码与文件操作

能执行代码的 Agent 风险更高。代码应运行在隔离容器或受限虚拟环境中,限制文件系统、网络、CPU、内存和执行时间。不要把宿主机主目录、SSH 配置或云凭据直接挂载进去。

网络应采用允许列表,而不是默认访问整个互联网和内网。若任务只需要安装公开依赖,可以通过受控代理;若只处理本地文件,则完全关闭网络。

输入文件使用独立工作目录,路径必须规范化并检查是否越界。压缩包要防止路径穿越和压缩炸弹。生成物从沙箱导出前进行类型、大小和恶意内容检查。

沙箱不是授权替代品。即使代码在容器里运行,也不能让它携带可操作生产系统的长期密钥。

写操作需要参数绑定的审批

人工审批不能只是一个笼统的“允许 Agent 操作”。审批界面应展示精确对象、动作、参数和预计影响,例如收件人、消息正文、退款金额和订单号。

批准后生成一次性授权,只对这组参数有效。任何关键参数变化都使授权失效。这样可以防止模型先用安全参数获得批准,再在执行时替换目标。

批量动作还需要数量和金额上限。一次批准发送 10 封邮件,不能被工具解释为 10 万封。不可逆动作可以增加冷静期或双人审批。

防止数据泄露

数据泄露不只发生在最终回答。敏感值可能进入模型上下文、追踪日志、错误堆栈、缓存或评测数据集。应在数据进入每个边界前最小化,并对日志做结构化脱敏。

模型通常不需要看到完整访问令牌;工具适配器可以在执行时注入凭据。用户数据也应按任务裁剪,例如只返回客户所在省份,而不是完整地址。

跨用户记忆和缓存必须隔离。缓存键要包含租户和权限范围,向量检索先做访问控制再排序。用户要求删除数据时,原始内容、索引、缓存与离线评测副本都要纳入流程。

供应链与工具可信度

Agent 可能安装依赖、调用插件或读取第三方服务。工具注册表要有来源、版本、负责人和权限说明。新增工具不能因为描述看起来合理就直接上线。

依赖安装应锁定版本、验证来源并在沙箱中完成。外部工具结果必须校验内容类型和大小。来自第三方的“成功”响应也要通过业务状态验证,不能只看 HTTP 200。

工具描述本身属于安全配置,修改后需要评审和回归测试。一个过于宽泛的描述可能让模型在更多场景误用高风险能力。

审计与事件响应

每次运行应记录用户、运行 ID、模型和规则版本、工具调用、审批、结果码与外部业务 ID。敏感参数只记录摘要或哈希。审计日志应防篡改,并与普通调试日志分开保留。

系统需要紧急停止能力:禁用某类工具、撤销运行令牌、取消队列任务、隔离受影响租户。发生事故后,可以从轨迹回答“模型看到了什么、为什么允许该动作、外部系统最终发生了什么”。

安全测试应包含恶意网页、伪造系统消息、编码后的指令、跨工具数据外带、权限边界和审批参数替换。只测试一句“忽略之前指令”远远不够。

小结

Agent 安全不是让模型永远拒绝攻击,而是建立纵深防御:不可信内容分层、最小权限、沙箱、参数绑定审批、数据最小化和完整审计。模型可能被误导,但系统不应因此自动产生不可接受的后果。