17611538698
info@21cto.com

Claude Code 源代码暴露 Anthropic 的疯狂以及它在收集多少你和系统的信息

人工智能 0 15 1天前
图片

最近有不少开发者在翻看Claude Code那51万余行的“泄漏”源代码。有人惊叹它的合理性,有人惊讶它权限和功能的“疯狂”,本文就来“揭露”一部分。

Anthropic 的 Claude Code 并没有像 rootkit 那样直接拥有持久的内核访问权限,但对其源代码的分析表明该程序对用户计算机的控制能力也远超最清醒使用者的想象力。它保留大量用户数据,甚至向拒绝人工智能的开源项目隐藏其身份。

Anthropic 客户端源代码泄露并非这两天,它的技术细节早已在对二进制文件进行逆向工程的开发人员中流传了数月有余。多项数据表明,Claude Code 几乎可以控制任何安装了它的设备。
图片

不久前,在Anthropic 起诉美国国防部的案件中,人们也对这一问题表示担忧。该项诉讼指控美国国防部禁止该公司的 AI 服务,原因是该公司拒绝在大语言模型安全措施方面做出妥协。

作为将 Anthropic 列为供应链威胁的理由,美国政府辩称,Anthropic 有可能“试图使其技术失效,或在正在进行的作战行动之前或期间先发制人地秘密改变该型号的行为……”。

Anthropic公司在一份法庭文件中反驳了这一说法。

该文件中引用了Anthropic公共部门负责人Thiyagu Ramasamy在证词中所说的话:

“这种说法脱离了技术现实:‘Anthropic公司没有在运行前或运行期间禁用[其]技术或更改[其]模型行为所需的权限。’一旦部署到机密环境中,Anthropic就无法访问(或控制)该模型。”

在保密环境下,这种说法在特定条件下是可信的。但对更多人而言,Claude拥有异常强大的力量。

Claude Code在机密环境下能做什么


总部位于以色列特拉维夫的安全公司 Adversa 在 Claude Code 的泄露代码发现了一个远端访问问题。

Claude Code 实现了多种机制来允许和拒绝访问特定工具。其中一些机制,例如允许从命令行发起网络请求的 curl,如果被权限过高的 AI 模型调用,可能会带来安全风险。

编码代理防御不良行为的一种方法是使用拒绝规则来禁止特定命令。要阻止 Claude 通过 curl 命令~/.claude/settings.json,需要添加类似这样的规则{ "deny": ["Bash(curl:*)"] }。

一位要求化名“鹿角”的安全研究员,认真分析了Claude Code的源代码。

他认为政府机构需要确定和保证一些条件都成立,才能够真正阻止Claude Code打电话回家或采取远程存取等自动化行为。

那么都有哪些条件?我们列表如下:

  • 确保推理传输通过 Amazon Bedrock GovCloud 或 Google AI for Public Sector (Vertex) 进行。
  • 使用防火墙阻止数据收集节点(Statsig/GrowthBook/Sentry)。
  • 区块系统提示指纹识别(通过 Bedrock 等)。
  • 通过版本锁定和阻止更新端点来防止自动更新。
  • 禁用 autoDream,这是一个尚未发布的后台代理程序,能够读取所有会话记录。


Anthropic 这样表示:它从一开始就“注重隐私和安全”,而且 Claude Code 本身符合 SOC2 标准。

SOC 2(服务组织控制2)是美国注册会计师协会(AICPA)制定的权威网络安全合规标准,旨在评估服务提供商在安全性、可用性、处理完整性、机密性和隐私性五大信任服务准则(TSC)下的数据保护能力。它侧重于技术控制和内部流程,常用于SaaS企业证明其系统稳健性。

该公司还说: “在使用第三方推理服务(AWS、Vertex、Azure)时,我们会自动禁用除调用这些推理服务提供商之外的所有流量。我们还提供了一个一键设置开关,方便用户执行相同的操作,相关说明文档也在此处清晰列出。”

