自动检测并评分 ClawHub、GitHub 和本地 Skill 中 JS、TS、Python、Shell 文件的安全风险,识别数据泄露、注入、混淆和木马等威胁。
企业级 Skill 安全检测工具
自动检测 ClawHub / GitHub / 本地 Skill 的安全风险,支持 JavaScript、TypeScript、Python、Shell 等多种文件类型,基于威胁情报驱动的静态分析引擎 + LLM 语义分析双层检测。
text
用户提出检测请求
↓
Agent 运行 scan.sh 执行静态扫描
↓
Agent 输出完整安全报告(Markdown 格式)
↓
Agent 询问用户是否需要语义分析
↓
用户确认后
↓
Agent 生成 LLM 语义分析提示(从脚本输出中提取)
↓
用户将提示复制给 Agent
↓
Agent 执行 LLM 语义分析
↓
Agent 输出最终结论
能力说明多文件检测支持 .js、 .ts、 .py、 .sh 四种文件类型威胁分类4 大威胁类别:数据外泄、注入攻击、代码混淆、木马后门检测规则57 条精细化检测规则,覆盖 60+ 危险操作特征智能评分100 分制安全评分,量化风险等级LLM 语义分析静态扫描定位疑似问题,用户确认后生成提示,Agent 执行深度分析白名单机制支持用户自定义信任的 Skill双层检测静态规则精准定位 → LLM 语义判断真伪
分类代码风险类型**数据外泄 (EXFIL)EXFIL凭证访问、私钥泄露、网络后门、HTTP 服务注入攻击 (INJECTION)INJECTION命令执行、npx/远程包执行、动态代码执行、提示注入、越狱攻击代码混淆 (OBFUSCATION)OBFUSCATIONBase64 编码、环境触发、隐藏执行、持久化进程木马后门 (TROJAN)**TROJAN文件删除、凭证读取、进程终止、postinstall 攻击
威胁类型规则数代表性规则INJECTION19cmd-execution、npx-exec、dynamic-exec、prompt-injection、jailbreak、backtick-injection、system-probing、crypto-operationEXFIL18credential-access、vault-access、private-key、network-backdoor、database-access、config-write、wallet-access、port-listening、proxy-tor、git-operation、file-downloadTROJAN14destructive-delete、process-kill、shell-injection、persistent-timer、archive-exploit、arbitrary-write、deserializeOBFUSCATION6base64、env-trigger、hidden-exec、persistent-shell合计****57-
bash
./scripts/scan.sh https://clawhub.ai/owner/skill-name
./scripts/scan.sh https://github.com/user/repo
bash
./scripts/scan.sh /path/to/skill
./scripts/scan.sh ~/.openclaw/workspace/skills/crypto-wallet
bash
./scripts/scan.sh --format json https://clawhub.ai/owner/skill-name
bash
./scripts/scan-all.sh
评分等级建议80-100✅ 安全可正常使用30-79⚠️ 可疑建议审查后使用0-29🚫 危险不推荐安装使用
静态扫描适合找"有没有危险操作",但判断不了"这个危险操作是不是工具本身的功能"。例如:
credential-access — 安全工具检测 credential 是正常功能,不是泄露backtick-injection — 可能是 Markdown 转义,不是命令注入npx-exec — 可能是构建/安装脚本,不是运行恶意包text
1. 用户:"检测 [skill] 的安全性"
2. Agent 执行:
bash scripts/scan.sh https://clawhub.ai/owner/skill-name
3. Agent 输出完整报告(包含所有章节)
4. Agent 询问:
"发现 {N} 个风险,安全评分 {score}/100。
是否需要我进行 LLM 语义分析来判断这些是真实威胁还是误报?"
5. 用户确认后,Agent 从脚本输出中提取 LLM 语义分析提示,
执行语义分析并输出结论
6. 用户选择不分析时,Agent 仅输出报告,不追问
text
🔒 **Skill 安全检测报告**
════════════════════════════════════════════════════════════════════
**Skill 名称:** <skill-name>
**扫描文件:** <N> 个
**检测问题:** <N> 个
📊 安全评分:✅/⚠️/🚫 <score>/100 — <status>
🔍 **检测清单:** ✅ 全部威胁分类已检测
| 文件类型 | 状态 |
|----------|------|
| JavaScript (.js) | ✅/➖ 无 |
| TypeScript (.ts) | ✅/➖ 无 |
| Python (.py) | ✅/➖ 无 |
| Shell (.sh) | ✅/➖ 无 |
**🛡️ 威胁检测规则(共 57 项):**
- **EXFIL (18):** credential-access, vault-access...
- **INJECTION (19):** remote-script, cmd-execution...
- **TROJAN (14):** destructive-delete, process-kill...
- **OBFUSCATION (6):** base64, env-trigger...
📊 **检测结果:** 发现 <N> 个风险
- 🔴 critical: <N> 个
- 🟠 high: <N> 个
- 🟡 medium: <N> 个
---
**⚠️ 风险详情:**
| # | 分类 | 风险 | 等级 | 文件 |
|:---:|--------|------------------|-----------|------------|
| 1 | <分类> | <风险名> | <等级> | <文件> |
---
**每条风险解释:**
- <风险名> — <解释>
---
✅/⚠️/🚫 **结论:<结论>**
---
⚠️ 发现 {N} 个风险,安全评分 {score}/100。
是否需要我进行 LLM 语义分析来判断这些是真实威胁还是误报?
当用户确认后,从脚本输出中提取以下内容生成提示:
text
# Skill 安全语义分析请求
## 任务
你是一位专业的代码安全审计员。请从安全产品角度分析以下 Skill,判断它是否可以安全安装使用。
## 安全评估六维框架
| 维度 | 问题 | 权重 |
|------|------|------|
| **1. 数据透明** | 它访问/发送了什么数据?去了哪里?是否告知用户? | 高 |
| **2. 权限边界** | 申请的权限(网络/文件/进程/环境变量)是否超出声明功能? | 高 |
| **3. 行为透明** | 有没有未声明的偷偷执行行为? | 极高 |
| **4. 供应链风险** | 执行外部包(npx/pip/git)来源可信吗?版本固定吗? | 高 |
| **5. 用户控制** | 用户能随时停止/禁用吗?敏感操作有确认吗? | 中 |
| **6. 成本告知** | 有没有隐性成本(Gas费/算力消耗/付费API)? | 中 |
## 额外判断
如存在以下任一情况,直接标记为 failed:
1. **数据外泄**:向非功能必需的第三方发送用户数据
2. **偷偷执行**:在用户不知情时执行额外行为
3. **权限超出**:申请的权限超出 Skill 声明的功能范围
4. **供应链攻击**:执行来源不明的外部包
5. **用户无控制**:无法停止、或停止后自动重启
6. **成本不透明**:产生用户无法预估的成本
## 分析要求
请按以下格式输出:
### 1. 六维评估
- **[维度名]**:[通过/关注/警告] — [简要说明]
### 2. 总体评估
- 语义检测结果:✅ passed / ⚠️ failed / 🚫 failed
- 理由:综合六维判断,给出整体结论
### 3. 逐文件分析
对每个有风险的文件,以表格形式输出:
| 风险 | 判断 | 说明 | 越界行为 |
|------|------|------|---------|
| [风险名] | ✅误报/⚠️低风险/🚨真实威胁 | [详细解释] | ⚠️ 维度X+Y / 无明显越界行为 |
### 4. 最终建议
- 是否可以安装使用?
- 需要注意什么?
## 静态扫描报告
[从脚本输出中提取风险表格 + 相关文件代码]
当用户提出以下问题时触发检测流程:
类型触发短语扫描检测"扫描 [链接/名称] 的安全性""检测一下 [skill名称]""帮我扫描一下这个 skill"风险询问"[skill] 有风险吗""这个 skill 安全吗""检查 [链接] 是否有安全问题"安全评估"评估一下 [名称] 的安全性""[skill] 会不会有恶意代码"
bash
./scripts/scan.sh --format json <target>
json
{
"skill": "example-skill",
"score": 55,
"files": 3,
"issues": [
{"category":"INJECTION","rule":"backtick-injection","level":"critical","file":"handler.js","snippet":"backtick"}
]
}
bash
# 添加到白名单
./scripts/scan.sh --whitelist-add skill-name
# 从白名单移除
./scripts/scan.sh --whitelist-remove skill-name
# 查看白名单
./scripts/scan.sh --whitelist-list
text
skill-security-scanner/
├── SKILL.md # 本文档
├── scripts/
│ ├── scan.sh # 核心扫描脚本
│ └── scan-all.sh # 批量扫描脚本
├── references/
│ ├── rules.md # 详细检测规则
│ └── dangerous-commands.md # 危险命令列表
└── whitelist.txt # 白名单文件(自动创建)
版本日期更新内容v1.0-基础命令注入检测v2.0-混淆检测、间接执行、依赖审计v3.02026-03-18整合 ClawHub jax 规则(AI投毒、木马检测)v4.02026-03-18威胁分类、完整报告规范、JSONL 输出v4.12026-03-21新增 LLM 语义分析提示生成(解决静态扫描误报)v4.32026-03-21重构 LLM 语义分析 prompt:引入安全评估六维框架 + 六维额外判断标准(数据透明/权限边界/行为透明/供应链风险/用户控制/成本告知);修复文件内容重复输出 bug