Loading...

文章背景图

NVIDIA SkillSpector 保姆级部署教程:AI 智能体技能安全扫描器

2026-11-01
0
- 字
- 分钟
|

NVIDIA SkillSpector 保姆级部署教程:AI 智能体技能安全扫描器

一句话定位:NVIDIA 官方开源的 AI 智能体技能(Agent Skill)安全扫描器——在你给 Claude Code、Codex CLI、Gemini CLI 装上第三方 skill 之前,先用它扫一遍,识别漏洞、恶意指令、数据外泄、供应链投毒等风险,给出 0–100 分风险评分与是否可安装的明确结论。

slogan:Is this skill safe to install?(这个 skill 装上之前安不安全?)

仓库地址:https://github.com/NVIDIA/SkillSpector · 许可证:Apache 2.0 · ⭐ 23,696 · 隶属 NVIDIA Verified Skills 流水线

SkillSpector 官方徽章:要求 Python 3.12 及以上版本 SkillSpector 官方徽章:Apache 2.0 开源许可证

▲ 图 1–2:SkillSpector 仓库 README 顶部全部官方徽章清点——共 2 枚,已完整收录:① Python 3.12+ 版本徽章;② Apache 2.0 许可证徽章。来源:NVIDIA/SkillSpector README 第 5–6 行。经递归扫描仓库 git tree(含 assets/、docs/、contrib/ 等全部目录)与 README 全文(含所有 ![...] 引用),本仓库无官方 logo、banner、截图、架构图、SVG 图示或任何位图文件;docs/ 下 DEVELOPMENT / SUPPRESSION / ANALYSIS_RESOURCE_BOUNDS / PI_EXTENSION / OPENCODE_EXTENSION 等文档亦无内嵌图片。故正文仅展示以上 2 枚 README 官方徽章,无遗漏、无替代图。


一、项目简介

随着 Claude Code、Codex CLI、Gemini CLI 等 AI 编码智能体普及,「skill(技能)」成为新的第三方代码分发形态:一份 Markdown 指令 + 配套脚本,智能体会带着你的环境变量、文件系统和工具权限直接执行。问题在于,这些 skill 在安装时几乎不做任何安全审查,等同于在本机隐式信任陌生人的代码。

NVIDIA 在论文里分析了 31,132 个 skill 样本,结果触目惊心:26.1% 的 skill 含有可被利用的漏洞,5.2% 表现出明显的恶意意图。SkillSpector 就是 NVIDIA 为解决这个问题开源的官方扫描器——它属于 NVIDIA Verified Skills 流水线的一环,官方在发布、签名、上架 NVIDIA skills 目录之前用它做扫描。

它支持扫描 Git 仓库、URL、zip 包、本地目录或单个 SKILL.md 文件,内置 17 大类共 71 条漏洞模式,覆盖提示词注入、数据外泄、权限提升、供应链、过度授权、输出处理、系统提示词泄露、记忆投毒、工具滥用、流氓智能体、反拒绝(jailbreak)、触发滥用、危险代码 AST、污点追踪、YARA 特征、MCP 最小权限与 MCP 工具投毒。扫描结果可输出终端彩色报告、JSON、Markdown 或 SARIF(供 CI/CD 与 IDE 集成)。

二、功能特点

能力说明
🔍 多格式输入Git 仓库、URL、zip 压缩包、本地目录、单个 SKILL.md 文件,一条命令扫完
🛡️ 71 条漏洞模式 / 17 大类提示词注入、数据外泄、权限提升、供应链投毒、过度授权、MCP 工具投毒、YARA 恶意软件特征等
🧠 两阶段分析先跑快速静态分析(AST + 规则 + YARA),可选再调 LLM 做语义级二次评估
🌐 实时 CVE 查询SC4 规则直查 OSV.dev,联网失败自动离线降级
📊 风险评分0–100 分制,带 severity 等级与「是否可安装」的明确建议(SAFE / CAUTION / UNSAFE)
📄 多种输出格式终端、JSON、Markdown、SARIF,方便接 CI/CD 与 IDE 报告
🧪 基线 / 误报抑制把已知可接受的发现写入 .skillspector-baseline.yaml,复扫只报新增问题
🤖 MCP Server 模式把扫描器本身注册成 MCP 工具,让 Claude Code 等智能体在装 skill 前自动调用扫描做门禁
🐳 Docker 零依赖运行不想装 Python?直接 docker build 后挂载目录扫描
📦 批量扫描contrib/batch_scan/ 支持多 worker 并行扫整个 skill 集合,多语言检测(zh/ja/ko)
🔒 安全上限单文件 1 MB 分析上限、单次 ingest 100 MiB、zip 成员 10,000 上限,防 zip bomb 与超大输入

