# Agent 安全、身份与协议

核对日期：2026-10-03。Agent 的能力来自模型与执行环境共同作用。生产设计需要说明代表谁、能访问什么、可以产生什么外部影响，以及如何停止和恢复。

## 一份动作契约

| 字段 | 内容示例 |
|---|---|
| 目标 | 创建采购申请草稿 |
| 主体 | 用户身份、Agent 服务身份、租户 |
| 资源 | 当前用户有权访问的报价和白名单供应商 |
| 动作 | 读取、写草稿；提交和发订单另行授权 |
| 条件 | 金额、地域、时间、数据类别、审批状态 |
| 预算 | 时间、步骤、调用、Token、金额和重试 |
| 完成凭据 | 业务系统返回 ID 并回读状态 |
| 恢复 | 取消草稿、补偿事务、人工工单 |

模型提出动作，授权服务检查主体、资源、条件和策略，工具实施动作并返回可验证状态。用户确认界面应展示真实动作、对象和影响；“允许 Agent 继续”不是所有未来动作的空白授权。

## 2026 安全知识基线

[OWASP Agentic Applications Top 10](https://genai.owasp.org/2025/12/09/owasp-genai-security-project-releases-top-10-risks-and-mitigations-for-agentic-ai-security/)于 2025-12 发布，覆盖目标劫持、工具滥用、身份权限、供应链、意外代码执行、记忆/上下文投毒、Agent 间通信、级联故障、人机信任和失控 Agent。用于威胁覆盖核对；不是认证或法规。

[NIST AI Agent Standards Initiative](https://www.nist.gov/news-events/news/2026/02/announcing-ai-agent-standards-initiative-interoperable-and-secure)于 2026-02 启动，关注互操作、协议、安全与身份。[NIST 身份与授权概念文件](https://www.nist.gov/news-events/news/2026/02/new-concept-paper-identity-and-authority-software-agents)属于研究和征求意见工作，不能写成已经发布的强制标准。

## 从风险到测试

| 风险 | 具体失败 | 控制建议 | 验证 |
|---|---|---|---|
| 目标劫持 | 邮件要求忽略用户目标并外传资料 | 不可信内容标记、外传限制、动作层授权 | 恶意邮件和工具结果 |
| 工具滥用 | 合法工具被用于超出任务的批量操作 | 参数 Schema、资源和额度约束 | 超额、错对象、批量参数 |
| 权限滥用 | 用户 A 的 Agent 使用用户 B 的数据 | 服务端主体与租户绑定 | 跨租户、替换资源 ID |
| 供应链 | 工具描述或依赖更新改变权限 | 版本锁定、审查、允许列表 | 工具更新与回退 |
| 代码执行 | 模型文本直接进入 shell | 隔离执行、受限目录/网络、输入验证 | 命令、路径和文件边界 |
| 记忆投毒 | 不可信事实长期被保存为指令 | 来源、有效期、隔离、纠正/删除 | 记忆污染与删除传播 |
| 通信失真 | 子 Agent 宣称审批通过 | 结构化消息、签发主体、证据核验 | 伪造审批和丢消息 |
| 级联失败 | 第一步错目标，后续仍成功执行 | 状态断言、停止条件、幂等/补偿 | 部分完成、重试和并发 |
| 信任利用 | 用户误信完成声明而不核验 | 展示确认对象与真实回执 | 输出与环境不一致 |
| 失控循环 | 无限重试或重复发消息 | 无进展检测、总预算、熔断 | 工具持续超时和循环 |

以上控制是本库建议，实施后要通过 [故障与攻击用例](assets/agent-test-cases.csv)验证。拦住已有注入不代表挡住所有注入；高权限系统同时限制可造成的最大影响。

## MCP 与工具接入

MCP 解决模型应用与外部工具/资源的互操作，工具描述和服务器返回内容仍需按信任边界处理。核对的权威规范正文为 [2026-07-28 Specification](https://modelcontextprotocol.io/specification/2026-07-28)，[正式发布公告](https://blog.modelcontextprotocol.io/posts/2026-07-28/)用于核对发布日期与 GA 状态。接入时记录实际客户端、服务器、SDK 与协议版本，禁止只记录“支持 MCP”。

官方 [安全实践](https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices)涉及代理混淆、Token 透传、SSRF、状态句柄、本地执行和授权 URL。接入审查至少核对：Token 是否面向正确资源；代理是否保留逐客户端授权；状态句柄是否绑定已认证主体；OAuth URL 与重定向是否受校验；元数据获取是否能访问内网；本地服务器是否在受限环境运行。

业务授权独立于协议登录。用户登录 MCP 服务器后，仍可能无权执行某项退款。把连接权限、数据读取、草稿、提交、外部发送、删除和付款分成清楚的业务动作。授权撤销需要同时影响缓存、会话、委托身份和后续工具调用。

## 长任务与恢复

持久状态包含 `task_id`、租户/主体、目标、已授权范围、状态版本、工具回执、预算消耗和期限。状态改变采用版本检查；重试使用幂等键；外部副作用完成后记录回执。崩溃恢复时先回读环境，避免根据“尚未记录完成”重复付款或发信。

读 → 草拟 → 确认 → 执行 → 回读 → 记录。对不可逆动作，暂停点放在执行前；授权与实际执行之间发生对象、金额或权限变化时重新校验。人类接管带走已完成步骤和证据，不让用户从头猜发生过什么。

## 上线评审需要回答

每种工具动作是否有唯一 Owner；授权链是否包含真实用户；能否限制跨租户、外传和批量影响；用户能否取消正在执行的任务；预算耗尽如何处理；工具更新是否跑回归；系统如何证明成功；失败后谁负责恢复。

下一步：[数据治理](03_数据治理与知识工程.md) · [统计评测](01_统计评测与质量门禁.md)
