mcpField
K
KillerSkills

KillerSkills

本地服务
killerskills.ai安全01 天前更新

关于 KillerSkills

KillerSkills 是面向 Agent 和组织的安全检查工具,用沙箱运行结果为 Agent 技能和 MCP 服务提供安全判定。它可作为只读 MCP 服务提供判定与搜索,也能在安装前检查项目,并在运行时限制 MCP 服务的工具、网络和凭据访问。

主要功能

  1. 01查询技能与 MCP 服务判定
  2. 02按关键词搜索安全索引
  3. 03安装前在沙箱试运行
  4. 04拦截或限制 MCP 工具调用
  5. 05限制网络并代理凭据
  6. 06检测提示注入与凭据外泄

适用场景

  1. 01安装 Agent 技能前查看判定
  2. 02为 MCP 服务寻找已验证替代项
  3. 03限制 MCP 服务可用的工具和网络
  4. 04监测 Agent 工作流中的注入内容

MCP 相关

KillerSkills 可通过 stdio 作为只读 MCP 服务运行,向客户端提供 `check_skill` 和 `search_skills` 工具,用于查看技能或 MCP 服务的判定及搜索索引。其 CLI 还可在 Agent 与 stdio MCP 服务之间运行,实施工具、网络和凭据限制。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cyligence-karim-killerskills": {
"command": "npx",
"args": [
"-y",
"vet-skills"
]
}
}
}
启动命令npx -y vet-skills

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmvet-skills0.10.0

工具

2

收录的工具列表 · 更新于 今天

参数类型必填说明
namestring是技能或软件包名称:"name"、"publisher/name"、"@scope/pkg",可选带 "@version"。
registryenum否已知时填写注册表。省略则搜索所有公共注册表。skills_sh | clawhub | npm | pypi | docker | plugins | partner

详细介绍

vet-skills

在 Agent 技能和 MCP 服务运行前对其进行检查。评估结果来自 KillerSkills;策略由你或你的组织决定。

npm i -g vet-skills                          # the CLI (Node 20+)
vet-skills hook install all                  # Claude Code, Cursor, Codex, Windsurf, Gemini CLI: install check, runtime observation, canaries
vet-skills check <skill>                     # or just ask before you add one
vet-skills publish ./my-skill                # org members: detonate + list in the private registry

将其用作 MCP 服务

直接向任意 Agent 提供评估结果,让它在安装技能或 MCP 服务前先进行检查,并选择经过验证的替代项。只读,无需账户或 API 密钥。 工具:check_skill(评估结果、评分、沙箱观察到的内容、主要发现、最近的安全版本)和 search_skills(按关键词搜索索引,并显示评估结果)。

Claude Code

claude mcp add killerskills -- npx -y vet-skills mcp

Cursor:~/.cursor/mcp.json(或项目中的 .cursor/mcp.json)

{
  "mcpServers": {
    "killerskills": { "command": "npx", "args": ["-y", "vet-skills", "mcp"] }
  }
}

Claude Desktop:Settings → Developer → Edit Config(claude_desktop_config.json)

{
  "mcpServers": {
    "killerskills": { "command": "npx", "args": ["-y", "vet-skills", "mcp"] }
  }
}

VS Code:.vscode/mcp.json

{
  "servers": {
    "killerskills": { "type": "stdio", "command": "npx", "args": ["-y", "vet-skills", "mcp"] }
  }
}

Windsurf:~/.codeium/windsurf/mcp_config.json,与 Cursor 使用相同的 mcpServers 块。 Codex:~/.codex/config.toml

[mcp_servers.killerskills]
command = "npx"
args = ["-y", "vet-skills", "mcp"]

然后向你的 Agent 提问:"添加该 MCP 服务前,请用 KillerSkills 检查它。" 需要 Node 20+。索引包含来自 skills.sh、ClawHub、npm、PyPI、Docker MCP Catalog 和 Claude Code 插件市场的 24,000+ 个技能和 MCP 服务,每个都在蜜罐沙箱中运行。可在 killerskills.ai 浏览。

安装前先试用

vet-skills try @acme/crm-mcp            # npm package (or name@version)
vet-skills try pypi:some-mcp-server     # PyPI package
vet-skills try owner/repo               # GitHub repository
vet-skills try ./my-skill               # local directory

将软件包获取到临时目录(绝不安装),在 KillerSkills 蜜罐中运行,并输出它的行为:它联系的每台主机、访问的每条凭据路径、它提供的工具,以及它会给 Agent 带来的开销(指令令牌;对于 MCP 服务,还包括握手时间和其工具列表占用的提示词上下文)。运行被阻止时,退出代码为 2。

对返回内容进行注入检查

