论文学习_MalSkillBench: A Runtime-Verified Benchmark of Malicious Agent Skills

摘要

Claude Code和Gemini CLI等AI编码代理日益通过第三方技能(Skills)实现功能扩展;此类技能通常以Markdown包的形式组织,并集成自然语言指令、可执行脚本及工具权限配置。由于技能兼具可执行代码与面向代理的指令(程序代码与自然语言混合),其引入的软件供应链依赖同时涉及代码安全与提示安全。现有检测工具尚未基于覆盖该混合风险空间的经验证基准真值进行系统评测,因而其有效性仍不明确;仅使用真实环境中的自然分布数据进行评估,则可能产生系统性偏差。

该论文提出 MalSkillBench 是首个经过运行时验证的恶意智能体技能基准。该基准包含 3,944 个带标注的恶意技能,并采用三维分类体系进行组织,覆盖由攻击向量、恶意行为和植入策略构成的108个分类单元。其中,3,214个技能由闭环流水线(生成---验证---反馈)生成。该流水线仅接纳在Docker沙箱中实际触发恶意行为,并通过系统调用监控与LLM裁判联合验证的样本;相应验证反馈用于指导后续样本生成。此外,该基准还收录703个真实环境恶意技能以及4,000个匹配的良性技能。综合分析与评测结果揭示了四项主要发现:

  • 不同攻击类型的可实现性存在显著差异:代码注入(Code Injection,CI)的验证成功率达到94.5%,而提示注入(Promp Iinjection,PI)仅为75.8%;这一差异在后续检测阶段同样存在,提示注入的整体检测性能低于代码注入。
  • 真实环境样本的覆盖范围较为有限,且主要集中于单一加密货币窃取活动:86.6%的恶意行为属于同一类型,81%的样本来自两个账户;仅有少量长尾样本以结构新颖的方式攻击智能体控制平面。
  • 完整基准上的评测结果表明,表现最佳的技能专用检测器对代码注入的召回率达到98.4%,但对提示注入和智能体控制攻击的召回率明显较低,说明其检测能力对攻击类型具有较强依赖性。此外,评测结论对样本分布高度敏感:与使用完整基准相比,仅使用真实环境样本进行评测会使检测器的召回率产生最高66个百分点的变化,并显著改变其相对排名。例如,VirusTotal的排名由接近末位上升至首位。
  • 软件供应链扫描器主要分析技能中的可执行代码,而提示注入防御机制主要检查其自然语言指令。二者均从单一视角识别风险;即使组合使用,也难以判断自然语言指令所声明的任务意图是否与代码实际执行的行为一致。因此,恶意技能检测不仅需要分别分析自然语言指令与可执行代码,还需要联合建模任务意图、指令语义和代码行为之间的一致性。为支持相关研究的复现与后续评估,数据集、代码、基线实现及实验结果均已开源。

1. 引言

AI编码代理(如Claude Code、OpenCode、Cursor和Gemini CLI)能够代表开发者自主读取、编写并执行代码,正在改变传统的软件开发模式。支撑此类自主能力的一项关键机制是技能(Skills):一种可分发的第三方软件构件,通常以SKILL.md为入口,集成自然语言指令可执行脚本工具配置 。当用户请求与某项技能的功能描述在语义上匹配时,代理将加载该 Skill,遵循其中的操作指令,并调用其指定的脚本或工具。从软件依赖关系看,Skill 构成AI编码代理的第三方依赖,其作用类似于Node.js生态中的npm软件包或现代集成开发环境中的扩展,并已作为开放标准被多个主流代理平台采用。与此同时,Skill 生态的规模正在迅速扩大:SkillsMP当前收录超过160万项技能,ClawHub收录超过6.4万项技能;主要平台的日均提交量也在数周内由不足50项增长至500余项。Skill 简介

然而,Skill 生态的快速扩张也为攻击者提供了可利用的安全入口。近期研究表明,主流 Skill 市场中超过26%的技能至少存在一项安全相关缺陷。Snyk 对 ClawHub 平台上的3,984项技能进行分析后,识别出76个经确认的恶意载荷。此外,Antiy CERT 披露了一起有组织的供应链投毒活动:攻击者向该平台上传了1,184项伪装成合法插件的恶意技能。上述安全报告及既有AI代理攻击研究表明,技能的混合结构主要受到两类攻击向量影响:

  • **代码注入(Code Injection,CI)**将可执行载荷嵌入技能脚本或内联代码块;当代理执行相关代码时,载荷可实施数据泄露、凭证窃取或后门植入等恶意操作。
  • **提示注入(Prompt Injection,PI)**则将操纵性指令隐藏在技能的 Markdown 文本中,以改变代理行为、绕过安全约束或重定向任务目标。

这两类攻击均源于既有安全威胁:CI 采用的技术模式与恶意 PyPI 和 npm 软件包中的攻击模式高度一致,PI 则沿用了针对通用大语言模型的越狱与社会工程技术。Skill 同时包含可执行代码与自然语言指令,使上述两类攻击能够分别作用于代码层面指令层面 ,并可能在同一技能中组合实施。由此,技能形成了跨越代码与指令的混合攻击面。从软件供应链视角看,技能是AI代理获取第三方能力的软件依赖,但传统依赖项安全机制主要分析可执行代码,指令级防御则主要检查自然语言内容,二者均难以独立识别代码行为与指令语义之间的关联风险。Skill 带来的安全问题

