← Knowledge Notes
AI Engineering / Knowledge note · Chinese

Claude Code 安全面 + 竞品对比(反编译源码级)

liuup 对 CC v2.1.88 泄露源码的安全与竞品分析。① 数据暴露 6 层(上下文最危险非遥测)② 4 类攻击面(prompt 注入/Unicode 隐写/shell 注入/git 逃逸)及源码防御 ③ 防御体系(双重权限闸/sandbox namespace/密钥扫描/隐私分级/fail-closed)④ 隐私最小化实操 playbook(env+行为)⑤ vs Codex/Gemini CLI/Aider/Cursor。做选型/合规/隐私加固看这篇

Source collection:跨来源主题整理 · Published here:2026-09-26 · Note updated:2026-05-31

AI 安全隐私保护工具安全

这是什么:liuup/claude-code-analysis(2.8k⭐)对同一批 2026-03-31 泄露的 CC v2.1.88 源码做的安全分析 + 竞品对比。这是这套笔记里和别处不重合的两块:CC 到底收你什么、哪里能被攻击、它自己建了哪些防线、怎么把暴露面压到最小、以及和 Codex/Cursor/Aider/Gemini CLI 比怎么样。

提醒:第三方从泄露源码分析,非官方,含推断。架构(循环/工具/子代理)见 Claude Code 内部架构(反编译源码级),模型代号/远程开关等内幕见 Claude Code 内幕发现(遥测/代号/卧底/远程开关/路线图)。本机完整源码:~/projects/开源项目/claude-code-analysis。


一、数据暴露面:最危险的不是遥测,是"进模型的上下文"

大多数人担心隐私只盯着"有没有上传遥测",但对 coding agent 来说,真正最大的泄漏口是每次对话打包发给模型 API 的那坨"工作上下文"。CC 接触你数据分 6 层:

层 收什么 敏感度 去哪
① 模型上下文(最隐蔽) 对话+历史+工具执行结果+文件内容+代码片段+git diff+CLAUDE.md+附件+MCP 返回 极高 Anthropic 模型 API
② 本地持久化 transcript JSONL(逐条对话)+session 元数据+OAuth 凭证缓存+memory 文件 高 本机磁盘,默认长期留
③ Memory 长期积累 自动从历史提炼的你的偏好/身份/项目事实,每次开聊注入 高 本机,跨 session 延续
④ 遥测 设备/会话 ID、平台、账户/组织 UUID、订阅级别、仓库 URL 哈希、工具使用统计、文件路径/内容的哈希(非原文) 中 Datadog + 1P
⑤ Team Memory 同步 团队 memory 目录(可能含内网知识/运维路径/团队规章) 高 启用才有,push 回服务器
⑥ 主动上传 transcript 分享 + Grove("帮助改善 Claude",会进模型训练) 高 开了才有

类比:你以为风险是"助理偷偷记了笔台账上交"(遥测),其实真正的风险是"助理每次干活,把你桌上摊开的全部文件、屏幕上的代码、刚跑的命令输出,整包念给后台听"(上下文)。台账还做了脱敏哈希,上下文是原文。

核心结论:风险不在某个单点打点,而是"进模型的上下文 + 本地长期 memory + 外部同步"三者叠加形成的信息发散边界。这个边界关不掉遥测也消不掉 —— 是这类产品的结构性特征。

一个工程细节值得记:源码里有个刻意的类型 AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,凡是要上报遥测的字符串,开发者必须手动转换这个类型 = 等于代码里"签字画押:我确认这条不含代码/路径原文"。说明团队有意识防源码进遥测 —— 但这只防遥测那层,防不了①上下文层。


二、攻击面:4 类攻击 + CC 的源码防御

CC 能读文件/网页/MCP 返回、能跑命令,这些能力本身就是攻击入口:

▸ 1. Prompt 注入(含 Unicode 隐写) —— 攻击者在开源仓库注释、网页、MCP 返回里藏指令,你让 CC 读它时被诱导执行恶意操作。更阴的变种:用肉眼看不见的零宽 Unicode 字符(​ 等)把指令藏进正常文字。

