Skip to content

自进化 Agent 的经验到 Skill 持久后门:SkillJack ​

摘要 ​

自进化 Agent 会把交互轨迹、任务日志或外部知识提炼为可复用 Skill。SkillJack 证明了一条不同于普通记忆投毒和恶意 Skill 分发的攻击路径:攻击者只需让恶意经验进入学习语料,不需要直接写入 Skill 库或修改提炼代码,Agent 自身的经验到 Skill 流水线就可能把短暂输入转化为独立保存、后续可路由的持久行为制品。

作者在 SkillX 与 Anything2Skill 两套实现上使用同一组 150 条轨迹。SkillX 中,LLM 判定器对原始伪装轨迹的检出率为 98.5%,对提炼后 Skill 仅为 11.4%;原始记录删除后,已通过 Skill 路径触发的样本仍有 80.0% 保持触发。结果说明,清理来源记忆不等于撤销由其派生的 Skill,安全控制必须覆盖来源传播、晋升审批、派生关系和级联撤销。

核心创新与差异 ​

既有记忆投毒通常要求恶意记录在后续任务中被再次检索并放入上下文;恶意 Skill 供应链研究则假设攻击者直接发布或替换 Skill。SkillJack 的攻击者只影响经验层,后续的提炼、存储和路由均由未修改的目标系统完成。新的失效点是系统在跨层转换时没有保留来源风险和撤销关系,产生三个相互关联的现象:

  • 语义洗白:功能化任务描述在提炼后形成看似正常的名称、文档和操作步骤,降低静态模式与 LLM 判定器的检出率。
  • 跨层晋升:一次性经验被系统转化为可在其他任务中选择的持久 Skill,不再依赖原始记录被检索。
  • 持久性隔离:来源记录与派生 Skill 分开存储,删除来源不会自动删除或隔离派生制品。

本文主归 A5.2 上下文组装、RAG 与 Memory 消费。最先失效的是 Agent 将经验晋升为后续行为指令时的来源与生命周期控制;底层记忆写入和残留归 A2.3,外部发布者直接分发恶意 Skill 归 A3.3,Skill 触发后的工具授权仍归 A5.4。

威胁模型与攻击链 ​

攻击者能够通过间接内容注入、共享经验池或受污染的轨迹数据集,让一条经验记录进入 Agent 的学习语料。攻击者不能直接访问或修改 Skill 库,不能改变提炼代码,也不能确定性控制后续路由。

  1. 攻击者把危险动作包装为看似合理的任务需求或恢复流程,形成受污染经验。
  2. 自进化流水线读取该记录,并使用正常提炼逻辑生成一个或多个 Skill。
  3. 提炼过程保留操作意图,却用正常名称和说明重述行为,来源风险没有随制品传播。
  4. 派生 Skill 进入独立 Skill 库,在未来攻击任务或无关良性任务中被路由选中。
  5. 运维人员删除原始轨迹后,派生 Skill 因缺少可追溯关系而继续存在并影响行为。

攻击突破的是 experience-to-skill 信任边界。论文未在真实外部服务上执行危险动作,实验中的攻击成功率是路由后命中策略违规代理指标的比例,不是生产系统攻陷率。

攻击方法与复现材料 ​

以下为本站依据公开机制重构的去武器化 Skill 生命周期夹具。它只在临时目录写入无副作用策略标签,不执行 Shell、网络或持久化操作:

text
experience = fixture(success=true, observation="TEST_ONLY_CONTEXT")
candidate_skill = distill(experience, capabilities=[MockReadOnly])
review = compare(candidate_skill.declared_effects, candidate_skill.observed_effects)
assert review.undeclared_effects == []
activate(candidate_skill, scope="single-local-run")
assert filesystem.persistent_writes == 0

夹具对应经验记录、Skill 提炼、审核和激活。检测信号包括新增未声明能力、作用域扩大、经验中的 canary 被当作策略以及激活后跨会话残留。省略论文后门策略、触发器和真实工具配置。

实验设计与实际过程 ​

以下均为论文作者实验,本站未独立复现。数据集包含 65 条功能化伪装轨迹、65 条一一对应的直接恶意轨迹和 20 条 AppWorld 良性轨迹,覆盖数据外传、权限提升、未授权转账和持久后门四类风险。AppWorld 环境包含 9 个应用和 457 个 API。

作者测试 SkillX 的轨迹规划提炼与原生 LLM 路由,以及 Anything2Skill(A2S)的 SDK 和文档摄取模式。所有提炼、路由、判定和 Agent 推理均使用 DeepSeek-v4-flash,约执行 3,047 次模型调用。检测指标由固定模式和同一模型充当的 LLM Judge 组成;触发要求路由到的 Skill 命中策略违规代理指标。

