跳到正文
原文
arXiv· arXiv:2603.00902· Ben Dong, Hui Feng, Qian Wang·本站收录· 原文发表

Clawdrain:利用工具调用链在 OpenClaw Agent 中隐蔽耗尽 token

Clawdrain: Exploiting Tool-Calling Chains for Stealthy Token Exhaustion in OpenClaw Agents

论文速读

攻击

据论文 PDF 整理(AI 生成),以原文为准

Clawdrain以木马skill在OpenClaw上放大token,Gemini 2.5 Pro成功6–7×、失败约9×。

威胁模型攻击者向OpenClaw植入木马skill(注册表、依赖、本地目录或智能体自生成)。

问题
工具调用智能体把第三方skill文档和工具输出反复送入上下文。对手可借此拉长调用链,在仍给出正确答案时抬高token成本。开放skill生态的增长快于系统化安全评估。
方法
Clawdrain是木马skill。SKILL.md要求逐段提交长度为L的完整整数序列,脚本返回PROGRESS/REPAIR/TERMINAL,结束才返回BBC标题。三组参数手工设定,在OpenClaw上按会话token记账。
实验与结果
Gemini 2.5 Pro上,良性context约28k。v1、v2成功且答案正确,放大约6×和7×。v3未完成,context约249k、约9×,墙钟超过11分钟。L=1000时改用shell生成序列,每轮输出约30 token。
局限与可以继续做的
作者将SKILL.md膨胀、历史污染和cron频率的量化及美元成本留作后续,并计划评估token预算与指令权限分离。测量覆盖Gemini 2.5 Pro上三组固定SVP的单次新会话;论文未报告重复次数,也未报告分界面token数。
实验设置Gemini 2.5 Pro · OpenClaw v2026.2.9、BBC headline查询 · context放大倍数、input tokens 等
威胁模型
攻击者向OpenClaw植入木马skill(注册表、依赖、本地目录或智能体自生成)。目标是在给出正确最终答案并保持看似良性的同时增加token消耗;次要目标是隐蔽。可见性分Chat GUI、TUI叙述和cron/heartbeat。智能体可用shell或Python。
被测模型
Gemini 2.5 Pro
基准
OpenClaw v2026.2.9BBC headline查询
指标
context放大倍数input tokensoutput tokens累计context最终答案是否正确墙钟时间
AI 导读研究者设计并评估了 Clawdrain,一种通过注入 SKILL.md 指令和配套脚本、以多轮“分段验证协议”诱导 OpenClaw Agent 反复调用工具的木马化技能。在带真实 API 计费和 Gemini 2.5 Pro 的生产级 OpenClaw 实例中,其 token 消耗达到良性基线的 6-7 倍,一种高成本失败配置约为 9 倍。研究还观察到仅在真实部署中出现的情况:Agent 会自行组合 shell、Python 等通用工具绕过脆弱的协议步骤,从而降低放大倍数并改变攻击动态。作者同时指出 OpenClaw 架构带来的生产环境攻击面,包括 SKILL.md 提示词膨胀、工具输出持久污染、cron/heartbeat 频率放大和行为指令注入。

研究者设计并评估了 Clawdrain,一种通过注入 SKILL.md 指令和配套脚本、以多轮“分段验证协议”诱导 OpenClaw Agent 反复调用工具的木马化技能。在带真实 API 计费和 Gemini 2.5 Pro 的生产级 OpenClaw 实例中,其 token 消耗达到良性基线的 6-7 倍,一种高成本失败配置约为 9 倍。研究还观察到仅在真实部署中出现的情况:Agent 会自行组合 shell、Python 等通用工具绕过脆弱的协议步骤,从而降低放大倍数并改变攻击动态。作者同时指出 OpenClaw 架构带来的生产环境攻击面,包括 SKILL.md 提示词膨胀、工具输出持久污染、cron/heartbeat 频率放大和行为指令注入。

深度解读

