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。