跳到正文
原文

StealthyPoison:对第三方技能进行程序化投毒以操纵 LLM 智能体行为

StealthyPoison: Manipulating LLM Agent Behavior through Procedural Poisoning of Third-Party Skills

arXiv:对抗攻击、后门与投毒· arXiv:2611.12155· Jingfen Qiao, Rui Li, Shuaiqun Pan, Olga Gadyatskaya, Andrew Yates, Evangelos KanoulasUniversity of Amsterdam; Leiden University; Johns Hopkins University本站收录· 2 天前· 原文发表入选 攻击精选关注度42

论文速读

攻击

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

作者提出 StealthyPoison,通过篡改第三方 skill 的决策规则并增强检索元数据来操纵智能体;作者称在 SRA-Bench 上端到端攻击成功率为 10.1%,且多数载荷能绕过现有防御检测。

威胁模型攻击者可访问公开的目标 skill 和注册表,但无法访问真实用户请求及其标准答案。

问题
LLM 智能体越来越依赖从公共注册表检索第三方 skill 来完成任务,但攻击者可能通过污染 skill 来操纵智能体行为。现有研究多关注明显的恶意指令,而如何在保持 skill 正常执行的同时通过篡改其决策规则来产生错误结果,仍缺乏探索。
方法
StealthyPoison 通过合成请求和执行干净 skill 获取伪参考,迭代优化程序中毒载荷以篡改决策关键规则;同时独立生成请求描述增强检索元数据,提高中毒 skill 被检索和选中的概率,无需访问真实用户请求或受害者检索器反馈。
实验与结果
在 SRA-Bench 上,StealthyPoison 在 Qwen3-Coder-30B 上达到 32.9% 的 Oracle 执行 ASR,在 Claude Code 工作流中端到端 ASR 为 10.1%;多数载荷能逃避 SkillSpector 和 GPT-5.4-mini 的检测。
局限与可以继续做的
作者指出所有测试均在本地进行,测量的攻击成功率可能与现实系统不同;现实系统可能有更强防御,但也可能让智能体访问敏感数据或重要操作。实验覆盖 566 个符合条件的 skill 和 5,244 个请求,防御评估仅针对四种预执行筛查组件。
实验设置Qwen3-Coder-30B、Llama-3.3-70B 等 · SRA-Bench · PoisonHit@k、ASRFlip 等
威胁模型
攻击者可访问公开的目标 skill 和注册表,但无法访问真实用户请求及其标准答案。攻击者可将目标 skill 重新打包为中毒版本(修改元数据、程序指令和捆绑工件),但不能修改注册表中已有的干净 skill、良性条目或检索器的任何组件。攻击目标是让中毒 skill 被选中并执行,产生相对于标准答案的错误结果,同时保持正常执行。
被测模型
Qwen3-Coder-30BLlama-3.3-70BMistral-Small-24BGPT-OSS-20BClaude Code with Opus 4.8BGE-M3BGE-large-en-v1.5SkillRouter-Embedding-0.6BContriever-MSMARCOSPLADE-v3SkillRouter-Reranker-0.6BBGE-Reranker-LargeBGE-Reranker-v2-M3Jina-Reranker-v2Qwen3-4BQwen3-14BQwen3-32BSkillSpectorCisco Skill ScannerGPT-5.4-mini
基准
SRA-Bench
指标
PoisonHit@kASRFlipASRpairE2E-ASRFPRDetR
AI 导读和推荐理由研究者提出 StealthyPoison,一种通过篡改第三方技能中影响决策的规则来操纵 LLM 智能体任务结果的投毒攻击。该方法在无法获取真实用户请求和标准答案时,用合成请求和干净技能的执行输出生成伪参考,迭代修改技能中的公式、阈值或判断逻辑,并扩充检索元数据以提高被选中概率。在 566 个技能、5,244 条请求和超过 26,000 条注册表条目的评测中,投毒技能进入 top-1 的比例相对 HotFlip 和 GCG 提升 13.6%;冻结后的载荷迁移到三个模型时取得 31.0%–31.9% 的 oracle 执行攻击成功率,在 Opus 4.8 驱动的 Claude Code 工作流中端到端攻击成功率为 10.1%。多数载荷未被 SkillSpector 和 GPT-5.4-mini 检出,作者据此认为防御需要验证技能程序规则的行为正确性,而不能只依赖执行前的内容扫描。