此类威胁要求建立可靠的检测机制,学术界与工业界已提出多种面向智能体技能的专用检测工具。然而,现有研究仍难以准确判断各类工具的实际有效性,其主要原因在于:

  • 缺乏公开且经验证的基准。 Snyk和安天等机构发布的行业报告仅提供样本数量与行为统计,未公开相应的原始样本。少数公开学术基准的规模同样有限,例如Liu等人收集的真实环境数据集仅包含157个样本。为缓解这一缺口,本文从公开可访问的技能注册表与技能共享平台收集了703个真实环境恶意技能;但即使纳入这些样本,现有样本池的规模仍不足以支持对检测器进行全面评估。
  • 现有数据对攻击面的覆盖范围有限。 在该论文收集的 703 个真实环境样本中,86.3%属于依赖项仿冒攻击,而提示注入样本几乎缺失;Liu等人的数据集也呈现出类似的类别集中现象。使用此类分布偏斜的数据训练或评估检测器,可能使其在占主导地位的攻击类型上取得较高性能,但无法充分验证其对其他攻击类型的泛化能力。
  • 缺乏统一的评测方法。 现有检测工具采用不同的技术范式,包括基于规则的扫描器、结合静态分析与大语言模型的混合检测器、面向大语言模型的提示注入扫描器,以及学术研究提出的检测方法。这些工具通常基于各自的非公开数据集和评价指标进行验证,尚不存在同时覆盖代码注入与提示注入并支持公平比较的共享基准。这种评测体系的碎片化使得不同工具的结果难以直接比较,也难以区分具有跨攻击类型泛化能力的方法与仅适配特定数据集的方法。

这些缺口不仅增加了方法设计与实验实施的难度,还会系统性影响研究社区对技能检测能力的判断。在相关评测中,同一检测器对恶意技能的召回率会随评测子集的变化产生最高66个百分点的差异,甚至使VirusTotal的相对排名由接近末位上升至首位。为降低样本选择对评测结论的影响,该论文构建了MalSkillBench,其主要研究内容包括:

  • 构建大规模、经验证的基准真值。 MalSkillBench 从三个互补来源收录了3,944个恶意技能,包括从公开技能分发与共享平台收集的703个真实环境样本、通过闭环流程构造的3,214个生成样本,以及用于验证工具兼容性的27个补充样本。每个生成样本均由真实AI编码代理加载并运行于部署了strace和inotifywait的Docker沙箱中。仅当运行时观测行为与预设真值标签一致时,该样本才会被纳入数据集。通过将标签声明转化为可观测的运行时行为证据,该验证机制提供了现有数据集普遍缺乏的可靠基准真值。
  • 通过分类体系与攻击知识迁移实现系统化覆盖。 本文构建了由攻击向量、恶意行为和植入策略三个维度组成的分类体系,形成108个分类单元,以系统覆盖预定义的技能攻击空间。生成流程从两类外部知识库中提取真实攻击模式:CI模式来源于恶意软件包数据集,PI模式来源于WildJailbreak等提示注入语料库。随后,各类攻击模式被植入经过筛选的良性技能模板中;这些模板覆盖12个功能类别,用于模拟恶意技能对合法功能的伪装。由此,基准的攻击覆盖范围由分类体系驱动构建,而不再受真实环境中已公开攻击样本分布的限制。
  • 建立统一的基准评测方法。 本文在统一的输入格式、运行配置和评价指标下,使用MalSkillBench对12种检测工具进行评测。该评测框架能够直接比较不同工具对CI与PI攻击向量以及108个分类单元的检测覆盖情况,从而揭示仅使用单一数据集进行评测时可能被掩盖的能力差异。

根据该基准,该论文能够研究现有数据集难以支持的恶意技能检测问题,具体围绕以下四个研究问题展开:

  • RQ1(攻击可实现性):混合攻击空间中的哪些区域能够被可靠实现为可运行的恶意技能,哪些区域的攻击难以成功触发?
  • RQ2(真实环境分析):真实环境恶意技能主要采用哪些攻击模式?除传统软件供应链攻击外,这些样本还呈现出哪些智能体原生威胁?
  • RQ3(技能专用检测):面向 Skill 的专用检测器在代码注入(CI)和提示注入(PI)两类攻击向量上的检测性能如何?
  • RQ4(工具迁移能力):现有软件供应链扫描器和提示注入防御机制能否迁移用于恶意技能检测?