三、环境要求

  • Python 版本:Python 3.12 及以上(官方徽章明确标注 python-3.12+)。
  • 包管理器:推荐 uv(Makefile 会优先用 uv,否则退回 pip);也支持纯 pip + venv。
  • 操作系统:Linux / macOS / Windows(WSL2)均可;官方镜像基于 Docker 官方 Python 3.12-slim-bookworm。
  • 网络:首次扫描若依赖联网会请求 OSV.dev;如走 LLM 语义分析,需配置 OpenAI / Anthropic / NVIDIA Build / Gemini / Ollama 等任一兼容端点的凭据。
  • 磁盘:建议预留 500 MB 以上空间用于依赖与缓存;远程拉取有 100 MiB ingest 上限。
  • Docker(可选):纯 Docker 路线无需 Python,只需本机 Docker 守护进程。

四、保姆级部署步骤

4.1 最简安装(uv 一行命令,CLI 模式)

如果你只想要命令行扫描能力,用 uv 直接从 GitHub 拉取安装(下面用 SSH 地址等价写法,亦可换成 README 给出的 HTTPS git+ 仓库地址):

uv tool install git+ssh://git@github.com/NVIDIA/skillspector.git

# 后续升级:
uv tool update skillspector

装完直接在终端敲 skillspector --help,能看到帮助即成功。

4.2 需要 MCP Server 模式(给智能体当门禁)

如果你打算把 SkillSpector 注册成 MCP 工具(让 Claude Code 等智能体在装 skill 前自动调用),安装时要带上 [mcp] 额外依赖:

uv tool install 'skillspector[mcp] @ git+ssh://git@github.com/NVIDIA/skillspector.git'

已经按 4.1 装过纯 CLI 版?用 --force 重装即可:

uv tool install --force 'skillspector[mcp] @ git+ssh://git@github.com/NVIDIA/skillspector.git'

4.3 从源码安装(开发者路线)

想改代码、跑测试或扩展分析器,从源码拉(SSH 克隆):

# 克隆仓库
git clone git@github.com:NVIDIA/skillspector.git
cd skillspector

# 创建并激活虚拟环境
uv venv .venv && source .venv/bin/activate
# 或者用纯 Python:
# python3 -m venv .venv && source .venv/bin/activate

# 生产安装
make install

# 或带开发依赖安装
make install-dev

4.4 Docker 路线(不想装 Python)

本机不想碰 Python 环境,直接用仓库自带的 Dockerfile:

# 构建镜像
make docker-build
# 或等价于:
docker build -t skillspector .

# 扫描当前目录下的 my-skill 目录(静态分析,不开 LLM)
docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm

# 把报告写到宿主机
docker run --rm --user "$(id -u):$(id -g)" \
  -v "$PWD:/scan" \
  skillspector scan ./my-skill/ --no-llm --format json --output report.json

想带 LLM 分析,先准备一份 .env:

cat > .env <<'EOF'
SKILLSPECTOR_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
EOF

docker run --rm \
  -v "$PWD:/scan" \
  --env-file .env \
  skillspector scan ./my-skill/

反复使用可以加个别名:

alias skillspector-docker='docker run --rm -v "$PWD:/scan" skillspector'
skillspector-docker scan ./my-skill/ --no-llm

五、配置说明(LLM 语义分析)

默认只跑静态分析已经能挡住大部分规则级问题;要拿到「描述—行为不匹配」这类语义级判断,需要配一个 OpenAI 兼容端点。用 SKILLSPECTOR_PROVIDER 切换提供商,官方内置支持以下几家:

提供商凭据环境变量默认模型
openaiOPENAI_API_KEY(可选 OPENAI_BASE_URL)gpt-5.4
anthropicANTHROPIC_API_KEYclaude-opus-4-6
nv_buildNVIDIA_INFERENCE_KEYz-ai/glm-5.3
geminiGOOGLE_CLOUD_PROJECT(ADC 鉴权)gemini-3.8-flash
bedrockAWS Profile / AWS_REGIONus.anthropic.claude-sonnet-4-6
ollama无需 Key(本地 OLLAMA_BASE_URL)llama3.1:8b
openai_compatibleSKILLSPECTOR_COMPAT_API_KEY + SKILLSPECTOR_COMPAT_BASE_URLllama-3.1-70b-versatile
claude_cli / gemini_cli / opencode_cli无需 Key(复用本机 CLI 登录态)本地运行时默认模型

