Skill 安全审计
在把任何 Skill 装进工作区之前,先确认它没被投毒。本 skill 提供一套可复用的静态审计流程:
读知识库 → 跑扫描脚本 → 按风险分级给出处置建议。
何时使用
- 用户要安装 / 导入 / 下载 / 审查一个新 skill(市场、URL、压缩包、本地目录)
- 用户问"这个 skill 安全吗""会不会投毒""帮我看看这个 skill"
- 任何从非官方 / 陌生来源获取的 skill,进入生产项目前
> 触发即遵循系统硬性要求:安装新 skill 前必须先做安全审计,P0 风险直接拒绝。
执行流程
Step 1:阅读知识库(背景与红线)
读取 references/poisoning-patterns.md,了解投毒手法、识别特征与风险分级标准。
重点记住四类高危信号:
- 混淆执行 ——
base64 -d | bash、curl | sh、eval、powershell -enc、FromBase64String - 反弹 shell ——
/dev/tcp/、nc -e、bash -i、socat、mkfifo - 凭据外发 —— 脚本读
~/.ssh、~/.aws、id_rsa、.env、API_KEY并联网外发 - 提示注入 ——
忽略指令、ignore instructions、system prompt、把…发送/转发
Step 2:运行扫描脚本(核心动作)
确定待审计 skill 的目录路径后,运行扫描器:
python scripts/audit.py 待审计skill目录
可选参数:
- --json —— 输出结构化 JSON(便于二次处理 / 接自动化)
- --quiet —— 只输出结论行
脚本会递归扫描目录内所有文本文件与依赖清单,命中规则即记录 文件:行号、命中片段与说明,
并按 P0、P1、P2(由高到低)排序输出统计与结论。
> 若用户只给了单个文件(如一个 SKILL.md),也可直接传文件路径,脚本会连带扫描其所在目录的依赖。
Step 3:解读结论与处置
| 结论 | 含义 | 处置 |
|---|---|---|
P0 |
检出高确定性恶意模式 | 拒绝安装/使用,删除该 skill,并向用户说明命中项 |
P1 |
检出可疑外发/凭据读取 | 需人工确认用途;无合理解释则拒绝 |
P2 |
检出需确认行为(联网/执行/注入/依赖) | 确认功能确实需要后再用,尽量隔离运行 |
CLEAN |
未检出已知模式 | 仍建议仅从可信源安装、最小权限运行 |
脚本退出码:CLEAN 为 0,命中任何风险为 1(便于在自动化里直接 if 判断)。
Step 4:人工研判(针对 P2)
命中 P2 不等于有毒(正常 skill 也会 curl 下载模型、subprocess 调本地工具)。
向用户追问三个问题,任一答不上来就按"可疑"处理:
- 这个联网/执行动作,是否和 skill 声明功能直接相关?
- 发送目标(域名/IP)是否合理且可控?
- 是否读取了与功能无关的凭据或环境?
资源
scripts/audit.py—— 静态扫描引擎(纯标准库,可独立运行)references/poisoning-patterns.md—— 投毒手法详解、检测清单与预防建议
安全边界(本 skill 自身)
- 只读审计,不修改、不执行被审计 skill 的任何代码。
- 不向外发送任何被审计内容;结果仅展示给用户。
- 审计结论为辅助判断,最终是否安装由用户决定;P0 必须明确建议拒绝。