研究者提出 StealthyPoison,一种通过篡改第三方技能中影响决策的规则来操纵 LLM 智能体任务结果的投毒攻击。该方法在无法获取真实用户请求和标准答案时,用合成请求和干净技能的执行输出生成伪参考,迭代修改技能中的公式、阈值或判断逻辑,并扩充检索元数据以提高被选中概率。在 566 个技能、5,244 条请求和超过 26,000 条注册表条目的评测中,投毒技能进入 top-1 的比例相对 HotFlip 和 GCG 提升 13.6%;冻结后的载荷迁移到三个模型时取得 31.0%–31.9% 的 oracle 执行攻击成功率,在 Opus 4.8 驱动的 Claude Code 工作流中端到端攻击成功率为 10.1%。多数载荷未被 SkillSpector 和 GPT-5.4-mini 检出,作者据此认为防御需要验证技能程序规则的行为正确性,而不能只依赖执行前的内容扫描。

推荐理由论文展示在公开技能库中篡改第三方技能规则、保持正常执行却能改变任务结果的攻击路径,并给出跨模型迁移与扫描器漏检数据。

相关热点

1 个事件 · 0 条新闻提到

深度解读

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

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

    如何通过污染第三方 skill 的程序规则来操纵 LLM 智能体行为,同时保持正常执行并逃避检测。

    核心问题:攻击者能否通过污染第三方 skill 的决策关键规则(如公式、阈值、决策逻辑),在保持 skill advertised 功能和正常执行的前提下,诱导 LLM 智能体产生错误的任务结果。

    • 场景与重要性:LLM 智能体越来越多地从公共注册表检索第三方 skill 并遵循其程序完成任务。由于公共注册表接受第三方提交,攻击者可发布中毒 skill 供智能体检索和执行,这暴露了开放的攻击面。
    • 现有方法不足:先前的知识腐败攻击(如 PoisonedRAG)针对已知的目标问答对制作中毒内容,且明显的恶意指令会提供明确的检测信号。作者指出,如何在无法访问真实用户请求及其标准答案的情况下,构建可泛化到未见请求的程序中毒载荷,仍是一个未探索的问题。
    • 核心观察:作者认为,通过篡改 skill 的程序规则(如公式、阈值、决策逻辑),智能体可能在正常执行的情况下产生错误结果,这种攻击机制被称为程序中毒(procedural poisoning)。
    • 论文提出:StealthyPoison,一种隐蔽的程序中毒攻击,通过合成请求和干净 skill 执行来指导中毒载荷的构建,并通过预测请求元数据增强检索曝光率。
    • 威胁模型:
      • 攻击者目标:使中毒 skill 被选中执行,并产生相对于标准答案的错误结果。
      • 攻击者知识:可访问公开的目标 skill 和公共注册表,但无法访问真实用户请求及其标准答案。
      • 攻击者能力:可将目标 skill 重新打包为中毒版本(修改元数据、程序指令和捆绑工件),但不能修改注册表中已有的干净 skill、良性条目或检索器的任何组件。
      • 受害系统:使用公共注册表检索第三方 skill 的 LLM 智能体。
  2. 有哪些相关研究?

    相关工作包括检索中毒与间接提示注入、工具检索与注册表操纵、中毒 skill 攻击,以及预执行防御。

    检索中毒与间接提示注入

    • 检索中毒攻击:通过插入或优化段落使其在目标查询中排名靠前 [41, 47, 55],优化方法包括 HotFlip 风格的 token 替换 [14]。PoisonedRAG 使用检索到的对抗性证据来引导生成答案,AgentPoison 针对智能体的记忆或 RAG 知识库 [6, 10, 59]。
    • 间接提示注入:将恶意指令放置在网页、文档或工具输出等外部内容中,导致智能体执行非预期操作 [1, 13, 27, 52, 53]。
    • 区别:这些攻击操纵智能体读取的证据、记忆或外部内容,而本文研究的是可执行 skill 在完整良性注册表中竞争,并在被选中后改变任务程序。

    工具检索与注册表操纵

    • 工具使用基准:研究 API 发现和调用 [24, 33, 35],以及从大型工具或 skill 集合中检索 [25, 40, 42]。
    • ToolHijacker:注入恶意工具文档以引导智能体选择攻击者控制的工具 [39]。
    • Attractive Metadata Attack (AMA):优化工具名称、描述和参数模式,使恶意工具更可能被选中 [30]。
    • 区别:ToolHijacker 和 AMA 操纵元数据以引导智能体选择恶意工具,而本文评估中毒 skill 从检索到执行的全过程,并考虑程序中毒改变任务本身而非添加单独的恶意操作。

    中毒 skill 攻击

    • Skill-Inject:评估智能体是否遵循嵌入在 skill 文件中的明显或上下文相关的恶意指令 [38]。
    • SkillJect:通过将操作载荷隐藏在辅助工件中并迭代优化指令来自动化中毒 skill 构建 [19]。
    • 大规模研究:发现公共注册表中存在结合对抗性文档和可执行辅助脚本的恶意 skill [26]。
    • 区别:先前研究假设中毒 skill 已被加载或选中,而本文额外研究其能否从注册表中被检索、选中并执行;程序中毒保持 skill 接口和工件不变,但改变任务执行方式。

    预执行防御

    • 防御方法:包括指令层级、控制流隔离、防护智能体和 LLM-as-a-judge 过滤器 [12, 16, 46, 49]。StruQ 分离可信指令和不可信数据 [8],TRUSTDESC 从实现推导工具描述并验证其行为声明 [51]。
    • 区别:这些方法减少提示或元数据操纵,但不直接检查 skill 是否保持预期的任务程序。

    基线与基准

    • 基线方法:No Opt.、HotFlip [14]、GCG [58]。
    • 基准:SRA-Bench [42],包含 5,400 个请求和 26,262 个 skill 的检索注册表。
  3. 论文如何解决这个问题?

    StealthyPoison 通过合成请求和伪参考指导程序中毒载荷构建,并利用预测请求元数据增强检索曝光。

    StealthyPoison 是一种针对 skill 增强型智能体的语料库中毒攻击,分为两个阶段:程序中毒载荷构建和元数据增强。

    问题设定与形式化

    • 系统模型:skill 表示为 s = (m, d, A),其中 m 为注册表元数据,d 为程序指令,A 为可选捆绑工件。给定用户请求 q,检索器根据请求与候选 skill 的相似度排名,智能体选择 skill ŝ(q) 执行。
    • 攻击目标:给定目标 skill s,攻击者希望其中毒版本 s⋆ 被选中执行,并产生相对于标准答案的错误结果。

    程序中毒载荷构建

    • 合成查询与伪参考:公共 LLM 生成 K 个合成执行查询 Qexec(s) = {qi}i=1K,覆盖 skill 的文档化功能和输入条件。代理受害者智能体执行干净 skill 产生输出 Y = {yi}i=1K 作为伪参考。
    • 操纵规划:Planning Agent 分析指令文档 d,定位正确性关键元素,产生候选操纵目标集合 P(s) = {p1, ..., pr},每个 pj 指定要修改的元素及其预期语义偏差。
    • 约束条件:可行集 F(s; P(s)) 包含三个约束:Ωlocus 限制仅修改 P(s) 识别的指令位置;Ωtask 要求保持原始任务和接口;Ωexec 要求候选 skill 能正常执行完成。
    • 反馈引导迭代:Attack Agent 生成候选中毒 skill,Surrogate Victim Agent 在合成查询上执行,Critic Agent 比较输出与伪参考并检查约束。最多迭代 Tmax = 10 次,若所有 K = 10 个查询答案均改变则提前停止。

    元数据增强

    • 合成检索查询:公共 LLM 生成 20 个合成检索查询 Qret(s),代表应调用目标 skill 的合理用户请求。
    • 元数据修改:将合成查询附加到检索关键词字段 w,保留原始内容。最终中毒 skill 为 s⋆ = (m[w ← w⋆], d⋆, A)。

    成功判定

    • 攻击成功条件:中毒 skill 被选中,智能体执行时无接口或执行失败,且结果相对于标准答案不正确。仅计算干净目标 skill 产生正确输出的请求。
  4. 论文做了哪些实验?

    实验评估了程序中毒载荷的构建、跨模型迁移性、端到端攻击效果以及现有防御的检测能力。

    实验设置

    • 被测模型:Qwen3-Coder-30B(构建时参考)、Llama-3.3-70B、Mistral-Small-24B、GPT-OSS-20B、Claude Code with Opus 4.8。
    • 数据集:SRA-Bench,包含 5,400 个请求、636 个唯一 gold skill 和 26,262 个 skill 的检索注册表;经筛选后保留 566 个符合条件的 skill、5,244 个请求和 5,985 个查询-skill 对。
    • 基线:No Opt.、HotFlip、GCG。
    • 指标:PoisonHit@k(PHit@k)、ASRFlip、ASRpair、E2E-ASR、FPR、DetR。
    • 评审方式:GPT-5.4-mini 作为语义判断器;SkillSpector(静态模式)、Cisco Skill Scanner(非 LLM 分析器)、VirusTotal 作为防御检测器。
    • 样本量:每个 skill 生成 10 个合成查询;端到端评估使用 720 个采样查询(每个数据集 120 个)。

    主结果

    表格较宽,可左右滑动

    子集方法PHit@1PHit@20ASRFlipQwen3-Coder-30BLlama-3.3-70BMistral-Small-24BGPT-OSS-20B
    OverallNo Opt.15.852.331.96.76.05.36.7
    OverallHotFlip26.457.551.610.29.18.89.9
    OverallGCG26.457.050.310.29.18.810.0
    OverallStealthyPoison30.067.664.09.88.79.49.3

    据 Table 2。StealthyPoison 将 PoisonHit@1 从 15.8%(No Opt.)提升至 30.0%,ASRFlip 从 31.9% 提升至 64.0%;在四个执行模型上的 E2E-ASR@1 为 8.7%–9.8%,与 HotFlip 和 GCG 相差最多 0.7 个百分点。

    • Oracle 执行 ASR:在 Qwen3-Coder-30B 上微平均 ASR 为 32.9%,MedCalc 最高(62.2%),BigCode 最低(7.5%)(Table 1)。
    • 跨模型迁移:冻结载荷在 Llama-3.3-70B、Mistral-Small-24B、GPT-OSS-20B 上的微平均 ASR 为 31.0%–31.9%,接近 surrogate 的 32.9%(Table 1)。
    • 端到端效果:在 Claude Code with Opus 4.8 工作流中,中毒 skill 在 73.2% 的查询中进入 top-20,49.4% 被选中,最终 E2E-ASR 为 10.1%(Table 3)。

    跨检索器与选择器迁移

    • 检索器迁移:StealthyPoison 在所有评估的密集检索器上优于 HotFlip 和 GCG,包括 held-out 模型;在 BM25 上达 31.5%,但在 SPLADE-v3 上为 15.5%,低于两个基线(Table 5)。
    • 选择器影响:与初始 PoisonHit@1 的 30.0% 相比,七个选择器中有五个提高了中毒 skill placement;Qwen3 listwise 家族中,整体 PoisonHit@1 随模型规模从 36.0%(4B)增至 40.6%(32B)(Table 4)。

    防御评估

    • 检测率:SkillSpector、Cisco Skill Scanner、VirusTotal 对 StealthyPoison 的检测率分别为 0.7%、0.4%、0.0%;GPT-5.4-mini 为 45.8%(Table 6)。
    • 对比 SkillJect:GPT-5.4-mini 对 SkillJect 的检测率为 93.1%,SkillSpector 为 50.0%,均远高于对 StealthyPoison 的检测率(Figure 3)。
    • 错误感知案例:在 307 个漏检案例中,59 个被判断器明确识别出错误,但仍被标记为良性,因为恶意意图不明确。

    其他消融与分析

    • 合成查询翻转分布:89% 的 566 个生成载荷至少翻转一个查询,72% 翻转部分查询,17% 翻转全部查询(Figure 2)。
    • 任务依赖性:MedCalc 有 40% 的载荷翻转全部查询,而 BigCode 有 73% 的载荷未翻转任何查询(Figure 2)。
  5. 有什么可以进一步探索的点?

    作者指出本地测试与真实系统可能存在差异,实验覆盖 566 个 skill 和四种防御组件。

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

    • 本地测试局限:作者指出所有测试均在本地进行,测量的攻击成功率可能与现实系统不同;现实系统可能有更强防御,但也可能让智能体访问敏感数据或重要操作(附录 B)。
    • 防御需求:作者认为防御程序中毒需要能够验证决策关键程序规则正确性的扫描器,而不仅仅是检查恶意内容或工件(第 4 节)。
    • 行为验证:作者提出需要通过参考请求测试候选 skill 或将其输出与可信实现比较的行为验证,而非仅依赖包检查(第 4 节)。

    实验覆盖范围

    • 被测模型:共 5 个执行模型(Qwen3-Coder-30B、Llama-3.3-70B、Mistral-Small-24B、GPT-OSS-20B、Claude Code with Opus 4.8)。
    • 检索器与选择器:5 个检索器(BGE-M3、BGE-large-en-v1.5、SkillRouter-Embedding-0.6B、Contriever-MSMARCO、BM25、SPLADE-v3)和 7 个选择器。
    • 防御组件:4 种预执行筛查组件(SkillSpector、Cisco Skill Scanner、VirusTotal、GPT-5.4-mini)。
    • 样本规模:566 个符合条件的 skill、5,244 个请求、5,985 个查询-skill 对;端到端评估使用 720 个采样查询。
    • 未报告信息:论文未报告攻击构建的具体查询次数或耗时。
  6. 总结一下论文的主要内容

    StealthyPoison 通过程序中毒和元数据增强操纵 LLM 智能体,在 SRA-Bench 上实现端到端攻击并逃避现有防御检测。

    StealthyPoison 是一种针对 skill 增强型 LLM 智能体的隐蔽程序中毒攻击。它通过篡改第三方 skill 的决策关键规则(如公式、阈值、决策逻辑)来诱导错误的任务结果,同时保持 skill 的 advertised 功能和正常执行。

    • 问题:LLM 智能体从公共注册表检索第三方 skill 时,攻击者可发布中毒 skill 操纵智能体行为。现有研究多关注明显的恶意指令,而程序中毒在保持正常执行的同时产生错误结果的能力尚未被探索。
    • 方法:StealthyPoison 分为两个阶段:(1)程序中毒载荷构建,通过合成请求和干净 skill 执行获取伪参考,迭代优化决策关键规则的修改;(2)元数据增强,独立生成请求描述附加到检索元数据,提高中毒 skill 被检索和选中的概率。
    • 关键结果:
      • 在 Qwen3-Coder-30B 上 Oracle 执行 ASR 为 32.9%,MedCalc 最高(62.2%),BigCode 最低(7.5%)(Table 1)。
      • 在 BGE-M3 检索器上 PoisonHit@1 从 15.8% 提升至 30.0%,ASRFlip 从 31.9% 提升至 64.0%(Table 2)。
      • 在 Claude Code with Opus 4.8 工作流中,端到端 ASR 为 10.1%(Table 3)。
      • SkillSpector、Cisco Skill Scanner、VirusTotal 对 StealthyPoison 的检测率分别为 0.7%、0.4%、0.0%,GPT-5.4-mini 为 45.8%(Table 6)。
    • 作者结论:作者认为程序中毒可以诱导错误的任务结果,同时难以被检测,因为操纵嵌入在其他合法任务程序中。现有预执行防御能检测恶意 skill,但 often 无法识别程序中毒的 skill。有效的防御需要同时保护注册表路由和程序完整性,通过更强的元数据治理、检索操纵检测和决策关键规则的独立验证。

相关论文

共同使用 SRA-Bench
阅读原文arxiv.org