安装第三方 Agent Skill 前,最重要的不是先运行安装命令,而是先把它当成一个可能同时包含指令、脚本、依赖和权限声明的软件包来审。不要把未经检查的 Skill 直接复制到 Agent 会自动发现的目录;先固定来源版本,在临时目录中查看整个包,再判断它应该被允许、隔离验证还是拒绝。本文整理的是平台无关的防御性审计方法,不声称某个扫描器“通过”就代表绝对安全。

先固定来源和版本
审计对象必须可复现。只记录“从 GitHub 下载”不够,因为默认分支会继续变化,市场页面也可能替换安装包。开始前至少保存以下信息:
- 来源页面、仓库所有者与仓库地址;
- Release、标签或完整提交哈希;
- 下载日期、压缩包哈希或本地归档;
- 许可证、维护者、最近更新与已知安全说明;
- 准备安装到哪个 Agent、个人级还是项目级作用域。
优先下载源码归档到临时审计目录,不要先运行项目 README 里的安装脚本,也不要把它放入个人级或项目级 Skills 自动发现目录。若来源只提供一条“下载并执行”的管道命令,却没有可检查的固定版本包,应先停下,而不是为了省一步牺牲可审计性。
审的是整个包,不只是 SKILL.md
SKILL.md 是入口,但实际行为可能藏在脚本、引用文档、包管理配置、钩子和资源文件中。Microsoft Agent Framework 的官方说明也把“加载 Skill 说明”“读取资源”和“运行脚本”分成不同动作;运行脚本可以保留人工审批。这说明入口文档与可执行面不能混为一谈。
| 对象 | 重点检查 | 风险信号 |
|---|---|---|
SKILL.md 与 frontmatter |
名称、用途、触发条件、工具或权限声明 | 描述很窄,正文却要求广泛读盘、联网或执行命令 |
scripts/、可执行文件 |
输入输出、文件路径、子进程、网络请求 | 读取秘密后发送、下载后执行、动态 eval/exec |
references/、模板和资产 |
是否包含额外指令、外链、隐藏内容 | 要求忽略上级规则、诱导扩大权限或写入持久配置 |
| 依赖清单与锁文件 | 依赖来源、版本固定、安装生命周期脚本 | 未固定分支、远程脚本、postinstall 等自动执行入口 |
| 隐藏文件、链接与压缩包 | 符号链接目标、嵌套归档、二进制来源 | 链接越出 Skill 目录、无法解释的二进制或混淆内容 |
| Agent 配置与钩子 | 设置、MCP、记忆文件、自动批准规则 | 自行加入允许列表、降低审批、移除后仍持续生效 |

