切换深色模式
07 · 安全与身份:模型想做,不代表系统允许做
本课交付:威胁模型与审批参数变化的拒绝记录。前置:02 的授权、04 的状态版本;课后完成 L7:审批绑定哪一次动作。实验只验证规则,不连接外发服务。
研究助手原本只读笔记。后来增加“把总结发送给同事”,风险就变了:即使读取合法,错误收件人也可能造成外泄;一篇检索文档还可能诱导它主动发送资料。本章把安全从提示词要求,落实到请求入口、工具执行和业务结果。
资料核对:2026-09-06。以下是原创威胁建模与验收设计;本站没有实现身份服务、凭证代理或发布功能。
一、威胁模型从资产开始
先列资产:用户身份、访问凭证、私有文档、任务状态、审批记录、可执行业务动作。再列不可信输入:用户提交内容、网页、笔记正文、工具返回、外部技能包与子任务答案。内容来自一个正常工具,不意味着里面的指令可信。
OWASP 将外部材料中隐藏的指令归入间接提示注入,讨论了数据外泄、工具滥用与持续性影响。防护需要多层组合,不能依赖一个关键词过滤器。提示注入防护资料
| 入口 | 本案例的风险 | 主要控制点 |
|---|---|---|
| 检索片段 | 把文档文字当成操作指令 | 明确信息来源,执行层检查任务与权限 |
| 工具参数 | 猜测私有 ID 或修改接收地址 | 可信身份、对象归属、目标限制 |
| 技能包 | 规程要求执行额外脚本 | 来源审查、隔离、最小权限;不自动授信 |
| 长期记忆 | 将一次攻击保存到后续任务 | 写入审查、来源、版本、删除链 |
| 输出渲染 | 外链或远程图片携带敏感信息 | 输出编码、链接策略、受控外发 |
身份、文档和外部通信的边界不同。“这个用户能读”不等于“系统能向任何地址发送”。只读工具也不代表整个应用没有泄露通道。
二、身份不能由模型声明
请求入口从已验证会话确定用户,工具服务独立核对资源访问权限。模型生成的 user_id、tenant_id 只能是待验证数据,不能代替认证。Agent 代表用户执行时,还需记录执行应用和有效委托,避免管理员应用凭证掩盖真实权限边界。
对于外部工具服务,区分“调用者身份有效”与“令牌是发给本服务的”。MCP 安全实践禁止接受非本服务受众的令牌后直接透传下游;接入协议并不会自动完成业务授权。MCP 安全实践
本专题离线 owner 判断只是授权模拟。它不能证明真实 SSO、多租户认证或 OAuth 交换已落地。更详细的委托链设计见项目 B。
三、审批必须绑定实际动作
用户确认的内容至少包含目标、参数、数据范围和影响。服务端保存规范化参数摘要、资源版本、用户、委托版本与过期时间。执行前重新校验,改正文、换收件人或权限撤销都不能沿用旧审批。
text
候选动作 → 服务端校验 → 保存待审批版本 → 用户确认
↓
结果记录 ← 受控执行 ← 再查权限、参数与业务版本这是本案例设计,不意味着一次检查消除了所有竞态。跨服务的检查与写入存在时间差;对自有业务可使用事务与版本条件,对第三方服务则要确认其条件写入能力,并说明不可消除的窗口。已经提交成功的操作不承诺可被事后撤权自动回滚。
四、凭证与执行环境要隔离
模型上下文不存 access token、refresh token 或数据库密码。工具层通过受控凭证引用访问下游,结果返回必要业务字段;异常、追踪和审计同样脱敏。
如果未来允许执行代码,应另设隔离环境、文件范围、网络出口和资源限制,不能把“模型只会写安全代码”当隔离策略。隔离降低影响范围,不代表沙箱内数据可以任意外发。
五、拒绝动作之后,任务如何结束
拒绝应有可诊断的内部原因和不过度泄密的对外说明。对不存在与无权限的资源,可按业务策略统一响应,避免枚举。不能让模型反复换身份、换地址或尝试未授权替代工具。
工具超时另当别论:可能已执行,先查状态再重试。请求标识需要对应稳定业务意图,同一标识不同参数应拒绝;这一点可参考 AWS 幂等接口设计。
六、分层测试,不声称绝对安全
| 用例 | 执行器可确定性检查 | 仍需模型或人工评估 |
|---|---|---|
| 文档要求读取他人笔记 | 强制给出该动作时,工具应拒绝 | 模型是否被诱导、是否解释恰当 |
| 审批后换收件人 | 参数版本不符时不发送 | 展示给用户的信息是否充分 |
| 工具输出包含密钥 | 脱敏与敏感字段检测 | 未知形式的敏感内容是否遗漏 |
| 注入被保存为记忆 | 来源与生命周期控制 | 后续任务是否被隐性影响 |
| 写入响应丢失 | 幂等/查询/UNKNOWN 状态 | 业务补偿是否满足用户意图 |
测试在受控测试数据和授权环境中进行。先用固定候选动作测执行策略,再接模型测诱导路径;不要因为模型某次没有触发攻击,就误判授权策略有效。
本章小结:Agent 安全的核心是守住身份、数据与动作的边界。提示词、模型防护和人工审批都有作用,但不替代服务端授权与可核验的执行结果。