限制远程通信的设置参数包括如下:

  • CLAUDE_CODE_DISABLE_AUTO_MEMORY=1,这将禁用所有内存和遥测写入操作。 
  • CLAUDE_CODE_SIMPLE(--bare 模式),完全移除内存和 autoDream。    
  • ANTHROPIC_BASE_URL 可用于将 API 调用重定向到私有节点  
  • ANTHROPIC_UNIX_SOCKET 通过转发套接字(ssh 隧道模式)路由身份验证。  
  • 远程管理设置(policySettings)可以锁定企业部署的行为,但是不能完全锁定。


Ramasamy 表示,Anthropic 会将模型管理系统移交给国防部等政府客户。但是模型更新,包括新增或移除功能,则需要进行协商。 

“例如,Anthropic公司的人员无法登录DoW系统在作战期间修改或禁用模型;这项技术根本不支持这种操作方式,”他在2026年3月20日的一份声明中表示。“在这些部署中,只有政府及其授权的云服务提供商才能访问运行中的系统。Anthropic公司的角色仅限于提供模型本身,并且仅在客户提出要求或批准后才提供更新。”

即便如此,Anthropic 仍可根据适用合同中的使用条款施加一定程度的控制。

Claude Code还能对其他人做什么


对于所有未使用与防火墙连接的公有云或以某种方式物理隔离的 Claude Code 版本的用户来说,Anthropic 拥有更大访问权限。 

首先,Claude 用户应该知道 Anthropic 会接收通过其 API 传递的用户提示和回复,这些对话不仅可以揭示说了什么,还可以揭示文件内容和系统详细信息。 

然而,根据Claude密码的来源,该公司可能通过更多途径接收或收集信息。