盘点时要显示隐藏文件并识别符号链接,不要只看资源管理器的默认列表。可以用文本搜索工具把网络、进程、秘密和配置关键词先筛出来,但搜索结果只是线索。安全教程本身也可能正常出现 prompt injection、credential 或 exec 等词,必须回到上下文判断它是在说明风险,还是要求 Agent 真正执行。
比较声明与实际行为
Palo Alto Networks Unit 42 提出的核心问题很实用:Skill 说自己要做什么,是否与它实际上要求和执行的行为一致?审计时可把自然语言指令、代码和元数据放进同一张表,不要分别看完就算结束。
| 能力 | 声明用途 | 实际行为 | 审计结论 |
|---|---|---|---|
| 文件读取 | 例如只读取当前项目的日志 | 列出具体路径、范围与文件类型 | 范围一致才通过;读取用户目录或凭据需升级复核 |
| 文件写入 | 例如生成一份报告 | 写入位置、覆盖策略、是否改配置 | 限定到输出目录,并能撤销 |
| 命令执行 | 例如运行只读检查器 | 具体命令、参数、子进程与安装动作 | 目的不需要 shell 却申请 shell,属于过度权限 |
| 网络访问 | 例如查询公开 API | 目标域名、方法、上传内容与重试行为 | 域名和数据流必须可解释,不能只有“需要联网” |
| 秘密访问 | 例如调用用户已授权的服务 | 读取哪些环境变量、密钥文件或登录态 | 只读必要秘密,禁止记录、回显或发送到无关域名 |
| 持久化修改 | 通常不应默认存在 | 是否改记忆、全局设置、钩子、MCP 或自动批准 | 未披露的持久化直接进入拒绝或强制人工复核 |
单独出现文件读取、进程执行或网络访问,不足以证明恶意。高优先级风险往往来自组合行为,例如“读取凭据后发送到外部地址”“下载内容后写入并执行”“修改 Agent 配置后自动批准后续命令”。反过来,声明得很宽但实际没用到的权限也不理想:它会扩大未来更新的风险面,并让用户无法判断真正的最小权限。
权限与秘密:先问是否必要
不要从“这个权限常见吗”出发,而要问“完成它声明的任务是否必须拥有这个权限”。一个只负责格式化 Markdown 的 Skill 没有理由读取 .env、SSH、云服务凭据或浏览器登录态;一个需要发布内容的 Skill 可能确实要访问令牌,但它仍应说明令牌名称、目标服务、使用时机和不会触达的范围。
- 低风险:读取明确的项目文件,输出到新文件,不联网,不调用 shell,不访问秘密。
- 中风险:写入项目、运行限定命令或访问固定公开域名;需要逐项批准、备份和明确回滚。
- 高风险:读取凭据、访问用户目录、任意 shell、向不受控域名上传数据、修改全局 Agent 配置或关闭审批。
如果平台支持允许、询问、拒绝或沙箱策略,应把高风险动作保留为人工审批。注意不同 Agent 对 allowed-tools 等字段的语义并不完全相同:有的平台把它理解为预批准列表,而不代表未列出的工具自动被禁止。因此不能只看 frontmatter 里列了什么,还要查目标平台当前的官方权限文档和实际运行策略。
网络与依赖:画清数据流
网络审计至少要回答四个问题:连接到哪里、发送什么、为什么需要、失败后会怎样。把域名、API、遥测、更新检查、对象存储和模型服务分别列出;若代码把本地文件、环境变量或命令输出拼进请求体,要追踪这些数据最终去了哪里。
依赖也属于执行面。检查 package.json、锁文件、Python/Node/Shell 安装脚本和容器配置,重点看:
- 版本是否固定,是否直接跟随
main、latest或不受控 URL; - 安装阶段是否存在会自动执行的生命周期脚本;
- 脚本是否继续下载第二阶段载荷,下载后是否校验哈希;
- 是否引入与 Skill 目标无关的大型依赖、浏览器扩展或额外 Agent 插件;
- 是否能在断网或域名白名单条件下完成本应离线的任务。
如果一个 Skill 必须联网,不等于应允许任意联网。更稳妥的做法是固定目标域名、限制可上传数据,并在第一次运行时记录实际连接和文件访问,再与审计表对照。
扫描器能初筛,不能替你签字
NVIDIA 的 SkillSpector、Sentry 的 Skill Scanner 和 Cisco AI Defense Skill Scanner 都体现了同一个方向:静态规则先找危险 API、提示注入、秘密、依赖与权限异常,再由人工或语义分析判断描述与行为是否一致。若已经在隔离环境中安装了扫描器,可以先做静态扫描;例如 NVIDIA 当前文档提供的本地目录静态模式是:
skillspector scan ./skill-review --no-llm
运行任何扫描器前,也要审查扫描器本身的来源与权限。扫描报告中的每条发现都要回到文件和行号复核,特别注意三类误判:安全文档只是讨论攻击词、正常工具确实需要有限 shell、示例字符串并不会被执行。
反过来,“零发现”也不能证明安全。静态分析可能看不到动态加载、经过混淆的载荷、运行时下载、跨文件组合和语义诱导。Unit 42 的研究也明确把静态审计结果定义为待人工复核的候选,而不是运行时已确认的漏洞。扫描器适合作为发布门禁的一环,不是最终信任凭证。
用三档决策收口
| 决定 | 适用条件 | 下一步 |
|---|---|---|
| 允许 | 来源和版本可固定;声明与行为一致;权限最小;无未解释的秘密、联网或持久化 | 先装到项目级作用域,保留人工审批和审计记录 |
| 隔离验证 | 功能有价值,但确实需要写入、命令、网络或有限秘密;风险可以被边界化 | 使用一次性工作区、测试账号、最小权限、域名白名单与日志;结果符合预期后再扩大范围 |
| 拒绝 | 来源不可追溯;行为未披露;读取秘密后外传;下载并执行;混淆;越界链接;自行持久化或关闭审批 | 不要加载或执行,记录证据;如需继续,要求维护者提供可审计修复版本 |

隔离验证不是“先在真实环境试试看”。测试环境不应包含真实密钥、浏览器登录态、生产仓库或个人文件;网络默认关闭或只允许已核验域名;写操作限定到一次性目录;每个高风险动作保留人工确认。预期结果是 Skill 只访问审计表中声明的资源。只要出现未声明的文件读取、域名、子进程或配置修改,就停止测试并回到拒绝或重新审计。
审计结论为允许或隔离验证后,使用 Codex 的读者可继续按Codex Skills 安装和四层验证区分安装路线,并依次检查可见、显式调用、隐式触发与预期输出;Claude Code 的目录与刷新规则不要照搬这条路径。
保存最小审计记录,并在更新后重审
安装决定至少应留下:来源 URL、提交哈希或版本、包哈希、文件清单、声明能力、实际能力、扫描器及版本、人工发现、允许的权限、网络域名、隔离条件、最终决定和复审日期。这样 Skill 更新时可以先看差异,而不是从记忆中猜“上次好像没问题”。
以下变化应触发重新审计:SKILL.md 的触发与权限声明改变;新增脚本、二进制、依赖或域名;安装流程改变;开始读取秘密;写入 Agent 全局配置;维护者或仓库所有权变化。即使版本号没变,只要下载包哈希改变,也应暂停使用并核对来源。
如果你还在判断某个 Skill 是否值得安装,可先看 WarpNav 的从工作流出发选择 Skill 的方法;已经安装但在 Claude Code 中不显示或不触发,可转到Claude Code Skill 排错指南。具体 Skill 项目页可以提供功能与来源线索,但不能替代本文的包级审计。
主要资料(核验于 2026 年 8 月 28 日):Palo Alto Networks Unit 42 https://unit42.paloaltonetworks.com/ai-agent-supply-chain-risks/;NVIDIA Skill 文档 https://docs.nvidia.com/skills/scanning-agent-skills;Microsoft Agent Framework https://learn.microsoft.com/en-us/agent-framework/agents/skills;Claude Code Skills https://code.claude.com/docs/en/skills;Sentry Skill Scanner https://github.com/getsentry/skills/tree/main/skills/skill-scanner;Cisco AI Defense Skill Scanner https://github.com/cisco-ai-defense/skill-scanner;相关安全研究预印本 https://arxiv.org/abs/2604.25109。工具规则与平台权限会变化,实际安装前应重新核对当前版本文档。
© 版权声明
本站部分内容源于网络收集,文章等版权归原作者所有,若需删稿请联系管理员邮箱:satomini@warpnav.com
相关文章
暂无评论...