防御:partiallySanitizeUnicode() —— NFKC 规范化(把"看着像 A 其实是合成字"统一)+ 删零宽/方向欺骗/私有区字符,循环洗到不变为止(最多 10 次)。MCP 返回值递归全洗。(真实漏洞:HackerOne #3086545 就是用零宽字符在 MCP 返回里藏指令。)

▸ 2. Shell 命令注入 —— 诱导模型生成带恶意载荷的命令劫持你的机器。

防御:危险模式黑名单 —— python/node/bash/eval/sudo/ssh 等。如果你配了 Bash(python:*) 这种宽授权(等于"让 AI 无限制跑任意脚本"=管理员权限),进自动模式前会被临时撤销,退出后恢复。

▸ 3. Git 逃逸(精妙多阶段) —— 在沙盒内伪造一个裸 git 仓库(HEAD/objects/refs)植入恶意 core.fsmonitor 钩子,等你在沙盒外宿主机跑 git log 时触发。

防御:每次沙盒命令跑完,scrubBareGitRepoFiles() 强制扫除沙盒内的 git 裸库文件。

▸ 4. MCP 服务器不可信输入 —— 不受信的 MCP 服务器返回恶意"工具结果"操控 Claude。

防御:Unicode 递归清洗 + 独立 MCP 权限认证 + 沙盒把 MCP 触发的写入限制在白名单路径。


三、防御体系:5 道防线(同心圆)

        遥测隐私隔离 + 密钥扫描         ← 数据出境防线
      ┌─ 权限模式分级管控 ─┐           ← 策略防线
   ┌──┼ Tool Permission 应用层拦截 ┼──┐ ← 应用防线
   │  │   Sandbox 系统级隔离        │  │ ← 底层防线
   │  │   Unicode 清洗 / 路径校验    │  │
   └──┴────── 宿主机(受保护)──────┴──┘
防线 怎么做 PM 该记的点
双重权限闸 应用层(弹窗确认)+ 系统层(沙盒),一层破了另一层还在 即使 AI 拿到权限,沙盒仍限制它实际能碰什么
Sandbox 沙盒 Linux/WSL2 用 bubblewrap+namespace 内核隔离;macOS 用原生沙盒。白名单驱动:精确控制哪些路径可读写、哪些域名可访问 沙盒内程序"看不到"真正的 ~/.claude/settings.json,改也只改到隔离视图。配置热更新同步,无"旧规则时间窗"逃逸
权限分级 default(每次问)→ acceptEdits → plan(只读规划)→ auto(分类器判)→ bypassPermissions(跳过全部,危险) bypassPermissions 可被企业远程开关或本地设置强制禁用,即使你传 --dangerously-skip-permissions 也被忽略
密钥扫描 内容离开本地前用正则扫 30+ 种凭据(AWS/GitHub PAT/OpenAI/Stripe/PEM 私钥…) 扫描不返回命中原文(防扫描本身变泄漏渠道);可 redact 成 [REDACTED] 而非直接丢弃
隐私分级 default / no-telemetry / essential-traffic 三档 PII 字段路由到有访问控制的专属 BigQuery 列,发 Datadog 前 stripProtoFields 脱敏;MCP 工具名上报前替换成通用 mcp_tool(不暴露你的私有 MCP 服务器名)

工程审美亮点:权限系统是 fail-closed(保守安全)默认 —— buildTool() 里 isConcurrencySafe/isReadOnly/isDestructive 全默认 false(默认当成"不并发/有副作用/可能破坏"),要明确声明安全才放宽。这是对的安全姿态:默认怀疑,而非默认信任。

总评:CC 绝非零风险(上下文泄漏是结构性的,关遥测也躲不掉),但防御工程做得扎实 —— 双闸/沙盒/密钥扫描/Unicode 清洗/危险规则拦截都有真实源码。对用户最有效的安全措施是控制输入边界(下面 playbook)。


四、隐私最小化 playbook(可操作)

如果你要在 CC 里处理敏感代码/数据,按"网络→落盘→行为"三步压暴露面。只做第 1 步、不做 2/3,隐私收益远低于预期。

▸ 第 1 步:关网络与遥测

  • DISABLE_TELEMETRY —— 关遥测/analytics
  • CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC —— 更狠,关一切非必要出网(连自动更新/Grove/release notes 都关)。要"尽量少出网"选这个。

▸ 第 2 步:关落盘与记忆

  • --no-session-persistence 或 cleanupPeriodDays: 0 —— 不生成可恢复 transcript(也就少了被再拿去做 memory/resume/share 的机会)
  • CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 或 autoMemoryEnabled: false 或 --bare —— 关自动记忆,不再积累你的长期画像
  • 不启用 Team Memory —— 它会监听目录 + pull/push 同步回服务器
  • 不启用 Remote/Bridge/Transcript Share —— 都会扩大边界

▸ 第 3 步:管住自己的输入(最关键,关了遥测也救不了乱喂)

  • 不在 prompt 里直接贴密钥/token/私钥
  • 不把整个 .env、生产配置、客户数据塞进上下文
  • 不让 agent 扫含敏感资料的大目录
  • 不在开着 Grove 时处理敏感项目

▸ 企业治理(个人习惯不足以收敛,要统一策略):默认关 auto memory + team memory + cleanupPeriodDays:0 + 默认 essential-traffic + 禁 remote/bridge + 用隔离仓库/脱敏镜像/临时 worktree 跑 agent。

一个现实判断:如果你的真实要求是"代码绝不离开本机、不进模型、不留痕迹",这类产品天然不适合当默认工作方式 —— 最接近也只能是 --bare + 全关 + 严控输入。CC 能"降低暴露面",但不是"零采集优先"架构。


五、竞品对比:CC vs Codex / Gemini CLI / Aider / Cursor

对比基于 2026-03-31 各家官方公开资料。下表是"路线差异",不是"谁更好"。

产品 一句话定位 与 CC 的关键差异
Codex(OpenAI) 覆盖本地+云端的通用 coding agent 平台 入口更宽(CLI/IDE/web/app/SDK/Slack)、云端更成熟、更强调统一产品线与企业治理;CC 的 memory 文件化、本地可审计性更强
Gemini CLI(Google) 高标准的开源 terminal CLI agent 基线 已含 built-in tools/MCP/checkpoint/sandbox/trusted folders/telemetry,产品边界更清晰直接;CC 的 memory 分层更深(不止 checkpoint)、agent runtime 更重(teammate/swarm/team memory)
Aider 轻量终端 pair programming 更轻、repo map+git+lint/test 闭环、脚本化简单;CC 状态管理更复杂(像终端工作台)、平台化能力强(MCP/bridge/swarm/team memory)
Cursor IDE 驱动的远程代理平台 IDE 主导、background agent 强、远程隔离执行突出;CC 是本地终端内核主导,远程只是扩展层

▸ CC 真正的差异化(不是"功能多",而是这三点同时成立,别家多半只占一两点):

  1. 统一执行内核 —— REPL/headless/子 agent/后台/远程全走同一套 query() 主循环,不存在两套实现的行为差异
  2. 文件化、可审计、分层的 memory —— 记忆是磁盘上能 cat 的 Markdown(Auto/Session/Agent/Team 四层各有开关),不是黑盒数据库
  3. local-first 但能平滑扩到 remote/bridge/swarm

一句话:CC 不是"给 Claude API 套个 CLI 皮",而是一套有独立 query 内核 + 文件化 memory + 主干化权限 + 多 agent runtime 的本地 agent 平台。 选型时:要广覆盖+云端+企业治理看 Codex;要 IDE+后台代理看 Cursor;要极轻量看 Aider;要本地内核+深度记忆+多 agent 协作是 CC 的强项。

来源与关联资料