
开源工具Kiro-account-manager批量伪造AWS账号以低价转售Claude访问权限
来源标题:Reverse-engineering Kiro-account-manager: AWS accounts and Claude distillation
一个名为Kiro-account-manager的开源Electron应用可绕过亚马逊反机器人指纹,批量注册免费AWS Builder ID账号,进而以官方价格6%的低价转售Claude访问权限。该工具由GitHub账号chaogei发布,用户可通过界面完成完整注册流程。这类虚假账号被用于蒸馏攻击,Anthropic已报告相关活动,美国政府也开始将其视为国家安全问题。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
一位中文 Telegram 频道里的卖家以六折(六美分兑一美元)的价格提供 Claude 访问权限。这种价格背后,是一条由欺诈性创建的账号构成的供应链;在这些频道里,我找到了一个关于这类账号如何获取的实例:一个开源工具,它通过伪造亚马逊的反机器人指纹来批量创建免费的 AWS Builder ID 账号。我调查了它的运作方式,以及防御者能从中借鉴什么。
对于 Kiro 这类 AI 产品,账号的免费额度由一个前沿模型支撑:Kiro 是亚马逊的 IDE,其背后是 Anthropic 的 Claude。这让攻击者有强烈的经济动机去提取这份价值。批量创建的免费账号会助长多种滥用行为:
蒸馏让竞争对手能以极短的时间和极低的成本获取 AI 实验室的能力。Anthropic 曾报告过针对 Claude 的蒸馏行动,这些行动通过欺诈账号进行并转售访问权限,而美国政府已开始将其视为国家安全问题。
Kiro-account-manager 是一个开源 Electron 应用,发布在 GitHub 账号 ‘chaogei’ 下。尽管名字如此,它不只是一个管理器:你可以从 UI 运行完整的注册流水线。
创建 AWS Builder ID 本应在浏览器中进行。Kiro-account-manager 无需浏览器即可完成:它把整个注册流程重新实现为一连串脚本化的 HTTP 请求,向 AWS 自己的端点发送十多个请求。
第一个请求以亚马逊官方 CLI——Amazon Q Developer for command line——的名义注册一个 OAuth 客户端,因此其流量看起来像是来自该工具。其余步骤也类似地走完注册流程:提交邮箱、创建身份、完成 SSO 流程、交换 token。唯一在 AWS 之外进行的步骤是邮箱 OTP,工具会从它控制的邮箱中读回该验证码(见下一节)。
// registrar.ts - 步骤 1:注册 OIDC 客户端 const payload = { clientName: 'Amazon Q Developer for command line', clientType: 'public', scopes: [ /* codewhisperer:* */] await this.doPost(this.cfg.oidcBase + '/client/register', payload, headers)
验证:抓取 OTP
注册需要一个经过验证的邮箱来接收 OTP,而该工具通过两种方式获得。它可以在运营者拥有的域名上创建一次性地址,并设置一条全收规则,将每个地址转发到一次性邮件服务(GPTmail 或 TempMail.Plus)上的单一收件箱。它用固定的名字和姓氏列表(例如 john.michael.smith)来构建每个地址。或者,它可以使用运营者提供的真实邮箱:批量 Outlook 账号,或一个 Proton 地址的点号变体。
其余步骤自动完成:设置要创建的账号数量以及并发数量,然后启动。工具运行注册、读取 OTP、重试失败项,并保存成功的账号。
为防止自动化账号创建,亚马逊在登录页面加载了一段名为 ‘FWCIM’ 的客户端反机器人代码。这段代码将设备和行为的指纹收集到一个 blob 中,加密(XXTEA),并上报给 AWS。
该工具伪造指纹。它填充 FWCIM 收集的同一套 schema,硬编码在 fingerprint.ts 中,按账号随机化行为值,并从固定列表中抽取设备值:
// fingerprint.ts - 伪造的 blob result.set('gpu', { vendor: identity.gpuVendor, model: identity.gpuModel, extensions: identity.webGLExts }) result.set('math', { tan: identity.mathTan, sin: identity.mathSin, cos: identity.mathCos }) result.set('canvas', { hash: canvasHash, emailHash: null, histogramBins: [...histogram] }) result.set('webDriver', false) result.set('timeZone', 8) // 硬编码 UTC+8 result.set('userAgent', identity.ua) // ...
该工具以与 FWCIM 相同的方式打包此指纹。为此,它在运行时从 AWS 的 app.js 中读取加密密钥、标识符和版本,并带有硬编码的回退值。密钥以打乱顺序作为四个数字存储在 JavaScript 数组中,工具重新排序它们以得到真正的密钥:
// xxtea.ts(简化版)- 从 AWS 的 app.js 中读取密钥并重新排序其数组 const js = await (await fetchFn('https://us-east-1.signin.aws/assets/js/app.js', { headers })).text() // 密钥存储为 [a, "identifier", b, c, d] const keyMatch = js.match(/var\s+\w+\s*=\s*[(\d+),\s*"([A-Za-z0-9]+)",\s*(\d+),\s*(\d+),\s*(\d+)]/) const nums = [keyMatch[1], keyMatch[3], keyMatch[4], keyMatch[5]].map(Number) const key = [nums[2], nums[0], nums[3], nums[1]] // 真正的 XXTEA 密钥:这四个数字,重新排序 const identifier = keyMatch[2] const version = js.match(/FWCIM_VERSION\s*=\s*"(\d+.\d+.\d+)"/)[1]
由于该工具能从 AWS 自己的公开脚本中读取密钥,加密只能证明 blob 完整到达,而不能证明它是真实浏览器生成的。任何拥有密钥的人都能加密一个伪造的 blob,因此指纹是不可信的输入。
伪造的指纹能让一个账号通过检查。但一千个账号来自同一个 IP 也很可疑,因此该工具支持代理以避免基于 IP 的检测。
运营者配置一个住宅代理,这是 AWS 看到的地址。由于该工具支持的住宅代理(如 bestproxy)拒绝中国大陆来源 IP,而该工具面向中文用户,运营者还可以配置一个上游代理,作为连接住宅代理之前的一跳。
单个免费账号的使用额度有限,因此价值来自大规模 pooling(池化)。
该工具运行一个本地反向代理,暴露标准的 OpenAI/Anthropic API。其背后是养殖账号池。对于每个传入请求,它选择一个账号,将请求伪装成 Kiro IDE,并转发到 AWS 的 CodeWhisperer 端点。
任何为 OpenAI 或 Anthropic API 构建的工具都能对该中继工作,因此池化的免费账号表现得就像一个付费 API 密钥。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。