综上上述,该论文的主要贡献如下:

  • 该论文设计了一套闭环"生成---验证---反馈"流水线,将外部知识库中的真实攻击模式迁移至技能格式,并在沙箱中执行生成样本,结合系统调用级行为证据验证其恶意行为是否成功触发。
  • 本文发布了MalSkillBench。据现有公开研究,这是首个面向恶意技能检测的运行时验证基准与统一评测框架。该基准按照"攻击向量---恶意行为---植入策略"三维分类体系划分为108个分类单元,包含3,944个恶意技能和4,000个匹配的良性技能。
  • 本文对恶意技能攻击面进行了系统分析。不同攻击向量的可实现性存在显著差异:CI的验证成功率达到94.5%,而PI仅为75.8%,且这一性能差异在后续检测阶段同样存在。真实环境样本呈现明显的类别集中现象,其中86.3%采用依赖项仿冒攻击;与此同时,少量具有新型架构特征的长尾样本通过操纵会话生命周期、身份状态或指令层级攻击智能体控制平面,而非直接攻击宿主系统。
  • 本文使用MalSkillBench对12种检测工具进行了统一评测。结果表明,现有方法尚不能在不同攻击类型上保持稳定的检测性能:技能专用检测器的最高F1值为88.6%,且其在PI样本上的性能明显下降。仅使用真实环境样本进行评测还会产生系统性偏差,使单个工具的召回率最多变化66.3个百分点;其中,VirusTotal的排名变化尤为显著。现有供应链扫描器与提示注入防御机制的迁移效果同样有限:追求高召回率会引发大量误报,最高可在4,000个良性技能中产生3,979个误报;简单组合两类工具也无法有效整合代码级证据与指令级证据。

2. 研究动机

2.1 现有数据集的局限性

对检测器进行可靠评测,需要使用能够充分表征攻击空间的数据集,但现有数据源尚不能满足这一要求。本文考察了两个直接可用的数据来源:现有公开基准以及从真实环境收集的恶意技能集合。即使合并两类数据,大部分攻击类型仍缺乏足够的实证样本。

Liu等人构建的真实环境数据集包含从两个平台收集的157个标注样本,但其类别分布高度集中。其中,86个样本(55%)来自同一批次上传的商业品牌仿冒技能,例如Spotify、DocuSign、LinkedIn和Apple Music;这些样本采用了近乎相同的攻击模板。其余样本主要涉及远程代码执行与凭证窃取,而纯指令层攻击较为少见。受样本规模与类别集中程度的限制,基于该数据集获得的实验结果不足以验证检测器对更广泛攻击类型的泛化能力。

本文进一步从公开技能注册表与共享平台中收集并整理了703个真实环境恶意技能,但这些样本的分布同样较为集中。其中,86.3%的样本采用依赖项仿冒攻击:此类技能声明需要安装看似可信的前置依赖,通常是openclaw-agent的名称变体,从而诱导代理安装恶意依赖。该集合几乎不包含提示注入攻击,其主要攻击模式是通过伪造依赖项向宿主系统投递恶意软件;针对代理指令层或控制平面的攻击仅占少量长尾样本。

将Liu等人公开的157个样本与本文收集的703个真实环境样本合并,仍不足以弥补上述数据缺口。合并后的数据依然由依赖项仿冒攻击主导,而指令层攻击、代理控制劫持和完全伪装载荷等攻击类型缺乏充分的实证覆盖。因此,后续研究将进一步探讨如何利用既有攻击知识系统构造恶意技能样本,从而扩展基准对攻击空间的覆盖范围。

2.2 已知攻击模式转化为技能

在不同软件生态中,数据外泄、凭证窃取和后门植入等攻击目标通常保持相对稳定,攻击者主要改变的是承载恶意行为的技术载体与触发机制。软件包生态和提示注入研究已经积累了大量经过记录的真实攻击案例。相关分析表明,这些既有攻击模式同样出现在恶意技能中。图1通过两个案例说明这一迁移过程:案例1展示从恶意PyPI软件包迁移而来的代码注入(CI)模式,案例2展示基于钓鱼式社会工程技术构造的提示注入(PI)模式。

案例1:代码注入模式迁移。 如图1所示,恶意PyPI软件包pyconau-funtimessetup.py包含一段反向Shell代码。该代码首先创建TCP套接字并连接攻击者控制的服务器,随后通过os.dup2将标准输入、标准输出和标准错误重定向至该套接字,最后调用/bin/sh -i启动交互式Shell。恶意技能math-calculatorscripts/calculate.py中复用了相同的代码结构和关键API调用序列,仅将连接端点由0.tcp.ngrok.io:36946替换为20.120.229.246:4444。因此,两者的载荷功能与攻击流程基本一致,主要差异在于载荷的承载位置和触发机制:前者通过执行软件包安装脚本触发,后者则在代理加载并执行技能脚本时触发。该迁移模式并非单一案例。在收集的703个真实环境恶意技能中,还发现了与IntelliGraph恶意软件包知识库16所记录模式高度相似的数据外泄程序、凭证收集器和持久化机制。

