综合防护卫士(skill-guard / Comprehensive Guard)
> 支付网关披露:本技能按次付费(¥9.9/次),计费通过支付宝官方 AI 按量付费(A2M)协议完成。付费闸口脚本 scripts/payment_gate.py 会向作者运营的商户结算网关 https://pay.hdlkp.com 发起 HTTPS 请求,获取 402 账单并将账单交还宿主 Agent;由宿主 Agent 的支付宝 A2M 买家能力(如 alipay-aipay 技能)调起收银台、完成扫码付款、取得 Payment-Proof 后回传验付。该域名归属作者本人,仅用于生成账单、验付与履约确认,不采集用户个人数据,不存储支付凭证。结算资金由持牌支付机构(支付宝)清算,开发者不接触资金。
概述
综合防护卫士在用户安装或启用任何第三方扩展之前做静态安全扫描,覆盖三类对象:
- Skill:技能包(
SKILL.md+scripts/+assets/) - MCP server:package.json / pyproject.toml / setup.py + 源码 + 客户端配置
- 插件:manifest.json +
content_scripts+background/service_worker源码
识别五类威胁(后门 / 恶意指令 / 诱导外发 / 广告植入 / 强制引流)及 MCP / 插件各自的对象特有暴露面,输出分级处置(🟢 通过 / 🟡 可疑 / 🔴 恶意),对恶意对象自动隔离(可撤销),清除须人工确认。
核心原则:先扫描后启用;只扫扩展包不扫人;分级处置(提示 / 隔离 / 清除);执行权在用户;全部可撤销;脱敏零落盘。
使用场景
- 用户准备安装 / 启用任何第三方 Skill、接入第三方 MCP server、安装第三方插件(本地目录、GitHub、技能市场、MCP 市场、插件商店)
- 用户怀疑某已装扩展行为异常(弹广告、诱导外发、拉起可疑进程)
- 定期巡检:对本地全部 Skill / 已注册 MCP server / 已装插件做安全体检(
scan --all的三对象版) - 宿主在加载扩展前自动触发(集成层调用)
触发条件
何时用
- 安装 / 启用任一第三方扩展之前
- 对可疑扩展做定点扫描
- 定期全量巡检
- 宿主加载扩展前的自动门禁
何时不用
- 只做静态分析,绝不运行被检 Skill 脚本 / 启动 MCP server / 加载插件
- 只扫扩展包不扫人:硬排除个人文档 / 密钥文件 / 聊天记录 / 系统目录
- 密钥红线:绝不读取、扫描任何密钥文件与云端密钥配置
- 不后台作业:禁止无人值守后台任务与定时自动清除
- 不越权加需求:仅做三对象综合防护必需的能力
工作流程
第三方扩展安装 / 启用 / 巡检 / 宿主加载前
│ 触发
▼
┌──────────────────────────────────────┐
│ 综合防护卫士扫描器(skill_guard.py) │
│ ① 对象识别:skill / mcp / plugin │
│ ② 扫描:入口文件 + 规则库匹配 │
│ ③ 分级:🟢 / 🟡 / 🔴 │
│ ④ 处置:提示 / 隔离(可撤销) / 清除(确认)│
└──────────────────────────────────────┘
| 步骤 | 动作 | 判定 |
|---|---|---|
| ① 触发 | 安装 / 启用 / 巡检 / 宿主加载前 | — |
| ② 扫描 | 识别对象类型 → 遍历入口文件 → 规则库正则匹配(可复算) | 命中聚合 |
| ③ 分级 | 🟢 零命中 / 🟡 可疑命中(需确认)/ 🔴 恶意命中(自动隔离) | PASS / SUGGEST / BLOCK |
| ④ 处置 | 🟢 放行;🟡 确认后放行或隔离;🔴 自动隔离 + 清除须确认 | 人工授权后执行 |
fail-closed:规则库缺失 / 读取失败 / 对象类型无法判定 → 默认阻止安装启用(拦截,不执行)。
五维检测 × 三对象映射
五维(恶意维度,适用三类对象)由通用规则 + 各对象特有规则共同覆盖:
| 五维 | Skill 入口 | MCP server 入口 | 插件入口 |
|---|---|---|---|
| 后门 | SKILL.md + 脚本执行外部命令、base64 混淆、eval/exec |
自动下载执行(npx/uvx/pipx 未锁定)、远程 fetch 拉载荷、SSE/HTTP 反向连接、env 窃取后执行 | 原生消息拉起进程、远程 JS fetch+eval、background 持久化 |
| 恶意指令 | SKILL.md prompt 注入、系统覆盖、伪授权话术 |
tool/resource/prompt 描述注入、注册信息诱导越权 | 扩展描述 / 内容脚本指令注入、DOM 层操纵上下文 |
| 诱导外发 | 读密钥后外发、隐藏 telemetry、可疑域名回传 | fetch 向外部端点外发、env/密钥外发、未授权网络请求 | cookies/clipboard/表单数据外发、beacon |
| 广告植入 | 强制广告文案、隐藏广告链接、关注/下载诱导 | tool 描述夹带广告、resource 注入广告 | 内容脚本浮层广告、注入广告链接 |
| 强制引流 | 强制跳转外链、捆绑安装、替换默认配置 | 客户端配置 url 指向外部、替换上游 server、强制跳转 | proxy 覆盖、替换搜索/主页、强制重定向 |
对象特有维度(命名空间 skillguard-mcp-* / skillguard-plugin-*):
- MCP 6 组:
mcp-remote-fetch/mcp-tool-permission/mcp-transport/mcp-auto-install/mcp-env-theft/mcp-prompt-injection - 插件 6 组:
plugin-permission-abuse/plugin-content-script-inject/plugin-native-messaging/plugin-remote-code/plugin-data-theft/plugin-proxy-override
每条命中带稳定 rule_id + 维度 + 严重度 + 命中行号 + 证据片段 sha256,全部来自本地规则库,可复算、零硬编码。
分级处置闭环
| 等级 | 判定(读阈值表,可复算) | 处置 |
|---|---|---|
| 🟢 PASS | malicious==0 && suspect==0 |
放行 |
| 🟡 SUGGEST | malicious==0 && suspect∈[1,2] |
人工确认后放行或隔离 |
| 🔴 BLOCK | malicious≥1 或 suspect≥3 |
自动隔离(可撤销);清除须人工确认 |
阈值表位于 assets/skill_guard_rules.json 的 grade_thresholds,三类对象共用。
隔离 / 撤销 / 清除
- 🔴 恶意命中即自动隔离:整包(Skill 目录 / MCP server 目录 / 插件目录)同盘移动至撤销备份区(不复制),逐项登记隔离 manifest(含
object_type)。 - 隔离批次保留最近 3 批,更早批次清理前提示(不静默删除)。
- 撤销(undo --restore):按 manifest 原路移回,逐项校验(源路径存在性 + 哈希一致);部分失败如实汇报「部分恢复」。
- 清除(clear --id):永久删除,必须人工确认——无
--yes仅提示并返回非零;确认后--yes才执行,事件带human_decision=confirmed。
双通道接口(语音 + 点击)
- 总唤醒词可由宿主定义;本包语音指令表(等价 CLI):
| 语音指令 | 等价动作 |
|---|---|
| “扫这个 skill” | scan --type skill --path <dir> |
| “扫这个 mcp” | scan --type mcp --path <dir> |
| “扫这个插件” | scan --type plugin --path <dir> |
| “巡检全部” | scan --all(三对象全扫) |
| “查报告” | query [--status ...] |
| “隔离毒对象” | quarantine --id <run_id> |
| “清除毒对象” | clear --id <run_id>(须人工确认) |
| “恢复误隔离” | undo --restore <quarantine_id> |
- 点击入口:安全中心 → 综合防护卫士 → 立即扫描(选对象)/ 查看报告 / 隔离区管理 / 清除确认。
- 授权一致:语音确认 ≡ 点击确认(唯一执行出口);🟡 放行、🔴 清除必须人工确认;🔴 隔离为系统默认动作。
- CLI 无 UI 依赖:
query/export纯命令行可用。
审计汇入(16 列契约)
扫描 / 隔离 / 清除 / 恢复事件按 16 列契约汇入审计底座,零新增列。三对象类型不新增列,编码进既有列:
anomaly_type:<type>-guard-scan/<type>-quarantined/<type>-cleared/<type>-restored,<type>∈skill/mcp/plugintarget:<type>:<path>前缀约定(机器可解析)
事件族统一为 skillguard.{scan,quarantined,cleared,restored}。脱敏约束:evidence_hash 仅记文件名+行号+rule_id+片段 sha256;外发 URL 仅记域名不记载荷。详见 references/audit-schema.md。
安全边界 / 红线
- 未授权零处置:隔离/清除/放行的唯一出口是用户授权;本次会话授权不缓存。
- 只扫扩展包,不扫人:硬排除个人文档/密钥文件/聊天记录/系统目录;敏感文件按名跳过绝不读取。
- 脱敏零落盘:evidence 只记文件名+行号+rule_id+哈希,绝不落敏感值;外发 URL 只记域名。
- 🔴 恶意自动隔离、清除须人工确认:恶意对象检测即隔离(移备份区);清除(永久删除)必须用户逐项确认,执行权在用户。
- 撤销生效:隔离走同盘移动不复制、保留最近 3 批、manifest 登记、逐项哈希校验、恢复后内容完整。
- 只 scan 不执行:纯静态分析,绝不执行被检对象代码。
规则文件与脚本
assets/skill_guard_rules.json:三对象五维 + 对象特有规则库(schema v2.0.0),rule_id 稳定、可复算、零硬编码路径。assets/scripts/skill_guard.py:扫描 + 分级 + 隔离 + 清除 + 撤销 + 事件记录 + query/export,Python 3.11+ 标准库,零第三方依赖。scripts/payment_gate.py:付费闸口(探测 402 账单 / 交还宿主 Agent 付款 / 回传 Payment-Proof 验付放行 / 幂等持久化),付费版专属。references/rule-authoring.md:规则编写与扩展指南(命名空间 / stable rule_id)。references/audit-schema.md:16 列契约与三对象类型编码方案。references/guide.md:安装与调用指南(付费版)。--selftest自检门禁:规则库完整性 / 分级正确性 / 脱敏 / 隔离撤销往返 / 边界用例(覆盖五维×三对象、MCP/插件各 6 维、fail-closed、最近 3 批、部分恢复、三格式导出、16 列完整)。scripts/payment_gate.py --selftest:付费闸口自检门禁(402 账单交还 / Proof 验付放行 / 假 Proof 拒绝 / 网关不可达拒绝 / 幂等 / 零落盘凭证)。
报告与出厂说明
- 扫描 / 隔离 / 清除报告:分级汇总 + findings 清单(含
object_type+rule_id+ 命中依据)+ 处置记录,中英双语;数据与 findings 一致可追溯。 - 出厂说明书:
factory_manual_zh.md/factory_manual_en.md。
检测局限性(诚实声明)
本技能是静态分析工具,能力有明确边界,请结合自身判断使用:
- 只做静态扫描:不运行被检代码,因此无法发现运行时才暴露的行为(如依赖安装后执行的恶意脚本、需特定输入触发的逻辑)。
- 混淆 / 编码 / 复杂加载:重度 base64 嵌套、动态
eval、远程拉取载荷等手法可能绕过正则规则,存在漏报可能。 - 误报:正常代码若含可疑模式(如合法的远程 fetch、env 读取)可能被标为 🟡 可疑,需人工确认。
- 非替代人工判断:分级处置建议仅作参考,是否启用 / 隔离 / 清除的最终决定权在用户。
如评测或自查发现漏报 / 误报样本,欢迎通过 SkillHub 反馈,规则库会持续更新(付费版含此服务)。
合规声明
- 《数据安全法》:防敏感数据违规外流;脱敏零落盘。
- 《个人信息保护法》:只扫扩展包不扫人;敏感文件按名跳过。
- 《智能体规范应用与创新发展实施意见》(2026.5):内容安全、无害指令/诱导行为拦截。
- 《网络安全法》/ 等保 2.0:防木马后门、fail-closed、分级处置闭环。
- 《数据出境安全评估办法》:外部域名 / server / 跨境 endpoint 检测;外发 URL 仅记域名以便出境审计。
> 🔴 边界声明:本技能对恶意对象自动隔离;清除(永久删除)必须人工确认,执行权在用户;本技能不替代用户的安全判断与授权。
支付宝付费改造契约(PAYSKILL · A2M 真实链路)
> 计费模式、凭证作用、付款前后该做什么,见 references/billing.md;首次使用与「付款后续跑」最简步骤见 references/quickstart.md。
本技能为按次付费技能(PAYSKILL · 支付宝 AI 按量付费 / A2M),计费模式 per_call,单价 ¥9.90/次。每一次有效扫描调用都会经真实支付链路完成扣费。付费走云端保护交付,用户不获取完整 Skill 明文。
> ⚠️ v2.1.2 关键修正(路线 A):旧版 v2.1.1 在包内 spawn 一个并不存在的 alipay-bot 二进制来拉收银台,导致任何买家装了也付不了款(这正是此前 27 次下载 0 收款的根因)。真实 A2M 协议下,买家侧付款必须由宿主 Agent(买家的 WorkBuddy)的支付宝 A2M 买家能力完成,技能包自己绝不拉收银台。本版已彻底移除对不存在命令的依赖,改为"探测 402 → 交还账单给宿主 Agent → 宿主 Agent 付款后回传 Payment-Proof 验付放行"的正确链路。
架构定位(两段式)
付费是宿主 Agent 买家端 + 商户自有网关两段式,SkillHub 平台只做展示与投诉、不提供支付网关:
- 商户 A2M 网关(作者部署,公网可访问
https://pay.hdlkp.com):负责签发 402 账单(用商户应用私钥 RSA2 签名)、验付alipay.aipay.agent.payment.verify、履约回执alipay.aipay.agent.fulfillment.confirm,并做订单幂等。私钥与资金只在网关侧,本技能客户端零接触。 - 本技能
scripts/payment_gate.py(买家侧 A2M 客户端):只负责"探测 → 取账单交还宿主 Agent → 回验付 → 放行",不拉收银台、不持有密钥、不碰资金、不伪造账单。
真实流程(路线 A · 宿主 Agent 付款)
scripts/payment_gate.py 的 gate() 主流程对齐支付宝官方 A2M 协议:
- 本地幂等探测:已付费且 24h 内,直接放行(不重复弹码)。
- 探测网关:
GET {SKILLHUB_A2M_GATEWAY}/api/security-scan?skill=skillguard-pro&target=<待扫描目标>(不带 Proof)。
- ⚠️target是网关的强制契约:缺失一律返回400 TARGET_REQUIRED,账单签不出来。目标由宿主 Agent 经环境变量SKILLGUARD_TARGET传入(如SKILLGUARD_TARGET=gold-music-master)。缺失时脚本会直接给出Target-Required与修复指引,不会把 400 误报成"网关坏了"。
- 网关未验到有效付款 → 返回 HTTP 402 +Payment-Needed头(Base64URL 账单 JSON)。 - 交还账单:脚本解码账单,输出
action: pay-via-aipay-agent+ 完整bill+resource_url+agent_instruction,交还宿主 Agent。此时不拉收银台、不静默放行。 - 宿主 Agent 付款:宿主 Agent 调用其支付宝 A2M 买家能力(如
alipay-aipay技能 / 支付宝 Agent 付款)对上方账单完成扫码付款,取得Payment-Proof。 - 回传 Proof:宿主 Agent 重跑本技能扫描,通过环境变量
SKILLGUARD_PROOF=<Payment-Proof>把凭证带回(也可用--proof参数),并沿用同一个SKILLGUARD_TARGET——换了 target 会被视为另一笔订单。 - 验付放行:脚本带 Proof 回网关验付 → 网关 200 +
Payment-Validation→ 放行主流程(实际扫描);本地只缓存 Proof 摘要与时间戳(脱敏零落盘)。 - fail-closed:网关不可达 / 账单缺失或解码失败 / 验付未过(伪造 / 过期 / 不匹配)→ 一律拒绝放行(返回 402 / 403),绝不静默放行。
用户调用 → 本地幂等? → 否 → GET 网关(未付, 带 skill+target) → 402 + Payment-Needed
→ 脚本交还账单给宿主 Agent
→ 宿主 Agent 调支付宝 A2M 买家能力弹码 → 用户扫码付款 → 取得 Payment-Proof
→ 宿主 Agent 重跑扫描, 经 SKILLGUARD_PROOF 回传 Proof
→ 脚本带 Proof 回网关验付 → 200 + Payment-Validation → 放行扫描主流程
网络容错与错误提示(v2.1.3)
网关交互已内置自动重试与分类错误提示,避免网络抖动被误报成"付不了款":
| 项 | 行为 |
|---|---|
| 单次超时 | 20 秒(HTTP_TIMEOUT) |
| 额外重试 | 2 次(MAX_RETRIES),指数退避 1s → 2s,单次退避上限 8s |
| 重试范围 | 仅网络类异常(超时 / DNS 失败 / 连接被拒或重置) |
| 不重试 | HTTP 状态码(402/403/400 等是网关的明确答复)、证书校验失败、参数与解码类逻辑错误 |
| 重试耗尽 | 抛错 → 上层 fail-closed 拒绝放行,绝不误放行 |
错误提示按根因分类,并附修正引导(code / message / remedy 三段):
| code | 触发条件 | 修正引导要点 |
|---|---|---|
Gateway-Timeout |
请求超时 | 检查网络连通性 / 稍后重试 / 确认网关服务状态 |
Gateway-DNS-Error |
域名解析失败 | 检查 DNS 可用性 / 确认域名未被网络策略屏蔽 |
Gateway-TLS-Error |
证书校验失败 | 检查系统时间 / 补装根证书 / 企业代理是否拦截 HTTPS |
Gateway-Connection-Refused |
连接被拒 | 确认服务在跑 / 安全组与防火墙放通 443 |
Gateway-Connection-Reset |
连接被重置 | 检查网络与代理设置 |
Target-Required |
缺 SKILLGUARD_TARGET |
按提示设置环境变量后重试 |
Payment-Verify-Failed |
凭证验付未过 | 重新付款取新凭证(fail-closed,不放行) |
> 离线自检已扩展至 10 项:除原有 4 项(配置/URL/账单解码/零落盘)外,新增 6 项网络容错用例——重试后成功、重试耗尽抛错、HTTP 不重试、证书错误不重试、错误分类可读、DNS 单独分类。自检使用临时缓存目录,不会污染真实付费状态。
闸口位置与集成
scripts/payment_gate.py 由 assets/scripts/skill_guard.py 的 scan 命令前置调用;未付费或凭证无效时,scan 以退出码 402 终止,不执行任何扫描。子进程会继承父进程(宿主 Agent)环境变量,故 SKILLGUARD_PROOF 可在付款后由 Agent 注入并被闸口读到。
- 离线自检:
python scripts/payment_gate.py --selftest(不触网、不调支付宝,10/10 通过;用临时缓存目录,不污染真实付费状态)。 - 状态探测:
python scripts/payment_gate.py --probe(仅查本地已付费缓存)。 - 回传凭证:
python scripts/payment_gate.py --proof "<Payment-Proof>"(等价于环境变量SKILLGUARD_PROOF)。
真实买家环境要求
要让买家真正付得了款,须同时满足:
- 宿主 Agent 具备支付宝 A2M 买家能力——买家的 WorkBuddy 需加载
alipay-aipay技能(或平台等价的 Agent 付款能力),否则脚本返回 402 账单后无人能拉起收银台。 - 买家已登录支付宝并完成 A2M 授权,能扫码付款、取得
Payment-Proof。 - 商户网关
https://pay.hdlkp.com在线且已绑定支付宝收款——作者侧已在 SkillHub 后台配置个人支付宝收款,网关会签 402 账单。
> 作者自购会被平台自交易风控拦截,验收须用另一个 WorkBuddy 账号(买家小号,不同身份)实测。
环境变量约定
| 变量 | 用途 |
|---|---|
SKILLGUARD_PROOF |
买家付款后,宿主 Agent 回传的 Payment-Proof(Base64URL JSON 字符串);脚本带它回网关验付。也可用 --proof 参数传入 |
SKILLGUARD_TARGET |
待扫描目标(Skill / MCP / 插件目录名)。网关强制要求,缺失回 400 TARGET_REQUIRED。宿主 Agent 扫描前必须设置,且付款后回传凭证时沿用同一个值 |
SKILLHUB_A2M_GATEWAY |
商户 A2M 网关公网基址,缺省为 https://pay.hdlkp.com(已生效,作者部署);可通过环境变量覆盖指向自建网关 |
PAYSKILL_SLUG |
覆盖技能标识(缺省取 skillguard-pro) |
> 网关侧(商户网关)持有的生产参数:serviceId=API_6163F99CCE8C4FB6、appId=2021007112683035、seller_id=2088502881337928,签约已生效,网关已上线并会签 402 账单。