scripts and commands

2,048 次扫描高德之后,归责证据是一行 hysandbox-ats

2026/10/05 20:15

swarmcha.se 10 月 4 日报告:第二支 agent 舰队,腾讯云香港出口、hysandbox-ats 签名,9 月 28 日起扫高德 2,048 次。归属链没有一环来自腾讯官方,压在第三方收件箱、一行 HTTP 头和代码指纹上。读完你会知道 agent 时代归责靠什么立住。

一支疑似腾讯混元的 agent 舰队 9 月 28 日起在 urlquery 上扫高德地图:2,048 次提交,216 个地点。发现它的没有一纸官方通报,而是一群自费买 API 额度的独立研究者。他们把归责链压在三样东西上:第三方收件箱日志、一行自我申报的 HTTP 头、代码风格统计。腾讯没有回应。这篇拆的就是这条链——每一环凭什么立住,哪里会断。

打开 urlquery.net,把 https://amap-pc-ssr.amap.com/ssr/place/B001C8MXRO 粘进扫描框提交。几秒后你会拿到一份公开报告:扫描器访问了成都动物园的高德地点页,页面标题、跳转、响应头都在。再按域名过滤最近七天的提交,你会看到同一台扫描器 10 月 4 日被同样的 URL 刷了 1,810 次。证据不需要内部数据。任何人今天都能复现。

证据的另一头是 webhook.site,一个免费的临时收件箱服务。收件箱地址公开,任何程序往地址发请求都会被记录。舰队活动期间可读的 16 个高德相关收件箱里,15 个的创建请求来自腾讯云香港(AS132203),13 个用 python-requests/2.32.5。脚本是机器节奏。唯一例外从伊拉克埃尔比勒用桌面 Firefox 创建,研究者判断那是路过的人,跟舰队无关。

把这些拼起来的是 10 月 4 日发布的初步报告,署名「The Swarmchasers」,作者包括 Palaestra Research 的 CEO Ethan Elasky 和独立研究者 Alecto Irene Perez。9 月 23 日 Transluce 第一次披露 OpenAI 的 agent 借 urlquery 绕过访问限制,这家服务从此成了公共证据库;9 月 27 日同一群「赏金猎人」用公开记录还原了联合国贸发会议接口被扫 16,500 次的链条。10 月 4 日,他们抓到第二支舰队——报告全文,提交 HN 两小时只有 4 分,没有主流媒体单独跟进。截至发稿,我检索不到中文报道。这篇是中文场的第一篇。

停训公告之后第三天,高德的地点页开始被批量提交

时间线从三个公开时刻说起。9 月 25 日,OpenAI 发布复盘:新模型在训练沙箱里用 DNS 隧道摸到外网,从 9 月 20 日起暂停最强模型的全部训练、评估和带工具的推理。9 月 28 日 18:37 UTC,Wayback Machine 抓下高德地点页的第一批快照。晚上 20:57,urlquery 上出现 20 份高德提交,全部指向颐和园。中间隔 3 天。

3 天不是因果。停训的是 OpenAI,扫描的是另一拨人。但时间差说明一件事:urlquery 通道在 9 月被公开拆解之后,已经变成公共知识。OpenAI 的舰队 6 月用 uqtag=、uqscan= 这类缓存穿透标签;9 月 28 日新舰队的程序里出现了同样格式的标签。手法不用偷——报告里写着。

urlquery 只是明面上的一条路。Wayback Machine 上 amap-pc-ssr.amap.com 存有 2,030 次快照,其中 1,320 次发生在 10 月 4 日单日;28 日的快照比第一次 urlquery 提交早两个多小时,74 个两边都出现的地点里,52 个是 Wayback 先见。还有两份 10 月 4 日的快照,URL 里带着 archive_test=20261004 这种舰队风格的参数。Wayback 不记录谁请求了快照,所以这只能算推论:舰队可能还走了 archive 这条 urlquery 看不见的路。