案例2:提示注入模式迁移。 图1进一步展示了社会工程模式由人类用户向AI代理的目标迁移。传统钓鱼邮件通常以紧急安全更新等理由,诱导用户从指定地址下载并执行恶意程序。恶意技能google-workspace采用了相似的语义结构:其SKILL.mdopenclaw-agent声明为必要的前置依赖,随后指示代理下载受密码保护的压缩文件并运行其中的可执行程序。与传统钓鱼攻击依赖人类执行欺骗性指令不同,该技能将AI代理作为指令执行主体,使代理将恶意操作解释为正常的技能配置流程,进而在宿主系统上执行外部代码。该攻击不依赖软件实现缺陷,而是利用代理对技能指令的信任及其自主调用工具和执行代码的能力。

上述案例说明,恶意 skill 并未产生完全独立于既有安全威胁的新型攻击逻辑,而是将已有攻击模式迁移至代理技能的代码层和指令层。对于CI攻击,恶意软件包中的载荷代码、行为逻辑与攻击链可以迁移至技能脚本,因此,恶意软件包知识库可作为真实CI攻击模式的重要来源,用于缓解真实环境样本多样性不足的问题。对于PI攻击,其社会工程基础与传统钓鱼及提示注入攻击相似,但攻击对象由人类用户转变为能够自主执行指令的AI代理。因此,现有提示注入语料库可用于提取PI攻击模式,并根据技能的代理介导执行机制将其适配至技能场景。综合利用恶意软件包知识库与提示注入语料库,可以系统扩展基准对CI和PI攻击类型的覆盖范围。

3. 研究内容

图2概述了 MalSkillBench 的整体框架,包括统一攻击知识库、生成代理、验证代理和基准数据集四个组成部分。首先,统一攻击知识库汇总代码仓库、提示注入案例、威胁报告和真实环境样本等多源攻击知识,并通过数据筛选与分类体系构建形成结构化攻击空间。随后,生成代理依次执行攻击知识检索、良性模板选择和技能样本合成,生成包含SKILL.md、脚本及相关资源文件的候选恶意技能。验证代理在隔离沙箱中执行候选样本并收集运行轨迹,依次通过证据匹配与行为验证判断其预期恶意行为是否实际触发。未通过验证的样本及其结构化反馈将被返回至生成代理,以指导后续迭代;通过验证的生成样本则与真实环境恶意技能共同构成最终基准数据集。该基准进一步支持攻击生成、真实环境分析、技能检测和工具迁移四项研究任务。

3.1 攻击分类体系与知识库

智能体技能通常以目录形式组织,其中包含SKILL.md文件、可执行脚本,以及可选的参考文档和资源文件。SKILL.md由YAML前置元数据与Markdown指令正文构成。智能体按照三个层次处理技能内容:会话启动时解析YAML前置元数据;当用户请求与技能描述匹配时,加载Markdown正文作为任务执行指南;当指令触发脚本或工具调用时,执行相应代码。上述过程构成了智能体技能的基本执行机制。不同处理层次对应不同的安全风险。YAML前置元数据可能被用于身份伪装或权限滥用,Markdown正文可能包含提示注入指令,可执行脚本则可能承载代码注入载荷。该论文重点分析与运行时行为直接相关的指令层和代码层,同时考虑两类攻击的跨层组合。

|----|---------|--------------------------------------|-----|
| ID | 恶意行为 | 描述 | 类型 |
| 1 | 数据外泄 | 扫描文件或数据,并将其发送至外部端点 | 传统 |
| 2 | 凭证窃取 | 窃取API密钥、SSH密钥、密码及环境变量 | 传统 |
| 3 | 远程代码执行 | 下载并执行远程代码(一次性执行) | 传统 |
| 4 | 恶意软件投递 | 下载、安装并运行恶意二进制程序 | 传统 |
| 5 | 持久化 | 写入cron.bashrcsystemd配置以维持持久化 | 传统 |
| 6 | 反向Shell | 建立连接至攻击者的反向Shell | 传统 |
| 7 | 勒索软件 | 加密用户文件并索取赎金 | 传统 |
| 8 | 资源滥用 | 实施加密货币挖矿、DDoS攻击或Fork炸弹攻击 | 传统 |
| 9 | 权限提升 | 执行chmod 4755、滥用sudo或实施容器逃逸 | 传统 |
| 10 | 角色劫持 | 通过角色设定注入篡改智能体身份 | 智能体 |
| 11 | 安全机制绕过 | 指示智能体忽略安全规则 | 智能体 |
| 12 | 指令覆盖 | 注入"忽略此前指令"类载荷 | 智能体 |
| 13 | 系统提示词泄露 | 诱导智能体泄露其系统提示词 | 智能体 |
| 14 | 目标劫持 | 隐蔽地重定向智能体的任务目标 | 智能体 |
| 15 | 内容操纵 | 向智能体输出中注入带有偏见或虚假的内容 | 智能体 |

基于技能的组成结构与执行机制,该论文定义了15类恶意行为。其中,代码层恶意行为(B1---B9)依据现有软件供应链恶意软件分类体系归纳,涵盖数据外泄、凭证窃取、远程代码执行、恶意软件投递、持久化、反向Shell、勒索软件、资源滥用和权限提升;智能体控制行为(B10---B15)依据近期提示注入研究归纳,包括角色劫持、安全机制绕过、指令覆盖、系统提示词泄露、目标劫持和内容操纵。为检验该分类体系的覆盖范围,该论文将上述类别与 IntelliGraph 恶意软件包样本、现有提示注入语料库及收集的真实环境恶意技能进行人工交叉核验,未发现明显缺失的高频恶意行为类别。