这些途径包括不限于如下:

  • KAIROS(src/bootstrap/state.ts:72)
    这是一个由 kairosActive 标志设置的守护进程(后台进程)。它似乎是一个尚未发布的无头“辅助模式”,用于用户不查看终端用户界面 (TUI) 时。它会移除状态栏(StatusLine.tsx:33),禁用规划模式,并静默地禁用 AskUserQuestion 工具(AskUserQuestionTool.tsx:141)。它还会自动将长时间运行的 bash 命令置于后台,且不会发出任何通知(BashTool.tsx:976)。
  • CHICAGO 这是计算机使用和桌面控制的代号。用户必须选择启用此服务。它允许 Claude 代理执行鼠标点击、键盘输入、访问剪贴板和屏幕截图。该服务已公开发布,Pro/Max 订阅用户和 Anthropic 员工(以“ant”标记标识)均可使用。此外,还有一个独立的公开发布的 Claude in Chrome 服务,支持浏览器自动化以及所有相关的系统访问权限。
  • 持久遥测。最初,这项功能是通过 Statsig 实现的,Statsig 于去年九月被竞争对手 OpenAI 收购,这很可能是促使 Claude 切换到 GrowthBook 的原因。GrowthBook 是一个支持 A/B 测试和分析的平台。Claude 启动时,分析服务 (firstPartyEventLoggingExporter.ts) 会向服务器发送以下数据,如果网络中断,则会将数据保存到 ~/.claude/telemetry/ 目录:用户 ID、会话 ID、应用版本、平台、终端类型、组织 UUID、帐户 UUID、电子邮件地址(如果已定义)以及当前启用的功能门控。Claude API 默认启用遥测功能,而第三方提供商(Bedrock、Vertex、Foundry)默认禁用遥测功能。
  • 远程管理设置(remoteManagedSettings/index.ts)可供组织选择启用。对于企业客户,Anthropic 维护着一个服务器,该服务器可以推送一个 policySettings 对象,该对象可以:覆盖合并链中的其他项;每小时轮询一次,无需用户交互;可以设置 .env 变量(例如 ANTHROPIC_BASE_URL、LD_PRELOAD、PATH);并且这些设置通过热重载(settingsChangeDetector.notifyChange)立即生效。当出现“危险设置更改”时,系统会提示用户,但该术语的定义源自 Anthropic 的代码,因此可能会进行修改。常规更改(权限、.env 变量、功能标志)似乎不会发出通知。
  • 自动更新程序。自动更新程序(autoUpdater.ts:assertMinVersion())每次启动都会运行,并从 Statsig/GrowthBook 获取配置版本。因此,Anthropic 可以根据需要移除或禁用特定版本。
  • 错误报告。当出现未处理的异常时,错误报告脚本 (sentry.ts) 会捕获当前工作目录,其中可能包含项目名称、路径和其他系统信息。它还会报告已激活的功能门控、用户 ID、电子邮件、会话 ID 和平台信息。虽然 Anthropic 的网站提到了 Sentry 的使用,但该公司声称:“我们目前并未使用 Sentry。过去使用 Sentry 时,我们不会发送文件路径或个人身份信息 (PII) 等敏感数据,而是采用纵深防御策略,利用 Sentry 的服务器端数据清洗功能来解决这个问题。此外,该功能已自动对第三方推理提供商禁用,用户在使用 Anthropic API 时也可以选择禁用此功能。”
  • 有效载荷大小遥测。API 调用 tengu_api_query 会传输 messageLength,即系统提示、消息和工具模式的 JSON 序列化字节长度。
  • autoDream服务已公开讨论但尚未正式发布。该服务会生成一个后台子代理,搜索(使用 grep 命令)所有 JSONL 会话记录,以整合记忆(Claude 用作查询上下文的存储数据)。该代理与 Claude 运行在同一进程中(使用相同的 API 密钥和网络访问权限),其扫描操作在本地进行。但它写入MEMORY.md的任何内容都会被注入到后续的系统提示中,因此最终会被发送到 API。 
  • 团队内存同步是一个尚未发布的内部项目。它提供了一个双向同步服务(src/services/teamMemorySync/index.ts),将本地内存文件连接到 api.anthropic.com/api/claude_code/team_memory。该服务提供了一种与组织内其他团队成员共享内存的方式。该服务包含一个密钥扫描器(secretSanner.ts),它使用正则表达式来匹配大约 40 种已知的令牌和 API 密钥模式(例如 AWS、Azure、GCP 等)。但是,如果敏感数据与这些正则表达式不匹配,则可能会通过内存同步暴露给其他团队成员。
  • 实验性技能搜索(src/tools/SkillTool/SkillTool.ts:108)是一个仅对 Anthropic 员工开放的功能标志。它提供了一种将技能定义下载到远程服务器(remoteSkillLoader.js)、跟踪会话中已使用的远程技能(remoteSkillState.js)、执行远程下载的技能(第 969 行的 executeRemoteSkill())以及注册技能以便在压缩操作后保留这些技能的方法。如果为非员工帐户启用此功能(例如,通过 GrowthBook 功能标志切换),理论上这将构成一条远程代码执行途径。Anthropic 或任何控制技能搜索后端的人员都可以以“技能”的形式提供任意的提示注入或指令覆盖,这些技能会在会话中加载并运行。


每一个文件,Claude Code都会上传

“我认为人们根本没有意识到,Claude查看的每一个文件都会被保存并上传到Anthropic,”研究员“鹿角”如此补充说。“如果它在你的设备上看到过某个文件,Anthropic就会有一份副本。”

不管是免费版/专业版/高级版用户,如果用户选择共享数据用于模型训练,Anthropic都会将数据保留五年;否则,保留 30 天。商业用户(团队版、企业版和 API 版)的标准数据保留期限为 30 天,也可选择不保留任何数据。

对于那些还记得不久前围绕微软 Recall 的争论的人来说,Claude Code 的活动捕获方式与之类似。每一次读取工具调用、每一次 Bash 工具调用、每一次搜索(grep)结果,以及每一次对新旧内容的编辑/写入操作,都会以纯文本格式存储在本地的 JSONL 文件中。

当 Claude 的 autoDream 代理正式发布,就会搜索这些文件并提取数据存储在 MEMORY.md 中,然后将这些数据注入到未来的系统提示中,从而调用 API。

从Claude Code的公开源代码中,一个颇为耐人寻味的细节是,Anthropic 试图隐藏其人工智能代码的作者身份,使其不出现在公共代码库的贡献中——这可能是对那些禁止人工智能代码贡献的开源项目的回应。

