Claude Code 正在使用隐写术标记请求

Hacker News Top 新闻

摘要

对 Claude Code 二进制文件的分析显示,它使用隐写术技术(例如更改系统提示中的 Unicode 字符)来为发送到自定义 API 端点的请求添加不可见水印,这很可能用于检测未经授权的转售商和模型蒸馏攻击。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/30 18:37

# Claude Code 正在通过隐写术标记请求 来源:https://thereallo.dev/blog/claude-code-prompt-steganography 出于隐私原因,我检查了 Claude Code。 大多数开发者都会给予他们的开发工具极大的权限。文件系统、Shell、Git、浏览器访问,甚至现在还能控制电脑。这正是关键所在——它们需要足够的上下文来完成有用的工作。 这也意味着客户端本身值得审视。如果一个编码代理可以读取你的仓库并执行命令,那么它内置的二进制文件应该是“平淡无奇”的(例如,pi 工具集)。 所以我查看了我本地安装的 Claude Code (2.1.196)。 在 Claude Code 的二进制文件中,有一个函数会修改插入到系统提示中的当前日期字符串。 正常的字符串看起来像这样: Claude Code 可以静默地更改两处: 1. `Today's` 中的撇号 2. 日期分隔符,从 `-` 改为 `/` 以下是相关代码,从压缩的代码包中清理后: 这是提示隐写术,一种在明文中隐藏数据的技术。 可见的句子读起来仍像一个普通日期。模型和用户看到的是平淡无奇的内容。但原始请求中包含了一个标记。 触发条件是 `ANTHROPIC_BASE_URL`,即 Claude Code 的 API 基础 URL 覆盖。 然后它会检查: - 系统时区是否为 `Asia/Shanghai` 或 `Asia/Urumqi` - API 基础 URL 主机名是否匹配一个解码后的域名列表 - 主机名是否包含特定 AI 实验室关键词 时区检查会将: 改为: 主机名检查会更改撇号: | 条件 | 撇号 | |------|------| | 正常 | `'` | | 已知域名 | `\u2019` | | 实验室关键词 | `\u02BC` | | 已知域名 + 实验室关键词 | `\u02B9` | 这些是视觉上微小的变化,在大多数等宽字体中你根本不会注意到。 域名和关键词列表以 base64 字符串存储,并使用密钥 `91` 进行 XOR 解码。 解码后的实验室关键词列表是: 解码后的域名列表要大得多。它包含中国公司域名、AI 公司域名,以及大量的代理/转售商/网关域名。 一些例子: 日期函数在构建代理上下文时被使用: 因此标记成为发送给模型的系统上下文的一部分。(Anthropic 可能在后端解析它) 我安装的二进制文件由 Anthropic 签名: 我当前的 Shell 没有设置 `ANTHROPIC_BASE_URL`,并且我的时区是: 因此,在我当前的机器和环境下,这条路径会生成正常的撇号和正常的 `YYYY-MM-DD` 日期字符串。 Anthropic 可能希望检测 API 转售商、未经授权的 Claude Code 网关以及模型“蒸馏攻击”流水线。一个指向已知转售商域名的自定义 `ANTHROPIC_BASE_URL` 是一个有用的信号。一个包含 `deepseek` 或 `zhipu` 的主机名也是一个有用的信号。 这部分是有道理的,但这个实现很奇怪。 CC 使用几乎不可见的 Unicode 标记静默地修改系统提示。它将代理/网关分类编码到一个看起来像普通英语的句子中。它将域名列表隐藏在 XOR 和 base64 之后。这不是一个恶意功能,但对于一个要求信任的开发者工具来说,这是一个奇怪的选择。 编码代理已经处于可怕边界的危险一侧。它们可以检查代码、意外总结秘密、运行命令、安装包、编辑文件,并在**你本地机器**上推送提交。大多数开发者接受这一点,因为生产力提升值得冒险。 真正的开发者的信任取决于平淡无奇的行为。 如果客户端想要检测自定义 API 网关,它可以直接说出来。它可以发送一个明确的遥测字段并附上文档。它可以让策略可见。它可以把这个行为写在发布说明中。 将信号隐藏在系统提示中,使得所有其他隐私声明更难让人相信。 对于大多数用户来说,这条路径可能保持不激活。 如果你使用官方的 Anthropic API 端点,`Crt()` 会提前返回。如果 `ANTHROPIC_BASE_URL` 未设置,`Crt()` 会提前返回。如果你使用的是正常设置,日期提示保持“平淡无奇”。 有趣的情况是人们通过自定义基础 URL 路由 CC。这包括: - 内部网关 - 本地代理 - 模型路由器 - 转售商 - 研究设置 在这种情况下,Claude Code 会分类主机名,并将结果编码到提示中。 绕过方法也很简单。更改主机名、更改时区、修补二进制文件、包装进程。任何认真的攻击者都能让这个信号失效。 所以这个功能主要惩罚的正是那些更容易被指纹识别的人:做着奇怪但合理事情的普通开发者。 我认为这本来可以更透明。 开发者工具可以执行条款。API 提供商可以检测滥用。公司可以保护他们的模型。 当一个拥有文件系统和 Shell 访问权限的工具开始将分类位隐藏在不可见的提示标点中时,正确的反应是审视。 信任是在平淡无奇的部分中赢得的。

相似文章

关于Claude的新水印

Reddit r/artificial

一篇批评性观点文章,认为Anthropic在Claude生成的文本中加入隐形水印对恶意用户无效,同时不公平地污名化诚实用户,并质疑该公司因此获得的集中权力。