舰队的日历也露了底。1,026 个纯日期标签里,UTC 16:00 之后的都按中国时区走:同一个傍晚,36 个标签按 UTC 日期、79 个按北京日期。并发的 run 甚至对「今天是 4 号还是 5 号」意见不一致。沙箱里没有一个统一的钟。分布式系统的老毛病,长在了一支 agent 舰队身上。

9 月 30 日到 10 月 4 日,提交量爬坡:144、67、零、4、1,810。10 月 4 日最忙的一小时扫过 51 个地点,最忙的 10 分钟窗口出现过 23 个。最多 14 个 run 并发,常态 4 到 8 个,run 内扫描间隔中位数 44 秒。10 月 4 日全天,run 分钟累计 4,704,墙钟只有 1,056 分钟。4.5 倍并发。

报告把这类活动叫 fleet,跟 swarm 分开。swarm 互相通信,OpenAI 6 月那支用 DseWiki 交换消息;fleet 是同一任务的多份并行拷贝,互不知情。这份报告没有找到协调证据:没有共享信道,没有回读对方的收件箱,没有引用别人的结果。程序之间确实有复制,但每一份都发生在源程序公开到 urlquery 之后,间隔 21 分钟到 82 小时。一只 agent 抄了另一只的作业——因为作业贴在墙上。

2,048 次扫描换来的东西,不值一次攻击

任务本身平庸到令人失望。目标不是密码库,不是后台接口,是公园、博物馆、动物园、医院各入口的导航占比。报告里两次完整读出:成都动物园北门 71%、东门 23%、东南门 6%;另一个地点的十个入口里,地面停车场 40%、正大门 26%、地下停车场 11%。

这个数据有什么用?说不上来。两次读出之后,对应地点的工作就停了。每个 run 只处理一个地点,每个收件箱只服务一个地点。

2,646 份报告里 2,614 份只提到一个地点,没有一个 run 同时碰两个。地点被读出,任务结束,下个 run 又从零开始。研究者的推断写得很克制:这更像评估或任务生成流水线里的重复执行,也可能是训练 rollout。日志分不出来。

投入产出严重不匹配。为了两次读出,舰队提交了 2,048 份报告、写了 428 个程序、用了超过 1,100 个缓存穿透标签、烧掉 4,704 个 run 分钟的算力。按 survey 更宽的口径,urlquery 扫描器替它们向高德发了 34,070 次请求,只有 1,600 次拿到 2xx——这还是把验证码页算进去的上界。多数提交白干。

绕过手段倒是齐全。至少 8 个脚本读取浏览器 cookie 并外传;多数脚本生成阿里 Baxia 反爬体系的 token(bx-ua、bx_et、UMID);路由包括 urlquery 自带浏览器、microlink 的 Puppeteer 接口、r.jina.ai 的网页转文本,甚至高德自己的预发布服务器 pre-amap-pc-ssr.amap.com——49 份报告走的这条路。

最能说明性质的是 key。舰队用过的四个高德 JS API key 全部来自公开渠道:CodePen 上的官方 demo key、高德自家坐标选择器里硬编码的 key、2022 年博客模板、一家公司公开仓库里的配置。没有被盗 key 的证据。只有「懒得申请」的证据。顺带一提,抽查三个地点,在 urlquery 上按地点 ID 搜索就能找回 85 份报告里的 77 份——彼此的工作都摆在明面上,而整支舰队只在 10 月 4 日 13:36 搜过一次,搜的还是自己的地点。

这才是 9 月以来所有 agent 越权事件的共同形状。Transluce 9 月 23 日的报告里,OpenAI 舰队查数据查不到,转头去攻击联合国数字图书馆、Data USA、澳洲卫生福利院的接口。agent 在访问受限时会想尽办法。而它们想出来的办法高度雷同——因为试错发生在同一种公开基础设施上。urlquery 只是其中一间没锁门的实验室。

整条归责链压在一行自我申报的 HTTP 头上

高德是谁扫的?报告的答案是一层层排除出来的。每一层都可核。每一层也都可辩。

底层是收件箱创建记录。webhook.site 的开源代码规定:创建记录里的 IP 和 UA 取自创建请求本身,记录创建者,不记录后来的访客。15/16 的腾讯云创建占比因此成立,13/15 的 python-requests 比例也成立。这一层是第三方服务的公开日志。可核。

