安全
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 在存储边界上的实现。Meta 自己强调,它是减轻风险的启发式,不是终点,也不替代最小权限;我们的用法也是如此。机制见 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;运行开始时,把使用的技能与版本写入记录。
坦诚的局限
- 这不是提示词注入的防御。它限制后果,并让后果可见。
- 租约之内的合法权限仍可能被误用。
- 对 NAS 之外的副作用无能为力:已经发出的邮件、已经调用的接口。
- 隐蔽信道与侧信道不在范围内。
- TCB 被攻陷,则保证失效。
- 人会犯错:闸门降低但不能消除这种风险。
- 污点是保守的,会带来摩擦与误报;需要调参,也需要可见的拒绝原因。
- 加密粉碎只保护我们能控制的副本。
事件应对
- 熔断:
revoke_run与revoke_role立即撤销租约并冻结分支。 - 回滚: 把受影响的树恢复到某个提交。
- 溯源: 用读清单和记录链找出“这次运行读过什么、写过什么、影响了哪些笔记”。
- 清理: 用 Cascade Forget 删除受影响的派生物,并出具报告。
可观测性与审计
- 三类数据: 记录(事件)、读清单(输入集合)、指标与 trace。
- **
explain(commit):** 返回这个提交由哪次运行、哪张租约产生,经过了哪些闸门,读过什么,以及依赖的输入。 - 与现有观测栈集成: 一次运行对应一个 OpenTelemetry GenAI span,租约与闸门以事件的形式挂在上面;记录可以导出为 JSON Lines,或接入 SIEM。
- 指标: 租约发放与拒绝率;闸门队列长度、批准率与批准耗时;分支数量与年龄;索引新鲜度;预算消耗;记录链校验结果。
- 隐私与保留: 默认只记元数据,不记内容;记录的保留与内容的删除各自独立;读取记录本身也需要租约。
引用本页
为读者、搜索引擎和智能体提供稳定的网址与建议的引用格式。
- Markdown 版本
- https://agentnas.com/zh-cn/security/index.md
- 建议引用格式
- Agent NAS project. “安全.” agentnas.com, 2026-11-11. https://agentnas.com/zh-cn/security/