介绍
SkillSpector是英伟达开发的一款开源的Skill安全扫描工具,具备以下特征:
输入形式:支持GIT仓库、URL、ZIP文件、目录、单个文件。
漏洞覆盖:进行代码白盒扫描,当前涵盖17个类别的68种漏洞模式,包括提示注入、数据泄露、权限提升、供应链、过度代理、输出处理、系统提示泄漏、内存投毒、工具滥用、恶意代理、反拒绝、触发器滥用、危险代码(AST)、污点跟踪、YARA 签名、MCP 最小权限和 MCP 工具投毒。
组件扫描:会查询OSV.dev获取实时CVE数据,对Skill涉及的相关三方组件进行CVE查询。
语义分析:可接入大模型,对Skill的文字部分进行语义安全检测。
报告输出:可输出JSON、Markdown等格式报告。
基线和假阳性机制:属于静态扫描种的概念,基线意思是第一次扫描结果进行保存形成基线,后续扫描就只报新漏洞,基线存在的不用再报了。假阳性是告诉工具在该项目下某某问题是误报,下次再扫就不会报了,当然只限于当前项目。所以基线和假阳性抑制本质都是对某某问题不再报的一种机制。
风险评分:会给一个分数,可直观的感受到当前技能的危险程度,同时也会给出明确的相关建议。
部署
这里以Windows为例,通过官方推荐的uv来安装,先确保本机装有uv环境,如果没有可通过pip安装:
bash
pip install uv
之后通过uv来安装SkillSpector,uv也相当于是一个Python包管理工具,但因为是Rust写的,速度更快。
bash
uv tool install git+https://github.com/NVIDIA/skillspector.git
SkillSpector除了命令行使用外,也可以作为MCP服务提供给其它平台使用,但MCP功能是一个扩展模块,需要单独安装,如果要用到MCP,则使用如下命令,下面命令会在安装SkillSpector时也安装MCP:
bash
uv tool install --with
'mcp<2'
'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'
注意这里多了一个with参数,代表uv创建虚拟环境时,往里面加了一个mcp库,且版本小于2,官方手册里面没有这个操作,多人反馈不带这个参数,后续MCP服务运行不起来,会提示缺少MCP库。
因为安装时需要用到pip和git,网络原因可能会比较慢,可以给当前终端设置下pip源和git代理,参考如下:
bash
$env
:PIP_INDEX_URL=
"https://pypi.tuna.tsinghua.edu.cn/simple"
$env
:PIP_EXTRA_INDEX_URL=
"https://pypi.tuna.tsinghua.edu.cn/simple"
$env
:HTTP_PROXY=
"http://127.0.0.1:7897"
$env
:HTTPS_PROXY=
"http://127.0.0.1:7897"
安装后会保存在当前用户下的.local\bin目录下,会提示该目录不在环境变量中,需要手动加到环境变量。

使用
SkillSpector在检测时会通过规则去静态扫描,同时也可接入大模型进行语义分析,扫描默认是都包含,所以需要配置模型进去,这里以硅基流动为例,用的Qwen模型,配置时需要将信息加入到环境变量中,这里有点不太方便,SkillSpector目前没有一个自身的配置文件,我们这里将配置临时加一下,如果要永久生效则建议进行图形化环境变量配置,示例如下:
bash
$env
:SKILLSPECTOR_PROVIDER=
"openai"
$env
:OPENAI_BASE_URL=
"https://api.siliconflow.cn/v1"
$env
:OPENAI_API_KEY=
"sk---"
$env
:SKILLSPECTOR_MODEL=
"Qwen/Qwen2.5-72B-Instruct"
SkillSpector检测技能的子命令是scan,后面可以跟URL、压缩包、目录等,以Openclaw自带的1password技能为例进行检测。
bash
skillspector scan 1password
结果如下图:

可以看到扫描结果前有几个警告提示,意思是接入的Qwen模型没有在自己的清单中,因为它自身有个模型清单,里面配置了模型对应的上下文长度,如果模型没在清单里,就会按照默认128000的token来算。
这个告警不影响扫描,如果想去掉,可以去修改下清单文件,将对应模型加入进去就行,我这里全局搜索的清单文件路径是:
bash
C:\Users\Administrator\AppData\Local\uv\cache\archive-v0\rpLznrvr3WzPs0Ou\skillspector\providers\openai
按照已有的格式将Qwen加入即可,如下图。

扫描时会将结果直接打印,我们可以把结果保存为json或markdown格式,如下示例:
bash
skillspector.exe scan 检测目标 --format markdown --output report.md
如果不想进行大模型的语义检测,可以通过--no-llm参数来禁用语义扫描:
bash
skillspector scan 检测目标 --no-llm
注意:同一个技能扫描多次情况下,结果可能会出现偏差,因为这种扫描不像以前的规则扫描,有就是有,没有就是没有,对于不是特别明显的恶意提示词,大模型语义判断并不能保证每次结果都一样。
批量扫描
SkillSpector也支持批量扫描,但批量功能是一个单独的模块,需要下载源码去执行,下载源码后进入项目跟目录,之后通过uv去运行python模块,命令如下(这里将两个技能以文件夹形式放到了一起):
bash
uv run python -m contrib.batch_scan.batch_scan ./
test
--workers 5 -f markdown --output ./report.md --no-llm
uv run代表新建一个虚拟环境去执行,这里批量扫描模块是contrib.batch_scan.batch_scan,workers用来指定线程,结果如下图:

这里不加模型分析,两个技能都是低风险,1password只报了3个问题,可见不加模型分析的情况下,问题会少很多。
MCP服务
安装MCP扩展的情况下,可以将SkillSpector作为MCP服务提供出去,现在MCP服务基本都是stdio模型,即MCP相关功能在本地,再就是http传输模式,即MCP相关功能在远程服务器,需要通过http远程调用。SkillSpector提供MCP的命令如下:
bash
# stdio模式
skillspector mcp
# http传输模式
skillspector mcp --transport http --host 127.0.0.1 --port 8000
回到Cherry中,stdio模式下,配置很简单,命令输入skillspector,参数输入mcp即可,同时环境变量也可以加到这里,这样就不用再去命令行配置了。

之后和大模型交互时,MCP选中刚才的配置,即可使用。

另一种是http流模式,在对外提供服务的机器上运行MCP命令:
bash
skillspector mcp --transport http --host 127.0.0.1 --port 8000
上面命令代表SkillSpector的MCP以本地8000端口对外提供服务,在Cherry中,填入对应的URL即可,这里路径是mcp,配置如下图:

注意这种模式没办法设置环境变量,因为服务在远程,效果如下,终端会打印相关的请求。

总结
工具更新的比较频繁,一些不方便的地方或者一些机制可能会随着时间有改动,后续有新功能或改动再更新。
以上就是关于SkillSpector对Skill安全进行检测的相关内容,感谢阅读。
小枣信安:专注AI安全,包括但不限于大模型安全、智能体安全、机器人安全、AI赋能网络安全等,欢迎一起学习。