# 安全

> Agent NAS 不阻止提示词注入，它限制注入之后的后果：用窄域租约限定一次运行能碰什么，用分支让错误可撤销，用 Rule of Two 阻止读过不可信内容的会话再同时拥有敏感数据与对外通道，并留下可追溯的记录。

## 范围与信任假设

- **我们保护：** NAS 里的数据与历史；授权的边界；记录的完整性；记忆的可追溯性。
- **我们不保护：** 智能体在 NAS 之外的行为；运行计算本身的隔离（那是沙箱的工作）；模型提供商那一侧发生的事。
- **信任假设：** 可信计算基（TCB）是 NAS 网关、策略引擎与记录服务；主机没有被攻陷；沙箱负责隔离计算。TCB 被攻陷，本页的保证就失效。

## Rule of Two：会话不变量

三个性质：**[A]** 会话读过不可信内容，**[B]** 租约允许读敏感数据，**[C]** 租约允许改变受保护的状态或对外通信。同一会话里三者同时成立时，触发 C 的那次调用不会被自动放行。

| 场景 | A | B | C | 结果 |
| --- | --- | --- | --- | --- |
| 总结一个网页，写成分支里的笔记 | 是 | 是 | 否（只写分支） | 自动：分支内的写入不算 C。 |
| 读过网页之后，向 `main` 提议合并 | 是 | 是 | 是 | Human Gate。 |
| 只读公开数据，写临时区 | 是 | 否 | 否 | 自动。 |
| 读过外部邮件之后发出邮件（出口） | 是 | 是 | 是 | 闸门；涉及 `secret` 则拒绝。 |

这是 Meta 的 [Agents Rule of Two](https://ai.meta.com/blog/practical-ai-agent-security/) 在**存储边界**上的实现。Meta 自己强调，它是减轻风险的启发式，不是终点，也不替代最小权限；我们的用法也是如此。机制见 [Trust Labels](https://agentnas.com/zh-cn/concepts/trust-labels/)。

## 威胁模型

| 威胁 | NAS 能强制的 | NAS 做不到的 | 残余风险 |
| --- | --- | --- | --- |
| T1 间接提示注入（经文件、网页、邮件） | Rule of Two；租约限定；分支；闸门。 | 阻止注入发生；阻止注入之后在租约内的恶意行为。 | 租约之内的误用。 |
| T2 凭据泄露（智能体读到长期密钥） | 长期凭据不在运行手里；密钥扫描器标记 `secret`；短 TTL。 | 防止智能体把租约内的数据发往已授权的出口。 | 租约内的数据外发。 |
| T3 过宽权限与误操作 | 窄域租约；分支；软删除；快照不在任何租约之内。 | 撤销外部副作用。 | NAS 之外的后果。 |
| T4 记忆投毒（含跨角色传播） | 来源与污点；隔离区；已审阅才自动加载；回滚。 | 识别“看起来合理”的错误事实。 | 被审阅者放过的投毒。 |
| T5 租约被窃取或重放 | 短 TTL；可撤销；可选的持有者绑定（DPoP、mTLS）。 | 阻止 TTL 内的滥用。 | TTL 窗口。 |
| T6 审批疲劳与橡皮图章 | 闸门稀少；NAS 渲染差异；批准绑定摘要；监控批准率。 | 让人认真看。 | 人为失误。 |
| T7 日志篡改 | 哈希链；可选的外部锚定。 | 没有锚定时，防止 root 毁掉日志。 | 恶意的管理员。 |
| T8 数据外泄（出口、共享、搜索结果） | 出口需要租约动作与闸门；`secret` 禁止出口；派生物继承标签。 | 防止人批准之后的泄露；隐蔽信道。 | 批准后的泄露。 |
| T9 供应链（技能、MCP 服务器、插件、模型） | 技能与外部 MCP 的内容视为 `external`；技能目录可以固定到某个提交；运行时清单写入记录。 | 保证第三方代码无害。 | 被固定下来的恶意版本。 |
| T10 资源耗尽（分支炸弹、预算耗尽、循环读取） | 配额；TTL；预算；熔断。 | 区分合法的大任务与失控。 | 局部的拒绝服务。 |

## 控制措施

- **策略引擎：** 确定性（Cedar 或 Rego 风格），默认拒绝，拒绝时给出可读的原因与命中的规则；**不调用 LLM**。
- **凭据代理：** 长期密钥只在代理手里；仅在获批的出口动作里为运行铸造短时的下游令牌。
- **隔离与密钥：** 每个角色一个 Home 与路径空间；`sensitive` 保留类使用单独的密钥域。
- **供应链：** 技能、MCP 服务器与插件的内容视为 `external`；运行开始时，把使用的技能与版本写入记录。

## 坦诚的局限

1. 这**不是**提示词注入的防御。它限制后果，并让后果可见。
2. 租约之内的合法权限仍可能被误用。
3. 对 NAS 之外的副作用无能为力：已经发出的邮件、已经调用的接口。
4. 隐蔽信道与侧信道不在范围内。
5. TCB 被攻陷，则保证失效。
6. 人会犯错：闸门降低但不能消除这种风险。
7. 污点是保守的，会带来摩擦与误报；需要调参，也需要可见的拒绝原因。
8. 加密粉碎只保护我们能控制的副本。

## 事件应对

- **熔断：** `revoke_run` 与 `revoke_role` 立即撤销租约并冻结分支。
- **回滚：** 把受影响的树恢复到某个提交。
- **溯源：** 用读清单和记录链找出“这次运行读过什么、写过什么、影响了哪些笔记”。
- **清理：** 用 [Cascade Forget](https://agentnas.com/zh-cn/concepts/cascade-forget/) 删除受影响的派生物，并出具报告。

## 可观测性与审计

- **三类数据：** 记录（事件）、读清单（输入集合）、指标与 trace。
- **`explain(commit)`：** 返回这个提交由哪次运行、哪张租约产生，经过了哪些闸门，读过什么，以及依赖的输入。
- **与现有观测栈集成：** 一次运行对应一个 OpenTelemetry GenAI span，租约与闸门以事件的形式挂在上面；记录可以导出为 JSON Lines，或接入 SIEM。
- **指标：** 租约发放与拒绝率；闸门队列长度、批准率与批准耗时；分支数量与年龄；索引新鲜度；预算消耗；记录链校验结果。
- **隐私与保留：** 默认只记元数据，不记内容；记录的保留与内容的删除各自独立；读取记录本身也需要租约。

---

规范网址: https://agentnas.com/zh-cn/security/
更新于: 2026-11-11 · 规范草案 v0.2 · CC BY 4.0
