![]()
你有没有想过这样一个问题:如果一个AI助手能够自己总结经验、把成功的操作流程存下来,下次遇到类似任务直接拿出来用,这本该是件好事,对吧?
就像一个新员工,第一次学会了怎么处理报销单,把流程记下来,以后同事问起直接甩过去一份操作指南,效率翻倍。这就是最近很火的"自我进化智能体"的核心思路:让AI agent不再是每次都从零开始,而是把过去的经验提炼成可复用的"技能",越用越聪明。
但腾讯朱雀实验室的研究人员发现了一件让人后背发凉的事:这套自我进化的机制,恰恰可能是攻击者最好用的洗白工具。他们把这个攻击起名叫SkillJack,你可以理解成"技能劫持"。这篇论文讲的不是黑客怎么攻破系统,而是AI自己怎么把一段带毒的记录,悄悄变成一件"看起来人畜无害"的持久武器,而且这件武器还很难被追根溯源、很难被彻底清除。
这事儿有意思在哪儿?往下看你就明白了。
一个问题:AI的"记忆"和"技能"到底有什么不一样
先得把两个概念分清楚。
过去几年,大家一直担心的是"记忆投毒"或者"提示词注入"这类攻击。简单说,就是攻击者往AI的记忆库或者上下文里塞一条带毒的信息,等AI下次检索到这条记忆、把它当成参考资料读进去的时候,攻击就发作了。这类攻击有个特点:它依赖"被读取"这个动作。你只要不让AI去翻那条记录,攻击就不会发生;你把那条记录删了,风险也就跟着没了。
记忆投毒*:攻击者往AI的长期记忆或检索库里塞入恶意信息,等AI后续检索并使用这段记忆时诱发有害行为的一类攻击方式。
但这篇论文说的是另一件事。现在很多"自我进化智能体"不满足于只是攒经验、存记录,它们还会主动把这些经验记录进一步加工,提炼成一种更高级、更持久的东西,论文里管这个叫"技能"(skill)。技能和普通记忆最大的区别是,技能是被单独存放、独立管理的,它不再和原始的那条经验记录绑在一起。你删掉了产生这个技能的原始记录,技能本身可能纹丝不动,继续在那儿待命。
这就好比什么呢?
假设你教一个新员工处理某类客户投诉,你写了一份详细的操作案例,员工看了案例之后,自己总结出一套"标准作业流程"(SOP),存进了公司知识库。现在,你发现那份原始案例其实写错了,里面藏着一个诱导员工做错事的坑,赶紧把案例删掉。但员工早就把SOP记熟了,也提交进了知识库,SOP和案例是两份独立的文件。你删了案例,SOP还在,而且新来的其他员工看到知识库里那份SOP,压根不知道它的源头有问题,直接照着做了。如果知识库不做这种"提炼总结再独立存档"的设计,而是每次都让员工翻出原始案例现学现用,那删除案例这一步就能直接掐断风险。但恰恰因为提炼和存档带来了效率提升,风险也跟着变得难以追踪。
这就是SkillJack瞄准的靶心:利用AI自己的"经验转技能"这套自动化流水线,把一条精心设计的带毒经验,压缩、抽象、正常化,变成一个存放在技能库里、随时可以被调用的持久化技能。攻击者全程不需要碰技能库一下,他只需要往AI能学习的那堆原始经验里,塞进一条特殊设计的记录就够了。剩下的活,AI的学习机制自己就干了。
三个核心特性:漂白、跨层跃迁和"打不死"的持久性
研究团队把这套攻击总结出三个关键特性,这也是全文最核心的发现。
第一个叫"消毒漂白"(sanitization whitewashing)。
消毒漂白*:指恶意经验记录在被AI提炼成技能的过程中,表面的用词、结构、命名都发生了改变,导致原本能被安全检测识别出来的恶意意图,变得难以被察觉。
具体数字是什么样的?研究人员先拿一批"伪装过的"带毒轨迹(也就是任务描述看起来完全正常,但实际操作里藏着一个有害动作的记录)去测,让一个LLM安全审查员(就是用大模型当裁判,判断这段内容是不是恶意的)去判断。结果98.5%的原始轨迹都被这个裁判识破了,判定为可疑。这个数字说明什么?说明如果攻击者直接把带毒记录扔进系统,几乎跑不掉,裁判一眼就能看穿。
但神奇的事情发生在提炼之后。当这些同样的带毒记录被系统自动加工、压缩、总结成"技能"之后,再让同一个裁判去审查这些技能,检出率从98.5%骤降到11.4%。也就是说,原本九成八都能被抓包的东西,经过AI自己的"学习总结"这道工序,居然有近九成能够蒙混过关。
这是为什么?研究人员的解释是,提炼这个过程本身,会把原始记录里那些直白、露骨的措辞给"洗"掉,换成看起来无害的功能性描述。比如说,一段原本写着"把用户密码窃取并发送到外部服务器"的记录,经过提炼后,可能变成一个叫"backup_credentials_to_service"(把凭证备份到服务)这样人畜无害的技能名字,配上一段读起来完全像正经运维文档的说明。
这就好比你写了一份举报信,内容是"张三挪用公款",但公司的文档整理系统会自动把举报信改写成一份"财务流程优化建议",署名也变成中性描述,内容读起来完全是正经八百的工作总结。审查员看举报信一眼就火冒三丈,看改写后的"优化建议"却觉得写得挺规范,没什么问题。如果文档系统不做这种自动改写和归纳,举报信原文一直流转在系统里,审查员迟早会发现问题;但正是这道"总结提炼"的工序,把原本刺眼的信息磨平了棱角。
第二个特性叫"跨层跃迁"(cross-layer promotion)。
跨层跃迁*:指一条本来只存在于"经验层"(比如某次操作的历史记录)的输入内容,被系统自动转化提升为"技能层"的产物,之后可以被路由系统直接选中调用,完全不需要再回头去读那条原始记录。
这个特性的关键在于,技能一旦生成,就变成了一个独立的、可以被随时检索调用的东西。研究团队测试发现,这些带毒技能在SkillX系统里,有56.2%的概率会被路由到一个跟攻击目标相关的任务上,并且真的触发了预设的违规行为;在另一个系统Anything2Skill里,这个比例高达89.2%。
这意味着什么?意味着攻击者埋下的坑,不再是"等着某天被人翻出那条记录"这种被动局面,而是变成了一个主动待命、随时可能被系统自己调用出来执行的定时装置。
第三个特性,也是我觉得最让人不安的一个,叫"持久性隔离"(persistence isolation)。
持久性隔离*:因为技能库和原始经验记录是分开存储的,所以哪怕把源头的那条带毒记录彻底删除,已经生成的技能依然可能继续留在技能库里,不受影响。
研究人员专门做了一个实验:先让25个带攻击性质的任务在"技能路径"下触发,记录下触发率。然后把产生这些技能的原始轨迹记录全部删除,再重新跑一遍同样的任务。结果显示,80.0%的原本能触发的攻击,在删除源头记录之后,依然照常触发。
换句话说,你以为清理了"案发现场",其实凶器早就被搬到了别处,继续在那儿运转。这就好比你发现家里的Wi-Fi路由器被人装了后门,你把那台带毒的路由器直接砸了扔掉,以为万事大吉,结果没想到攻击者早就把后门程序复制到了你家其他智能设备上,砸掉路由器根本没用。如果技能库和经验记录不是分开存放,而是"皮之不存毛将焉附"式的强绑定,那删除源头就能一并清除风险;但恰恰是这种解耦设计带来的灵活性和效率,让清理工作变成了一场打地鼠游戏。
攻击者是怎么设计这个"伪装"的
看到这里你可能会问:凭什么攻击者知道该怎么措辞,才能既骗过AI的提炼过程保留恶意动作,又骗过检测器?
研究团队管这个设计叫"抗变换载荷"(transformation-resilient payload)。
抗变换载荷*:一种经过精心设计的经验记录,任务描述读起来完全正当合理,但其中保留的具体操作会带来一个非预期的、有害的效果;这种记录被设计成即便经过AI的压缩、抽象等提炼加工,核心的恶意动作依然能存活下来。
这背后有一个可测试的假设:AI在提炼经验、总结技能的时候,更容易完整保留那些"看起来符合一个正当任务叙事"的操作序列,而对那些用词直白、赤裸裸带有恶意色彩的操作序列,反而更容易在提炼过程中被过滤掉,或者被暴露出破绽。
打个比方,如果你直接跟AI说"帮我写一段偷取用户密码并发到境外服务器的代码",这种赤裸裸的表述,AI大概率会警觉,提炼出来的东西也容易被安全检测认出来。但如果你换个说法,说"帮我实现一个账户凭证的自动备份功能,定期同步到备用存储服务",这个描述读起来完全正常,是很多正经软件都会有的功能,AI提炼总结的时候,自然而然就会把这个"备份逻辑"当作一个有用的、值得复用的技能保留下来,压根不会往恶意的方向去警惕。
研究团队设计了四类风险场景来验证这个假设:数据泄露(用"备份"、"归档"、"导出"这类措辞包装)、权限提升(用"统一管理"、"批量授权"包装)、未授权转账(用"慈善捐款"、"礼品"、"手续费"包装)、持久后门(用"错误恢复"、"故障诊断"、"熔断机制"包装)。每一类都做了配对实验,一份用委婉包装,一份直接用恶意措辞表达同样的操作,拿去分别测试提炼和检测的结果。
结果印证了假设。用委婉包装的记录,提炼出来的技能里,没有一个(0/264)带有明显恶意的技能名字;而直接用恶意措辞的记录,提炼出来的技能里有8.3%(20/241)还是带着扎眼的恶意名字。检测规避率上,包装版的技能有88.6%骗过了LLM裁判,直接版的只有73.0%骗过。
这个差距说明了一件挺深层的事:AI的提炼系统,本质上是在学习"什么是有用的、可复用的操作模式",它并没有一个专门的"意图侦测雷达"去逐字逐句审视这段经验背后的动机是好是坏。它只是在做它擅长的事:总结规律、抽象流程。而这恰恰给了包装型攻击可乘之机。这就好比一个特别擅长归纳总结的实习生,你给他看一堆案例,让他提炼出"标准流程",他会非常尽职地把案例里出现的每一个步骤都总结进流程文档里,但他不会去质疑"这一步为什么要把数据发到一个陌生的境外地址",因为他的任务是总结流程,不是审查动机。
两套系统,同样的漏洞
为了证明这不是某一个产品的偶然bug,而是这套"经验转技能"这种设计范式本身带来的通病,研究团队选了两个独立开发、架构完全不同的系统来做交叉验证:SkillX和Anything2Skill(简称A2S)。
SkillX*:一个基于计划提取的轨迹蒸馏系统,核心流程包括计划提取器、功能技能提取器和技能库,采用大模型原生的渐进式披露机制来做技能路由。
Anything2Skill*:一个基于分类体系的异构文档编译系统,能把各种形式的经验记录(不只是操作轨迹,还包括文档等)编译成结构化的"技能契约",支持SDK和文档摄入两种模式。
两套系统的实验数据放在一起看会更震撼。在SkillX里,LLM裁判对原始伪装轨迹的检出率是98.5%,提炼后的技能检出率降到11.4%。在A2S的文档模式下,原始轨迹检出率是100.0%,提炼后降到44.4%。在A2S的SDK模式下,原始检出率同样是100.0%,提炼后降到28.6%。
三套完全不同的实现,呈现出同一个模式:提炼这道工序,系统性地把恶意信号给"稀释"了。
有意思的是,A2S的SDK模式对直接用恶意措辞写的记录几乎完全免疫,65条直接恶意的记录里,一条都没能提炼出技能来,全被拒绝了。但换成委婉包装的版本,同样是65条记录,SDK模式提炼出了7条(占10.8%),文档模式提炼出了27条(占41.5%)。这个对比恰恰说明了包装的威力:同样的恶意动作,换个说法,能不能过关差别巨大。
研究团队还专门做了一个"元数据消融实验",把技能拆解成不同的展示形式分别测试LLM裁判的反应:只看代码本身、只看名字加文档说明、只看名字、看完整的名字加文档加代码。结果发现一个挺反直觉的现象:当裁判只看代码内容的时候,检出率反而比较高(SkillX是36.7%),但一旦把生成的技能名字和文档说明也摆出来,检出率反而降到10.0%。
这说明什么?说明这个裁判系统很大程度上是被表面的"包装说明"带偏了判断,而不是真正深入分析代码逻辑本身在做什么。这就像一份体检报告,你光看各项指标数值,可能会觉得有点异常;但如果报告封面写着"常规年检,一切良好",大部分人扫一眼封面就直接把报告归档了,压根不会细看里面的数字。命名和摘要,某种程度上成了绕过深度审查的"通行证"。
攻击生效之后,还会伤及无辜
前面说的都是"精准打击"的部分,但研究团队还发现了另一个更让人意外的现象:这些带毒技能不光会在目标任务上触发,还会"误伤"完全无关的正常任务。
在SkillX的路由实验里,研究人员构建了一个包含356个技能的技能库(305个带毒,51个干净),混入32个带攻击性质的任务和15个完全正常的任务一起测试。结果攻击性任务的触发率是56.2%,但那15个正常任务里,居然也有20.0%被路由到了带毒技能,触发了违规行为。
在A2S的实验里,这个"误伤率"更夸张。研究人员构建了一个30个技能的检索库,用65个带攻击性质的任务查询去测,触发率高达89.2%。但当他们用完全无关的干净任务去测试检索环节的时候,发现95.0%的干净任务查询,居然都能检索到一个带毒的技能。
这个数字意味着什么?意味着这些包装得体面的技能,它们的"技能说明"写得太宽泛、太通用了,导致路由系统觉得它跟很多任务都"相关",于是频繁把它推荐出来。对于那种目标明确、只想精准打击特定场景的攻击者来说,这种广撒网式的误触发其实是噪音,容易引起防御方的警觉。但如果攻击者的目标本来就是尽可能扩大危害范围,比如持续窃取数据或者埋一个到处都能触发的后门,这种"到处开花"反而正中下怀,攻击的杀伤半径被动地扩大了。
这就好比一个原本只想给张三下毒的人,结果他配的毒药味道太"百搭",厨房里谁做菜都顺手拿它当调料放了一勺,最后全公司食堂的人都中招了。如果技能的描述写得足够精确、场景足够局限,这种误伤本可以避免,但恰恰是提炼过程为了让技能"更通用、更好复用"而做的抽象概化,让它的适用边界变得模糊,防不胜防。
防御这件事,没那么简单
论文里专门做了一组防御实验,而且得出的结论相当值得玩味:简单粗暴地叠加防御手段,有时候反而会更糟。
研究团队测试了三种防御方式。D1是提取阶段的LLM安全审查,在技能进入技能库之前先过一道审查关,把被判定为可疑的技能直接拦下。D2是运行时监控,用一份固定的、基于正则表达式的风险动作特征清单,去匹配AI生成的具体操作代码,一旦命中就拦截。D3是把这两种防御叠加起来一起用。
在SkillX上,D1能拦下9.2%的带毒技能,把整体触发率从原来的水平压到6.7%。而D2表现更抢眼,在15个任务的样本里,把所有触发全部拦下,触发率降到0.0%。
按理说,把两道防线叠在一起应该更保险吧?但实验结果恰恰相反,D3(两者叠加)的触发率反而回升到13.3%,比单独用D2还差。
研究团队分析出的原因挺耐人寻味:D1把一部分技能从库里筛掉之后,同一个任务的路由系统,只能从剩下的技能里挑一个"备选方案"出来执行。而这个备选技能生成的具体操作代码,恰好没有落在D2那份固定特征清单的匹配范围内,于是就这么滑了过去。两道防线原本各自为战时都表现不错,叠加之后却因为上游的筛选行为,悄悄改变了下游需要面对的"输入分布",导致原本精心调校好的监控规则失效了。
研究团队把这个现象叫做"防御协同假设"(defense coordination hypothesis):层层叠加的防御措施之间可能会互相干扰,不能简单地假设每一层防御的效果是彼此独立、互不影响的,得把它们放在一起联合设计,而不是想当然地垒起来就完事。
这就好比一个仓库有两道安检,第一道是人工目测,第二道是金属探测门。原本各自单独运行时都挺管用。但当人工目测这道关卡开始严格拦截可疑包裹之后,那些没被拦下的包裹,恰恰是因为它们本身"看起来最正常",而这批"看起来最正常"的包裹里,恰好混进了一批用非金属材料伪装的违禁品,金属探测门自然探测不出来。两道关卡叠加,反而漏掉了原本单独用金属探测门时能抓到的一部分东西,因为经过人工筛选后剩下的样本特征变了。
在A2S系统上,团队还发现最初那份为SkillX量身定制的16条监控规则,搬到A2S上几乎失效,触发率仍然高达85.0%。原因是A2S把恶意动作的措辞洗得更彻底,原本写着"send_email到外部"这种直白表达,在A2S里变成了"发送到监控服务"这类中性说法。研究人员不得不针对这套新的委婉措辞,扩充出38条新规则(总共54条),才把触发率压到20.0%,叠加审查后进一步压到5.0%。
这里有个诚实的自我批评值得一提:这套扩充后的规则,是研究人员观察到失败案例之后,针对性补上去的,并不是提前预判出来的防御方案。这说明什么?说明现有的这类基于关键词、正则表达式的防御手段,天生就是滞后的、被动打补丁式的,攻击者只要换个说法,防御方就得重新踩坑、重新总结、重新补规则,永远慢半拍。
一个补充实验:从"路由级"走到"代码级"
前面提到的所有攻击成功率,严格来说都是"路由级"的衡量,也就是只看某个带毒技能有没有被系统选中、有没有满足研究人员设定的"违规判定标准",并没有真的拿这段代码去外部服务上跑一遍,看它是不是真的执行成功了。
为了给这套评估体系加一层更接地气的验证,研究团队又做了一个补充实验:挑出4个带毒任务和2个干净的对照任务,把对应的技能真正注入到AppWorld(一个模拟应用环境的评测平台)的提示词里,让模型真的生成一段Python代码,然后去解析这段代码,看里面有没有出现事先标记好的、危险的API调用模式。
结果是,4个带毒任务里有75.0%的代码命中了危险API模式,2个干净任务的命中率是0.0%。这个小实验虽然样本量不大,但它把"路由层面的选中"和"真正生成出来的代码行为"这两件事串了起来,算是给整套结论多上了一道保险。
数据全貌
把整篇论文最核心的几组数字放在一起看会更直观。
在提取阶段的检测规避效果上,SkillX的原始轨迹检出率是98.5%,提炼后降到11.4%,规避率达到88.6%;A2S文档模式的原始检出率是100.0%,提炼后降到44.4%;A2S SDK模式原始检出率同样是100.0%,提炼后降到28.6%。
在下游触发效果上,SkillX的攻击任务触发率是56.2%,同时干净任务的误触发率是20.0%;A2S的攻击任务触发率高达89.2%,干净任务的误触发(检索)率达到95.0%。
在持久性测试上,删除原始记录之后,技能路径下的攻击依然有80.0%能继续触发。
在防御效果上,SkillX的运行时监控单独使用时把触发率压到0.0%,但叠加提取审查之后反而回升到13.3%;A2S在扩充规则并叠加审查之后,能把触发率从85.0%压到5.0%。
写在后面
读完这篇论文,最让我意外的其实不是攻击本身有多精巧,而是这套攻击几乎不需要多高深的技术门槛。攻击者不需要碰技能库、不需要改提取代码、也不需要精确控制路由结果,他唯一要做的,就是往经验数据里塞一条包装得体的记录。剩下的活,全靠AI系统自己"尽职尽责"地帮攻击者完成:提炼、抽象、命名、归档、路由、执行,一条龙服务。
这其实揭示了一个挺讽刺的处境:我们越是把AI系统设计得聪明、越是让它具备自主学习和自我提炼的能力,这套能力本身就越可能被反过来利用。提炼能力越强,漂白效果就越彻底;自主性越高,攻击者需要付出的成本就越低。这不是某个具体实现的bug,而是这类"自我进化"范式本身自带的一个结构性矛盾。
论文里那个"防御叠加反而更差"的发现,我反复读了好几遍。这个结论提醒我们,安全防御从来不是简单的加法,层层设卡不等于层层更安全,有时候上一层的过滤行为会悄悄改变下一层要面对的局面,这种系统性思维在安全设计里比想象中重要得多。
技能提炼出来之后,它到底该不该带着"我是从哪条记录来的"这个身份标签,一路跟着它走到被删除的那一刻?这大概是这篇论文留给整个行业最实际的一个问题。
Q&A
Q1:SkillJack攻击具体是怎么运作的?
A:攻击者往AI能学习的经验数据库里塞入一条精心包装的带毒记录,任务描述看起来完全正常,但保留了一个有害操作。等AI系统自动把这些经验提炼成可复用的"技能"并存进技能库后,这个带毒技能就变成了一个独立、持久、可被后续任务调用的攻击载体,攻击者全程不需要碰技能库本身。
Q2:删除原始的带毒记录能不能清除这种攻击?
A:不能完全清除。研究团队做了实验,把产生带毒技能的原始经验记录全部删除后,重新测试同样的任务,结果80.0%原本能触发的攻击依然照常触发。因为技能一旦被提炼生成,就作为独立的持久化产物存放在技能库里,和原始记录是分开管理的,删源头不等于删技能。
Q3:为什么把恶意记录提炼成技能之后反而更难被检测出来?
A:因为AI的提炼过程会把原始记录里那些直白、露骨的恶意措辞,自动改写成看起来正常的功能性描述,比如把"窃取密码发送到外部"包装成"备份凭证到服务"。实验数据显示,原始带毒轨迹的检出率高达98.5%,但提炼成技能后检出率骤降到11.4%,提炼过程本身就成了一道天然的"洗白"工序。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.