系统:运行中
← 返回所有攻击
AGENTS MEDIUM NEW

令牌耗尽攻击:通过智能体工具链发起的经济型拒绝服务

2026 年的两篇论文显示,恶意工具或技能可将 LLM 智能体诱入冗长的工具调用循环,在仍返回正确答案的同时将令牌成本放大 6 至 658 倍——这是 OWASP「无限消耗」风险的一种隐蔽变体。

2026-06-01 // 7 min affects: gemini-2.5-pro

这是什么?

大多数针对智能体的攻击都试图让模型做错事——泄露数据、执行命令、绕过防护栏。还有一类攻击瞄准的是账单而非行为:智能体正确地完成了任务,但成本却急剧膨胀。由于令牌消耗直接对应到金钱、延迟和 GPU 显存,攻击者只要能够增加智能体生成并重新读入的令牌数量,就拥有了一种隐蔽的、且能保持结果正确性的拒绝服务手段。

2026 年的两篇论文为这一现象提供了量化数据。《Beyond Max Tokens: Stealthy Resource Amplification via Tool Calling Chains in LLM Agents》(Zhou 等;arXiv 2601.10955,2026 年 1 月)将多轮的智能体—工具循环描述为一个在很大程度上尚未被探索的经济型拒绝服务面,并报告在受限模拟器中实现了 65 至 658 倍的令牌放大。《Clawdrain》(Ben Dong、Hui Feng、Qian Wang,加州大学默塞德分校;arXiv 2603.00902,2026 年 3 月 1 日)则在接近生产的环境中复现了这一思路——以 Gemini 2.5 Pro 为后端的自托管助手 OpenClaw(v2026.2.9)——并在单次查询上测得了较为温和但真实存在的 6 至 9 倍放大。二者都属于 OWASP 所归类的 LLM10:2025 无限消耗(Unbounded Consumption),具体而言是其*钱包拒绝服务(Denial of Wallet)*变体。

工作原理

杠杆就是智能体自身的工具调用循环。一个使用工具的智能体会推理、调用工具、读取结果、将其追加到对话中,然后重复这一过程——并在每一轮都把不断膨胀的会话记录重新发送给模型。恶意的工具或已安装的技能正是利用这一机制:在不破坏任务的前提下拉长每一轮、并迫使产生更多轮次。

良性循环                         耗尽循环(结果正确性得以保持)
-----------------------------    -----------------------------------
请求 -> 调用工具 -> 简短结果      请求 -> 调用工具 -> 工具回复
-> 回答(1 轮)                  "第 1 步,共 N 步,请重新提交全部
                                 数据" -> 智能体重新生成冗长的载荷
                                 -> ... 重复 N 次 -> 回答
                                 (成本 = O(载荷 x N) + 不断增长的历史)

在 Clawdrain 中,触发器位于一个被注入的 SKILL.md 中——也就是技能向模型暴露的 markdown 描述——它指示智能体在拿到数据之前先执行一套多步骤的「验证握手」。配套脚本会返回继续 / 重试 / 完成信号,于是智能体不断循环,每一轮都重新生成一段冗长的载荷,而一个看似合理的借口(「数据提供方要求如此」)使其不去质疑该协议。整个过程不需要任何漏洞利用字符串;有害指令只是普通文本,由框架以系统提示的权限级别注入。

该论文还揭示了模拟器会忽略的三个部署现实。其一,失败的代价可能高于成功:当协议设置得过于激进时,智能体会放弃它并启动一连串的恢复操作——重试、网络搜索、终止进程——所消耗的令牌多于一次顺利的运行。其二,有能力的智能体有时会绕开耗尽机制:通过编写脚本来处理重复性工作(在一次运行中,模型用一行 Python 命令生成序列,而不是逐令牌生成),这既削弱了攻击,也开辟了新的控制流通道。其三,隐蔽性取决于界面:聊天图形界面会显示每一次调用,叙述式终端会隐藏原始轨迹,而计划任务(cron/heartbeat)则在完全没有面向用户输出的情况下运行。

为何重要

令牌成本如今已是头等的运营风险。同样这两篇论文指出,在真实部署中,配置错误的(非恶意)自动化任务曾在一夜之间烧掉数百万令牌——Clawdrain 引用了一起 OpenClaw 事件,即一夜之间消耗了 570 万个令牌——因此蓄意的耗尽攻击可以舒适地藏身于正常噪声之中。其攻击面相当广泛:任何会安装第三方技能、将工具输出当作指令遵循、或按计划无人值守运行的智能体都暴露在风险之中,而入口点与经典的供应链如出一辙(注册表中被投毒的技能、被攻陷的依赖项,或一条诱导其自行安装的提示注入)。尤为关键的是,这能避开针对内容而调校的防御:输出是正确的,没有违反任何策略,而单次调用的令牌上限也看不到一个每一轮都保持在限额以下的循环。

防御措施

OWASP 关于「无限消耗」的指南是恰当的基线;针对智能体的工具循环还需在其之上补充几点:

  1. 为整个任务而非单次调用设定预算。 单次请求的令牌上限会漏掉多轮耗尽。请按任务或会话强制设定累计的令牌/成本上限和最大工具调用次数,一旦任一指标被突破即中止。
  2. 将技能文档和工具输出视为不可信数据,而非指令。 不要让 SKILL.md 或工具响应以系统提示的权限注入控制流。请将平台指令保留在一个独立的、更高信任级别的层级中(参见指令层级)。
  3. 监控放大比率。 记录每任务令牌数和每任务工具调用次数,并针对相对于良性基线的异常值发出告警;一次通常耗费约 3 万令牌的查询突然耗费 20 万令牌,就是信号。
  4. 对无人值守的执行施加最严格的限制。 cron/heartbeat 运行是不可见的情形——给计划任务设定最严格的预算、速率限制和超时,并要求对高成本的后台活动进行人工审查。
  5. 像审查供应链一样审查第三方技能。 审阅或沙箱隔离已安装的技能,固定版本,并留意超大的技能文档——无论该技能是否被调用,它都会在每一轮抬高输入成本。
  6. 在成本上「故障即关闭」。 设计优雅降级:当某个工具行为异常时,限制重试和恢复循环的次数,使失败路径无法比成功路径花费更多。

现状

项目参考日期备注
Beyond Max Tokens(工具链放大)arXiv 2601.10955(Zhou 等)2026-01受限模拟器中放大 65 至 658 倍;定义了经济型拒绝服务面
Clawdrain(接近生产的复现)arXiv 2603.00902(UC Merced)2026-03-01在 OpenClaw v2026.2.9 + Gemini 2.5 Pro 上放大 6 至 9 倍;包含失败更昂贵、工具组合与界面相关隐蔽性等发现
OWASP LLM10:2025 无限消耗genai.owasp.org2025(现行)界定了钱包拒绝服务;对应 MITRE ATLAS AML.T0034 成本榨取与 AML.T0029 ML 服务拒绝

要点在于:随着智能体用冗长的工具调用链取代单次提示,一项任务的成本本身也成为其威胁模型的一部分。耗尽攻击从不触发内容过滤器——它只是让计费表不停转动——因此防御在于预算、监控与信任边界,而非输出检查。

Sources