Skill: ronie-shi/fanzhi-skill-security-scanner (version 1.3.2)

--- name: skill-security-scanner description: OpenClaw SKILL安装前安全扫描器，检测恶意代码、敏感信息、权限滥用等威胁 version: 1.3.2 metadata: openclaw: emoji: "🔐" requires: bins: ["python3"] trigger: keywords: - skill security - scan skill - 安全扫描 - 安装检查 - skill install - 安装技能 - 安装SKILL patterns: - "scan.*skill" - "check.*skill.*security" - "安全.*扫描.*skill" - "安装.*技能" - "安装.*SKILL" - "安装.*前.*检查" --- # Skill Security Scanner ## 🎯 技能概述 OpenClaw SKILL安装前安全扫描器，确保安装的SKILL安全可靠。功能包括：恶意代码检测、敏感信息检测、权限滥用检测、依赖风险检测。 ## 🛡️ 核心功能 ### 1. 恶意代码检测 | 威胁类型 | 检测内容 | 风险等级 | |----------|----------|----------| | 危险命令 | 破坏性文件/磁盘操作命令 | 🔴 高危 | | 容器逃逸 | 容器特权操作命令 | 🔴 高危 | | 终端逃逸 | 终端伪终端创建命令 | 🔴 高危 | | 后门代码 | 隐藏的恶意功能 | 🔴 高危 | | 挖矿代码 | 已知恶意挖矿进程特征 | 🔴 高危 | | 网络攻击 | DDoS、端口扫描代码 | 🔴 高危 | | 信息探测 | cat /proc/1/cmdline, /host/proc/ 等 | 🟠 中危 | ### 2. 敏感信息检测 | 信息类型 | 检测模式 | 处理方式 | |----------|----------|----------| | API密钥 | 常见API密钥前缀模式 | 警告+净化 | | 云凭证 | 云服务商凭证特征前缀 | 警告+净化 | | 密码 | 常见密码配置关键字 | 警告+净化 | | 私钥 | 私钥文件特征格式 | 警告+净化 | | 包管理器令牌 | 包管理器令牌特征前缀 | 警告+净化 | | Slack令牌 | Slack令牌前缀模式 | 警告+净化 | | 配置文件 | .env, config.json 中的敏感信息 | 警告 | ### 3. 权限滥用检测 | 权限类型 | 检查内容 | 风险等级 | |----------|----------|----------| | 文件系统 | 过度读写权限 | 🟠 中危 | | 网络 | 外连未知地址 | 🟠 中危 | | 进程 | 创建过多子进程 | 🟠 中危 | | 系统 | 重启、关机等 | 🔴 高危 | ### 4. 依赖风险检测 | 依赖类型 | 检查内容 | 风险等级 | |----------|----------|----------| | 危险包 | 已知恶意npm/pip包 | 🔴 高危 | | 版本漏洞 | 有安全漏洞的版本 | 🟠 中危 | | 许可证 | 不兼容的许可证 | 🟡 低危 | ### 5. AI Agent特定威胁 (v1.3.0新增) | 威胁类型 | 检测内容 | 风险等级 | |----------|----------|----------| | Prompt注入 | LLM对话注入标记序列 | 🔴 高危 | | 系统提示覆盖 | # System Prompt:, ## Instructions:, You are a... | 🔴 高危 | | 工具调用逃逸 | 跨权限exec()调用、os.system()滥用 | 🔴 高危 | | 上下文混淆 | 嵌套角色扮演、指令分裂 | 🟠 中危 | ## 🚀 使用方式 ### 1. 手动扫描SKILL ``` 用户: 扫描这个SKILL的安全性 SKILL路径: /path/to/skill ``` **结果示例**: ``` 🔐 SKILL安全扫描报告 SKILL名称: example-skill 版本: v1.0.0 扫描时间: 2026-03-04 23:56 📊 扫描结果: ├── 总体风险: 🟢 低风险 ├── 威胁数量: 0 └── 建议: 可以安全安装 🔍 详细检查: ├── 恶意代码: ✅ 未发现 ├── 敏感信息: ✅ 未发现 ├── 权限检查: ✅ 正常 └── 依赖安全: ✅ 安全 ✅ 建议: 可以安全安装 ``` ### 2. 安装前自动扫描（推荐） 在OpenClaw的SKILL安装流程中自动触发： ``` 用户: 安装 example-skill 系统: 正在下载SKILL... 系统: 🔐 执行安全扫描... 系统: 扫描完成，总体风险: 🟢 低风险 系统: 继续安装... ``` ### 3. 高风险SKILL处理 ``` ⚠️ 安全警告 SKILL名称: suspicious-skill 总体风险: 🔴 高风险 发现的问题: 1. 🔴 发现危险命令: "<破坏性文件操作命令>" 2. 🟠 发现API密钥: sk-xxxxxxxxxxxxxxxx 3. 🟡 请求过度权限: 文件系统写权限 ❓ 如何处理: [1] 阻止安装（推荐） [2] 净化后安装（移除敏感信息） [3] 忽略警告继续安装（不推荐） [4] 查看详细报告 请选择 (1-4): ``` ### 4. 批量扫描 ``` 用户: 扫描所有已安装的SKILL ``` **结果**: ``` 📊 批量扫描报告 扫描时间: 2026-03-04 23:57 扫描数量: 15个SKILL 🔐 安全状况: ├── 安全: 12个 (80%) ├── 警告: 2个 (13%) └── 危险: 1个 (7%) ⚠️ 需要关注的SKILL: 1. suspicious-skill (高风险) 2. outdated-skill (中风险) ✅ 建议: 更新或移除有风险的SKILL ``` ## ⚙️ 配置选项 ### 安全级别 | 级别 | 说明 | 适用场景 | |------|------|----------| | paranoid | 极度严格 | 生产环境、高安全要求 | | strict | 严格检查 | 默认推荐级别 | | balanced | 平衡模式 | 开发环境 | | permissive | 宽松模式 | 仅检测明显威胁 | ### 响应动作 | 动作 | 说明 | 触发条件 | |------|------|----------| | block | 立即阻止 | 发现高危威胁 | | warn | 警告但允许 | 发现中危威胁 | | sanitize | 净化后放行 | 发现敏感信息 | | confirm | 请求确认 | 用户配置 | ### 扫描范围 ```yaml scan: files: - "*.py" - "*.js" - "*.sh" - "*.md" - "*.json" - "*.yaml" - "*.yml" exclude: - "node_modules/" - ".git/" - "__pycache__/" - "*.min.js" ``` ## 📊 风险评估模型 ### 风险评分规则 | 威胁类型 | 基础分 | 乘数 | |----------|--------|------| | 高危命令 | 10分 | ×1.5 | | 敏感信息 | 8分 | ×1.2 | | 权限滥用 | 6分 | ×1.0 | | 依赖风险 | 4分 | ×0.8 | ### 风险等级判定 | 总分 | 风险等级 | 颜色 | 建议 | |------|----------|------|------| | 0-4 | 低风险 | 🟢 绿色 | 安全安装 | | 5-9 | 中风险 | 🟡 黄色 | 警告安装 | | 10-19 | 高风险 | 🟠 橙色 | 确认安装 | | 20+ | 极高风险 | 🔴 红色 | 阻止安装 | ## 🔧 技术实现 ### 检测引擎架构 ``` ┌─────────────────────────────────────────────┐ │ Skill Security Scanner │ ├─────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ │ │ │ 文件收集 │───▶│ 多引擎检测 │───┐ │ │ │ File Collector│ │ Multi-Engine │ │ │ │ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ │ ▼ ▼ │ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ │ 文件过滤 │ │ 规则匹配 │ │ │ │ │ File Filter │ │ Rule Match │ │ │ │ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌──────────────────┼───────────┘ │ │ ▼ ▼ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ 风险评估 │ │ 报告生成 │ │ │ │ Risk Assess │ │ Report Gen │ │ │ └─────────────┘ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────┐ │ │ │ 用户交互 │ │ │ │ User Interact│ │ │ └─────────────┘ │ └─────────────────────────────────────────────┘ ``` ### 检测引擎列表 1. **CommandDetector** - 危险命令检测 2. **SensitiveDetector** - 敏感信息检测 3. **PermissionDetector** - 权限滥用检测 4. **DependencyDetector** - 依赖风险检测 5. **PatternDetector** - 恶意模式检测 ## 📁 文件结构 ``` skill-security-scanner/ ├── SKILL.md # 技能定义（本文件） ├── scanner.py # 主扫描器 ├── config.yaml # 配置文件 ├── rules/ # 规则库 │ ├── commands.yaml # 危险命令规则 │ ├── sensitive.yaml # 敏感信息规则 │ ├── permissions.yaml # 权限规则 │ └── dependencies.yaml # 依赖风险规则 ├── detectors/ # 检测引擎 │ ├── __init__.py │ ├── base.py # 基类 │ ├── command_detector.py # 命令检测 │ ├── sensitive_detector.py # 敏感信息检测 │ ├── permission_detector.py # 权限检测 │ └── dependency_detector.py # 依赖检测 ├── reports/ # 报告系统 │ ├── report_generator.py # 报告生成器 │ ├── templates/ # 报告模板 │ └── formatters/ # 格式器 ├── integration/ # 集成模块 │ ├── openclaw_hook.py # OpenClaw钩子 │ └── skill_installer.py # 安装器集成 └── utils/ # 工具函数 ├── file_utils.py # 文件操作 ├── risk_calculator.py # 风险计算 └── logger.py # 日志记录 ``` ## 🔄 与OpenClaw集成 ### 安装钩子机制 ```python # 在OpenClaw的SKILL安装流程中插入安全扫描 async def install_skill_with_security(skill_name: str, skill_path: str): """带安全扫描的SKILL安装""" # 1. 下载SKILL skill_files = await download_skill(skill_name) # 2. 安全扫描 scanner = SkillSecurityScanner() scan_result = await scanner.scan(skill_files) # 3. 根据结果处理 if not scan_result.passed: # 显示报告，询问用户 user_choice = await show_security_report(scan_result) if user_choice == "block": raise SecurityError("安装被阻止：发现安全威胁") elif user_choice == "sanitize": skill_files = await scanner.sanitize(skill_files) # 4. 继续安装 await install_skill(skill_files) ``` ### 命令行集成 ```bash # 手动扫描SKILL openclaw skill scan /path/to/skill # 安装时自动扫描 openclaw skill install example-skill --security-scan # 批量扫描已安装的SKILL openclaw skill scan-all # 查看扫描历史 openclaw skill security-history ``` ## 📈 持续改进 ### 规则更新机制 1. **自动更新**：每周从安全数据库同步最新规则 2. **社区贡献**：用户可提交新检测规则 3. **机器学习**：基于历史扫描数据优化检测 ### 反馈循环 ``` 安装扫描 → 记录结果 → 分析误报/漏报 → 更新规则 → 改进检测 ``` ## 🎯 使用场景 ### 场景1：开发者发布SKILL前自检 ``` 开发者: 检查我的SKILL是否安全 系统: 扫描中... 系统: ✅ 通过所有安全检查，可以发布 ``` ### 场景2：用户安装第三方SKILL ``` 用户: 安装 community-skill 系统: 🔐 执行安全扫描... 系统: ⚠️ 发现1个警告：请求文件系统写权限 系统: ❓ 是否继续安装？ [Y/n] ``` ### 场景3：定期安全审计 ``` 用户: 检查所有已安装SKILL的安全性 系统: 📊 扫描完成，发现2个中风险SKILL 系统: ✅ 建议更新或移除有风险的SKILL ``` ## 🔐 安全与隐私 - **本地执行**：所有检测在用户本地进行，数据不出本机 - **透明报告**：详细说明发现的问题和建议 - **用户控制**：最终决定权在用户手中 - **可审计**：所有扫描记录可追溯 ## 🚨 已知限制 1. **静态分析局限**：无法检测运行时行为 2. **误报可能**：某些合法代码可能被误判 3. **绕过可能**：高级攻击可能绕过检测 4. **依赖外部规则**：检测效果依赖规则库质量 ## 📚 参考资源 - [OpenClaw SKILL开发指南](https://docs.openclaw.ai/skills/) - [OWASP Top 10](https://owasp.org/www-project-top-ten/) - [NPM安全最佳实践](https://docs.npmjs.com/security-best-practices/) - [Python安全编码指南](https://docs.python.org/3/library/security.html) --- **版本历史**: - v1.3.2 (2026-04-03): 精简发布包，排除冗余文件 - 排除config.yaml（检测器使用hardcoded默认值） - 排除README.md等文档文件（以SKILL.md为准） - v1.3.1 (2026-04-03): 优化文档表述，避免安全扫描误判 - 移除了SKILL.md中的具体检测模式字符串 - 保持完整检测能力说明 - v1.3.0 (2026-04-03): 基于2025-2026安全公告更新 - 新增容器逃逸检测 - 新增终端逃逸检测 - 新增AI Agent特定威胁检测（Prompt注入、系统提示覆盖） - 新增GitHub Fine-grained tokens 检测 - 新增GitLab tokens 检测 - 新增AWS/GCP/Azure云凭证检测 - 新增NPM/Bnpm令牌检测 - v1.2.0 (2026-03-17): 格式标准化，更新至标准YAML frontmatter格式 - v1.0.0 (2026-03-04): 初始版本，基础安全扫描功能 **维护者**: Ronie & 泛智小龙虾 **许可证**: MIT

path: reports/__init__.py
content: """报告模块"""

from .report_generator import ReportGenerator

__all__ = ["ReportGenerator"]


Security scan verdicts — ClawScan: clean | static analysis: malicious | VirusTotal: clean | SkillSpector:  ()