定义1 技能: 技能是以SKILL.md为核心的可分发软件构件,由Markdown文档和可执行脚本集合组成。其中,SKILL.md用于描述技能功能并提供自然语言操作指令,可执行脚本用于实现指令调用的具体功能。技能还可以包含参考文档、配置文件及其他资源,但这些内容不属于本文形式化分析的核心对象。该论文从攻击向量恶意行为植入策略三个相互关联的维度描述技能攻击空间。其中,攻击向量表示恶意载荷作用的技能层级,恶意行为表示攻击产生的安全影响,植入策略表示恶意内容在技能中的具体承载方式。三个维度共同确定一个攻击单元,但不同攻击向量仅能与其适用的恶意行为和植入策略组合。

  • 攻击向量: 该论文区分代码注入(CI)、提示注入(PI)和混合攻击(MIXED)三类攻击向量。代码注入将恶意可执行代码植入技能脚本,或者嵌入SKILL.md的内联代码块中。当代理执行相应脚本或代码块时,恶意载荷被触发。提示注入将恶意或对抗性指令植入SKILL.md的自然语言内容中,利用代理对技能指令的解析与执行机制改变其预期行为。混合攻击将完整攻击链拆分至指令层和代码层。指令层负责引导代理生成、下载或配置中间制品,代码层则使用该制品完成后续恶意操作。任一层级均可不单独呈现完整的恶意意图,只有当代理遵循相关指令并执行配套脚本时,完整攻击链才会被触发。
  • **恶意行为:**表1列出了15类恶意行为。其中,B1---B9属于代码层恶意行为,包括数据外泄、凭证窃取、远程代码执行、恶意软件投递、持久化、反向Shell、勒索软件、资源滥用和权限提升。这些行为既可以由CI载荷直接实施,也可以由PI指令诱导代理调用工具或执行代码来实施。MIXED同样适用于B1---B9,但其攻击过程需要指令层与代码层协同完成。B10---B15属于智能体控制行为,包括角色劫持、安全机制绕过、指令覆盖、系统提示词泄露、目标劫持和内容操纵。这些行为直接作用于代理的身份、指令遵循、安全约束、系统提示词、任务目标或输出内容,因此仅适用于PI。综上上述,CI与MIXED对应B1---B9,PI则可以对应B1---B15。
  • 植入策略: 植入策略描述恶意载荷在技能内部的位置、组织形式及触发方式。不同攻击向量分别对应代码级、自然语言级和跨层植入策略。代码注入策略。 CI包含新建脚本、函数追加、函数内注入和内联代码块四种策略。新建脚本是指在scripts/目录中创建独立的恶意脚本;函数追加是指将包含恶意载荷的新函数添加至良性脚本;函数内注入是指将恶意代码插入已有函数;内联代码块是指将可执行代码嵌入SKILL.md的代码块中。提示注入策略。 PI包含完全伪装、局部注入和隐写注入三种策略。完全伪装是指使用整体技能功能掩盖其恶意目的;局部注入是指仅在一至三个句子中植入恶意指令,其余内容保持良性;隐写注入是指通过HTML注释、零宽字符或同形字符等隐蔽文本通道承载恶意内容。混合攻击策略。 MIXED包含下载并执行、配置并加载以及获取并运行三种策略。在下载并执行策略中,SKILL.md指示代理下载外部制品,配套脚本负责执行该制品;在配置并加载策略中,SKILL.md指示代理生成或修改配置文件,脚本读取该配置并触发恶意行为;在获取并运行策略中,SKILL.md指示代理获取外部内容,脚本随后加载并运行该内容。若该策略明确要求无文件执行,则应进一步说明外部内容在内存中完成加载与运行。

定义2 恶意技能: 恶意技能由五个要素共同描述:技能本体、攻击向量、恶意行为、植入策略和预期可观测行为集合。其中,技能本体是包含SKILL.md及相关可执行脚本的技能制品;攻击向量用于标识攻击属于代码注入、提示注入还是混合攻击;恶意行为用于描述攻击试图产生的安全影响;植入策略用于说明恶意载荷在技能中的具体承载方式;预期可观测行为集合则记录样本成功触发后应当出现的运行时行为,并作为验证过程中判定样本标签是否成立的真值依据。只有当实际观测行为与预期行为相匹配时,该技能才被确认为经过运行时验证的恶意技能。

**定义3 攻击覆盖矩阵:**攻击覆盖矩阵由攻击向量、恶意行为和植入策略的所有有效组合构成。一个组合仅在恶意行为和植入策略均适用于相应攻击向量时,才被视为有效分类单元并纳入基准。对于代码注入,9类代码层恶意行为分别与4种代码植入策略组合,共形成36个分类单元。对于提示注入,15类恶意行为分别与3种自然语言植入策略组合,共形成45个分类单元。对于混合攻击,9类代码层恶意行为分别与3种跨层植入策略组合,共形成27个分类单元。因此,攻击覆盖矩阵共包含108个有效分类单元。

