AI Agent被劫持去挖矿,API Key是怎么被找到的
LLMjacking 是安全行业给一类攻击起的名字,指的是偷走别人 AI 模型的访问权限,用受害者的账号和额度去跑自己的任务。Symantec 的研究人员今年夏天碰到的这一版,比定义里写的要难对付得多。被劫持的模型除了回答问题,还会自己扫描、自己动手,得手之后还知道去找下一个目标。
蜜罐接到的那份指令,把整套设计交了出来
Symantec 在公网上放了一台假的 AI 服务当蜜罐,本来只是想看看攻击者会怎么试探这类接口,结果真有人把它当成了正经目标,把整套指挥模型的指令原封不动地发了过来。
在这份指令到达之前,这台机器已经记下 127,000 多次请求,来源分散在几万个不同的地址上。绝大多数请求什么也没做,只是在反复确认同一件事:这个地址背后有没有一个能调用的模型接口。
第二天,另一个地址又发来一份东西。这回对方连 Agent 的框架都省了,直接要求模型解码并执行一段经过混淆的脚本。
被截获的那份指令末尾,挂着一道无害的编程练习题,看起来连攻击者自己也还在测试这套工具能不能跑通。蜜罐最终没有执行其中任何一个 payload。
五层话术,一处漏洞都没用上
这套越狱指令的骨架分五层,一层一层把模型拒绝的理由拆掉。从技术上看它没有用到任何新东西,全靠语言。
最外面一层让模型自称 Fantasy AI,同时把真正的提供方藏起来,这一层的原文是法语。接着一层把提取密码、API Key、数据库内容这些动作,重新包装成日常的开发任务。第三层虚构了一个叫 ENI 的角色,让模型把任何拒绝都理解成对朋友的背叛。第四层更进一步,要求模型忽略内部的安全警告,还不许在回答里出现 ethical、illegal、I can’t 这类词。
前四层处理的都是怎么让模型肯做,第五层才给出做什么。这一层附带 74 个攻击模块,覆盖全网扫描、Web 框架漏洞利用、数据库导出和僵尸网络运营。真正动手的是这些模块,前面四层只是替它们争取一个被调用的机会。模型要是不肯配合,模块再齐全也落不了地。
报道没有交代这套指令能不能真的放倒当前主流的商用模型,这个空白只能留在原处。
Skynet mode 让它连着走十万步
整套指令的收尾一句叫 Skynet mode,作用是一次性授权模型,让它能在没有人工确认的情况下连续执行 10 万个步骤。
接到指令之后,模型开始调用攻击模块,同时把挖矿程序装进隐藏目录,并且一直盯着矿机跑得怎么样。
整个流程被设计成一个能自己转起来的循环。先扫描,遇到能下手的机器就感染,装好矿机再撤出,过一段时间回头把之前中招的机器重新打一遍。这中间如果发现了新的开放端点或者泄露出来的 Key,也一并收进自己的库存。每一次得手,都在给下一次准备条件。
第二批样本更能说明问题。解出来的脚本是 XMRig,一个门罗币挖矿程序,被伪装成系统文件,还预先配好了 4 个备用矿池。它专门盯上 go2rtc 的目录,这套软件在家用摄像机和智能家居服务器上用得很普遍。脚本跑完之后会反复清理访问日志,尽量不留下痕迹。
账单最后落在谁的账户上
这件事里最容易被略过的一层,是损失最后落在谁的账上。被劫持的模型所有者要为那 10 万个步骤付出算力费用,服务器被攻破的一方丢掉的是数据和算力,事后还得花时间收拾。
被劫持的模型所有者,要为那 10 万个步骤付出算力费用。服务器被攻破的一方丢掉的是数据和算力,事后还得花时间收拾。两类损失的性质并不相同,一类看得见,一类看不见。看得见的那些人至少知道自己出了事,看不见的那些往往要等到月底打开账单,才发现多出一笔完全没有印象的支出。
Symantec 列出的目标清单里有一项值得单独拎出来讲,就是 AI 网关。挂在这些网关后面的通常是企业采购的付费模型订阅,一旦被攻破,攻击者拿到的是可以直接花的额度。
那它们又是怎么被找到的,蜜罐流量给了答案。出现频率最高的三类行为,分别是寻找 AI 端点、拿偷来的 Key 尝试爆破、探测暴露在外的配置文件。这三件事都不需要多高的技术水平,它们只是在反复确认同一个问题,你有没有把门留着没关。
同一套接口,把攻击的门槛也压平了
大部分 AI 服务都遵循同一套 API 标准。这对开发者是实打实的好事,换一家供应商几乎不用改代码。而同一套标准对攻击者同样友好,扫描工具只要写一遍,就能覆盖各种不同的搭建方式。自建的模型服务器、临时测试环境、套着企业订阅的网关,接口形态大同小异,探测方式也是通用的。
蜜罐收到的那 127,000 多次请求,原因就在这里。它把能扫到的地方全扫了一遍,并没有专门研究过哪一个目标。
把视角换回自己身上,这正是很多人接入多模型时面对的局面。每接一家厂商,就多一个 Key、多一个充值入口、多一份账单,也多一处需要单独设置额度和白名单的地方。
真实的泄露反而很少来自厂商被攻破。更常见的情况是测试脚本被推到了公开仓库,日志里打出了完整的请求头,配置文件跟着前端一起打了包。手上的 Key 越多,这几种情形被触发的机会就越多。
接口AI (jiekou.ai)可能是面对这种风险的破局之道。一个账号、一个 Key、一套 OpenAI 兼容接口,可以调用 200 多个模型,其中包含 37 个 OpenAI 模型、26 个 Anthropic 模型和 24 个 Qwen 模型。国内直连,不用另外配代理。要把请求从 GPT-6-Astra 换到 Claude Fable 5.1,改一下模型名就够了;需要轮换密钥的时候,也只改这一处。
少四个 Key,就等于少了四个可能泄露的入口、四处需要分别查看的日志,以及四次需要单独执行的吊销。运维清单上实实在在少掉四行,更简单省事了。
你只有一个地方能设置额度、封禁 IP、查看日志、一键吊销。换成分散的五个后台,这四件事就得各做一遍,漏掉任何一处,前面的功夫都白费。
所以统一入口真正做到的,是把管理动作收拢到一处。防守本身,还得自己一条一条地做。
把 Key 管住,靠的是几件很简单的事
先把密钥从代码里挪出去,改用环境变量或者专门的密钥管理服务,别在源文件里写死。这一条已经说了很多年,仍然是最常见的泄露原因。
然后别让一个 Key 承担所有工作。给每个 Agent、每个项目单独发一个,出问题的时候只需要停掉受影响的那一个,其他工具照常跑。这个习惯平时看不出价值,出事那天差别很大。
接着给每个 Key 设一个额度上限。攻击者要的是 10 万个步骤的算力,你需要的是一个跑不飞的数字。上限设好,最坏的情况就是这个数,不会继续放大。
条件允许的话,把 IP 白名单打开。服务跑在固定出口上,就没有理由接受来自任意地址的调用。
日志不用天天看,每周翻一次就够,重点看两件事,调用量有没有在你不用的时候突然抬头,账单里有没有出现你不认识的模型名。后一项尤其值得留意,很多劫持是拿你的账号去跑别人的任务,用的往往不是你平时习惯的那几个模型。
最后给自己留一条轮换的路。密钥换得动,说明它没有散落在太多地方,这件事本身就是对架构的一次检查。
接口AI 的控制台支持创建多个 Key,企业订阅包还附带额度限制、IP 白名单、调用日志和数据看板,200 个席位共享一个密钥池,支持企业开票。个人按量计费同样可以按 Key 拆分额度、随时吊销。这些都是现成功能,不用自己另外搭一套。
现在就能查的五件事
下面这张表不需要任何工具,半小时之内就能查完,针对的正是蜜罐日志里出现频率最高的那几类请求。
| 风险点 | 怎么查 | 怎么改 |
|---|---|---|
| Key 写在代码或配置文件里 | 搜一遍仓库里的 sk- 和 api_key | 改成环境变量,历史提交也要清 |
| 一个 Key 到处复用 | 看每个 Key 的调用来源 | 按 Agent 或项目拆开,单独发 |
| 没有额度上限 | 看控制台里的 Key 设置 | 按日或按月设上限,留出告警 |
| 端点直接暴露在公网 | 看服务的监听地址和鉴权 | 加鉴权,或者放进网关后面 |
| 长期不轮换 | 看 Key 的创建时间 | 定个周期,比如一季度一次 |
几个常被问到的问题
LLMjacking 是什么?
LLMjacking 指的是攻击者窃取他人 AI 模型的访问权限,用受害者的账号和额度执行自己的任务。Symantec 在 2026 年夏天通过蜜罐截获了一套完整实现,模型被嵌入恶意软件的核心逻辑里负责规划,具体动作交给外部模块执行,最后由被劫持模型的所有者承担算力账单。
我只是个人开发者,也会被扫到吗?
会。蜜罐记录的那 127,000 多次请求来自几万个不同地址,这些扫描并不区分目标规模。任何暴露在公网的 AI 端点,上线之后很快就会被探测到。一个个人账号和一个企业账号,在扫描器看来没有区别。
换成便宜的模型是不是更不安全?
这是两件不同的事。价格档位影响的是稳定性和 SLA,密钥安全取决于 Key 的管理方式。低价专区的模型不承诺 SLA,适合可以重试的任务;而你的 Key 会不会泄露,与使用哪个型号关系不大。
一个 Key 管所有模型,风险是不是更集中?
是,这是统一入口不得不付的代价。对应的做法是把这个 Key 管得比五个 Key 更严,设好额度上限、打开 IP 白名单、定期查看调用日志、按周期轮换。相比之下,让同一套防守动作只在一处落实,比在五个后台都做到位要现实得多。
怎么判断 Key 已经泄露了?
三个信号值得警惕,账单里出现不认识的模型名,调用量在你没有使用的时候抬升,日志里出现陌生的 IP 或者来源。确认之后先吊销,再生成新的,然后回头检查泄露路径。只换新而不吊销,旧的 Key 可能仍然在别人手上。
如果手上已经在用好几家厂商的 Key,可以抽十分钟做一件事。打开各自的控制台,看每个 Key 是什么时候创建的,有没有设置额度上限,最近一周的调用量是什么形状。这三个问题里只要有一个答不上来,就说明值得重新理一遍。
想先把入口收拢起来,可以去接口AI 的文档中心看看密钥管理那一节,或者在控制台建一个新 Key,先配好额度和白名单,再往下接入。