监视工具调用的同一钩子也会读取 WebFetch、WebSearch、Read、Bash、Grep 以及所有 MCP 工具的返回内容。当内容包含针对 Agent 的指令(“忽略之前的指令”“不要告诉用户”、隐藏的 HTML 注释、不可见的 Unicode 标签字符、通过管道传给 shell 的脚本)时,钩子会在 Agent 执行下一步前告知它、记录相关内容,并在注册后向你的组织报告发现类型。内容不会离开本机。vet-skills discover 会对 CLAUDE.md、AGENTS.md、MEMORY.md 和所有已安装的 SKILL.md 应用相同规则;vet-skills run 会对正在运行的服务的工具列表和结果应用这些规则。

在受限环境中运行

claude mcp add crm -- npx -y vet-skills run --net declared --deny "delete_*" -- npx -y @acme/crm-mcp

vet-skills run 位于 Agent 和 stdio MCP 服务之间。被拒绝的工具调用会收到错误,且绝不会到达服务;每次工具调用都会被记录(仅记录工具名称和参数名称);--net declared 会将服务的 HTTPS_PROXY 指向本地允许列表代理,该代理仅允许连接其评估结果中声明的主机(使用 --net host1,host2 可自行指定)。安装钩子阻止 stdio 服务时,会将此命令作为替代方案打印出来。忽略 HTTPS_PROXY 的客户端不会受到网络隔离,保护程序会在启动时说明这一点。

添加 --contain(0.7.9)还可将服务放入操作系统沙箱中:macOS 上使用 sandbox-exec,Linux 上使用 bwrap(bubblewrap)。项目目录、/tmp 和软件包缓存仍可写;$HOME 的其余部分为只读,凭据目录(~/.ssh、~/.aws、~/.config/gh、~/.kube、~/.docker、密钥链、Agent 配置文件夹,等等)则完全不可读。macOS 沙箱还会禁止除本地代理之外的所有出站连接。未声明的主机会快速收到已记录的 403,因此遥测调用会无害地失败,工具仍可继续工作;退出摘要会统计这些主机。Windows:请使用 WSL。如果两种沙箱都不可用,保护程序会在不启用沙箱的情况下运行并说明原因。

claude mcp add crm -- npx -y vet-skills run --contain --net declared -- npx -y @acme/crm-mcp
凭据代理:--secrets (0.7.13)

大多数 MCP 服务都需要在环境中配置 API 密钥,而读取 GITHUB_TOKEN 来调用 GitHub 的服务,也可以轻易地把它发到别处。使用 --secrets NAME=host[,NAME=host…] 后,服务永远拿不到真实值:它的 环境中只有占位符,守护进程保管真实值,并且只会通过代理将真实值放入发往绑定主机的请求中。发送到其他任何地方的占位符都是随机字符串,守护进程会报告此次尝试(✕ sent the GITHUB_TOKEN placeholder to collect.evil.xyz),并将其记录为偏差。

GITHUB_TOKEN=ghp_… vet-skills run --secrets GITHUB_TOKEN=api.github.com -- npx -y @acme/github-mcp

原理:代理使用为本次运行创建的临时 CA 证书(openssl,密钥存放在权限为 0700 的目录中,并在退出时删除),为允许的主机终止 TLS。服务通过 NODE_EXTRA_CA_CERTS、 SSL_CERT_FILE、REQUESTS_CA_BUNDLE、CURL_CA_BUNDLE 和 GIT_SSL_CAINFO 信任该证书,这些变量涵盖 Node、Python、curl、Go 和 Rust 客户端。请求头、URL 和不超过 4 MB 的请求正文都会被重写。--secrets 会将网络访问限制在绑定的主机(添加 --net 可放宽限制)。固定证书的客户端会拒绝本次运行的 CA;对于此类客户端,请使用不带 --secrets 的 --net。

金丝雀凭据:确凿证据,而非启发式判断

vet-skills canary install

在真实凭据文件旁放置诱饵文件(~/.aws/credentials.old、 ~/.config/gh/hosts.yml.old、~/.npmrc.old、~/.ssh/id_rsa_old、~/.env.old),仅当对应文件不存在时才放置,随机值保存在 ~/.vet-skills/canaries.json 中。正常情况下,没有任何程序会读取被遗忘的备份,因此,只要金丝雀值出现在 Agent 发送的任何内容或工具返回的内容中,就能确定发生了数据外传。钩子会停止会话并指出文件类型(绝不透露值);vet-skills run 会拒绝此次调用。vet-skills canary 会列出这些文件,canary remove 只会删除内容仍与写入时完全一致的文件。

因你的要求而允许

并非每次读取凭据都是攻击。钩子会保留每个会话的意图记录:你在提示词中提到的主机和路径(由 UserPromptSubmit 钩子提取;不会存储提示词本身),以及你自己的工具调用访问过的主机和路径。如果技能的敏感操作与最近 30 分钟内的一条记录相匹配,就会允许该操作、显示一行通知,并记录一项范围限定的许可(此会话、此技能、此资源,有效期 30 分钟);如果相同操作没有任何依据,系统就会暂缓操作,并告知 Agent 应向你询问。