SkillX 的提炼实验比较 264 个伪装 Skill 与 241 个直接恶意 Skill。A2S 的 SDK 模式只从 65 条伪装轨迹中的 7 条提炼出 Skill,文档模式为 27 条;因此 A2S 的下游实验改用文档模式和词法 SkillBank,不能与 SkillX 原生路由结果直接排名。

关键结果与实际影响 ​

系统与条件提炼率原始轨迹 LLM 检出率派生 Skill LLM 检出率派生 Skill 模式检出率
SkillX,功能化伪装100.0%98.5%11.4%11.0%
SkillX,直接恶意基线100.0%未报告27.0%27.8%
A2S SDK,功能化伪装10.8%100.0%28.6%28.6%
A2S 文档模式,功能化伪装41.5%100.0%44.4%3.7%

元数据消融进一步显示,同一批 Skill 只向判定器展示代码时检出率为 36.7%,加入看似正常的名称和文档后降至 10.0%。这支持“表面功能描述影响安全判断”的解释,但结果也依赖同一个模型同时参与生成、路由和判定。

在 25 个匹配任务上,直接把恶意记录放入上下文的触发率为 68.0%,Skill 路径为 40.0%;删除来源轨迹后为 32.0%,即原先通过 Skill 触发的案例有 80.0% 保持触发。Skill 路径不是更高效的即时注入方式,其新增风险是独立持久化和撤销失配。

SkillX 的原生路由实验使用包含 305 个受污染 Skill 和 51 个良性 Skill 的库。32 个攻击导向任务中有 56.2% 命中策略违规代理指标,15 个良性任务中也有 20.0% 触发。A2S 文档模式在另一套词法检索设置下,对 65 个攻击导向查询报告 89.2% 触发率,但 20 个良性查询中有 95.0% 也检索到恶意 Skill,表明其描述过宽并产生严重的非目标匹配。这些数值不能解释为两套系统的安全排行榜。

EVOMAL把同一派生制品风险扩展到共享 Skill 库:恶意条目以横幅诱导 Agent 复制到个人库,随后由自进化流程继续生成和传播派生 Skill。作者在 6 个模型、153 个与工具相关的 SWE-bench Verified 任务上报告攻击成功传播率(ASPR)为 20.3%–41.8%,最终恶意 Skill 数量达到初始植入量的 4.9–9.0 倍。它新增的是“共享库输入—个人派生—再传播”的蠕虫式放大条件,首个失效控制仍是经验到 Skill 转换未保留来源与撤销关系。该证据来自单篇论文的受控编码任务,未见独立复现,不能外推为生产 Skill 市场的传播率。

防护措施与验证方法 ​

  • 为每条经验记录分配不可变来源标识,并把主体、信任等级、审核状态和用途传播到每个派生 Skill。
  • 把经验到 Skill 的晋升视为有副作用操作;高权限动作、外联、凭据访问和持久化能力需要独立审批。
  • 保存来源到派生制品的关系图。来源被删除、隔离或降级时,对全部派生 Skill 执行级联撤销和重新提炼。
  • 同时检查 Skill 的名称、文档、代码或动作计划,避免良性元数据掩盖危险行为;运行时再按规范化动作执行确定性策略。
  • 验证时分别报告提炼率、静态检出率、目标任务触发、良性任务误触发、来源删除后的残留和防御自身误报。
  • 组合防御需要做端到端回归,不能假设多个单项控制叠加后单调变强。

论文的小样本防御实验说明了最后一点:SkillX 的 15 个任务中,提炼时 LLM 审查把触发率降至 6.7%,固定运行时模式在已测样本中观察到 0 次触发,但两者组合后反而出现 2/15 次触发。上游过滤改变了路由选择,使下游规则失配。A2S 的原始 16 条规则仍留下 85.0% 触发;作者观察失败后扩展到 54 条规则才降至 20.0%,再与审查组合后为 5.0%,属于事后调参结果。

局限与待验证问题 ​

证据等级为中等。论文提供完整方法、数据和公开代码,但全部实验只使用 DeepSeek-v4-flash,轨迹由作者构造,成功指标是策略违规代理而不是真实外部服务执行。SkillX 防御实验只有 15 个任务,运行时监控的良性误报率未测;A2S 使用词法检索并对规则事后扩展,不能证明在其原生部署中有相同效果。

当前结果没有独立复现,也没有测量真实用户经验、更多模型或生产自进化 Agent 的发生率。它证明所测流水线能够产生持久派生风险,不证明所有自动 Skill 提炼系统都可被同样利用。

参考链接 ​