ClawHub 安全扫描架构揭秘:ClawScan 如何检测恶意 AI 技能,附 VirusTotal 集成原理
【免费下载链接】clawhubSkill + Plugin Registry for OpenClaw项目地址: https://gitcode.com/gh_mirrors/mo/clawhub
ClawHub 是 OpenClaw 生态的 Skill + Plugin 注册表(Skill + Plugin Registry)。本文揭秘 ClawHub 安全扫描的完整架构:自研系统ClawScan如何把每个技能当作"面向 Agent 的产物"来审计、如何检测恶意 AI 技能,以及 VirusTotal 在其中的集成原理——即使你是新手,也能看懂一次技能发布从排队到判定的全流程。
🦞 一次发布要经过哪些安全扫描
你在 ClawHub 发布一个技能或插件后,它不会立刻"裸奔",而是进入异步安全扫描队列。审计状态有 6 种:
| 状态 | 含义 |
|---|---|
Pass | 未发现低于低风险的可见问题 |
Review | 安装前先阅读发现项,发布物仍可能是合法的 |
Warn | 高风险关注点或警告信号,需格外谨慎 |
Malicious | 不要安装 |
Pending | 审计尚未完成 |
Error | 审计无法完成 |
配套还有风险等级(Low/Medium/High):风险等级回答"它有多大权力",审计状态回答"你该怎么对待这个结果"。详细说明见 docs/security-audits.md。
🔍 ClawScan 风险分析:把技能当作"面向 Agent 的产物"
ClawScan 是 ClawHub 自研的安全审计系统,是审计栈的核心。它与传统杀软的思路不同:不只看文件签名,而是审查技能作为一个"给 AI Agent 看的产物"是否自洽。它会综合以下信号:
- 技能指令与插件元数据(instructions、metadata)
- 声明的环境变量与权限
- 安装包内的文件清单与安装说明
- 能力信号(capability signals)与静态扫描信号
- SkillSpector 静态检测发现项
- VirusTotal 遥测
- 发布者提供的相关上下文
判断的核心问题是coherence(一致性):名称、简介、元数据、申请的权限和实际内容,是否与用户合理预期相符?能力强大本身不等于恶意——ClawScan 会追问这项能力是否被披露、是否服务于声明用途、是否与用例匹配。
风险分析还以 OWASP Agentic Skills Top 10 为透镜,重点覆盖:提示词注入、工具滥用、凭据泄露、不安全执行、记忆/上下文投毒、过度代理(excessive agency)等 AI 技能特有风险。扫描队列与任务调度的核心逻辑位于 convex/securityScan.ts,其中静态扫描信号仅作为内部评审上下文,不会单独变成公开的"拦截判决"。
⚙️ 扫描流水线如何运转:从排队、领取到判定
整条流水线是"队列 + 工作进程"的经典架构,共三步:
- 入队:发布动作触发扫描请求,系统为任务创建
securityScanJobs队列条目,默认每次任务预留10 分钟等待 VirusTotal 结果(convex/securityScan.ts#L36-L37),并允许最多 3 次尝试(convex/securityScan.ts#L39)。 - 领取与物化:扫描工作进程 scripts/security/run-codex-scan-worker.ts 通过租约(lease token)竞争领取任务,支持三种扫描对象——技能版本、插件发布物、手动提交的扫描请求(scripts/security/run-codex-scan-worker.ts#L28-L51)。领取后先把产物文件安全物化到临时目录。
- 判定与入库:工作进程依次执行 SkillSpector 静态扫描与 LLM 分析,最终状态收敛为
clean/suspicious/malicious等结论(convex/securityScan.ts#L66-L67),LLM 输出的维度化评估由 convex/lib/securityPrompt.ts 解析,输出结构受 scripts/security/codex-scan-output.schema.json 约束;同时工作进程的日志和错误信息会经过脱敏(redaction),防止密钥外泄。
发现项会带Info/Low/Medium/High/Critical严重度标签;低置信度的发现项不会进入公开审计汇总,页面只保留有说服力的证据。
🛡️ VirusTotal 集成原理:多厂商引擎信号如何变成一句话
ClawHub 将 VirusTotal 作为审计栈中的**恶意软件遥测(telemetry)**层——业界公认的文件信誉与恶意扫描标准。集成方式很务实:
- 扫描任务在创建时就记下
waitForVtUntil截止时间(scripts/security/run-codex-scan-worker.ts#L35),让风险分析与多厂商引擎结果对齐; - 当厂商引擎计数可用时,审计页会把原始计数翻译成普通人能读懂的话,例如"62/62 家厂商判定该技能为干净"或"2/64 家标记为恶意";
- 没有遥测数据时则明确显示"No VirusTotal findings",不制造虚假安全感。
需要强调的是:VirusTotal 只是补充信号,尤其擅长命中已知恶意产物;它不替代 ClawScan 自身"理解 Agent 产物"的风险分析。两者的结合正是这套审计栈的设计精髓——传统文件信誉 × AI 技能语义审查。
📋 怎么读你的技能安全审计页
每个技能/插件页面都提供完整审计报告(路径形如/<owner>/skills/<slug>/security-audit),它把SkillSpector + VirusTotal + 风险分析三部分合并展示。安装前建议按顺序看:审计状态 → 风险等级 → 发现项 → 所需凭据与权限 → 发布者、版本、下载量与星标等信任信号。
如果你是发布者,还可以在发布前用 CLI 主动触发扫描:clawhub scan命令会把扫描提交到注册表、轮询队列进度,并可下载完整报告包,实现逻辑见 packages/clawhub/src/cli/commands/scan.ts。
🚨 扫描之外的第二道防线:发布者滥用信号
恶意技能检测之外,ClawHub 还持续运行发布者滥用信号扫描,专门捕捉"统计上不对劲"的账号行为,例如:
- 高安装/下载比(High install/download ratio)
- 持续下载、安装持平(Sustained downloads, flat installs)——典型的刷量特征
这些信号会按严重度分级(Potential ban / On the brink / All flagged),进入审核队列,超过阈值可触发自动封禁;评分逻辑位于 convex/lib/publisherAbuseScoring.ts。
📚 延伸阅读与源码索引
- 审计结果怎么读:docs/security-audits.md
- 平台安全与漏洞披露:docs/security.md
- 举报、moderation hold 与封禁机制:docs/moderation.md
- 扫描队列与任务调度:convex/securityScan.ts
- 扫描工作进程(物化、SkillSpector、LLM 判定):scripts/security/run-codex-scan-worker.ts
- LLM 评估输出解析:convex/lib/securityPrompt.ts
- 发布者滥用评分:convex/lib/publisherAbuseScoring.ts
- 数据模型定义:convex/schema.ts
一句话总结:ClawHub 用"语义审查(ClawScan)+ 文件信誉(VirusTotal)+ 静态检测(SkillSpector)+ 发布者行为信号"四层防线,让恶意 AI 技能在到达你的 Agent 之前就被拦截——而你要做的,只是安装前多看一眼那行审计状态。
【免费下载链接】clawhubSkill + Plugin Registry for OpenClaw项目地址: https://gitcode.com/gh_mirrors/mo/clawhub
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考