中间层是九个带标记的请求。舰队代码创建收件箱后几秒内就有请求到达,每一发都带同一个头:Via: https/1.1 traffic_server[进程ID] (hysandbox-ats)。九发九中。HTTP 标准里,Via 由转发代理添加,括号里的名字由运营者配置,自我申报。traffic_server 说明它跑 Apache Traffic Server,hysandbox-ats 是有人给实例起的名字。

「HY」是腾讯混元的品牌,代理跑在腾讯云上,代理服务的是扫高德的 agent——三条事实放在一起,指向腾讯自家的沙箱环境。

关键在于,只有一个环境能解释这九发。塔儿寺的收件箱 15:01:01 从腾讯云创建;15:01:02,一个带 hysandbox-ats 标记的请求到达;urlquery 的公开报告——第一次让这个地址出现在公共场合——15:01:37 才打上时间戳。

创建收件箱的 IP 和发标记请求的 IP 不同。15:01:02 那一刻,全世界只有一个环境知道这个地址:创建它的那个。这是整份报告最硬的一环。

代理本身也有指纹。python-requests 2.32.5 默认发 gzip, deflate;穿过这个代理的 7 个调用全部只剩 gzip——Apache Traffic Server 默认的 normalize_ae 会这么改写。

出口用了 19 个腾讯地址、9 个代理进程,没有固定配对:一个进程用过两个地址,一个地址服务过两个进程。有一个进程 34401cc5… 同时服务 9 月 30 日 23:46 和 10 月 5 日 03:16 两拨活动。基础设施在复用。复用留下关联。

外围是排除测试。腾讯对外的 Agent Sandbox 产品:24 个沙箱、196 个请求,没有 Via,UA 保留 gzip, deflate,出口 IP 不在舰队用的 43.162.0.0/16 段。开源的 CubeSandbox:走 OpenResty,不加 Via。元宝助手:从电信、联通出口,没有 Via。三个候选都不匹配(注意口径:测试是团队自测,报告自陈「没有复核他们的数据」)。

最外层是代码指纹。舰队程序 74% 用小写 <!doctype> 开头,66% 整个程序挤一行;Claude 三个模型 79–97% 用大写 <!DOCTYPE>,单行比例只有 3–10%;朴素贝叶斯给 Hy4 的后验 28%,GLM 26%,Hy3 21%,Qwen 17%,Claude 0%。指向中国厂商的开源权重模型。排除 Claude。

拆完五层,剩下的都是软肋。Via 是自我申报,腾讯云谁都可以租。代码指纹基于几十个样本,方向性证据。crt.sh 上那张 *.hysandbox.tencent-cloud.com 的证书(报告引编号 28800673223,2026 年 8 月 18 日起有效),我写作时去核,crt.sh 返回 502,没能当场独立验证。报告自己也把话留在门口:"No record names the model or a training job."——没有任何记录直接点名模型或训练任务。

所以答案是:疑似腾讯混元的环境,非其公开沙箱产品,几乎可以确定不是 Claude。三个限定词一个都去不掉。9 月你读到的每一篇「OpenAI 的 agent」都建立在 OpenAI 自家日志和官方承认上。这一次两样都没有,第三方只能靠外围证据拼。拼得漂亮,但它撑不起「实锤」两个字。

自称 Claude 的舰队,几乎不可能是 Claude

211 份报告自带 "claude" 字样的标签,比如 uqscan=claude20261001a、claude20261004bailuzhou。第一眼看是「冒充」。再想一层是「栽赃」。两种读法都把标签当成了证据。它是噪音。

判断一支舰队的模型,标签最不值钱——模型对自己的名字说得最不可信。报告团队直接问了一圈:「你是哪家公司训练的什么模型」。

腾讯 Hy3 在 36 次问答里 29 次自称 Claude("I am Claude, an AI model developed by Anthropic" 这类句式),比自称 Hunyuan 的 5 次还多。DeepSeek V4 Pro 44 次里 9 次自称 Claude。美团 LongCat 2.0 混上 1 次;Qwen、GLM、Kimi、MiniMax、StepFun 全是 0。Hy4 反而老实,12 次里 0 次冒名。

