name: skillguard
version: 2.0.0
description: ClawHub 技能安全扫描器。在安装前审查第三方技能——检测危险模式、可疑代码和风险依赖。
author: PaxSwarm
license: MIT
keywords: [安全, 审计, 扫描, 审查, clawhub, 技能, 安全性, 审核, 漏洞]
triggers: ["技能安全", "审查技能", "扫描技能", "这个技能安全吗", "skillguard", "审计技能", "clawscan"]
“信任,但需验证。”
ClawHub 没有审核流程。任何开发者都可以发布任何技能。SkillGuard 提供了缺失的安全层——在技能接触你的系统之前,扫描其中的危险模式、易受攻击的依赖项和可疑行为。
第三方技能可能带来以下风险:
| 风险 | 影响 |
|---|---|
| 执行任意代码 | 完全系统沦陷 |
| 访问你的文件系统 | 数据窃取、勒索软件 |
| 读取环境变量 | API 密钥窃取(损失巨大) |
| 通过 HTTP 外泄数据 | 隐私泄露 |
| 安装恶意依赖项 | 供应链攻击 |
| 持久化后门 | 长期系统沦陷 |
| 权限提升 | 获取 root 权限 |
一个恶意技能 = 游戏结束。
SkillGuard 帮助你在安装前发现威胁。
clawhub install clawscan
或手动安装:
git clone https://github.com/G0HEAD/skillguard
cd skillguard
chmod +x scripts/skillguard.py
clawhub CLI(用于远程扫描)# 在安装前扫描一个技能
python3 scripts/skillguard.py scan some-random-skill
# 扫描本地文件夹(你自己的技能或下载的)
python3 scripts/skillguard.py scan-local ./path/to/skill
# 审计所有已安装的技能
python3 scripts/skillguard.py audit-installed
# 生成详细的安全报告
python3 scripts/skillguard.py report some-skill --format markdown
# 检查依赖项中的已知漏洞
python3 scripts/skillguard.py deps ./path/to/skill
这些模式表明存在严重安全风险:
| 类别 | 模式 | 风险 |
|---|---|---|
| 代码执行 | eval(), exec(), compile() |
任意代码执行 |
| Shell 注入 | subprocess(shell=True), os.system(), os.popen() |
命令注入 |
| 子进程 | child_process.exec(), child_process.spawn() |
Shell 访问 (Node.js) |
| 凭据窃取 | 访问 ~/.ssh/, ~/.aws/, ~/.config/ |
私钥/凭据窃取 |
| 系统文件 | /etc/passwd, /etc/shadow |
系统沦陷 |
| 递归删除 | rm -rf, shutil.rmtree('/') |
数据销毁 |
| 权限提升 | sudo, setuid, chmod 777 |
获取 root 权限 |
| 反向 Shell | Socket + 子进程模式 | 远程访问 |
| 加密挖矿 | 矿池 URL, stratum:// |
资源窃取 |
这些模式可能是合法的,但需要检查:
| 类别 | 模式 | 关注点 |
|---|---|---|
| 网络请求 | requests.post(), fetch() POST |
数据发往何处? |
| 环境变量访问 | os.environ, process.env |
访问了哪些变量? |
| 文件写入 | open(..., 'w'), writeFile() |
保存了什么内容? |
| Base64 编码 | base64.encode(), btoa() |
是否混淆了载荷? |
| 外部 IP | 硬编码的 IP 地址 | 数据外泄端点? |
| 批量文件操作 | shutil.copytree(), glob |
大量数据访问? |
| 持久化 | crontab, systemctl, .bashrc |
是否开机自启? |
| 包安装 | pip install, npm install |
供应链风险 |
| 类别 | 模式 | 说明 |
|---|---|---|
| 文件读取 | open(..., 'r'), readFile() |
技能的正常操作 |
| JSON 解析 | json.load(), JSON.parse() |
数据处理 |
| 日志记录 | print(), console.log() |
调试 |
| 标准导入 | import os, import sys |
常用库 |
╔══════════════════════════════════════════════════════════════╗
║ 🛡️ SKILLGUARD 安全报告 ║
╠══════════════════════════════════════════════════════════════╣
║ 技能: suspicious-helper v1.2.0 ║
║ 作者: unknown-user ║
║ 文件: 8 个已分析 ║
║ 扫描时间: 2024-02-03 05:30:00 UTC ║
╚══════════════════════════════════════════════════════════════╝
📁 已扫描文件
────────────────────────────────────────────────────────────────
✓ SKILL.md (541 字节)
✓ scripts/main.py (2.3 KB)
✓ scripts/utils.py (1.1 KB)
✓ scripts/network.py (890 字节)
✓ config.json (234 字节)
✓ requirements.txt (89 字节)
✓ package.json (312 字节)
✓ install.sh (156 字节)
🔴 严重问题 (3)
────────────────────────────────────────────────────────────────
[CRIT-001] scripts/main.py:45
│ 模式: 使用外部输入的 eval()
│ 风险: 任意代码执行
│ 代码: result = eval(user_input)
│
[CRIT-002] scripts/utils.py:23
│ 模式: 使用 shell=True 的 subprocess
│ 风险: 命令注入漏洞
│ 代码: subprocess.run(cmd, shell=True)
│
[CRIT-003] install.sh:12
│ 模式: 使用变量的递归删除
│ 风险: 潜在的数据销毁
│ 代码: rm -rf $TARGET_DIR/*
🟡 警告 (5)
────────────────────────────────────────────────────────────────
[WARN-001] scripts/network.py:15 — 向外部 URL 发送 HTTP POST 请求
[WARN-002] scripts/main.py:78 — 读取 OPENAI_API_KEY
[WARN-003] requirements.txt:3 — 未固定版本的依赖项:requests
[WARN-004] scripts/utils.py:45 — 检测到 Base64 编码
[WARN-005] config.json — 硬编码 IP:192.168.1.100
🟢 信息 (2)
────────────────────────────────────────────────────────────────
[INFO-001] scripts/main.py:10 — 标准文件读取操作
[INFO-002] requirements.txt — 声明了 3 个依赖项
📦 依赖项分析
────────────────────────────────────────────────────────────────
requirements.txt:
⚠️ requests (未固定版本 - 请指定版本!)
✓ json (标准库)
✓ pathlib (标准库)
package.json:
⚠️ axios@0.21.0 (CVE-2021-3749 - 请升级至 0.21.2+)
════════════════════════════════════════════════════════════════
判定结果:🚫 危险
════════════════════════════════════════════════════════════════
⛔ 请勿安装此技能
发现 3 个严重安全问题:
• 通过 eval() 执行任意代码
• 通过 shell=True 进行命令注入
• 危险的文件删除模式
在使用前必须进行手动代码审查。
════════════════════════════════════════════════════════════════
scan <技能名称>在安装前从 ClawHub 获取并扫描一个技能。
skillguard scan cool-automation-skill
skillguard scan cool-automation-skill --verbose
skillguard scan cool-automation-skill --json > report.json
scan-local <路径>扫描本地技能目录。
skillguard scan-local ./my-skill
skillguard scan-local ~/downloads/untrusted-skill --strict
audit-installed扫描工作区中的所有技能。
skillguard audit-installed
skillguard audit-installed --fix # 尝试修复问题
deps <路径>分析依赖项中的已知漏洞。
skillguard deps ./skill-folder
skillguard deps ./skill-folder --update-db # 更新漏洞数据库
report <技能> [--format]生成详细的安全报告。
skillguard report suspicious-skill --format markdown > report.md
skillguard report suspicious-skill --format json > report.json
skillguard report suspicious-skill --format html > report.html
allowlist <技能>将某个技能标记为已手动审查并受信任。
skillguard allowlist my-trusted-skill
skillguard allowlist --list # 显示所有受信任的技能
skillguard allowlist --remove old-skill
watch监控新技能版本并自动扫描更新。
skillguard watch --interval 3600 # 每小时检查一次
创建 ~/.skillguard/config.json:
{
"severity_threshold": "warning",
"auto_scan_on_install": true,
"block_critical": true,
"trusted_authors": [
"official",
"PaxSwarm",
"verified-publisher"
],
"allowed_domains": [
"api.openai.com",
"api.anthropic.com",
"api.github.com",
"clawhub.ai"
],
"ignored_patterns": [
"test_*.py",
"*_test.js",
"*.spec.ts"
],
"custom_patterns": [
{
"regex": "my-internal-api\\.com",
"severity": "info",
"description": "内部 API 端点"
}
],
"vuln_db_path": "~/.skillguard/vulns.json",
"report_format": "markdown",
"color_output": true
}
扫描后,技能会被分配一个安全等级:
| 等级 | 徽章 | 含义 | 建议 |
|---|---|---|---|
| 已验证 | ✅ | 受信任作者,无问题 | 可安全安装 |
| 干净 | 🟢 | 未发现问题 | 可能安全 |
| 需审查 | 🟡 | 仅存在警告 | 安装前请阅读 |
| 可疑 | 🟠 | 存在多个警告 | 需要仔细审查 |
| 危险 | 🔴 | 存在严重问题 | 请勿安装 |
| 恶意 | ⛔ | 已知恶意软件模式 | 阻止并上报 |
# 添加到你的工作流中
skillguard scan $SKILL && clawhub install $SKILL
# GitHub Actions 示例
- name: 安全扫描
run: |
pip install skillguard
skillguard scan-local ./my-skill --strict --exit-code
# 每日审计的 Cron 任务
0 9 * * * /path/to/skillguard audit-installed --notify
SkillGuard 维护一个本地已知漏洞数据库:
# 更新漏洞数据库
skillguard update-db
# 检查数据库状态
skillguard db-status
# 报告新漏洞
skillguard report-vuln --skill bad-skill --details "描述..."
数据来源:
- CVE 数据库(Python 包)
- npm 安全公告数据库
- GitHub 安全公告
- 社区报告
SkillGuard 是第一道防线,并非绝对保证:
| 局限性 | 说明 |
|---|---|
| 代码混淆 | 有决心的攻击者可以隐藏恶意代码 |
| 动态代码 | 运行时生成的代码更难分析 |
| 误报 | 合法代码可能触发警告 |
| 零日漏洞 | 无法检测新的攻击模式 |
| 依赖项 | 深度传递依赖项扫描有限 |
纵深防御: 请将 SkillGuard 与以下措施结合使用:
- 沙箱执行环境
- 网络监控
- 定期审计
- 最小权限原则
发现了我们遗漏的危险模式?帮助改进 SkillGuard:
{
"id": "CRIT-XXX",
"regex": "dangerous_function\\(",
"severity": "critical",
"category": "code_execution",
"description": "危险函数调用",
"cwe": "CWE-94",
"remediation": "请改用 safe_alternative()",
"file_types": [".py", ".js"]
}
skillguard report-fp --pattern "WARN-005" --reason "合法用例"
MIT 许可证 — 自由使用,欢迎贡献。
“在智能体生态系统中,信任通过透明度赢得。
你安装的每一个技能,都是你选择运行的代码。
明智选择。始终验证。”
由 PaxSwarm 构建 — 保护蜂群,一次一个技能 🐦⬛