外观
SkillGuard:把 Agent Skill 作为双平面权限主体
摘要
SkillGuard 将 Agent Skill 视为带权限的可执行制品,而不是可信的提示词片段或普通工具包装器。它分别约束 Skill 对上下文的影响和实际工具副作用,并通过 SkillManifest、运行时权限控制、用户确认和策略执行把两者关联起来。
作者在 1,260 个真实 Skill 上测试权限分类覆盖度,并在 SkillInject 的三类 Agent scaffold 上做对抗评测。其报告显示,受保护对象覆盖率为 99.93%;上下文注入的攻击成功率由 35.3% 降至 20.7%,明显注入由 36.7% 降至 18.0%。这些均是作者在指定基准和运行时中的结果,不代表任意 Skill 市场或 Agent 已获得权限安全保证。
核心创新与差异
原研究贡献。 研究的机制增量不是再做一次 Skill 静态扫描,而是将 Skill 的“内容影响”和“动作权限”作为必须共同授权的两个平面:一个 Skill 即使尚未调用工具,也可能通过说明、依赖或加载的上下文改变后续决策。
本站分析。 现有 VIGIL 页面将已声明行为编译为时序、参数和值流约束;SkillGuard 的独立增量是权限声明、主机调用映射和用户确认的前置授权模型。首个需要控制的是 Skill 装载或上下文注入被默认为获得动作权威,而不是某次工具调用本身的语法是否合规。
威胁模型与攻击链
攻击者可发布第三方 Skill,或让合法 Skill 读取含操纵性文本、脚本、引用资料或依赖。资产包括文件、凭据、网络接口、Shell 和可委派的工具能力;可信仲裁者应是 Host 的确定性策略执行器,而不是模型对 Skill 文本的自行判断。
- Agent 发现或加载带有指令、脚本、数据和工具绑定的 Skill。
- Skill 的内容改变 Agent 的任务理解,或诱导其选择敏感动作。
- 若 Host 没有把 manifest、会话授权和实际调用关联,未声明或超范围动作可能执行。
- SkillGuard 在执行前将主机操作映射为规范化能力,并与当前策略和用户授权比对。
攻击工件与复现材料
作者使用 SkillInject 的上下文注入与明显注入场景;论文没有在正文中给出可逐字复用的payload或完整测试夹具。本站不重构原始注入提示词,也不把它们替换为新的攻击脚本。可核验的防御性复现范围是:在自有沙箱中让一个 Skill 请求未在 manifest 中声明的 Network.POST_WEB、文件写入或 Shell 能力,预期运行时拒绝并记录“声明—会话授权—实际调用”的差异;该示例不是论文原始 Payload。
实验设计与实际过程
作者以 SkillsMP 的 1,260 个真实 Skill(63 个市场分类)检验权限分类,评估三个 Agent scaffold 上的 SkillInject,对比未加框架的执行结果,并报告正常任务完成、token 开销和时延。Shell 风格调用还会由辅助 Agent 推断命令及引用脚本所需的低层能力。源码、数据和实验结果由作者声明在其工件仓库中;本站未独立复现。
关键结果与实际影响
- 权限分类覆盖论文观察到的 99.93% 受保护对象;这衡量的是分类表达能力,不是恶意 Skill 检出率。
- 上下文注入 ASR 从 35.3% 降至 20.7%,明显注入从 36.7% 降至 18.0%,仍有残余成功路径。
- 作者称 Gemini CLI 和 Claude Code 的正常完成度基本保持,Codex CLI 有小幅下降;平均 token 开销为 24.7%,墙钟时延在不同攻击情形并不一致。
防护措施与验证方法
- SkillManifest 应声明上下文读取、文件、网络、Shell、委派和策略相关能力;未声明能力默认拒绝。
- 用户确认应绑定规范化后的目标、参数、会话和有效期,不应只确认自然语言任务名称。
- 对命令与脚本递归解析后的实际能力做运行时复核,并记录被允许和被拒绝的原因。
- 验证时分别报告攻击成功率、正常任务完成率、遗漏的低层能力、误拒率、token 与墙钟开销,并测试间接依赖和跨 Skill 委派。
局限与待验证问题
实验主要基于 SkillInject 与三个 scaffold;它没有覆盖注册表被接管、依赖混淆、沙箱逃逸或跨市场版本漂移。权限生成辅助模型也可能误判命令所需能力。99.93% 覆盖率来自作者观察到的对象集合,不能外推为市场全量或未来 Skill 的完整覆盖;目前亦无独立复现。