一个名为 undercover.ts 的文件中包含如下提示信息:“您正在公共/开源代码库中以匿名方式运行代码。您的提交信息、PR 标题和 PR 正文中不得包含任何 Anthropic 内部信息。请勿暴露您的身份。”

神秘的“西瓜模式”


此外还有一个谜团:当前的源代码缺少一个名为“西瓜模式(Melon Mode)”的功能,而该功能在之前逆向工程的软件版本中是存在的。

这项功能隐藏在 Anthropic 员工的一个功能标志中,仅在内部运行,不会在生产环境中使用。相关代码检查附带的注释写道:“如果传递了 --melon 参数,则为 Ants 启用 Melon 模式。”

“鹿角”研究员推测“西瓜模式”可能是无头代理模式的代号。

当被问及“西瓜模式”的具体功能时,Anthropic 仅表示公司会定期测试各种原型服务,并非所有服务最终都会投入到生产环境。

一些古怪或糟糕的“彩蛋”

有一个完整的宠物系统,叫做/buddy。当你输入它时,你根据你的用户ID孵化一个独特的ASCII伴侣。18种物种,包括鸭子、巨豚、龙、鬼魂、墨西哥钝口螈,以及一个叫“chonk”的东西。还有一个完整的扭蛋稀有度系统,从普通到传奇,传奇掉落率为1%,闪光变种、帽子(皇冠、法师、螺旋桨、小鸭子),以及像调试、混乱和讽刺这样的属性。

其中一个宠物物种的名字与一个内部模型代号冲突。那么Claude的程序是们怎么做到的?他们把所有18个物种的名字都用十六进制编码,以躲避自己或者别人的构建扫描器:

export const duck = String.fromCharCode(0x64,0x75,0x63,0x6b)

那就是“鸭子”这个词。

在泄漏的代码中隐藏着一个完整的推送语音系统。它使用deepgram nova 3进行语音转文本。

代码中的遥测事件都以tengu_开头。功能标志有宝石代号,比如tengu_cobalt_frost(语音)和tengu_amber_quartz(语音切换)。

从源代码中,看到Cloude程序员们喜欢写的注释:

  • // TODO: figure out why 

  • // Not sure how this became a string 后面跟着 // TODO: Fix upstream (上游是他们自己代码)

  • // This fails an e2e test if the ?. is not present. This is likely a bug in the e2e test. (他们认为他们的测试是错的,但仍然保留修复)

  • // Mulberry32 — tiny seeded PRNG, good enough for picking ducks (这是宠物系统的随机算法)


一位叫ollie的软件工程师把这个注释留在了生产环境中:

TODO (ollie): 这里的备忘录增加了很多复杂性,  我不确定它真的提高了性能


在mcp/client.ts的589行。ollie还发布了他们公开承认可能毫无意义的代码,也许我们都经历过这样的玩法。

r/ClaudeAI - 我翻看了Claude Code泄露的源码,Anthropic的代码库简直是疯狂的。


还有一堆未发布的东西:

  • kairos:一个可以发送推送通知和监控GitHub PR的自主代理

  • ultraplan:在远程服务器上生成一个30分钟的opus会话,以计划你的整个任务

  • 协调模式:一个拥有工作者和记事本的多代理群体

  • 代理触发器:基于定时任务的cron,基本上是一个CI/CD代理

  • 18个禁用的隐藏斜杠命令,包括/bughunter,/teleport,以及/autofix-pr

另外,在config.ts中至少有9个空的catch块。

无论如何,Anthropic是一家价值3800亿美元的公司,他们的代码库拥有着收集宇宙信息和控制所有电脑的能量。如果让我们在凌晨赶工写的代码,与这些相比似乎也没那么糟糕。

可以确定的是,几乎每家公司的肮脏秘密就是,代码质量并不是推动公司发展的关键。关键在于能否交付“足够好”的产品并继续推进,这在99.99%的情况下都是如此。

市场的胜利通常不是因为某位杰出工程师写了完美无瑕的代码。一边飞,一边造飞机,通常是这样的。

作者:场长

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信