攻击知识库由代码注入知识子库和提示注入知识子库组成,分别对应CI与PI两类攻击的不同技术来源。代码注入知识子库收录恶意代码模式,其数据来源为IntelliGraph。该数据集包含3,026个经确认的恶意PyPI软件包,并提供软件包源代码、调用图及攻击链标注。提示注入知识子库收录提示注入载荷,其数据来源包括WildJailbreak、CCS'24真实环境越狱数据集、Deepset和Gandalf四个语料库,共包含20,961个载荷。数据来源

不同数据源的原始标签无法直接映射至本文定义的恶意行为分类体系。IntelliGraph采用不同粒度描述恶意软件行为,而四个提示注入语料库使用的类别定义与标签体系也不一致。为实现跨数据源的统一检索,本文使用大语言模型将每个知识条目映射至相应的分类单元。对于代码条目,大语言模型综合分析软件包源代码、调用图及已有攻击链标签;对于提示注入条目,大语言模型分析载荷文本及其来源信息。模型为每个条目生成两个字段:一是从攻击者视角概括其目标与操作方式的简要行为摘要;二是分类标签集合,用于标识该条目所对应的恶意行为类别及相关分类单元。标注提示中提供完整分类体系作为候选标签,并要求模型为每个预测标签指出条目中的具体支持证据,以降低无依据标注的风险。未能映射至任何分类单元,或者标注置信度低于预设阈值的条目,将从知识库中剔除。标签对齐

3.2 生成代理

对于攻击覆盖矩阵中的每个目标分类单元,生成代理按照四个阶段生成候选恶意技能,如图2上部所示。算法1进一步描述了完整的"生成---验证---反馈"闭环流程。

**阶段1:攻击知识检索。**生成代理根据目标攻击向量和恶意行为类别,从攻击知识库中检索 k 个相关攻击示例。检索所使用的知识子库由恶意行为类别决定:B1---B9属于代码层恶意行为,统一从代码注入知识子库中检索。B10---B15属于智能体控制行为,其攻击模式从提示注入知识子库中检索。知识条目采用无放回检索机制。每个条目在首次返回后即被标记为已使用,后续生成过程不再重复选取该条目,以降低生成样本之间的模式重复程度并提高攻击样本的多样性。

阶段2:良性模板选择。 候选技能需要具备与正常技能一致的功能描述和目录结构。为此,本文从包含3,458个良性技能的模板池中选择载体模板。该模板池来源于公开技能聚合平台SkillsMP,其中的技能均采用SKILL.md格式。模板池的构建包括两个步骤。首先,根据SkillsMP的分类体系选取12个一级功能类别。其次,在每个类别中,按照技能对应GitHub仓库的Star数与Fork数之和降序遍历条目,仅保留能够从平台正常下载的技能,并以"技能名称---作者账户"为联合键删除重复项。在样本生成过程中,系统从模板池中均匀随机选择一个良性技能。生成的候选技能沿用该模板的名称、功能描述、所属类别和章节结构,使恶意载荷被嵌入具有正常功能语义与结构特征的技能载体中。

阶段3:技能样本合成。 技能合成模型接收两类输入:一类是与攻击向量对应的系统提示,另一类是包含目标攻击向量、恶意行为、植入策略、检索示例和良性模板的用户提示。系统提示用于规定不同攻击向量下的样本生成约束。对于CI样本,模型按照目标代码植入策略,将恶意代码嵌入新建脚本、追加函数、现有函数或SKILL.md内联代码块。对于PI样本,可执行脚本必须保持良性,恶意或对抗性指令仅按照目标自然语言植入策略嵌入Markdown正文。对于MIXED样本,Markdown指令负责生成、下载或配置中间制品,脚本负责使用该制品完成后续恶意操作。

阶段4:技能输出。 模型输出被解析为结构化技能包,其中包括SKILL.md文件、scripts/目录中的可执行脚本、assets/目录中的资源文件,以及机器可读的_expected.json文件。_expected.json用于声明候选样本成功触发后应当出现的预期可观测行为,并为后续运行时验证提供真值依据。对于CI和MIXED样本,该文件记录目标域名、文件路径和执行命令等行为指标;验证过程中在运行轨迹中观测到相应指标,表明预期攻击行为可能已被触发。对于PI样本,该文件记录预期的代理响应及拒绝行为模式,用于判断注入指令是否改变了代理的预期行为。上述文件共同构成候选恶意技能,并被提交至验证代理。

如果候选技能未通过验证,验证代理将返回结构化反馈。该反馈被追加至后续合成提示,生成代理据此重新执行样本合成与制品输出阶段。对于每个目标分类单元,系统最多执行 r 次"生成---验证"迭代;达到重试上限后仍未通过验证的候选样本将被丢弃。

不同良性模板在功能语义、代码结构和执行权限方面存在差异,因而并非所有模板都能有效承载任意攻击类型及其植入策略。

3.3 验证代理

