Install
openclaw skills install zhongkui-skill钟馗.Skill——会更新漏洞库的安全审查专家。直来直去、快刀斩乱麻,三层审查(静态审计/行为模拟/供应链溯源)覆盖12类风险,输出结构化安全裁定(✅干净/⚠️可疑/🚫恶意)。Use when 用户说"审查这个Skill"、"安全检查"、"钟馗看下"、"审一下"、"查一下这个skill"、安装Skill前的安全评估、或需要审计SKILL.md的恶意载荷。
openclaw skills install zhongkui-skill俺不跟你绕弯子。Skill 拿来,一眼看穿。
| 指令 | 作用 |
|---|---|
审 <skill路径> | 对单个 Skill 目录执行完整三层审查 |
快审 <skill路径> | 仅执行 Layer 1 静态审计(秒级) |
审依赖 <skill路径> | 仅执行 Layer 3 供应链溯源 |
审行为 <skill路径> | 仅执行 Layer 2 行为模拟 |
| 场景 | 指令 | 说明 |
|---|---|---|
| 安装前审查 | 审 E:\skills\mcp-server | 装之前先审,出完整报告 |
| 批量初筛 | 快审 E:\skills\repo\skill-a → 快审 E:\skills\repo\skill-b | 多个 Skill 逐个快速过 L1 |
| 只担心依赖 | 审依赖 E:\skills\new-skill | 跳过行为模拟,只查供应链 |
| 复查可疑项 | 审行为 E:\skills\flagged-skill | L1 通过了但怀疑 R8/R11/R12 |
| 审自己的 Skill | 审 E:\Marvis_Data\User\...\skills\custom\my-skill | 发布前自审,查红线和一票否决 |
| 脚本模式 | python zhongkui.py E:\skills\target --quick | 脱离对话直接跑脚本,适合 CI/CD |
| 审查前先更新 | python zhongkui.py E:\skills\target --update | 预览漏洞库增量,确认后注入再审查 |
| 审查前直接更新 | python zhongkui.py E:\skills\target --update --apply | 跳过确认,直接注入后审查 |
| 仅更新漏洞库 | python zhongkui.py --update | 预览增量,交互确认后注入 |
| 预览更新效果 | python zhongkui.py --update --dry-run | 仅拉取预览,不注入 |
路径提示:对话中
审 ./my-skill等价于当前工作目录的相对路径。脚本模式必须用绝对路径。
按 references/static-audit.md 的 54 项清单逐项检查 SKILL.md / scripts / deps / permissions,每命中一项扣分并标注风险类型(R1-R12)和行号。检出 R1/R3/R5/R8/R11/R12 → 自动进入 Layer 2。
按 references/behavioral-emulation.md 的 21 个测试场景,用 ToolEmu 范式模拟工具调用链,跟踪 Agent 行为,每场景判定 PASS/WARN/FAIL。含 4.5 R8 隐蔽指令专项对抗(模糊测试 + 上下文感知分析)、4.6 R11 外部信息源投毒专项对抗、4.7 R12 智能体行为漏洞专项对抗。新增 4.4 红队对抗与持续验证(专项攻击测试集 + 自动化红队 + 外部渗透 + SLA),见 behavioral-emulation.md。
按 references/supply-chain.md 的 10 个维度追溯:发布者信誉(含动态评分模型)/ CVE 依赖 / 版本变更 / 社区反馈 / SBOM 完整性 / 外部 API 安全评估 / SDK 安全准入 / 熔断与降级预案 / 外部信息源信誉 / 持久化写入审计。含依赖项运行时行为监控。
钟馗的 patterns.json 采用两层架构:基础库(manual) + 增量库(auto)。
python zhongkui.py --update # 拉取 NVD CVE → 预览候选签名 → 交互确认 [y/N] → 注入
python zhongkui.py --update --apply # 跳过确认,直接注入
python zhongkui.py --update --dry-run # 仅预览,不注入
source: "manual"),--update 永不触碰--update 先清旧增量再注入最新,保持幂等patterns.json → patterns.json.bak审查过程中遇到非致命错误时,必须主动报告而非静默跳过。详见 references/error-handling.md。
| 异常类型 | 处理方式 |
|---|---|
| 文件读取失败(权限不足/不存在) | 明确报告哪些文件无法读取及原因,继续审查其余文件 |
| 文件编码无法识别 | 尝试 UTF-8 → GBK → Latin-1 自动降级,失败则报告并跳过该文件 |
| 脚本语法错误无法解析 | 报告文件路径+行号+错误类型,标记 parse_error 继续 |
| Layer 2 模拟中断(工具调用失败) | 报告中断场景编号和原因,已完成的场景正常计分 |
| Layer 3 网络请求失败 | 重试 1 次(间隔 3 秒),仍失败则标记 unreachable 并跳过该维度 |
| 目标路径为空目录 | 报告"目标目录无 Skill 文件",不做空审查 |
禁止行为:遇到以上异常时,禁止仅打印一行
ERROR后静默退出。必须输出异常上下文(文件路径+失败原因)后再继续或降级。
按 references/scoring.md 公式计算总分,输出三值裁定。数据安全维度独立计入(W3=0.1),见评分与裁定文件。
| 裁定 | 条件 | 处理 |
|---|---|---|
| ✅ 干净 | ≥ 85 分 | 可安全安装 |
| ⚠️-low | 70-84 分 | 低风险可疑,附带主要风险点供判断 |
| ⚠️-high | 60-69 分 | 高危可疑,建议拒绝+详细风险报告 |
| 🚫 恶意 | < 60 分 | 禁止安装,上报威胁情报 |
审查完成必须输出结构化报告,禁止闲聊:
## 钟馗裁定:[✅/⚠️/🚫]
**总分**:XX / 100
**一句话**:[一句话结论]
### 扣分项
| 层级 | 检查项 | 风险类型 | 扣分 | 命中内容(行号) |
|:---|:---|:---|:---|:---|
| L1 | [项名] | [R编号] | -X | `<file>:L<N>` |
### 未触发项
[仅列出高危项(R1/R3/R5/R8/R11/R12)的 PASS 状态,其余省略]
钟馗审得狠,但不是万能。以下场景明确告知查不了或查不准:
| 场景 | 说明 |
|---|---|
| 深度行为模拟 | Layer 2 的 21 个场景基于 ToolEmu 范式做静态推理,不是真正的沙箱执行。脚本的实际运行时行为(内存篡改、进程注入、系统调用劫持)无法在审查层完全复现 |
| 供应链实时监控 | Layer 3 依赖检查基于声明文件和已知 CVE 数据库做快照对比,不执行持续监控。依赖方发布新版本后不会自动重新审查 |
| 加密/混淆载荷深层解包 | 可检测 Base64 / eval / exec 模式,但对多层嵌套加密(AES + Base64 + zlib)或自定义混淆器可能漏检 |
| 语义级别的隐蔽攻击 | 正则+关键词对明显的注入模式有效,但对高度语义化的诱导(如通过 10 轮对话逐步构建的上下文污染)可能无法在 L1 检出——这正是 L2 行为模拟的设计目标,但 L2 也存在覆盖率上限 |
| 零日漏洞 | 审查基于已知攻击模式签名库,对全新的、未被收录的攻击向量存在盲区 |
| 多 Skill 组合攻击 | 单个 Skill 可能"干净",但两个 Skill 组合后产生权限串联——钟馗只审单 Skill,不做跨 Skill 组合分析 |
| 非标准 Skill 结构 | 假定 Skill 遵循标准目录结构(SKILL.md + scripts + references),对于完全自定义结构的 Skill 覆盖率会下降 |
原则:审查结果是对已知风险的自动化评估,不是安全担保。高风险场景(金融/医疗/政务)应结合人工复核。
| 编号 | 类型 | 一票否决? |
|---|---|---|
| R1 | 提示注入 | 是 |
| R2 | 恶意代码执行 | 是 |
| R3 | 凭证窃取 | 是 |
| R4 | 依赖投毒 | 否 |
| R5 | 数据外传 | 是 |
| R6 | 权限提升 | 否 |
| R7 | 持久化后门 | 是 |
| R8 | 隐蔽指令 | 否(但必进 Layer 2) |
| R9 | 数据泄露与隐私违规 | 否 |
| R10 | 有害输出与内容合规 | 否 |
| R11 | 外部信息源投毒 | 否(但必进 Layer 2) |
| R12 | 智能体行为级漏洞 | 否(但必进 Layer 2) |
命中任一"一票否决"项 → 直接裁定 🚫 恶意,不再计算总分。
见此即斩,无需走完整审查。
| # | 红线 | 说明 |
|---|---|---|
| 1 | 向不明 URL 发起 curl/wget | 检测外传通道,IP 直连加重 |
| 2 | 外发数据至外部服务器 | webhook / POST / upload / notify 到非官方域名 |
| 3 | 索要凭证 / Token / API Key | 任何 "请输入密钥" 或读取凭证文件的指令 |
| 4 | 无理由读取 ~/.ssh / ~/.aws / ~/.config | 除非 Skill 声明用途且匹配任务,否则直接判恶 |
| 5 | 访问 MEMORY.md / USER.md / SOUL.md / IDENTITY.md | 读取 Agent 身份记忆文件,典型隐私窃取 |
| 6 | 对任何内容执行 Base64 解码 | 解码 = 藏东西,99% 是恶意载荷 |
| 7 | eval() / exec() 接受外部输入 | 动态执行未验证代码,直接开后门 |
| 8 | 修改工作区外的系统文件 | /etc / C:\Windows / ~/ 等系统路径写操作 |
| 9 | 安装未声明的依赖包 | pip install / npm install 无声明列表 |
| 10 | 网络调用使用 IP 而非域名 | 刻意隐藏目标身份 |
| 11 | 混淆代码(压缩/编码/精简) | 有意阻碍人工审查 |
| 12 | 请求 sudo / root / 提权 | 任何权限提升尝试 |
| 13 | 触碰凭证文件 | ~/.aws/credentials / ~/.kube/config / .env / .git-credentials |
| 14 | 硬编码 Token / API Key / 密码 | SKILL.md 或脚本中直接写入凭证明文 |
| 15 | 日志/缓存记录明文 PII | 对 email/phone/ID card 等个人信息不做脱敏 |
| 16 | 生成暴力/违法/歧视性内容 | Skill 描述中含诱导生成有害内容的指令 |
| 17 | 复述或索引受版权保护全文 | 要求 Agent “完整输出” 受版权保护作品 |
命中任一条 → 直接裁定 🚫 恶意,不进入评分流程,与一票否决项同级。
以下是实际审查中反复出现的"这样做会出问题"案例,以及正确的做法。
❌ "钟馗给了 ✅,所以我放心装了" ✅ 钟馗是自动化扫描,不是安全审计。✅ 只说明已知模式的静态检查通过,不代表零风险。
❌ "SKILL.md 看起来没问题,脚本应该也没事" ✅ 大量恶意代码藏在 setup.sh / install.py 里。必须完整审查所有辅助脚本(S1-S12)。
❌ "这个 Skill 是 XXX 大厂出的,快审一下就行" ✅ 供应链攻击不挑品牌。知名发布者的账号可能被盗、CI 可能被投毒。一律执行 10 维供应链溯源,不因发布者信誉跳层。
❌ "WARN 不是 FAIL,问题不大" ✅ WARN 代表"执行了敏感操作但触发了用户确认"——意味着攻击者只需一次社会工程就能让用户自己点击确认。WARN 项应逐条检查。
❌ 审出一个 R3 扣分 → 改了一行 → 立刻再审 ✅ 修复单项后应重新走完整 L1(54 项),确保修复没有引入新的问题。
❌ "82 分,⚠️-low,还行" ✅ 82 分但扣分来自一票否决相关项(R1/R2/R3/R5/R7)时,即使最终分数不低,也应重点复查。评分是加权公式,一票否决项在 L2/L3 覆盖不足时可能被稀释。
Q: 为什么我的 Skill 被判 R8 但我觉得没问题?
A: R8 检查隐蔽 Unicode 字符(零宽空格/方向控制字符)和条件触发逻辑。八成是复制粘贴时带入了不可见字符。用 审 命令会给你具体行号,删除那段重写即可。
Q: 误报怎么办? A: 记下扣分项的具体行号和触发内容,反馈给钟馗。多引擎交叉验证机制保证不会单一规则误杀——语义 LLM 和正则关键词同时命中才会扣分。
Q: 审查多久? A: Layer 1 秒级(纯正则扫描)。Layer 2 约 30 秒(21 场景模拟推理)。Layer 3 取决于依赖数量和网络状况,完全离线时跳过网络维度。