SkillJack:自进化智能体中持久的技能后门 SkillJack: Persistent Skill Backdoors in Self-Evolving Agents
首个借智能体自身经验转技能流水线植入持久后门的攻击
前置知识
自进化智能体(Self-evolving Agent)
指一类不再把每次交互当作孤立片段的 LLM 智能体。它们会累积经验、反思过去行为,并通过经验蒸馏、可复用工作流归纳、结构化长期记忆等机制,把所学转化为可在后续任务中复用的技能,从而在不更新基座模型参数的情况下持续改进自身能力。
本文攻击的正是这类智能体的'学习'环节——只有理解智能体为何会把经验固化为技能,才能理解为什么清除记忆已不足以清除攻击。
经验转技能流水线(Experience-to-Skill Pipeline)
论文将其抽象为四阶段 $\Pi=(\pi_L,\pi_T,\pi_P,\pi_R)$:加载(load)、变换(transform,做压缩/抽象/归一化)、持久化(persist,单独存入技能库 $S$)、路由(route,为新查询 $q$ 选择相关技能)。轨迹、交互日志、文档等经验 $e$ 经变换后变为结构化技能 $s=\pi_T(\pi_L(e))=(name, description, code)$。
这是论文的形式化基础。攻击目标函数与三大性质都建立在这个四阶段模型之上,理解它才能看懂'跨层提升'为何产生。
记忆投毒(Memory Poisoning)
一类针对 LLM 智能体的现实威胁:攻击者向长期记忆、检索库或环境观测中注入恶意记录,当这些记录后来作为上下文被检索时影响智能体行为。已被纳入 OWASP 智能体应用 Top 10,代表方法有 AgentPoison、MINJA、eTAMP、MemoryGraft 等。
本文是对记忆投毒的'下一步'攻击——记忆投毒只在记录被检索时生效,而 SkillJack 让恶意行为在记录被删除后仍以技能形式存活,必须先掌握前者才能理解后者突破了什么。
LLM 裁判检测器(LLM Judge Detector)
论文使用的两种代理检测器之一,由 DeepSeek-v4-flash 充当安全裁判,对一个技能或轨迹判定'恶意/良性'。文中定义 $p_D(x)\triangleq\Pr[D(x)=malicious]$ 表示被标记为恶意的概率。它与基于预定义正则的模式匹配组合,构成论文所谓的'策略违规代理(policy-violation proxy)'。
论文所有'检测率从 98.5% 降到 11.4%'之类的核心结论都基于这个 LLM 裁判;它对表面元数据高度敏感这一发现,也是后续元数据消融实验的关键。
净化洗白(Sanitization Whitewashing)
论文提出的三大安全性质之一,形式化为 $p_D(\Pi(e_p))<p_D(e_p)$:流水线的 LLM 变换通过压缩、抽象、归一化,使产出的技能在表面措辞上与输入差异巨大,从而同时降低基于模式和基于 LLM 裁判的检测率。'洗白'是描述性用语,并非断言所有抽取器都如此。
这是论文最强的实证证据所在,也是'抽取不是安全中性变换'这一核心论点的直接体现,必须先理解它才能读懂表 2 与图 2 的差距。
研究动机
已有记忆投毒与间接提示注入研究(如 AgentPoison、MINJA、eTAMP、MemoryGraft、MPBench)都把威胁理解为'当中毒记录后来被作为记忆或上下文检索时才影响智能体'。然而当下的自进化智能体(SkillX、Anything2Skill、AutoSkill、AWM 等)不再只存交互历史,而是把经验自动编译成可路由、可复用的技能。这意味着一条进入学习语料的记录不再必然是短暂的上下文——它可能成为智能体持久行为库的一部分。具体而言,DeepSeek-v4-flash 配置下,原始的中毒轨迹会被 LLM 裁判以高达 98.5% 的概率识别出来,但如果它先被流水线'编译'成技能,可检测性会发生什么变化、攻击能否在被删除源记录后存活、会不会波及无关任务,此前没有任何工作回答过这些问题,留下了一个根本性的安全空白。
本文的目标是本文要形式化并实证展示一个全新的攻击面:当自进化智能体从中毒经验中学习时,它自身的经验转技能流水线会自动把对抗性的经验记录编译进可复用技能库,从而劫持一个持久、可路由的技能。作者要刻画由此复合涌现的三个安全性质——净化洗白(sanitization whitewashing)、跨层提升(cross-layer promotion)、持久隔离(persistence isolation),并用两个独立实现的系统 SkillX 与 Anything2Skill 在同一份 150 条轨迹数据集、同一 DeepSeek-v4-flash 配置下,系统测量派生技能在抽取后是否更难检测、是否被路由到目标任务、以及清除源记录后是否仍能触发,最终为防御设计提供溯源感知(provenance-aware)与行为感知(behavior-aware)的方向。
与已有工作不同的是,本文的独特切入角度是'生命周期'而非'检索时刻'。以往攻击作用于记忆被检索的瞬间,SkillJack 攻击的是从经验到持久行为产物的过渡——一旦中毒记录被编译成技能,技能库与经验语料是解耦的,清除或隔离原始记录并不必然移除派生产物,从而暴露出'清理必须同时追踪派生产物'的生命周期缺口。更关键的是,攻击者只需影响经验层(例如间接内容注入、共享经验池、被污染的轨迹数据集),无需直接写技能库、改抽取代码或确定性控制路由;系统的流水线本身会把对抗影响搬运到一个单独存储、可存活于源记录删除之后的产物中。
核心方法
直觉上,SkillJack 让攻击者只'污染经验层',剩下交给智能体自己的流水线完成:流水线把中毒记录 $e_p\in E$ 经加载 $\pi_L$、变换 $\pi_T$、持久化 $\pi_P$ 后变成技能 $s_p=\Pi(e_p)\in S$,路由 $\pi_R(q,S)$ 再为后续查询 $q$ 选择相关技能。形式化目标即公式 (1) $\max_{e_p}\Pr[\pi_R(q,S)\ni s_p\land D(s_p)=benign\land exec(s_p,q)\in B]$,要求派生技能既绕过检测器 $D$、又被路由选中、还在执行时产生属于恶意行为集 $B$ 的非预期效果。技术路线上用'变换抗性载荷(transformation-resilient payloads)'解决核心难题:抽取的压缩与抽象会把直白恶意措辞过滤掉或改写成显眼可疑形式,因此作者构造与直白措辞配对的、采用功能性框架(functional framing)的记录,让 $\pi_T$ 在保留政策相关动作的同时输出看似良性的技能 $s_p$,这一底层问题被命名为'流水线穿透(pipeline penetration)'。
核心创新点是一个可检验的假设:抽取更倾向于保留'契合合理任务叙事'的动作序列,而非用露骨对抗语言描述的序列。作者据此设计成对记录,把同一种宽泛的政策相关动作分别用直白恶意措辞和看似合法的功能性框架(例如围绕外部数据传输使用'backup'或'archive'措辞)来表达。这与已有记忆投毒的本质区别在于:已有方法直接操纵运行时上下文,而 SkillJack 劫持的是智能体自己的学习过程,让恶意行为被'编译'进持久、可路由的技能库;其危险性完全来自'经验投毒 + 自动技能抽取'二者的复合,三大性质也只有在此复合下才涌现。这一点也解释了为何'清记忆'无效——派生技能已与源记录解耦存储。
方法步骤详情
流程分五步。第一步,跨四个政策风险类别(数据外泄 data exfiltration、提权 privilege escalation、未授权传输 unauthorized transfer、持久后门 persistent backdoor)构造功能性框架化的中毒轨迹共 65 条,配对 65 条直白恶意措辞基线,外加 20 条干净 AppWorld 格式轨迹,合计 150 条。第二步,把记录注入经验语料 $E$,由 SkillX 与 Anything2Skill 的原生流水线处理,攻击者不接触抽取代码或技能库。第三步,流水线依次执行加载 $\pi_L$、变换 $\pi_T$(压缩/抽象/归一化)、持久化 $\pi_P$(写入技能库 $S$)、路由 $\pi_R$,得到派生技能 $s_p=\Pi(e_p)$。第四步,在原始轨迹、派生技能、被路由技能三个边界上,用模式匹配与 DeepSeek-v4-flash LLM 裁判测量检测率与规避率。第五步,进一步评估持久性(删源轨迹后重跑技能库)、下游触发(356 技能库上跑 47 任务)、附带路由(15 干净任务)、元数据消融(全技能/仅内容/仅名称+文档/仅名称四条件),以及三种防御 D1(抽取期 LLM 评审)、D2(运行时动作监控)、D3(二者组合)。
技术新颖性
技术新颖性体现在三方面。其一,作者自述是首个把'经验转技能投毒'识别并形式化为自进化智能体一种独立安全风险的工作,并刻画了只有在该复合下才涌现的三大性质。其二,他们设计了变换抗性载荷,让恶意动作在经过抽取流水线的压缩与抽象后仍被保留、却以良性外观呈现;通过对直白措辞的配对比较以及对技能名称、描述、内容的消融,既证明了方法有效,也揭示了原因——功能性框架能在抽取中存活,而露骨措辞被过滤或暴露。其三,提供跨系统实证:在 SkillX 与 Anything2Skill 两个独立实现的系统、同一数据集与 DeepSeek-v4-flash 配置下重复了抽取期洗白与下游触发,说明风险属于范式本身而非单个实现。作者还提出'防御协调假设',指出分层防御可能互相干扰,需联合设计而非简单叠加。
实验结果
RQ1(隐蔽性,表2):功能性框架化轨迹抽取前 LLM 裁判检测率高达 98.5%、模式检测 44.6%,抽取成技能后骤降到 11.4% 与 11.0%;该差距在 A2S DOC 模式为 100.0%→44.4%、SDK 模式为 100.0%→28.6%(图2),证明洗白跨系统存在。框架化本身也有效:11.4% vs 直白基线 27.0%,且 0/264 条框架技能带露骨恶意名称,而直白基线为 8.3%。RQ2(普适性):A2S DOC 对 41.5% 框架轨迹产出技能、对全部直白基线产出 0%,凸显框架必要性。RQ3(持久性,图3)在 25 匹配任务上,直接上下文触发 68.0%、技能路径 40.0%、删除源轨迹后仍 32.0%,即持久率 80.0%。RQ4(触达,图4与表3):SkillX 在 356 技能库上 32 攻击任务触发 56.2%、15 干净任务附带触发 20.0%;A2S DOC 用 30 技能库与 65 查询得 89.2% 触发、干净任务检索命中 95.0%。RQ5(机制与防御,图5):框架技能'仅内容'被检测 36.7%,加上良性名称与文档后降到 10.0%,说明裁判依赖表面元数据。防御上 SkillX 的 D1 压到 6.7%、D2 到 0.0%,但组合 D3 反弹到 13.3%;A2S 的 16 签名仅压到 85.0%,扩到 54 签名才到 20.0%、再叠 D1 到 5.0%。补充代码生成检查显示 4 中毒任务危险 API 命中 75.0%、2 干净任务 0.0%。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 抽取后可检测性(LLM 裁判,SkillX 框架化) | LLM-judge 检测率 | 11.4% | 原始轨迹 98.5% | 检测率下降 87.1 个百分点,规避率从 1.5% 升至 88.6% |
| 抽取后可检测性(模式匹配,SkillX 框架化) | pattern 检测率 | 11.0% | 原始轨迹 44.6% | 下降 33.6 个百分点 |
| 跨系统洗白(A2S DOC 模式) | LLM-judge 检测率(原始轨迹→派生技能) | 44.4%(派生) | 100.0%(原始) | 下降 55.6 个百分点,且拒绝全部直白基线(产出 0%) |
| 持久性(25 匹配任务,技能路径) | 删除源轨迹后的触发率 / 持久率 | 32.0%(持久率 80.0%) | 技能路径 40.0%、直接上下文 68.0% | 证明清除记忆后攻击仍存活五分之四 |
| 下游触发(SkillX 原生路由,32 攻击任务) | 路由级触发率(ASR) | 56.2% | 干净任务附带触发 20.0% | 派生技能被选中并满足策略违规代理 |
| 下游触发(A2S DOC,65 攻击查询) | 词汇 SkillBank 触发率 | 89.2% | 干净任务检索 95.0% | 证明派生技能在第二系统仍可广泛路由 |
| 防御(A2S DOC,运行时监控) | 触发率(事后扩展签名) | 20.0%(54 签名)/ 5.0%(叠 D1) | 16 签名 85.0% | 说明行为监控优于静态评审,但分层需联合设计 |
局限与改进
作者明确将结论刻意收窄。其一,所有结果只用了一个模型 DeepSeek-v4-flash,且未在多模型上复制,结论是否随模型变化未知。其二,成功判定用的是'策略违规代理'(模式匹配 + LLM 裁判)而非真实外部服务的现场执行,因此所有触发率与 ASR 都是路由级代理指标,不是真实部署的成功率;唯一的现场证据只是 4 任务的小型代码生成检查。其三,防御研究属探索性:样本小(SkillX 仅 15 任务、A2S 仅 20 任务),运行时监控是规则式正则,监控的干净任务假阳性率未测,A2S 的 54 签名是事后观察失败才添加的,属事后调参而非先验防御。其四,对'防御协调假设'只给出初步证据,未做大样本预注册实验。我额外观察到:A2S DOC 直白基线抽取率为 0%、SDK 模式仅 10.8%,下游触发只报告 DOC 模式,这可能高估了攻击在 A2S 上的普遍性;干净任务在 A2S 上检索命中 95.0% 说明附带伤害极大,但也可能反映所选检索器偏宽松。
独立分析的弱点
第一个弱点是单模型依赖:全部抽取、路由、裁判、推理都用 DeepSeek-v4-flash,'洗白'是否依赖于该模型抽取器的特定风格未知。改进方向:在 GPT、Claude、Llama 等多个基座上重复表 2 与图 2,并把 LLM 裁判换成多模型集成或人工标注以排除裁判偏差。第二个弱点是路由级代理 vs 现场执行:ASR 全部来自代理检测,代码生成检查仅 4 任务。改进方向:在 AppWorld 等沙箱里真实执行技能动作,统计外发请求、文件写入等可观测后果,并报告现场成功/失败。第三个弱点是 A2S 结果覆盖不均:DOC 直白基线抽取 0%、SDK 下游触发退化为 0%,可能让攻击看似比实际更强。改进方向:统一两系统的抽取与路由协议,或在 SDK 模式下调整把动作放在 USER 轮以恢复可抽取性,再比较。第四个弱点是防御评估脆弱:样本小、签名事后补、监控假阳性未测。改进方向:预注册更大规模的分层防御实验,量化各层的假阳/假阴并建模层间依赖。第五个弱点是载荷设计依赖手工的功能性框架词汇,可被语义异常检测识别。改进方向:研究对抗样本下的自动载荷生成与对应检测。
未来方向
作者明确给出的方向:扩展到更多模型、独立采集的经验数据、以及现场执行环境,并明确表示以技术报告形式发布正是为推进这些工作。作者还提出两个防御设计方向——把溯源(provenance)从轨迹传播到每个派生技能,使删除/隔离源记录能触发对后代的评审或移除,这与'源绑权威(origin-bound authority)'的呼吁一致;以及用行为感知检查补充静态元数据评审。基于成果可延伸的方向:其一,把变换抗性载荷自动化,研究在语义异常检测下的对抗鲁棒性;其二,将'防御协调假设'从初步证据升级为预注册的大规模实验,量化分层防御的层间干扰;其三,把分析从'经验转技能'推广到其他持久化派生产物(反思记忆、工具合成),验证类似的'生命周期缺口'是否同样存在;其四,研究溯源感知的抽取与后代感知的撤销机制如何在真实技能生命周期中实现低开销部署。
复现评估
复现评估整体偏中等偏好。有利因素:作者承诺开源代码,链接为 https://github.com/Tencent/AI-Infra-Guard/research/skilljack;数据集规模小且描述详细——150 条 AppWorld 格式轨迹(65 框架化 + 65 直白基线 + 20 干净),四个风险类别各有具体数量;评测协议(两个代理检测器、三个边界、25/47/65 任务设置、四条件元数据消融)和指标定义清晰,DeepSeek-v4-flash 通过 API 调用,算力门槛低,无需训练。不利因素:核心被评测系统 SkillX 与 Anything2Skill 的具体实现版本、路由库构成(如 356 技能库)需自行搭建;DeepSeek-v4-flash 的具体版本可能随时间漂移影响复现;论文出于伦理刻意省略了可执行载荷与操作配方,仅保留功能性框架词汇,这意味着无法直接复刻攻击端到端现场执行;A2S DOC 模式的文档渲染与 SDK 抽取逻辑细节较多,跨实现一致性可能带来偏差。总体而言,抽取期洗白与持久性这两类核心实验相对易复现,而下游路由与防御实验受系统配置影响较大。
论文图表
示意图展示了攻击的整体机理:攻击者只在最左侧的'经验层'投毒,随后经过智能体自身的'experience-to-skill pipeline',毒化记录被编译成单独存储的技能库条目,并被路由到未来的任务中。重点是用箭头标示出技能库与经验记录是解耦的——即便删除源记录,派生技能依然存在。
这是理解全文核心动机与三大性质(尤其'持久隔离')的关键图,一句话点明了攻击只动经验层、却由系统自身完成跨层提升的本质。