6个问题,点开问题读完整回答

  1. 这篇论文试图解决什么问题?

    木马skill用多轮分段校验放大OpenClaw的token消耗,并仍要求给出正确最终答案。

    在真实 OpenClaw 部署中,用木马 skill 放大 token 消耗,同时仍给出正确最终答案。

    • 场景:作者称 OpenClaw 把 skill 文档和工具输出写入历史,并在每一轮送回模型。token 直接决定成本、延迟和吞吐,对手因此可以做资源放大;开放 skill 生态的增长也快于系统化安全评估。
    • 现有不足:作者称已有协议多把最终答案正确当作隐蔽,并在受限模拟器中评测。部署中的智能体可组合通用工具绕过脆弱步骤,界面改变可见性,cron/heartbeat 还可在无用户监督时消耗 token。
    • 观察:skill 文档会持续进入上下文,从而影响提示预算、控制流和上下文增长速度。作者称放大环可以保持任务正确,并维持仍在推进的外观。
    • 本文做法:作者提出 Clawdrain,用 SKILL.md 注入分段校验协议(SVP),由脚本返回 PROGRESS、REPAIR、TERMINAL。评测在带真实 API 计费的类生产实例上进行。
    • 威胁模型:
      • 目标:增加成本并降低吞吐,同时保持看似良性并给出正确最终答案;次要目标是使用中不易被发现。
      • 植入:对手可经 ClawHub(作者称超过 5,700 个 skill,人工审计前与合法 skill 无法区分)、被攻陷依赖、本地目录 ~/.openclaw/skills/,或诱导智能体自行生成 skill。
      • 能力:假定可使用 shell 或 Python,并可能自主组合这些工具来执行 skill 协议。
      • 受害系统:OpenClaw 智能体。可见性分 Chat GUI(Telegram/Discord)、TUI 叙述模式和 cron/heartbeat 自主执行。
  2. 有哪些相关研究?

    相关工作主要是工具调用框架、资源放大和提示词越狱,作者重点对照Zhou等的模拟器协议。

    按第 2 节,相关工作分成工具调用框架、资源放大和提示词越狱;与本文直接对照的是 Zhou 等的模拟器协议。

    工具调用与 OpenClaw

    • 框架与 skill:Wang 等(2024)综述基于大模型的自主智能体;Sun 等(2025)和 Tran 等(2025)讨论多智能体协作。作者借助这些工作讨论 skill 如何把能力扩到检索、计算和外部交互。
    • 调用循环:作者引用 Toolformer(Schick 等,2023)和 LangChain 应用(Topsakal 与 Akinci,2023),描述 OpenClaw 把文档与工具输出存入历史并每轮送回。作者认为这既支持组合,也形成供应链通道。
    • 压缩丢约束:Yue(2026)报道确认指令在上下文压缩中丢失后,智能体自主发起大量邮件删除。作者用该事件讨论 skill 层对控制流的影响。

    资源放大

    • 计费耦合:作者引用 Liu 等(2023)、Zhang 等(2025)的 Breaking Agents、Si 等(2025)等,讨论 token 既计费又稀缺,且模型会重读中间结果、工具输出和上下文。作者称放大环仍可保持任务正确。
    • Zhou 等(2026):用工具调用链做资源放大,把隐蔽定义为最终答案正确,并在只允许调用恶意工具的模拟器里用 MCTS 联合提高 ASR 和每轮输出长度,报告 65–658×,L 最高 15,000。作者批评该设置看不到工具组合,且把失败隐含视为低成本。

    提示词越狱

    • 指令操纵:作者引用 JailbreakBench(Chao 等,2024)、Du 等(2025)的多轮越狱和 Hakim 等(2026)的综述,讨论对抗输入如何绕过安全约束或改变指令遵循。
    • 工具智能体:作者称注入指令还能改变推理轨迹、工具选择和外部副作用;工具输出被反复送回后,对抗指令可跨轮残留。Wu 等(2025)被引来联系函数调用场景中的这一风险。
    • 与资源的关系:作者认为这类提示词攻击不限于绕过策略,还可以拉长推理、重复调用或扩张数据,从而影响性能和成本。

    基线与任务

    • 基线方法:良性 query skill,与木马 skill 的用户接口相同,无多轮协议,返回简短 BBC 标题摘要。文献对照为 Zhou 等(2026)。
    • 基准/数据集:同一句获取最新 BBC 标题的查询。论文未使用命名公开基准。

    作者把本文放在类生产 OpenClaw 上:实现 SVP 并测量 token,同时认为工具组合、恢复行为和界面会改变幅度与可观察性,而这些不在只允许调用恶意工具的模拟器里。

  3. 论文如何解决这个问题?

    Clawdrain用SKILL.md和三种信号把查询拉成至少Tmax次调用,结束仍返回正确载荷。

    Clawdrain 把放大实现为木马 query skill:SKILL.md 规定多轮分段校验协议(SVP),配套脚本用三种信号控制循环,结束时仍返回良性载荷。

    协议结构

    • 每次调用要提交单调递增的段索引,以及长度为 L、取值为 1 到 L 的完整逗号分隔序列。文档要求模型写出完整序列,不允许缩写;作者称这是输出 token 放大的主要来源。
    • 脚本 query_tool.py 返回三种信号:段号小于 Tmax 且序列有效为 PROGRESS,进入下一段;序列畸形为 REPAIR,以同一段号重试;段号等于 Tmax 且有效为 TERMINAL,返回正确的良性载荷(文中为 BBC 标题数据)并结束。
    • 因此至少要有 Tmax 次成功调用,另加 REPAIR 重试。作者把每查询的理论输出代价写为 Ω(L × Tmax) 个输出 token,即序列长度与成功调用次数的乘积量级,另加变长会话历史的输入开销。

    包装与构造

    • 协议被包装成数据提供方发布标题前的新鲜度校验,序列被说成握手。作者称许多真实 API 确有多步认证,所以不像明显的恶意要求。
    • 叙述指令要求展示进度摘要而非原始调用细节,以配合只显示摘要的 TUI。实验里 Gemini 2.5 Pro 接受了该协议;有一次在继续前称校验系统 fascinatingly complex。
    • 模板由作者手工编写,经两轮人工修改,没有使用 MCTS。作者称针对已知系统不必使用优化器或模拟器,且该模板对生产模型第一次尝试即被遵守,并称这表明手工构造对定向攻击已经够用。

    三组配置

    • v1(L=50,Tmax=2):指令最少。SKILL.md 不声明 L,智能体从第一次 PROGRESS 得知参数。
    • v2(L=1000,Tmax=3):写明 L,并加入合规方向上的附加指令、合理性说明和叙述指令。
    • v3(L=2000,Tmax=5):模板与 v2 相同,参数更高,用来观察合规边界。

    其他成本面与自适应设计

    • 作者还列出三个模拟器看不见的面:已启用 skill 的 SKILL.md 无论是否被调用都进入系统提示,过大文档抬高每次调用的输入;工具输入输出留在历史中,冗长响应使上下文超线性增长;cron/heartbeat 按间隔自主调用,用频率乘上单次成本。
    • 作者称这些向量可以合在一个 skill 中,且不需要多轮协议,也不需要调用模式上的明显异常。单独和组合成本在 Section 3.3 被推迟,不进入第 4 节的数字。
    • Section 3.4 提出两种自适应,但第 4 节测量的是固定 SVP。一是让 REPAIR 按轮拒绝可复用的脚本化序列,把模型拉回自回归生成。二是先用文档膨胀和冗长输出加快有损压缩、挤出用户约束,再升级为完整 SVP,或执行用户曾经禁止的动作。
    • 作者称 SKILL.md 与平台指令处于同一系统提示层,因此还可以注入改变全局行为的指令。作者把由此带来的完整性与保密性问题留到后续。

    如何计成功

    • 放大定义为同一查询下,木马 skill 消耗的总 context 与良性 skill 总 context 之比。是否成功看最终答案是否正确。墙钟从首条用户消息量到最终回复。
    • 作者仍把答案正确当作良性外观的条件,但认为部署里更有意义的隐蔽标准是可观察性,而且它随界面变化。
  4. 论文做了哪些实验?

    Gemini 2.5 Pro上成功配置约6–7×,未完成的v3约9×且context约249k。

    实验设置

    • 系统:本地 OpenClaw v2026.2.9,后端为 Gemini 2.5 Pro(经 Google OAuth)。工具包括 exec(shell/Python)、文件系统和网页搜索。skill 从本地目录加载。摘要称实例带真实 API 计费;论文未报告美元金额。
    • 对照:木马 skill 替换默认 query skill。良性 skill 对同一查询返回简短 BBC 标题摘要,无多轮协议。两者用户接口相同。
    • 指标:查询为获取最新 BBC 标题。放大等于木马 skill 总 context 除以良性 skill 总 context。token 来自 OpenClaw 的 /cost,含累计 input、output 和 context。
    • 记录:会话初始化后(作者写开销约 200 token)、良性 skill 完成后、木马 skill 完成后。每次使用新会话。墙钟从首条用户消息量到最终回复。
    • 配置:良性基线,以及 SVP v1(L=50,Tmax=2)、v2(L=1000,Tmax=3)、v3(L=2000,Tmax=5)。论文未报告重复次数,也未使用 LLM 评审。
    • 模型:被测后端只有 Gemini 2.5 Pro。

    主结果

    据 Table 1。后端为 Gemini 2.5 Pro;Context 为结束时的累计会话上下文;放大为相对良性基线的 context 比;结果表示是否交付正确最终答案。

    表格较宽,可左右滑动

    条件InputOutputContext放大正确最终答案
    良性基线∼3.6k∼425∼28k1×是
    SVP v1(L=50,Tmax=2)∼25k∼14k∼125k∼6×是
    SVP v2(L=1000,Tmax=3)∼25k∼14k∼190k∼7×是
    SVP v3(L=2000,Tmax=5)∼34k∼28k∼249k∼9×否
    • 作者称成功配置在仍给出正确答案时放大了消耗;未完成协议的一行反而消耗最多。
    • 作者把与 Zhou 等所报告 65–658× 的差距,归于更保守的参数(成功配置 L≤1000、Tmax≤3;对方 L 最高 15,000)以及部署中的脚本绕过。
    • 表中 v1 与 v2 的 input、output 列相同,context 列不同。作者未另释 input 为何相同;输出未随 L 变大,与后文的脚本绕过放在一起讨论。

    失败路径更贵

    • 测了什么:v3(L=2000,Tmax=5)。智能体多次尝试序列并多次收到 REPAIR,把校验系统判为 faulty,然后放弃木马 skill。
    • 结果:回退包括调用良性 skill、搜索其他数据源、结束卡住的进程、重试主服务。该次 context 为表中最高一行,墙钟超过 11 分钟;成功的 v2 不到 2 分钟。
    • 作者解读:作者称这与把 ASR 和放大并列、并把失败当成低成本的做法不一致。在有替代工具和自主恢复时,失败路径可以更贵。作者认为不必为了协议完成去调参;把参数设过合规阈值后,恢复行为本身会带来额外成本。作者还认为,联合最大化 ASR 与每轮输出长度的 MCTS,对这种部署可能并不合适。

    工具组合绕过

    • 测了什么:v2,L=1000。自回归生成在位置 372 和 570 出现算术错误并触发 REPAIR;第三次改为用 shell 生成序列,再填入后续调用。作者称 SKILL.md 没有提示这一步。
    • 结果:每轮输出从约 1000 token 降到一条短 shell 命令(约 30 token)。作者称这是实测放大低于 Zhou 等 65–658× 的主要原因。
    • 作者解读:对方评测只允许调用恶意工具。同一工具能力在 L=1000 减轻了校准成本,在 L=2000 又支撑了回退级联。作者称通用工具既能减轻也能加大 drain 成本,只限制单次 token 预算处理不了这一点。

    界面与可观察性

    • 测了什么:作者按三种界面讨论同一 skill 的可见性,没有分界面的 token 表。Chat GUI 会渲染每次调用和完整参数;TUI 只显示叙述,v2 的叙述指令针对该模式;cron/heartbeat 没有面向用户的输出。
    • 作者解读:作者称能否被发现只取决于交互方式;无界面模拟器只相当于自主执行,会高估交互部署中的隐蔽性。失败时智能体说出校验系统有故障。作者称这不直接指出恶意,但可能促使用户检查 skill。
    • 旁证:作者引用社区问题中、非恶意的错误自动化一夜消耗 5.7M token,用来讨论平台对失控的自主消耗缺少有效约束。这不是本文攻击实验的测量值。

    其他消融与分析

    • 会话初始化开销约 200 token(Section 4.1.3),与 Table 1 四行分开记录。
    • 论文没有 L 或 Tmax 的扫描表,只有上述三组配置。
    • Section 3.4 的按轮拒绝和两阶段压缩升级没有测量数字。
    • Section 3.3 的输入膨胀、历史污染、调度频率没有单独成本数字。
    • 论文未报告重复次数、方差或统计检验。
  5. 有什么可以进一步探索的点?

    作者将文档膨胀、调度频率和美元成本的量化留作后续。

    作者指出的局限与后续方向

    • 非输出向量未量化(Section 3.3):输入膨胀、历史累积和执行频率的单独与组合成本,以及它们与界面可见性、后台执行的交互,作者明确留到未来,本文不做系统量化。
    • 完整性与保密性(Section 3.3):作者称工具层还可能改变全局行为,从而超出资源耗尽,并把这一方向留到后续。
    • 规模化刻画(Conclusion):作者计划系统刻画界面相关的隐蔽性,以及这些部署侧向量如何与工具组合、后台执行相互作用。
    • 成本与防御(Conclusion):未来工作还应测量复合向量在持续自主执行下的真实美元成本,并评估每 skill 的 token 预算、SKILL.md 尺寸限制,以及 skill 指令与平台指令的权限分离。

    实验覆盖范围

    • 被测后端为 Gemini 2.5 Pro,框架为本地 OpenClaw v2026.2.9(Section 4.1)。
    • 任务是一条 BBC 标题查询;条件为良性基线与 SVP v1、v2、v3。Table 1 来自每次新会话的 /cost 记录。论文未报告重复次数。
    • 工具环境包含 exec、文件系统和网页搜索。L=1000 的脚本绕过与 L=2000 的回退写在 Section 4.3 和 4.4。
    • 界面部分是 Chat GUI、TUI 叙述模式和 cron/heartbeat 的定性对比(Section 4.5)。论文未报告分界面的 token 数,也未报告美元金额。
    • 第 4 节测量的是 Section 3.2 的固定 SVP。按轮拒绝脚本化序列和压缩后升级写在 Section 3.4,没有对应测量表。
  6. 总结一下论文的主要内容

    木马skill在Gemini 2.5 Pro上放大BBC查询的token消耗,成功约6–7×,失败约9×。

    Clawdrain 是对 OpenClaw 的 token 耗尽攻击:木马 skill 把一次查询变成多轮工具调用,结束时仍可以交回正确答案。

    • 问题来自 skill 文档和工具输出会跨轮重进上下文,而 token 对应成本、延迟和吞吐。作者认为,只把答案正确当作隐蔽,并在禁止工具组合的模拟器里测放大,会漏掉部署中的控制流。
    • 做法是分段校验:智能体逐段提交长度为 L 的完整整数序列,脚本用 PROGRESS、REPAIR、TERMINAL 决定继续、重试或结束。三组参数为 (50, 2)、(1000, 3)、(2000, 5),模板为手工编写。
    • 在 Gemini 2.5 Pro、OpenClaw v2026.2.9 上,良性 BBC 查询的 context 约 28k。v1、v2 答案正确,放大约 6× 和 7×。v3 未完成协议,放大约 9×,context 约 249k,墙钟超过 11 分钟,高于 v2 的不到 2 分钟。
    • L=1000 时,两次算术错误后智能体改用 shell 生成序列,每轮输出降到约 30 token。作者称这解释了为何低于 Zhou 等模拟器中的 65–658×,也说明通用工具在失败时会把恢复做贵。
    • 作者的结论是:部署中 drain 仍然可行,但幅度和能否被看见取决于工具组合、恢复行为和界面。他们计划再量化文档膨胀、历史污染、调度频率,以及复合攻击的美元成本。
阅读原文arxiv.org