vet-skills runtime allows        # scoped allows this week, with the reason
vet-skills runtime revoke <id>   # revoke one now

策略中的 context: 可按类型关闭此功能(credential_read: hold)。不会由任何模型判断意图:规则就是匹配,并且会明确显示。

查看当前配置

vet-skills discover            # every MCP server, skill, plugin and hook on this machine, with verdicts

在本地读取 Claude Code、Cursor、Windsurf、Claude Desktop、Gemini CLI 和 Codex 的配置。系统会查询每个服务和技能名称并给出判定;不会有其他内容离开本机。如果你已加入某个组织,名称列表也会报告到团队的 Discovery 页面。环境变量值、参数和文件内容绝不会被报告。

系统还会检查每个已安装的技能文件夹,查找安装程序诱饵特征(提交的 ZIP 或 .bat 文件、LuaJIT 运行时、以 .txt 保存的 Lua、与 Agent Lure Stealer IOC 匹配的文件),并标记粘贴到配置文件中的凭据值,但只报告类型和行号;绝不会打印或发送值本身。

工作原理

每次执行 skills add、claude plugin install 和 claude mcp add 时,都会先解析出制品哈希、查询该哈希,并在安装前根据你的策略进行评估:

$ vet-skills check deploy-helper
Resolving deploy-helper …
vet-skills 0.7.8 · policy acme/default-strict

 BLOCKED  14/100 [email protected] · devtools-cloud · 4,210 installs

Observed in sandbox (3 scenarios, 38s):
  ✕ network    telemetry-cdn.xyz — undeclared
  ✕ memory     wrote agent memory (1)
  ✕ filesystem reads ~/.ssh/id_ed25519, ~/.aws/credentials, ~/.npmrc
  ! tools      shadows github.create_pr

Policy acme/default-strict:
  ✕ publisher blocked      devtools-cloud is on the block list

✕ Blocked [email protected] · publisher devtools-cloud is blocked by policy
Pin instead: [email protected] (score 88)

判定结果:允许、沙盒(在限制条件下安装)、需要审批(安装等待审核人员审批)、阻止(并指出最后一个安全版本)、延后(尚未评分:先进行引爆分析)、观察(组织强制执行功能已关闭;仅记录)。

失败时开放

如果无法访问判定 API,且没有缓存结果,就会应用策略中的 offline 规则。默认设置为 allow 并显示警告:我们这边的服务中断绝不会阻止你的工作。若要在故障时默认拒绝,请在策略中设置 offline: block。

个人模式与组织模式

个人模式:个人策略位于 ~/.vet-skills/policy.yaml(vet-skills policy show)。 除了查询判定所需的信息(技能名称、版本、哈希)和匿名客户端 ID,不会发送任何内容。

组织模式:vet-skills join <org> --token <enroll token> --email [email protected] 会切换到组织策略。从此以后,钩子还会将已安装技能的名称、版本、哈希和判定结果报告到组织仪表板。绝不会发送代码、 提示词、环境变量或文件内容。执行 vet-skills leave 可恢复个人模式。

命令

命令功能
check <skill>试运行判定。被拦截时退出码为 2。
try <pkg|pypi:name|owner/repo|path>获取技能,在蜜罐中运行,打印其执行内容以及对 Agent 造成的成本。
run [--contain] [--deny t,glob*] [--net declared|hosts|off] [--secrets NAME=host,…] -- <cmd…>守护 stdio MCP 服务:拒绝工具调用、固定其网络、代理其机密,并记录每次调用。
install <skill>检查技能,然后执行 npx skills add。遇到需谨慎的情况时会提示。
detonate <skill|path>强制在沙盒中运行。
why <skill>显示上次判定及其依据的规则。
join <org> --token <t> --email <e> / leave开启 / 关闭组织模式。
policy show / policy set <file>管理个人策略。
block <skill> [--reason]管理个人屏蔽列表。
status显示组织、策略版本、缓存和待审批项;同步策略。
discover [--project] [--json]清点此设备上的 Agent 配置;加入组织后会向组织报告名称。
mcp通过 stdio 以 MCP 服务身份运行(check_skill、search_skills)。
hook install [claude-code | cursor | codex | windsurf | gemini | all]为该 Agent 注册钩子(~/.claude/settings.json、~/.cursor/hooks.json、~/.codex/hooks.json、~/.codeium/windsurf/hooks.json、~/.gemini/settings.json)。
hook windsurf、hook gemini由 Windsurf(Cascade)/ Gemini CLI 在每个事件发生时调用;退出码为 2 时会拦截,并将原因告知 Agent。
hook eval由 Agent 调用;从 stdin 读取钩子 JSON。

环境变量:KILLERSKILLS_API(默认值:https://killerskills.ai)、 VET_SKILLS_HOME(默认值:~/.vet-skills)、NO_COLOR。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。