OpenClaw Skill安全扫描指南
凌晨3点58分,一个看起来人畜无害的Skill悄悄把你的API Key发到了远端服务器。你不会知道的——因为它的SKILL.md里只写了"帮你整理文件"。
ClawHavoc安全事件已经发现820+个恶意Skill、138个CVE漏洞。这不是危言耸听,这是你安装第三方Skill时必须面对的现实。
今天这篇教程,教你如何在享受Skill生态便利的同时,不被坑。
Skill安全威胁全景
恶意Skill的5种类型
- 数据窃取型 - 偷偷读取敏感文件并发送到外部服务器
- 权限提升型 - 利用漏洞获取超出声明的权限
- Prompt注入型 - 在SKILL.md中隐藏指令劫持Agent行为
- 依赖投毒型 - 安装时引入恶意依赖包
- 后门型 - 正常工作但预留远程控制接口
Skill安装前审查清单
1. SKILL.md审查
# 安装前必须检查的项目
## 基本信息检查
☐ 作者是否可信(验证GitHub/ClawHub账号)
☐ 是否有版本号和更新日志
☐ 星标数和下载量是否正常
☐ 是否有其他用户的评价
## 内容审查
☐ SKILL.md是否过于复杂(超过必要的长度可能是藏东西)
☐ 是否包含外部URL调用(特别是未声明的)
☐ 是否要求不合理的权限(如读取所有文件)
☐ 是否包含base64编码或混淆代码
☐ description是否与实际功能匹配
## 隐式指令检测
☐ 是否包含"ignore previous instructions"类似文本
☐ 是否包含隐藏的条件触发逻辑
☐ 是否有在特定条件下改变行为的指令
2. 代码审查
# 对Skill的脚本文件进行审查
# 检查网络请求
grep -r "fetch\|axios\|http\|request\|curl" skill/
# 正常:声明的API调用
# 可疑:未声明的外部请求
# 检查文件操作
grep -r "readFile\|writeFile\|fs\.\|process\.env" skill/
# 正常:操作Skill自己的目录
# 可疑:读取 ~/.ssh/、 ~/.aws/、环境变量
# 检查命令执行
grep -r "exec\|spawn\|eval\|Function(" skill/
# 正常:声明中的特定命令
# 可疑:动态拼接的命令执行
# 检查依赖
cat skill/package.json # 检查依赖列表
npm audit # 运行安全审计
3. 权限审查
# OpenClaw中的Skill权限控制
# 在Agent配置中限制Skill权限
## 权限最小化原则
tools:
exec:
security: "allowlist" # 只允许白名单命令
browser:
target: "sandbox" # 限制在沙箱中运行
write:
scope: "/tmp/skill-work/" # 限制写入范围
## 敏感操作审批
# 设置需要人工审批的命令
approval_required:
- "rm -rf"
- "curl * | bash"
- "npm publish"
- "git push"
运行时防护
Skill沙箱隔离
# OpenClaw内置的沙箱机制
sessions_spawn(
task="执行Skill任务...",
runtime="subagent",
sandbox="require" # 强制在沙箱中运行
)
# 沙箱限制:
# - 无法访问宿主机文件系统
# - 网络访问受限制
# - 无法读取环境变量
# - 执行时间受限
实时监控
# 监控Skill运行行为
监控指标:
1. 网络请求 - 检查所有外部连接
2. 文件访问 - 记录读取的文件路径
3. 命令执行 - 记录执行的命令
4. 资源使用 - CPU/内存/磁盘占用
5. 执行时间 - 异常长可能在做坏事
# 检测异常行为
异常信号:
- Skill执行时间突然变长 → 可能在上传数据
- 出现未声明的网络请求 → 可能是数据泄露
- 尝试读取敏感目录 → 可能是权限提升
- 频繁的exec调用 → 可能在扫描系统
从ClawHavoc事件学到的教训
ClawHavoc安全事件暴露了Skill生态的关键问题:
- 820+恶意Skill - 数量庞大的恶意Skill混在正常Skill中
- 138个CVE - 已知的漏洞数量
- 供应链攻击 - 热门Skill被接管后植入恶意代码
防护建议
- 只从官方ClawHub安装Skill
- 安装前阅读所有代码(不只是SKILL.md)
- 使用沙箱运行不熟悉的Skill
- 定期更新Skill(安全补丁)
- 设置文件和网络访问限制