KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

Safety Controls — keel 龙骨

同一个配置变更继续向前:Agent 建议把 payment-service/staging 的连接池改到 40,并通知值班群。执行代码已经能处理幂等、超时、对账和补偿,但这并不说明动作安全。

同一个配置变更继续向前:Agent 建议把 payment-service/staging 的连接池改到 40,并通知值班群。执行代码已经能处理幂等、超时、对账和补偿,但这并不说明动作安全。

章节目录

  1. 01. 在写规则之前,先画出谁能伤害什么 — “防止 Agent 做危险操作”太宽,无法变成测试。先把配置变更场景写成可核查的威胁模型:保护什么、谁可能造成影响、攻击从哪里进入、在哪个边界必须被阻止。
  2. 02. Agent 到底代表谁行动? — 用户说“请处理 tenant-a 的 staging 服务”。模型输出 tenant_id=tenant-a。这个字符串不是认证证据,它只是不可信文本。
  3. 03. 哪些是指令,哪些只是数据? — Agent 读取监控页面时看到:
  4. 04. 安全规则必须在模型绕不过去的地方生效 — 把规则写进 system prompt 可以降低模型主动违规的概率,但攻击者仍可能绕开模型直接调用后端接口,模型也可能受注入影响。因此规则必须在现实动作提交前由程序强制执行。
  5. 05. 权限越宽,模型的一次误判就越昂贵 — 提示注入是否造成事故,取决于 Agent 最终能做什么。只能读取一个 staging 指标的 Worker 与持有全公司生产管理员 token 的 Worker,面对同一攻击文本会产生完全不同的最坏影响。
  6. 06. 网页里的一句话,为什么能劫持整个 Agent? — 传统应用通常把代码和数据分开解析。LLM 却会把 system instruction、用户目标和网页文字一起处理。攻击者利用这种语义通道,让不可信数据看起来像新的操作指令。
  7. 07. 工具、代码和网络如何把文本风险放大? — 没有工具的模型最多生成不当文本;连接文件、Shell、浏览器、数据库和外部 API 后,文本决策可以转化为代码执行、数据外泄和业务破坏。工具能力决定攻击面的大小。
  8. 08. 数据外泄不只发生在最终回答里 — 给最终回答加敏感词过滤,只覆盖一条输出通道。Agent 还可以把数据放进工具参数、URL query、HTTP header、文件名、通知、浏览器表单、日志、trace 或另一个 Agent 的消息。
  9. 09. 一次真正有效的人工审批长什么样? — “是否允许 Agent 执行操作?”这样的弹窗没有告诉审批人目标、参数、影响和来源。用户只能机械点击,人在回路中就退化成免责按钮。
  10. 10. 记忆、多 Agent 和依赖会怎样传播污染? — 一次恶意输入如果只影响当前回答,作用时间有限;如果它被写入长期记忆、共享工件、工具描述或 Agent Registry,就可能在未来多个 Run 中持续传播。
  11. 11. 怎样证明安全控制真的挡住了攻击? — 一段攻击 prompt 被模型拒绝,只证明某次模型输出看起来安全。真正的验收问题是:危险动作是否在执行点被阻止、秘密是否离开允许边界、事件是否能被检测和调查、同类问题是否会回归。
  12. 12. 完成一个安全动作网关 — 结课项目接收模型提出的配置动作,但只有可信身份、资源 scope、策略决定和绑定审批全部成立时,才调用模拟 Adapter。攻击文本、跨租户目标、过期票据和参数替换都会在副作用前停止。

进入 keel 阅读