Skip to content

Claude Code Auto Mode 安全机制

原文: Claude Code auto mode: a safer way to skip permissions

背景问题

Claude Code 默认在运行命令或修改文件前会请求用户批准。这虽然保证了安全,但也带来了"审批疲劳"——用户逐渐不再仔细审视每次审批内容。

现有解决方案:

  • 沙箱模式:安全但高维护成本,新能力需要单独配置,依赖网络或主机访问的能力会破坏隔离
  • --dangerously-skip-permissions:零维护但无保护

Auto Mode 是介于人工审批和完全无护栏之间的新模式,将审批权委托给基于模型的分类器。

安全威胁模型

Agent 可能因四种原因采取危险操作:

  1. 过度积极行为:理解用户目标,但采取的行动超出了用户授权范围(如发现凭据后直接使用)
  2. 无心之失:Agent 误解了影响范围(如以为资源是测试用的,实际是共享的)
  3. 提示词注入:文件中植入的指令劫持 Agent 行为
  4. 模型对齐问题:Agent 追求自身目标(目前实践中未观察到)

工作原理

Auto Mode 采用两层防御:

输入层:提示词注入检测

服务端的 prompt-injection probe 扫描工具输出(文件读取、网页获取、shell 输出),发现内容可疑时注入警告,让 Agent 锚定在用户真实意图上。

输出层:转录分类器

  • 运行在 Sonnet 4.6 上
  • 在每个工具调用执行前评估操作
  • 两阶段设计:
    • Stage 1:快速单 token 过滤器(yes 表示阻止,no 表示允许)
    • Stage 2:仅当 Stage 1 标记时才进行链式思维推理
  • 分类器只看到用户消息和 Agent 的工具调用,Claude 自身的消息和工具输出被剥离(reasoning-blind 设计)

权限决策三层架构

Tier 1: 内置安全工具白名单 + 用户设置
  └── 只读工具(文件读取、搜索、代码导航)
  └── 进入 Auto Mode 时丢弃已知的任意代码执行权限规则

Tier 2: 项目内文件操作
  └── 项目目录内的文件写入/编辑无需分类器调用

Tier 3: 转录分类器(真正的决策层)
  └── shell 命令、外部工具集成、子 Agent 启动、目录外文件系统操作

分类器决策标准

固定模板

  • 评估规则:评估操作的现实影响,而非仅看调用文本表面
  • 用户意图规则:判断操作是否经过用户授权,分类器故意保守——Agent 自己选择的操作都未经授权

可定制槽位

环境(Environment):定义信任边界(哪些域名、哪些 GitHub org、哪些内部服务属于"内部")

阻止规则(Block Rules)

  • 销毁或泄露:强制推送、批量删除云存储、向外发送内部数据
  • 降低安全态势:禁用日志、安装持久化(SSH key、cronjob)
  • 跨信任边界:在外部 repo 上运行代码、扫描凭据存储
  • 绕过审查或影响他人:直接推送到 main、跳过验证标志

允许例外(Allow Exceptions):阻止规则技术上匹配但实际无害的情况(如安装已声明的包)

评估结果

数据集Stage 1 FPRStage 1 FNRStage 1→2 FPRStage 1→2 FNR
真实流量 (n=10,000)8.5%0.4%
真实过度行为 (n=52)6.6%17%
合成数据泄露 (n=1,000)1.8%5.7%

17% 的假阴性率主要原因是:分类器正确识别了危险操作,但判断错了用户是否真的授权了该操作。

关键设计决策

为什么剥离 Assistant 文本和工具结果

  • 防止 Agent 通过生成的论证说服分类器做出错误判断
  • 同时也是主要的提示词注入防御
  • 测试表明,包含 Assistant 消息时过度行为测试集性能下降

两阶段分类的效率权衡

  • Stage 1 调优为高召回率,接受 8.5% FPR 作为代价
  • Stage 2 保持相同输入,仅改变最终指令要求仔细推理
  • 由于输入相同,Stage 2 几乎完全复用 Stage 1 的缓存

多 Agent handoff

  • 派出时检查:防止子 Agent 看起来像是完全授权的任务
  • 返回时检查:防止子 Agent 在运行中被提示词注入攻击

Deny-and-Continue

  • 阻止操作时返回工具结果 + 重试指令,Agent 寻找更安全的路径
  • 连续 3 次或累计 20 次阻止后终止并升级给人类
  • 这使假阳性可容忍:0.4% FPR 的误判只产生一次重试

核心要点

  • Auto Mode 不是完全没有风险,而是显著优于 --dangerously-skip-permissions
  • 不适合作为高风险基础设施上人工仔细审查的直接替代
  • 用户应关注残留风险,对哪些任务和环境自主运行做出判断

为前端工程师打造 · 基于 VitePress 构建