跳转至

Agent 的分层安全防御应该如何设计?

  • ID:Q014
  • 难度:进阶 / 系统设计
  • 标签:Agent Security、Prompt Injection、Least Privilege、Sandbox、Guardrails

可视化图解

flowchart TD
  U[用户输入与外部内容] --> L1[输入与指令边界]
  L1 --> L2[工具候选集最小化]
  L2 --> L3[参数 Schema 与业务校验]
  L3 --> L4[身份 权限 租户隔离]
  L4 --> L5[沙箱与网络资源限制]
  L5 --> L6[高风险动作审批]
  L6 --> L7[审计 Trace 与异常检测]
  L7 --> T[真实工具执行]

核心结论

Agent 安全不能依赖 System Prompt。 Prompt 只能影响模型行为,真正的安全边界必须由身份、权限、工具网关、沙箱、数据策略、审批和审计以代码强制执行。

一、威胁模型

先识别:

  • 恶意用户输入;
  • 文档、网页和工具结果中的间接 Prompt Injection;
  • 模型误判;
  • 越权工具;
  • Secret 和 PII 泄露;
  • 恶意代码执行;
  • SSRF 与内网探测;
  • 资源耗尽和成本攻击;
  • 供应链与不可信 MCP Server;
  • 多 Agent 传播错误。

二、身份与授权层

  • 用户和服务身份可信注入;
  • Tenant / Project / Environment 边界;
  • 最小权限;
  • 短期凭证;
  • 权限在每次 Tool Call 时重新校验;
  • 模型不可自由指定身份和 Scope。

Prompt 中写“不要访问生产”不能替代生产凭证隔离。

三、输入与上下文层

  • 限制大小和格式;
  • 文件类型和恶意内容扫描;
  • 用户指令、外部内容、系统政策分层标记;
  • 外部文档视为数据,不允许其重写系统规则;
  • RAG 做权限和版本过滤;
  • 对 Secret、PII 和凭证在进入模型前脱敏。

关键词拦截“system prompt”只能挡最幼稚攻击,不能作为核心方案。

四、决策与计划层

  • 最大步骤、时间、Token 和费用;
  • 重复动作与无进展检测;
  • 高风险目标强制审批;
  • 计划 Schema 校验;
  • 不允许模型提升自己的权限;
  • 子 Agent 继承不高于父 Agent 的权限;
  • 关键约束每轮由 Runtime 注入,而不是依赖长历史。

五、工具层

Tool Registry 声明:

  • 权限;
  • 风险;
  • 副作用;
  • 幂等;
  • 资源范围;
  • 超时;
  • 输入输出 Schema。

Runtime 执行:

  • 参数和业务校验;
  • Allowlist;
  • 租户和环境绑定;
  • 速率与并发限制;
  • 审批;
  • 结果大小和脱敏;
  • 审计。

模型提出动作,不直接持有生产凭证。

六、代码与 Sandbox

  • 独立容器 / VM / Namespace;
  • 只挂载必要目录;
  • 只读根文件系统或受控 Workspace;
  • CPU、内存、进程、磁盘和时间限制;
  • 默认禁网或网络 Allowlist;
  • 禁止特权模式和宿主 Socket;
  • 临时凭证;
  • 输出 Artifact 扫描;
  • 任务后销毁环境。

沙箱降低影响范围,不代表代码安全。仍需静态分析、测试和 Review。

七、输出与动作验证

  • Structured Output;
  • 引用和事实校验;
  • PII、Secret 和内部路径检测;
  • 金额、日期和权限由代码核对;
  • 最终动作读取最新业务状态;
  • 写操作确认结果;
  • 高风险结论人工审批。

八、Prompt Injection 的核心防法

原则是把“不可信数据”和“控制指令”隔离,并限制数据能产生的动作:

对应流程使用 Mermaid 图解展示。

最有效防线是最小权限和工具边界,而不是更强的“不要听网页”提示词。

九、可观测和响应

记录:

  • 用户、租户和授权;
  • Prompt / Policy 版本;
  • 检索来源;
  • Tool Call 与结果;
  • 审批;
  • Sandbox 事件;
  • 模型与成本;
  • 安全拦截原因。

支持:告警、会话冻结、凭证撤销、Artifact 隔离、Trace 回放和事件复盘。

十、上线层级

权限逐级开放,每级都需要评测和回滚。

常见错误回答

输入过滤、Prompt 防御、工具权限、输出过滤四层。

方向正确,但应继续说明身份、间接注入、沙箱、预算、审批、监控和事件响应。

面试口述版

Agent 安全先做 Threat Model,再从身份、上下文、决策、工具、沙箱、输出和审计分层防御。System Prompt 不是安全边界,用户和文档都可能注入。真正有效的是每次 Tool Call 的租户与 Scope 校验、最小权限凭证、高风险审批、受限 Sandbox、网络 Allowlist、预算和副作用幂等。模型即使被诱导,也拿不到不该有的能力。所有检索、工具、审批和安全拦截进入 Trace,按只回答到受控写入逐级开放权限。

结合个人项目

企业 Coding Agent 默认只操作会话 Workspace,不能访问宿主 Docker Socket、其他会话目录和生产网络;发布与回滚必须通过平台工具和审批,而不是执行任意 Shell。