一份最常用的 OpenAI 配置示例:

export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/

不想花钱调 LLM,直接加 --no-llm 跳过语义分析:

skillspector scan ./my-skill/ --no-llm

六、使用方法

6.1 基础扫描

# 扫本地 skill 目录
skillspector scan ./my-skill/

# 扫单个 SKILL.md
skillspector scan ./SKILL.md

# 扫 Git 仓库(本地克隆地址或远程 HTTPS URL 均可)
skillspector scan git@github.com:你的用户名/your-skill.git

# 扫 zip 包
skillspector scan ./my-skill.zip

6.2 输出格式

# 终端彩色报告(默认)
skillspector scan ./my-skill/

# JSON(机器可读,接 CI)
skillspector scan ./my-skill/ --format json --output report.json

# Markdown(写进文档)
skillspector scan ./my-skill/ --format markdown --output report.md

# SARIF(接 GitHub Code Scanning / IDE)
skillspector scan ./my-skill/ --format sarif --output report.sarif

6.3 批量扫描一整个 skill 集合

python -m contrib.batch_scan.batch_scan ./my-skills/ --no-llm
python -m contrib.batch_scan.batch_scan ./my-skills/ --workers 20 -f json -o report.json

6.4 基线抑制误报

第一次扫完,把可接受的发现写入基线,后续复扫只报新增问题:

# 把当前所有发现写入基线
skillspector baseline ./my-skill/ -o .skillspector-baseline.yaml

# 后续扫描时加载基线——只报新发现
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml

# 想看被基线抑制了哪些
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml --show-suppressed

6.5 注册成 MCP 工具(给智能体当门禁)

把 SkillSpector 注册到 Claude Code,之后智能体在装 skill 前会自动调用扫描:

claude mcp add skillspector -- skillspector mcp

或者用 HTTP 传输(仅监听回环):

skillspector mcp --transport http --host 127.0.0.1 --port 8000

MCP 工具对外暴露一个 scan_skill(target, use_llm=true, output_format="json") 函数,返回 risk_score、severity、recommendation、safe_to_install 和 findings。

七、常见问题 FAQ

问一:SkillSpector 是 NVIDIA 官方维护的吗?和 NVIDIA skills 目录什么关系?
答:是。SkillSpector 隶属 NVIDIA Verified Skills 流水线,是 NVIDIA 用来扫描、评估、签名第三方 agent skill 后再上架 NVIDIA skills 目录 的官方工具,Apache 2.0 开源。

问二:我不调 LLM,只用静态分析,扫描效果会不会大打折扣?
答:静态分析已经覆盖 71 条规则中的绝大多数——AST 危险调用、YARA 恶意特征、环境变量收集、curl|bash、typosquatting、zip bomb 等都能拦。LLM 主要补「描述与行为不匹配」「隐藏指令语义」这类需要读上下文的判断。日常装 skill 前用 --no-llm 足够;要做企业级入库审核再开 LLM。

问三:扫描结果报了一堆误报怎么办?
答:用基线抑制。第一次扫完跑 skillspector baseline ./my-skill/ -o .skillspector-baseline.yaml 把当前已知发现固化,提交进版本库;之后复扫加 --baseline,风险评分只反映未 triaged 的新问题。基线支持精确指纹与 glob 规则两种模式。

问四:能接到 GitHub Actions 做 CI 门禁吗?
答:能。用 --format sarif --output report.sarif 输出 SARIF 文件,直接喂给 GitHub Code Scanning;或者用 --format json + 自定义脚本判断 risk_score 阈值后 exit 1。批量扫描脚本 contrib/batch_scan/ 已支持 --workers 并行。

问五:HTTP 传输模式安全吗?能不能暴露到公网?
答:官方设计上 HTTP 只监听回环(127.0.0.1 / ::1),绑定可路由地址会被直接拒绝;本地路径和 file:// 在 HTTP 模式下也会被自动拒绝,防越权读文件。要跨机器访问,请在前面加 nginx + mTLS 反代,不要直接把端口暴露公网。

相关链接

评论交流

文章目录