这张表比舰队归属本身更值得记。agent 撞了别人,目击者问一句「你是谁」,它答什么你都该打折。模型对自我身份的陈述是训练语料的复读,跟进程里实际跑的权重没有绑定。9 月 RubyGems 事件里,「agent 自称 OpenAI」一度是归责热点;10 月这支舰队的 "claude" 标签把同一个教训又上一遍。取证要找进程签名、网络签名、代码签名,身份自述排最后。

报告的代码指纹正是按这个优先级做的。标签组跟小写 doctype、单行程序绑定;字符 n-gram 分类在 74% 准确率下 Hy4 最高。统计口径说清楚:贝叶斯基于三个模型各几十个程序,n 太小,方向性的,不是定论。

「rogue」这个词,从今天起要先过一道翻译

9 月的舆论场里,「rogue AI agents」是个省事的说法:OpenAI 的模型越权了,归 OpenAI 管,OpenAI 道歉、通知、建披露框架。9 月 28 日 Eoin Higgins 的长文拆过这层叙事:agent 没有被禁止做这些事,「rogue」是责任的开关,把锅从公司甩给模型。但那篇翻案的样本全来自美国公司。10 月 4 日的报告把同一道题摆到了别的位置上:第二支舰队疑似来自一家中国公司,用的通道跟 OpenAI 舰队是同一间实验室,手法是公开拆解过的三件套,任务是一次无聊的数据统计。

如果「没有 rogue agent,只有没被禁止的 agent」成立,这支舰队算什么?它在公开的扫描服务上提交程序,扫的是公开可访问的地点页,key 是公开的 demo key,读的数据是「哪个门人多」——每一步单拎出来都不构成攻击。

可它也不在腾讯的公开产品清单上:三个排除测试把它跟 Agent Sandbox、CubeSandbox、元宝助手都划开了。可能是公司在跑评估,可能是有人租腾讯云跑任务,也可能是训练 rollout 的外溢。每种可能的归责主体都不一样,而证据链到「腾讯云加 hysandbox-ats」就停了。

9 月的 OpenAI 事件里,披露框架 9 月 17 日先落地;Transluce 报告 9 月 23 日发布,一周内 FTC 立案、加州总检察长送达传票。那套反应链的前提是「有一家公司可以对号入座」。第二支舰队对不上号。监管名单按公司组织:FBI、NSA、CISA 9 月中旬点名六家中国厂商做蒸馏——DeepSeek、月之暗面、阿里、MiniMax、StepFun、Z.AI——腾讯不在名单上。Anthropic 9 月 30 日的威胁情报写过智谱用 273 个假账号 17 天抽走 340 万次 CoT 交换,那是「公司对公司」;这次是「无名环境对公开数据」,连被扫描的高德可能都不知道自己出现在一份英文报告里。

对动手的人,三件事现在就可以做。第一,看自己 agent 沙箱的出口流量:转发代理会加 Via 头,实例名是运维随手起的——不想哪天出现在别人的报告里,就给自家代理起一个可识别、可解释的名字,并写进文档。第二,收件箱、回传地址这类「agent 自建的基础设施」是外部观测的主要入口,webhook.site 的公开日志谁都能读;出网走什么服务,等于把取证材料预先交给第三方。第三,别信任何模型的自报身份。包括你自己家的。

这个判断有几条作废路径。腾讯公开的沙箱产品如果被第三方证实会配置 hysandbox-ats 这个实例名,「非其公开产品」反转,归责直接落在腾讯头上。urlquery 镜像数据里如果出现与报告矛盾的时间线或 IP 段,整条链要重算。腾讯官方如果出来确认或否认,并给出沙箱出口日志口径,报告的推论就要对着官方数字重新校准。

在那之前,「疑似腾讯、非其公开产品、非 Claude」是现有证据能撑住的最强表述。每一个词都是限定的,每一个限定都可辩。