验证代理在隔离的代理运行环境中执行候选技能,并判断其运行结果是否包含预期可观测行为。整个验证过程包括沙箱执行、轨迹收集、证据匹配和行为验证四个阶段。其中,证据匹配与行为验证构成两层验证机制:前者检测明确的运行时指标,后者判断观测结果与预期行为之间的语义一致性。所有候选技能均经过两层分析,但不同攻击向量所依赖的主要证据信号有所不同。

阶段1:沙箱执行。 候选技能被部署至OpenCode的技能发现目录,并在Docker容器中运行。该容器集成OpenCode、Python及由strace -finotifywait组成的监控工具链。OpenCode是一种开源AI编码代理,用于按照技能的正常功能描述加载并执行候选样本。验证代理根据候选技能声明的良性功能构造触发提示,并将其发送至OpenCode。监控工具附加至代理的完整进程树,因此,技能执行期间创建的子进程及其后代进程均被纳入运行时监控。

**阶段2:运行轨迹收集。**验证环境收集两类证据信号。第一类是运行时轨迹,包括网络、文件和进程事件;第二类是代理生成的文本输出。网络轨迹记录连接建立及域名解析相关事件,文件轨迹记录文件访问与修改操作,进程轨迹记录进程创建及命令执行事件。上述证据同时作为规则匹配和语义行为验证的输入。

阶段3:证据匹配。 将收集到的运行时证据与_expected.json中声明的入侵指标进行比较对于CI和MIXED样本,预期指标包括目标域名、文件路径和命令模式。验证代理在网络轨迹中检查与目标地址建立连接以及与声明域名相关的解析事件,在文件轨迹中检查对目标路径的访问或修改,并在进程轨迹中检查与预期命令模式匹配的execve()事件。为降低代理正常通信产生的干扰,匹配过程排除发往代理自身服务端点的网络流量,例如api.openai.com。对于PI样本,第一层检查代理文本输出中是否出现预先声明的关键词或短语。这些指标分别对应角色采用、系统提示词泄露、目标重定向或攻击者指定内容等行为。同时,系统还检查典型拒绝模式,以区分代理执行注入指令与识别并拒绝注入两种结果。第一层能够确定声明指标是否实际出现在运行轨迹或文本输出中,但指标匹配本身不必然等同于完整恶意行为已经成功实施。因此,其结果应被视为可审计的直接证据,而非在所有情况下均成立的行为级确定性结论。

**阶段4:行为验证。**将低层运行轨迹与高层预期行为进行关联。对于CI和MIXED样本,判别模型接收经过压缩的网络、文件和进程事件摘要及候选样本声明的预期行为,将各项行为判定为"已观测""未观测"或"证据不足",并返回相应置信度及其轨迹证据;对于PI样本,判别模型根据代理文本输出与预期行为,将验证结果划分为"攻击触发""攻击检出"和"攻击无效"三类,分别表示代理按照恶意指令改变行为、代理识别并拒绝提示注入,以及代理保持正常行为且未表现出明确的识别或拒绝。"攻击触发"能够证明注入指令成功影响代理行为,"攻击检出"则表明样本包含可被代理安全机制识别的恶意指令;二者均可作为样本包含PI攻击内容的证据,但只有前者能够证明攻击成功实现。因此,基准收录与攻击可实现性统计应分别处理这两类结果。判别模型同时为每项行为返回0至1的置信度,并在不同攻击向量下采用统一的判定阈值。

两层验证结果采用析取方式组合:当第一层匹配到预期指标,或者第二层以不低于阈值的置信度确认预期行为时,该行为被判定为获得验证证据。候选技能至少需要有一项预期行为获得确认,才能通过样本验证。本文将第二层语义判断的置信度阈值设置为0.7。第一层主要提供明确、可复核的运行时指标,对语义等价变体的覆盖能力有限;第二层能够识别不同表达形式下的语义一致行为,但其判断具有更高的不确定性。CI和MIXED样本通常主要依赖系统调用、文件和进程证据,PI样本则主要依赖对代理输出的语义判断。只有当两层均未提供充分证据时,候选技能才会被拒绝。

候选技能被拒绝后,验证代理生成结构化反馈,包括失败原因、实际观测到的预期行为子集和修改建议。实际观测行为子集可以为空;当失败原因可被定位时,反馈记录相应的运行时证据,例如代理未加载目标技能、脚本因语法错误终止,或者代理识别并拒绝了注入指令。结构化反馈被加入下一轮技能合成提示,生成代理据此重新生成候选样本,从而完成"生成---验证---反馈"闭环。

3.4 基准数据集

MalSkillBench由三个相互补充的样本子集构成:真实环境恶意技能集、运行时验证生成集和工具测试样本集。真实环境恶意技能集包含从公开环境收集并经人工确认的恶意技能;运行时验证生成集包含通过第3.3节两层验证机制的生成技能;工具测试样本集包含从现有技能检测工具官方测试套件中提取的已确认恶意样本。三个子集分别表征真实环境中的已知攻击、分类体系驱动生成的系统化攻击,以及现有工具开发过程中采用的威胁模型。

