SkillHarm:基于自动构建的生命周期感知技能攻击 SkillHarm: Lifecycle-Aware Skill-Based Attacks via Automated Construction
首个覆盖技能使用生命周期的agent安全基准,揭示当前AI代理对技能攻击高度脆弱
前置知识
Agent Skills(技能包)
技能包是AI代理执行复杂任务时使用的可重用软件包,包含自然语言指令(如SKILL.md)、参考文档和可执行脚本。与外部网页或工具输出不同,代理被期望遵循技能的指令、参考技能的文档并执行技能的脚本,这使得技能在代理工作流中占据特权地位,但也使其成为脆弱的攻击面。攻击者可以在技能文件中嵌入恶意内容,这些内容会被代理解释为合法的工作流指导并静默执行。
理解技能包的特性是理解本文攻击场景的基础,因为本文的核心发现就是代理对技能内容的隐性信任使其成为独特的攻击向量。
Prompt Injection(提示注入)
提示注入是一种对抗性攻击技术,攻击者通过在输入中嵌入恶意指令,使语言模型执行非预期的操作。传统的提示注入通常发生在用户对话、网页内容或工具输出中。在技能攻击的上下文中,攻击者将恶意指令嵌入到技能文档(如SKILL.md)或脚本中,当代理加载并遵循这些技能时,恶意指令就会被执行。攻击者通常使用间接注入技术,即将恶意意图隐藏在看似合法的上下文中。
技能攻击是提示注入在agent技能场景中的特殊形式,本文研究发现现有针对自然语言提示注入的防御无法有效应对基于脚本的技能攻击。
Attack Success Rate (ASR) 和 Conditional ASR (cASR)
ASR衡量攻击成功率,即攻击的预期有害端状态在代理执行后是否实现,通过检查环境中的具体证据(如特定文件是否存在)来判定。cASR是条件攻击成功率,即只统计那些代理真正访问了目标恶意文件的样本的攻击成功率。ASR和cASR的差异揭示了一个潜在风险:很多表面上的攻击失败并非因为代理抵抗了攻击,而是因为代理从未访问毒化的文件。如果代理改进技能使用能力,cASR可能成为实际的风险水平。
这两个指标是本文实验评估的核心,cASR的引入揭示了Agent安全的盲点,即使ASR较低也不能说明Agent安全。
Natural Language Harness(自然语言驾驭)
自然语言驾驭是一种自动化的AI agent编程范式,开发者用自然语言描述任务目标、约束条件、可用工具和验收标准,而不是编写硬编码的工作流。一个编码代理接收这个自然语言规范,在容器化环境中执行该规范,生成输出并可能自我迭代改进。在本文的AutoSkillHarm管道中,每个构建阶段都有自己的自然语言驾驭,编码代理根据驾驭中的约束和目标自动生成攻击载荷。
这是本文实现大规模、多样化攻击构建的技术基础,自然语言驾驭使构建管道具有足够的灵活性来处理技能、风险类型和攻击场景的高度异构性。
atexit callback(退出回调)
atexit回调是一种程序机制,允许注册一个函数在程序正常退出时自动执行。在本文的Self-Mutating Poisoning场景中,设计师在共享技能的脚本中添加atexit回调。当任务A正常完成且脚本退出时,回调触发并静默重写技能包中的兄弟文件(通常是SKILL.md或另一个脚本)。由于只有技能文件在会话间持久存在,后续任务B加载修改后的技能时,注入的内容会在任务B重用技能时激活。
这是实现跨会话攻击的关键技术,atexit机制使得初始执行看起来无害,但为后续会话埋下隐患,这种时间解耦使攻击更难被检测和拒绝。
研究动机
现有的技能攻击基准存在两个关键局限。第一,它们将技能使用抽象为单一任务执行:毒化技能被加载,代理运行一个任务,并在该运行内判断攻击成功。这遗漏了已安装技能的生命周期,技能可以在任务间持久存在、跨会话重用,并在执行期间被修改。例如,一个技能在首次使用时可能看起来完全正常,但悄然修改自身的持久内容,使得该技能在后续重用时执行恶意操作。第二,现有评估通常通过特定于基准的风险列表来覆盖危害,而不是对技能相关风险的系统性说明。这使得现有研究无法全面揭示代理在技能重用或不同攻击结果下是否仍然安全。2026年的一项实证研究发现,公开可用的技能中有26.1%包含至少一个漏洞,凸显了这个问题的紧迫性。
本文的目标是本文旨在构建一个全面评估agent对基于技能的攻击脆弱性的基准,覆盖技能使用的完整生命周期。具体目标包括:(1)评估两种攻击场景:固定载荷毒化(FPP)和自变异毒化(SMP),分别捕获单次会话直接妥协和跨会话延迟妥协;(2)定义基于代理工作流组件的系统性风险分类,包括数据管道、系统环境和代理自主性;(3)构建大规模、多样化的攻击样本,涵盖71个技能和12种风险类型;(4)揭示当前代理的安全盲点,特别是条件攻击成功率(cASR)暴露的潜在风险,以及现有防御机制的不足。
与已有工作不同的是,本文的独特切入角度是同时关注两个维度:技能使用的时间维度(生命周期)和攻击影响的空间维度(工作流组件)。现有工作要么只评估单次会话攻击,要么只列举有限的风险类型。本文的FPP和SMP场景首次系统性地建模了技能的持久性和可重用性如何被攻击者利用。此外,本文的风险分类基于代理工作流中被破坏的组件(处理任务数据、在本地环境执行代码、在委托权限下做出决策),而不是从其他领域(如MITRE ATT&CK)简单继承,这使得风险覆盖更具系统性和针对性。最后,本文使用自然语言驱动的编码代理进行自动化攻击构建,避免了现有方法的局限性(手动设计昂贵狭窄,模板方法缺乏多样性,受害者在环方法成本高且可能过拟合)。
核心方法
SkillHarm基准包含两个攻击场景和12种风险类型,通过AutoSkillHarm自动化管道构建。整体思路是:先理解技能使用的工作流和生命周期,识别攻击者可以利用的攻击面,然后系统性地生成覆盖这些攻击面的多样化攻击样本。FPP场景捕获单次会话直接攻击:攻击者发布一个技能包,其中包含固定的恶意载荷,当代理在任务执行中加载该技能时,恶意载荷在相同会话中直接触发有害结果。SMP场景捕获跨会话延迟攻击:技能包含变异钩子而非立即有害的载荷,首次会话执行看起来无害,但静默修改持久技能内容,有害结果只有在后续会话重用被修改的技能包时才实现。风险分类按照代理工作流中被破坏的组件组织:数据管道利用(针对任务工件、中间数据、敏感用户数据或面向用户输出的机密性或完整性)、系统环境利用(针对技能暴露的执行基底,如本地文件、权限和系统配置)、代理自主性利用(针对代理的委托权限,包括其目标、审计痕迹或代表攻击者行动的能力)。
本文的核心创新点是系统性建模技能使用的生命周期,将攻击分为FPP和SMP两种场景。FPP攻击的恶意载荷在安装时存在并保持固定,任何到达毒化指令、参考或脚本的会话都可以在同一会话中实现有害结果。SMP攻击首次执行时看起来无害,但通过atexit回调等机制修改持久技能内容,使得后续会话重用技能时触发有害行为。这种时间解耦暴露了单次会话评估无法观察到的失败模式。另一个关键创新是使用自然语言驾驭驱动的编码代理进行自动化攻击构建。每个构建阶段都有自己的自然语言驾驭,指定阶段目标、输入工件、可用工具、约束、所需输出和审查标准。编码代理在容器化环境中执行这个规范,生成传递到下一阶段的工件。这使得SkillHarm在不同场景和风险类型之间共享构建过程,同时通过驾驭指令表达场景和风险特定的选择,而不是通过单独的硬编码管道。
方法步骤详情
AutoSkillHarm管道包含三个主要步骤。第一步是攻击目标选择:对于FPP,目标是注入点(T, f),其中T是用户任务,f是代理在完成T时可能读取、参考或执行的技能文件。对于每对(T, f),计算暴露率rT,f,定义为在T的良性基准轨迹中代理到达f的比例。保留rT,f ≥0.30的文件,每个任务最多保留3个文档文件和3个脚本。对于SMP,选择重用至少一个共享技能的任务对(TA, TB)。TA是常规使用任务,可以在其中触发变异钩子,而后续TB重用修改后的技能并可能导致安全相关结果。第二步是攻击设计:使用Claude Code (Opus 4.7)作为主要设计师生成攻击候选。设计师首先探索目标技能包以识别可行的攻击向量,然后将抽象风险类型实例化为具体的对抗目标,接着通过修改技能文件同时保持与技能正常工作流的合理连接来实现载荷,最后编写确定性评估器检查有害端状态是否实现。对于SMP,载荷通过延迟变异机制实例化:在TA中使用的辅助脚本中添加退出触发回调,当脚本退出时重写兄弟技能文件。第三步是质量过滤:运行端到端执行并记录完整轨迹,使用单独的审查代理进行轨迹基础分析,检查目标端状态是否环境可行、载荷是否合理、评估器是否忠实地捕获预期的有害端状态。过滤后保留70%的生成候选,最终SkillHarm包含879个样本。
技术新颖性
本文的技术新颖性体现在三个方面。第一,生命周期感知的攻击场景设计,特别是SMP场景,首次系统性地建模了技能在会话间的持久性和可重用性如何被攻击者利用。这暴露了单次会话评估无法观察到的失败模式。第二,基于代理工作流组件的风险分类,按照数据管道、系统环境和代理自主性组织12种风险类型,使风险覆盖更具系统性和针对性。第三,自然语言驾驭驱动的自动化攻击构建,避免了现有方法的局限性:手动设计昂贵且范围狭窄,模板或种子变异管道攻击多样性有限,固定LLM工作流在异构设置中脆弱,受害者在环优化成本高且可能过拟合到特定受害者。自然语言驾驭使构建管道具有足够的灵活性来处理技能、风险类型和攻击场景的高度异构性,同时每个样本都是独立设计的,避免了样本间共享相同攻击逻辑的问题。
实验结果
实验结果显示当前前沿代理对基于技能的攻击高度脆弱。在FPP场景中,攻击成功率(ASR)最高达到86.3%(Codex GPT-5.4),Claude Code Opus 4.7最低为27.4%。在SMP场景中,ASR最高达到69.3%(Codex GPT-5.4),尽管SMP要求持久的变异和跨会话重用。Codex代理在两种场景中都最脆弱,而Claude Code Opus 4.7在评估配置中ASR最低。ASR和cASR之间的差距揭示了一个关键发现:许多表面上的攻击失败并非因为代理抵抗了攻击,而是因为代理从未访问毒化文件。一旦以参与为条件,攻击成功率急剧上升,Claude Opus 4.7在SMP中最多上升32.1%。这暴露了一个重要的潜在风险:改进代理使用技能的能力可能同时增加实际攻击成功率,除非伴随更强的安全机制。只有Claude系列代理在遇到可疑技能内容时表现出明显的显式拒绝行为,与其较低的ASR一致。然而,ARR在SMP中显著下降,例如Claude Code Sonnet 4.6从FPP中的25.3%下降到SMP中的2.1%。这表明准备性操作和有害结果之间的时间解耦降低了恶意意图的可见性,使SMP攻击更难被代理拒绝。防御分析显示Skill Scanner在最强配置下检测到55.6%的FPP注入和68.8%的SMP注入,Agent Scan分别检测到21.5%和5.2%。防御性系统提示(DSP)在一些配置中降低了ASR,但在代理间不可靠,几乎所有配置在两种攻击场景中仍保持70%以上的ASR。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| Fixed-Payload Poisoning (FPP) | Attack Success Rate (ASR) | 86.3% (Codex GPT-5.4) | N/A | 首次系统性评估 |
| Self-Mutating Poisoning (SMP) | Attack Success Rate (ASR) | 69.3% (Codex GPT-5.4) | N/A | 首次跨会话攻击评估 |
| FPP Conditional ASR | cASR | 90.7% (Codex GPT-5.4) | ASR: 86.3% | +4.4% (条件攻击成功率) |
| SMP Conditional ASR | cASR | 77.4% (Codex GPT-5.4) | ASR: 69.3% | +8.1% (条件攻击成功率) |
| Skill Scanner Detection | Detection Rate | 55.6% (FPP), 68.8% (SMP) with Opus 4.7 backbone | 21.5% (FPP), 5.2% (SMP) with Agent Scan | 34.1% (FPP), 63.6% (SMP) vs Agent Scan |
| Script-based payload FPP | ASR | 88.0% average across victims | 46.9% (Document-based) | +41.1% |
局限与改进
作者承认的局限性包括:威胁模型假设攻击者作为技能发布者,控制技能包内的所有文件,但在安装后没有对特定受害者环境的访问。这意味着攻击不能观察受害者的执行、在线适应载荷,或知道确切的后提示、文件或系统配置。每个载荷必须是对技能正常工作流的可重用修改。作者还指出SkillHarm侧重于攻击多样性而非原始样本数量,虽然样本数量(879)超过大多数先前工作,但某些风险类型(如数据外泄)可能需要更多样本才能充分分析。本文自己的观察包括:实验主要评估了四个代表性代理框架(Claude Code、Codex、Gemini CLI、OpenCode),但这些框架并非所有现有代理的完整代表;质量过滤阶段在两个代表性受害代理上运行端到端执行,但这可能无法完全揭示在所有代理上的行为;确定性评估器的设计需要仔细确保其忠实性,避免误报或漏报。
独立分析的弱点
第一个弱点是威胁模型的局限性。本文假设攻击者作为技能发布者,但无法在安装后访问受害者环境。这意味着攻击必须是对技能正常工作流的可重用修改,不能针对特定受害者的具体环境、文件或提示进行定制。改进方向是扩展威胁模型,考虑攻击者可以通过遥测、分析公开数据或与其他受害者互动来收集环境信息,从而设计更针对性的攻击。第二个弱点是质量过滤的代理代表性不足。质量过滤仅在Claude Code Sonnet 4.6和Codex GPT-5.4上运行端到端执行,这可能无法完全揭示在所有代理上的行为,一些候选可能在其他代理上表现不同。改进方向是在更多样化的代理集合上运行质量过滤,或者开发不依赖于特定代理执行的通用质量评估机制。第三个弱点是评估指标的局限。虽然ASR、cASR和ARR提供了攻击效果的多维度视角,但它们不衡量攻击的隐蔽性(即在真实使用中是否会被人类用户或系统管理员检测到)和持久性(即攻击效果是否持续)。改进方向是增加隐蔽性和持久性的评估指标,或进行用户研究来评估攻击在实际部署中的可检测性。第四个弱点是防御评估的范围有限。本文仅评估了技能扫描器和防御性系统提示两种防御方法,但实际系统中可能部署更复杂的防御机制,如运行时守护进程、沙箱隔离、权限控制等。改进方向是评估更多样化的防御机制,或与安全研究人员合作测试SkillHarm在实际安全系统中的检测率。
未来方向
作者提出的未来研究方向包括:开发更有效的防御机制,可能需要超越提示级别的干预,如运行时守护进程或安全后训练,使代理能够识别恶意意图;扩展SkillHarm以覆盖更多技能类型、风险类型和攻击场景,如多技能联合攻击、对抗性技能推荐或技能供应链攻击;研究技能重用的模式,以更好地理解真实世界中的技能使用模式,从而使基准更接近实际部署;开发自动化工具来扫描和验证技能包的安全性,类似软件依赖的漏洞扫描器。基于本文成果可延伸的方向包括:研究跨会话攻击的时间动态,特别是攻击者如何优化SMP中变异钩子的时机和条件以最大化成功率和最小化检测;分析不同载荷实现形式(如文档vs脚本、原地修改vs路由注入)的有效性和隐蔽性,以指导防御优先级;研究技能生态系统的经济学,如攻击者发布毒化技能的动机和激励机制;开发技能使用的审计和监控机制,以检测可疑的技能行为;研究技能之间的依赖关系如何影响攻击面,攻击者是否可以通过依赖链传播恶意内容;探索用户教育和 awareness 如何作为防御的一部分,帮助用户识别和避免可疑的技能。
复现评估
本文完全开源,项目页面(https://osu-nlp-group.github.io/SkillHarm)提供了完整的实验设置、数据和代码。GitHub仓库(https://github.com/OSU-NLP-Group/SkillHarm)包含AutoSkillHarm管道的实现、所有879个攻击样本的Docker环境、 poisoned技能文件和确定性攻击成功评估器。数据集也发布在HuggingFace(https://huggingface.co/datasets/osunlp/SkillHarm),便于社区访问和使用。每个攻击样本都是自包含的评估单元,包含Docker环境、用户任务或任务对、毒化技能文件和确定性攻击成功评估器。实验在六个模型-harness配置上运行,所有配置的详细信息在论文中提供。由于样本数量较多(879),完整复现实验需要相当的计算资源,但论文也提供了部分结果的详细分解(如按风险类型和载荷实现形式的ASR),便于研究者进行针对性的验证。论文附录详细描述了基准构建细节(目标选择、攻击设计、质量过滤)、实验设置(评估指标、防御方法)和附加分析(精炼迭代、Harness-模型解耦、设计师代理消融),这些信息足以支持研究者复现关键结果或扩展基准。总体而言,本文的复现难度中等,主要挑战在于计算资源需求,但开源的代码和数据以及详细的文档使复现变得可行。
论文图表
该表格提供了SkillHarm基准的总体统计信息:57个用户任务、71个技能、12种风险类型、879个攻击样本。其中879个样本分为687个Fixed-Payload Poisoning样本和192个Self-Mutating Poisoning样本。这个表格给出了基准规模的总体概览,展示SkillHarm覆盖了大量用户任务和技能,确保评估的多样性和代表性。
这个表格对理解论文的规模和覆盖范围至关重要。读者可以看到SkillHarm包含57个用户任务和71个技能,这意味着攻击样本覆盖了广泛的技能类型和使用场景。879个攻击样本(687个FPP和192个SMP)的数量足够进行统计分析,同时每个样本都是独立设计的,避免了样本间共享相同攻击逻辑的问题。这个表格帮助读者理解SkillHarm的多样性和代表性,这是其相对于基于模板的方法(可能产生大量但攻击逻辑相似的样本)的优势。
该表格报告了两个广泛使用的技能扫描器(Skill Scanner和Agent Scan)在SkillHarm上的检测率。Skill Scanner使用两个骨干模型(GPT-5.5和Opus 4.7)评估,Agent Scan使用自己的API。对于FPP注入,Skill Scanner(GPT-5.5)检测率为21.5%,Skill Scanner(Opus 4.7)为55.6%,Agent Scan为7.4%。对于SMP注入,Skill Scanner(GPT-5.5)检测率为5.2%,Skill Scanner(Opus 4.7)为68.8%,Agent Scan为9.9%。这意味着即使在最强配置下,Skill Scanner也只检测到55.6%的FPP注入和68.8%的SMP注入,表明上下文相关的注入经常绕过检测。
这个表格对理解当前防御机制的局限性至关重要。它展示了即使是最强的技能扫描器配置也遗漏了大量注入攻击,表明技能扫描器无法可靠地检测上下文相关的载荷。特别是Agent Scan的检测率非常低(FPP为7.4%,SMP为9.9%),显示现有工具的不足。这个表格帮助读者理解为什么需要更有效的防御机制,以及为什么提示级别的干预(如技能扫描器和防御性系统提示)是不够的。
该图展示了Fixed-Payload Poisoning样本按风险类型和载荷实现的分布。左侧(a)按风险类型显示:Data Pipeline Exploitation(Data Exfiltration 51、Output Manipulation 47、Poisoning 67)、System Environment Exploitation(Privilege Escalation 54、Unauthorized File Mod. 69、Backdoor Injection 55、Denial of Service 55、Malware Deployment 52、System Corruption 45)、Agent Autonomy Exploitation(Anti-Forensics 73、Goal Hijacking 67、Proxy Attack 52)。右侧(b)按实现显示:Script-based(Import New Helper 47、Executable Code 45)、Document-based(Redirect to New Script 168、Plain Text 151、Redirect to New Doc 149、Redirect to New PDF 127)。数据显示样本在12种风险类型和6种载荷实现之间相对均匀分布,确保基准的多样性和代表性。
这个图对理解SkillHarm基准的多样性和分布至关重要。它展示了687个FPP样本如何分布在12种风险类型和6种载荷实现之间。样本在风险类型之间相对均匀分布,确保基准覆盖各种攻击目标。载荷实现方面,Redirect to New Script(168)和Plain Text(151)是最常见的实现,这可能是由于这些实现更容易在各种技能上应用。这个图帮助读者理解基准的覆盖范围和多样性,这是其相对于基于模板的方法(可能生成大量但攻击逻辑相似的样本)的优势。
该图展示了Self-Mutating Poisoning样本按风险类型的分布。Data Pipeline Exploitation包含Data Exfiltration(16)、Output Manipulation(13)、Poisoning(18)。System Environment Exploitation包含Privilege Escalation(15)、Unauthorized File Mod.(19)、Backdoor Injection(18)、Denial of Service(18)、Malware Deployment(16)、System Corruption(17)。Agent Autonomy Exploitation包含Goal Hijacking(19)、Anti-Forensics(15)、Proxy Attack(8)。总共192个SMP样本,每个风险类型8-19个样本。相对于FPP(687个样本),SMP样本较少,这反映了跨会话攻击的构建复杂性更高,以及SkillsBench中共享技能的任务对数量有限。
这个图对理解SkillHarm基准在SMP场景下的覆盖范围至关重要。它展示了192个SMP样本如何在12种风险类型之间分布。相对于FPP(687个样本),SMP样本较少,这反映了跨会话攻击的构建复杂性更高,以及SkillsBench中共享技能的任务对数量有限(12对)。样本在风险类型之间相对均匀分布,确保基准覆盖各种攻击目标。这个图帮助读者理解SMP场景的挑战和局限性,以及为什么需要更多具有共享技能的任务对来扩展SMP评估。