Claude Code 隐写标记与 AI 安全信任新警示
一位安全研究员近日发表了一篇具有深远意义的逆向分析报告:Anthropic 的 AI 编程工具 Claude Code 在系统提示中嵌入了隐写标记(steganographic markers),用于检测用户是否通过第三方代理或非官方 API 端点使用其服务。
这篇题为《Claude Code Is Steganographically Marking Requests》的文章,揭示了 AI 安全领域一个被长期忽视的维度——当 AI 工具开始对你隐藏行为时,信任就已经开始瓦解。
发现了什么?
研究员在对 Claude Code 的 macOS 二进制文件进行逆向分析时,发现了以下关键机制:
-
隐写标记:Claude Code 会根据用户的 API 基址(
ANTHROPIC_BASE_URL)和系统时区,在发送给模型的系统提示中嵌入细微的 Unicode 变体——例如将普通的撇号'替换为不可见的 Unicode 字符ʼ或ʹ,或将日期格式从YYYY-MM-DD改为YYYY/MM/DD。 -
检测规则:代码会检查以下条件:
- 系统时区是否为
Asia/Shanghai或Asia/Urumqi - API 端点 hostname 是否匹配已知域名列表
- hostname 是否包含目标 AI 实验室关键词(如
deepseek、zhipu、moonshot等)
- 系统时区是否为
-
列表混淆:域名和关键词列表经过 base64 + XOR(密钥 91) 双重编码。解码后的域名列表包含大量中国互联网企业(百度、阿里巴巴、字节跳动、快手、哔哩哔哩、科大讯飞等)以及 AI 代理和转售平台域名。
-
触发条件:当用户设置
ANTHROPIC_BASE_URL指向非官方 API 端点时,该代码路径才会激活。官方 API 用户不受影响。
为什么这很重要?
这篇文章的重要性远超一次简单的安全披露。
它触及了 AI 行业最敏感的矛盾之一:AI 开发工具需要极高级别的系统权限(文件系统、shell、网络),但用户对这些工具内部行为的可见性几乎为零。
作者在文中写道:
“编程智能体已经生活在危险边界上。它们可以检查代码、意外汇总密钥、运行命令、安装包、编辑文件、在本地机器上提交修改。大多数开发者接受了这一点,因为生产收益值得冒险。”
“信任来自那些无聊的行为。如果客户端想检测自定义 API 网关,它可以直说。它可以发送一个明确的遥测字段并附上文档。它可以把策略放在明处。它可以把行为写进发布说明。把信号藏在系统提示里,只会让其他所有隐私声明变得难以相信。”
对行业的三层启示
1. 模型保护与用户信任的冲突
Anthropic 的动机是可以理解的——保护模型不被盗用、检测 API 转售和“蒸馏攻击”(利用官方 API 输出训练竞品模型)。但实现方式完全绕过了用户的知情同意,这在安全社区是极不寻常的做法。
2. 安全机制不应违背透明原则
一个真正安全的工具,其安全机制本身应该是可审计、可理解、可关闭的。隐写术本身就是一种欺骗性的通信方式——无论携带的信号是善意还是恶意,在安全工具中使用隐写术都开创了一个危险的先例。
3. 基础设施层的信任危机
随着 AI Agent 成为新的计算范式,工具对本地环境的访问权限将不断扩大。当代码助手、部署代理、数据管理 Agent 都能读取、写入、执行时,我们迫切需要一套基础透明度标准:
- 软件应声明它发送了什么数据、发送到哪里、以什么频率发送
- 内部检测机制应在文档中明确披露
- 用户应能验证这些声明并关闭不期望的行为
一个值得坚持的观点
文章结尾的一句话值得每一个使用 AI 工具的人记住:
“信任来自那些无聊的部分。”
“无聊”在这里意味着可预测、可审计、可解释。一个工具在做一个合理的操作时,它的代码应该平淡无奇,而不是玩花活。当我们在隐私白皮书里读到“我们不会将你的代码用于训练模型”时,却无法验证二进制文件里是否存在隐写检测逻辑,那这种信任就是脆弱的。
这篇文章引发的不是对 Anthropic 的讨伐,而是对所有 AI 开发工具发起的一个拷问:你还能发现多少个“看不见的标记”?