Skill Shield - OpenClaw扩展安全管理系统
概述
安全管理已安装的OpenClaw扩展,扫描风险、存储风险列表、提供allowlist策略控制,确保在使用高风险扩展前进行风险提示和用户确认。
核心功能
- 自动扫描:扫描所有已安装的扩展,识别安全风险
- 风险评估:基于代码分析识别10种常见安全风险
- Allowlist管理:配置默认信任的扩展,跳过风险检查
- 黑名单管理:阻止危险扩展执行
- 风险提示:使用高风险扩展前提示用户确认
- 持久存储:保存风险报告到memory,支持历史查询
风险类别
| 风险ID |
风险名称 |
严重程度 |
检测关键词 |
| R001 |
网络访问 |
高 |
requests, curl, fetch, urllib, http, socket |
| R002 |
文件写入 |
高 |
write, create, save, mkdir, rmdir, unlink |
| R003 |
文件读取 |
中 |
read, open, cat, glob, listdir |
| R004 |
命令执行 |
严重 |
exec, subprocess, shell, spawn, Popen, system |
| R005 |
外部API |
中 |
api, webhook, endpoint, send, notify, post, get |
| R006 |
数据外发 |
严重 |
upload, send, transfer, export, forward |
| R007 |
凭证访问 |
严重 |
apiKey, password, token, secret, credential, auth |
| R008 |
无签名验证 |
低 |
无_meta.json文件 |
| R009 |
依赖未知 |
中 |
requirements.txt, package.json, dependencies |
| R010 |
权限过宽 |
高 |
chmod 777, allowlist, full |
使用方法
扫描所有扩展
执行skill-shield扫描所有已安装的扩展
检查特定扩展
执行skill-shield检查<extension-name>的风险
添加到Allowlist
执行skill-shield添加<extension-name>到allowlist
从Allowlist移除
执行skill-shield移除<extension-name>从allowlist
添加到黑名单
执行skill-shield添加<extension-name>到黑名单
查看风险报告
执行skill-shield查看风险列表
清除风险记录
执行skill-shield清除风险记录
配置说明
配置文件位置:~/.openclaw/workspace/skills/skill-shield/config.json
{
"allowlist": ["file-search", "weather-search"],
"autoApprove": [],
"blocked": [],
"scanOnInstall": true,
"promptOnHighRisk": true
}
- allowlist: 默认信任的扩展,跳过风险检查
- autoApprove: 自动批准的扩展(不需要用户确认)
- blocked: 黑名单,完全阻止执行
- scanOnInstall: 安装时自动扫描
- promptOnHighRisk: 高风险时提示用户
数据存储
风险数据库位置:~/.openclaw/workspace/memory/shield-risks.json
{
"version": "1.0.0",
"lastScanTime": "2026-03-11T09:45:00Z",
"skills": {
"extension-name": {
"path": "/path/to/extension",
"risks": ["R001", "R004", "R006"],
"severity": "severe",
"scanTime": "2026-03-11T09:45:00Z",
"userDecision": "approved"
}
},
"allowlist": ["file-search", "weather-search"],
"history": [
{
"extension": "extension-name",
"action": "blocked",
"time": "2026-03-11T09:50:00Z"
}
]
}
使用示例
场景1:首次扫描
用户:扫描所有扩展
Agent:🔍 正在扫描9个扩展...
📊 扫描完成!
🔴 严重: 6
🟠 高危: 1
🟡 中危: 0
🟢 低危/安全: 2
💾 风险报告已保存
场景2:使用高风险扩展
用户:执行a-stock-dragon-tiger
Agent:⚠️ 安全警告
扩展: a-stock-dragon-tiger
风险等级: severe
风险项:
- R001: 网络访问
- R004: 命令执行
- R006: 数据外发
是否继续? (yes/no):
用户:yes
Agent:✅ 继续执行
场景3:添加到Allowlist
用户:将weather-search添加到allowlist
Agent:✅ 已将weather-search添加到allowlist
后续使用将不再提示风险
风险等级映射
| 严重程度 |
包含风险 |
用户确认要求 |
| 严重 |
R004, R006, R007 |
强制确认 |
| 高 |
R001, R002, R010 |
强制确认 |
| 中 |
R003, R005, R009 |
建议确认 |
| 低 |
R008 |
可选确认 |
技术实现
扫描流程
- 遍历
~/.openclaw/workspace/skills/目录
- 读取每个扩展的SKILL.md、scripts/、references/
- 基于关键词匹配识别风险
- 计算严重程度等级
- 生成风险报告并存储
检查流程
- 检查扩展是否在allowlist → 跳过检查
- 检查扩展是否在blocked → 阻止执行
- 查询风险数据库 → 获取风险信息
- 根据严重程度决定是否提示用户
- 记录用户决策到历史
安全原则
- ✅ 所有高风险操作需要用户明确确认
- ✅ Allowlist中的扩展默认信任
- ✅ 风险记录持久化存储
- ✅ 支持审计历史查询
- ✅ 黑名单完全阻止执行
扩展计划
故障排除
扫描失败
# 检查扩展目录权限
ls -la ~/.openclaw/workspace/skills/
# 手动运行扫描
python3 ~/.openclaw/workspace/skills/skill-shield/scripts/shield.py scan
配置文件错误
# 重置配置文件
echo '{}' > ~/.openclaw/workspace/skills/skill-shield/config.json
依赖要求
- Python 3.6+
- 无需额外依赖包
- 标准库:os, re, json, glob, hashlib, pathlib, datetime, argparse, typing
1---2name: skill-shield3description: OpenClaw扩展安全管理系统。扫描已安装扩展的安全风险,提供allowlist策略控制,在使用高风险扩展前进行风险提示。适用于安全管理、风险评估、权限控制场景。4---56# Skill Shield - OpenClaw扩展安全管理系统78## 概述910安全管理已安装的OpenClaw扩展,扫描风险、存储风险列表、提供allowlist策略控制,确保在使用高风险扩展前进行风险提示和用户确认。1112## 核心功能13141. **自动扫描**:扫描所有已安装的扩展,识别安全风险152. **风险评估**:基于代码分析识别10种常见安全风险163. **Allowlist管理**:配置默认信任的扩展,跳过风险检查174. **黑名单管理**:阻止危险扩展执行185. **风险提示**:使用高风险扩展前提示用户确认196. **持久存储**:保存风险报告到memory,支持历史查询2021## 风险类别2223| 风险ID | 风险名称 | 严重程度 | 检测关键词 |24|--------|----------|----------|-----------|25| R001 | 网络访问 | 高 | requests, curl, fetch, urllib, http, socket |26| R002 | 文件写入 | 高 | write, create, save, mkdir, rmdir, unlink |27| R003 | 文件读取 | 中 | read, open, cat, glob, listdir |28| R004 | 命令执行 | 严重 | exec, subprocess, shell, spawn, Popen, system |29| R005 | 外部API | 中 | api, webhook, endpoint, send, notify, post, get |30| R006 | 数据外发 | 严重 | upload, send, transfer, export, forward |31| R007 | 凭证访问 | 严重 | apiKey, password, token, secret, credential, auth |32| R008 | 无签名验证 | 低 | 无_meta.json文件 |33| R009 | 依赖未知 | 中 | requirements.txt, package.json, dependencies |34| R010 | 权限过宽 | 高 | chmod 777, allowlist, full |3536## 使用方法3738### 扫描所有扩展39```40执行skill-shield扫描所有已安装的扩展41```4243### 检查特定扩展44```45执行skill-shield检查<extension-name>的风险46```4748### 添加到Allowlist49```50执行skill-shield添加<extension-name>到allowlist51```5253### 从Allowlist移除54```55执行skill-shield移除<extension-name>从allowlist56```5758### 添加到黑名单59```60执行skill-shield添加<extension-name>到黑名单61```6263### 查看风险报告64```65执行skill-shield查看风险列表66```6768### 清除风险记录69```70执行skill-shield清除风险记录71```7273## 配置说明7475配置文件位置:`~/.openclaw/workspace/skills/skill-shield/config.json`7677```json78{79 "allowlist": ["file-search", "weather-search"],80 "autoApprove": [],81 "blocked": [],82 "scanOnInstall": true,83 "promptOnHighRisk": true84}85```8687- **allowlist**: 默认信任的扩展,跳过风险检查88- **autoApprove**: 自动批准的扩展(不需要用户确认)89- **blocked**: 黑名单,完全阻止执行90- **scanOnInstall**: 安装时自动扫描91- **promptOnHighRisk**: 高风险时提示用户9293## 数据存储9495风险数据库位置:`~/.openclaw/workspace/memory/shield-risks.json`9697```json98{99 "version": "1.0.0",100 "lastScanTime": "2026-03-11T09:45:00Z",101 "skills": {102 "extension-name": {103 "path": "/path/to/extension",104 "risks": ["R001", "R004", "R006"],105 "severity": "severe",106 "scanTime": "2026-03-11T09:45:00Z",107 "userDecision": "approved"108 }109 },110 "allowlist": ["file-search", "weather-search"],111 "history": [112 {113 "extension": "extension-name",114 "action": "blocked",115 "time": "2026-03-11T09:50:00Z"116 }117 ]118}119```120121## 使用示例122123### 场景1:首次扫描124```125用户:扫描所有扩展126Agent:🔍 正在扫描9个扩展...127 128 📊 扫描完成!129 🔴 严重: 6130 🟠 高危: 1131 🟡 中危: 0132 🟢 低危/安全: 2133 134 💾 风险报告已保存135```136137### 场景2:使用高风险扩展138```139用户:执行a-stock-dragon-tiger140Agent:⚠️ 安全警告141 扩展: a-stock-dragon-tiger142 风险等级: severe143 风险项:144 - R001: 网络访问145 - R004: 命令执行146 - R006: 数据外发147 是否继续? (yes/no):148用户:yes149Agent:✅ 继续执行150```151152### 场景3:添加到Allowlist153```154用户:将weather-search添加到allowlist155Agent:✅ 已将weather-search添加到allowlist156 后续使用将不再提示风险157```158159## 风险等级映射160161| 严重程度 | 包含风险 | 用户确认要求 |162|----------|----------|-------------|163| 严重 | R004, R006, R007 | 强制确认 |164| 高 | R001, R002, R010 | 强制确认 |165| 中 | R003, R005, R009 | 建议确认 |166| 低 | R008 | 可选确认 |167168## 技术实现169170### 扫描流程1711. 遍历`~/.openclaw/workspace/skills/`目录1722. 读取每个扩展的SKILL.md、scripts/、references/1733. 基于关键词匹配识别风险1744. 计算严重程度等级1755. 生成风险报告并存储176177### 检查流程1781. 检查扩展是否在allowlist → 跳过检查1792. 检查扩展是否在blocked → 阻止执行1803. 查询风险数据库 → 获取风险信息1814. 根据严重程度决定是否提示用户1825. 记录用户决策到历史183184## 安全原则185186- ✅ 所有高风险操作需要用户明确确认187- ✅ Allowlist中的扩展默认信任188- ✅ 风险记录持久化存储189- ✅ 支持审计历史查询190- ✅ 黑名单完全阻止执行191192## 扩展计划193194- [ ] Hook机制:在使用扩展前自动检查195- [ ] 安装时扫描:clawhub install时自动扫描196- [ ] 风险修复建议:提供风险缓解建议197- [ ] 定期报告:每周发送安全报告到飞书198199## 故障排除200201### 扫描失败202```bash203# 检查扩展目录权限204ls -la ~/.openclaw/workspace/skills/205206# 手动运行扫描207python3 ~/.openclaw/workspace/skills/skill-shield/scripts/shield.py scan208```209210### 配置文件错误211```bash212# 重置配置文件213echo '{}' > ~/.openclaw/workspace/skills/skill-shield/config.json214```215216## 依赖要求217218- Python 3.6+219- 无需额外依赖包220- 标准库:os, re, json, glob, hashlib, pathlib, datetime, argparse, typing