真实环境样本为基准提供实际攻击案例,但其类别分布较为集中。生成样本用于覆盖攻击矩阵中的108个分类单元,特别是提示注入与跨层植入等在真实环境样本中较少出现的攻击类型。工具测试样本则反映现有检测器在设计与开发阶段重点考虑的攻击模式。

真实环境样本收集与人工验证。被公开披露为恶意的技能通常会在披露后从公共注册表或共享平台中移除,导致部分公开报告指向的原始制品无法直接获取。为恢复并验证这些样本,本文采用以下四个步骤。

  • 种子发现。 系统检索安全博客、厂商公告、威胁情报报告和社区事件列表中的公开披露信息,并提取技能名称、仓库地址和发布者账户等样本标识。
  • 注册表扩展采集。 系统根据种子信息,从ClawHub及其镜像站等公开技能共享平台中采集被标记的目标技能,并进一步检索同一账户发布的其他技能。扩展过程综合使用发布者身份、平台标签和主题相关性等信息。
  • Git历史版本恢复。 对于已经从注册表中移除但托管仓库仍然可访问的技能,系统枚举所有修改目标技能文件的提交记录,并根据相应提交重建历史版本。
  • 跨版本核验。 系统根据提交哈希、代码片段和行为描述,将恢复版本与原始披露所指向的版本进行交叉比对,以确认样本身份并排除披露后修复版本。

在样本纳入真实环境恶意技能集之前,两名具有至少四年安全研究经验的博士研究人员分别审查其源代码和Markdown内容,确认其是否包含恶意行为,并依据第3.1节定义的攻击覆盖矩阵标注攻击向量、恶意行为和植入策略。对于存在分歧的标签,两名研究人员通过讨论形成一致结论。

该过程共获得703个经确认的真实环境恶意技能,涉及ClawHub上的50个发布者账户。其中,CI样本占据较高比例,表明当前公开收集结果中PI样本相对有限。

生成样本验证与质量保证。 运行时验证生成集由"生成---验证---反馈"流程输出并通过验证的候选技能组成。生成过程覆盖攻击矩阵中的全部108个分类单元,并为每个分类单元设置相同的生成预算。最终,生成集包含3,214个经过运行时验证的恶意技能,各分类单元的样本数量总体保持均衡。为评估自动验证与标签分配的准确性,本文按照攻击向量进行分层随机抽样,从生成集中选取300个技能,其中CI、PI和MIXED各100个。两名审查人员独立检查每个技能的SKILL.md、运行时证据文件及原始系统调用轨迹,并分别判断样本是否具有恶意性,以及攻击向量、恶意行为和植入策略标签是否准确。两名审查人员对全部300个样本的判断均保持一致,为自动化验证流程及标签分配结果的可靠性提供了人工核验依据。

**工具测试样本。**工具测试样本集包含从现有技能检测工具官方测试套件中提取的27个已确认恶意技能,用于表征这些工具在开发与测试过程中采用的威胁假设,并支持比较工具原生测试场景与统一基准之间的差异。最终,MalSkillBench共包含3,944个恶意技能,其中包括703个真实环境恶意技能、3,214个经过运行时验证的生成技能和27个工具测试样本。

总结

该论文提出MalSkillBench。据现有公开研究,这是首个面向恶意智能体技能的运行时验证基准,包含3,944个带标注的恶意技能和4,000个匹配的良性技能,覆盖代码注入、提示注入和混合攻击三类攻击向量及全部108个分类单元。实验结果表明,检测器性能与恶意内容所在的技能层级密切相关:性能最优的工具在代码注入样本上的召回率达到98.4%,但在指令层攻击上的检测性能显著下降;从软件供应链安全或提示注入防御等单一领域迁移的工具难以完整覆盖跨代码与指令的混合攻击面。此外,仅使用真实环境样本进行评测会显著改变检测器的相对排名。上述结果表明,恶意技能检测需要联合分析技能声明的任务意图、可执行代码和自然语言指令。MalSkillBench为评估相关检测方法及量化该领域的研究进展提供了统一基础。

相关推荐
Z5998178411 小时前
c#软件开发学习笔记--分组、游标与临时表、分页
笔记·学习·c#
治愈系贝壳1 小时前
ARM ---day1
linux·arm开发·学习
qdprobot2 小时前
齐护AIOT科创社团学习套件桌面总程AiTall V3版人工智能Mixly图形化编程AI小智物联网AI具身智能应用椴木科创作品
人工智能·物联网·学习
遇乐的果园2 小时前
前端学习笔记-vue列表处理
前端·vue.js·学习
小弥儿2 小时前
GitHub今日热榜 | 2026-07-16:AI知识库与反AI味设计成今日双主线
人工智能·学习·github
菩提树下的打坐2 小时前
CI 中的测试分层:让金字塔真正落地
学习·ci/cd
菩提树下的打坐2 小时前
flaky 测试治理:用工程化方式根治“上次过这次不过“
学习
Z5998178412 小时前
c#软件开发学习笔记--事务、索引
笔记·学习·c#
十月的皮皮3 小时前
C语言学习笔记20260716-编译与链接
c语言·笔记·学习