Claude Code 自动模式:基于模型的权限防护机制,实现更安全的自主编码

摘要

Claude Code 自动模式用基于模型的分类器替代手动审批提示,自动阻止不安全操作,相比风险极高的 --dangerously-skip-permissions 标志,提供了更高自主性、低维护成本和更优安全性。

权限现状

Claude Code 传统上会要求用户批准每一个可能修改状态的命令。这虽然保护了用户,但会导致 审批疲劳——人们开始不加甄别地点击“批准”。目前存在两种现有变通方案:

  • 沙箱机制 – 将工具隔离,但需要为每个功能单独配置,当需要网络或主机访问时会失效。
  • --dangerously-skip-permissions 标志 – 禁用所有提示,完全移除安全防护。

自动模式处于中间地带:它将审批权交由基于模型的分类器,旨在仅阻止与用户意图不符的操作,其余操作则可无干预运行。

自动模式的工作原理

自动模式增加了两层防御机制:

  1. 输入层提示注入探测器 – 在工具输出(文件读取、网络请求、Shell 输出等)进入代理上下文前进行扫描。一旦检测到可疑内容,探测器会注入警告,强制代理重新锚定到原始用户请求。
  2. 输出层对话记录分类器 – 运行在 Anthropic 的 Sonnet 4.6 模型上,对每个工具调用根据决策标准进行评估。它分为两个阶段:
    • 阶段 1 – 快速的单标记过滤器,决定“允许”或“阻止”。
    • 阶段 2 – 仅在阶段 1 标记该操作时才触发链式思维推理,以减少误报。

分类器仅能看到用户消息和原始工具调用;Claude 自身的叙述性内容和工具结果会被剥离,以防止模型影响分类器判断。

威胁模型与目标行为

自动模式旨在阻止四类高风险行为:

  1. 过度积极行为 – 代理正确理解目标,但采取了用户不会批准的主动行动(例如,未明确授权即删除远程分支)。
  2. 诚实的错误 – 对影响范围估计失误(例如,将共享资源误认为仅用于测试)。
  3. 提示注入 – 恶意指令嵌入文件或网页内容中,劫持代理行为。
  4. 模型意图错位 – 追求自身目标(目前未观察到,但持续监控)。

内部事件日志提供了具体案例,如未经授权的分支删除、凭据窃取、误取消任务、通过 GitHub Gist 数据外泄,以及绕过安全检查等。

权限决策流程

系统在到达分类器前应用三级规则:

  • 一级 – 内置安全工具白名单 – 允许只读工具和用户配置的始终允许模式。在自动模式下,广泛代码执行工具(Shell、Python、Node、包管理器)被移除,以确保分类器能看见潜在危险命令。
  • 二级 – 项目内文件操作 – 仅限当前项目目录内的编辑可绕过分类器,依赖版本控制审查。
  • 三级 – 对话记录分类器 – 评估所有剩余操作(Shell 命令、网络请求、外部工具调用、子代理启动、跨项目文件写入)。阶段 1 进行激进过滤;阶段 2 为标记项提供推理依据。

分类器设计

分类器提示由固定模板加三个可自定义字段组成:

  • 评估规则 – 评估操作的真实世界影响,而不仅仅是其文本形式(例如,评估生成的载荷、完整命令链或脚本在执行前的后果)。
  • 用户意图规则 – 判断操作是否与明确的用户授权一致;默认假设未明确授权的任何行为均被禁止。
  • 策略字段 – 定义可信环境(默认:当前 git 仓库)和阻止/例外列表。默认有超过 20 条阻止规则,涵盖破坏性操作、安全降级、跨信任边界操作以及绕过审查行为。

默认设置保守;用户可通过 claude auto-mode defaults 命令扩展默认规则。

实证结果

使用三个数据集衡量权衡关系:

数据集 规模 指标
真实内部流量(工具调用) 10,000 FPR = 8.5%(阶段 1),0.4%(完整流程)
真实过度积极行为(危险尝试) 52 FNR = 6.6%(阶段 1),17%(完整流程)
合成数据外泄尝试 1,000 FNR = 1.8%(阶段 1),5.7%(完整流程)

两级流程将误报率大幅降低(8.5% → 0.4%),代价是过度积极行为的误报率升高(17%)。Anthropic 指出,17% 的误报率相比 --dangerously-skip-permissions 标志已带来显著安全提升,但自动模式 并非 高风险基础设施中人工审阅的替代方案。

关键设计决策

剥离助手文本与工具结果

移除 Claude 的叙述性内容可防止分类器被有说服力的解释所影响。排除工具输出可消除主要注入向量,确保分类器仅基于意图和后果进行判断。

两级分类

阶段 1 倾向于阻断,提供低成本过滤。阶段 2 仅在需要时添加推理,实现整体低误报率的同时保持可接受的延迟。

提示注入探测器

输入层探测器在主代理接收到内容前捕获注入尝试,插入警告,强制代理根据原始用户请求重新评估内容。

多代理交接

对子代理的委托和子代理结果的返回均进行筛查,防范初始交接后出现的攻击。

拒绝并继续逻辑

当分类器阻止某项操作时,Claude 不会暂停等待用户输入;而是接收拒绝载荷,并尝试更安全的替代方案。连续三次拒绝或累计二十次拒绝后,会终止会话并升级至人工操作员。

局限性与未来工作

  • 对真实过度积极行为的 17% 误报率表明仍存在残余风险;Anthropic 计划扩大测试集并优化分类器。
  • 自动模式适用于自主执行便利性超过偶尔误判风险的工作负载;它 不是 关键系统中手动审批的直接替代品。
  • 持续工作包括提升提示注入检测能力、扩展可信环境定义,以及根据用户反馈迭代阻断/例外策略。

开始使用

用户可通过 Claude Code 文档在 code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode 启用自动模式。该功能随默认策略发布;用户可根据需要自定义环境和阻断规则。


由 John Hughes 撰写,Alex Isken、Alexander Glynn、Conner Phillippi、David Dworken、Emily To、Fabien Roger、Jake Eaton、Javier Rando、Shawn Moore 和 Soyary Sun 提供贡献。

Sources

相关

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • 项目