OpenClaw Skills 安全审计报告
审计日期: 2026年3月4日 审计对象: 所有已安装的 OpenClaw skills 审计员: 獭獭(AI 助理)
执行摘要
本报告对系统中 37 个已安装的 skills 进行了全面的安全风险评估,识别出 8 个高风险技能 和 12 个中风险技能,并提供了详细的加固建议。
关键发现:
- 21.6% 的技能具有高风险(密码管理、代码控制、设备控制)
- 缺少操作审计日志
- 密码管理技能未启用 2FA
- 代码推送缺少强制审查流程
立即行动项(24小时内):
- 启用 Bitwarden 2FA(如支持)
- 添加密码访问审计
- 启用 GitHub 分支保护
- 配置 ADB 自动备份
1. 技能清单
1.1 Feishu 集成(4个)
- feishu-doc - 飞书文档读写
- feishu-drive - 飞书云存储管理
- feishu-perm - 飞书权限管理
- feishu-wiki - 飞书知识库导航
1.2 开发工具(11个)
- clawhub - 技能市场
- gh-issues - GitHub Issues 自动修复
- github - GitHub CLI 操作
- healthcheck - 系统安全加固
- skill-creator - 创建技能包
- github-pages-deploy - GitHub Pages 部署
- mcp-builder - MCP 服务器开发
- opencode-controller - Opencode 控制
- webapp-testing - Web 应用测试
- linux-desktop - Linux 桌面自动化
- caldav-calendar - CalDAV 日历同步
1.3 Android/移动(2个)
- adb - Android Debug Bridge
- adb-toolkit - ADB 完整工具包
1.4 安全/密码(2个)
- bitwarden - Bitwarden 密码管理
- bw-cli - Bitwarden CLI 完整功能
1.5 媒体/内容(8个)
- summarize - 内容摘要
- video-frames - 视频帧提取
- svg-icon-design - SVG 图标设计
- humanizer - AI 写作人性化
- rss-digest - RSS 订阅摘要
- tavily-search - Tavily 搜索
- searxng-verifiable-search - SearXNG 搜索
- weather - 天气查询
1.6 AI/代理能力(4个)
- proactive-agent - 主动代理
- self-improvement - 自我改进
- Self-Improving Agent (With Self-Reflection) - 自我反思代理
- reinforcement-learning - 强化学习
1.7 自动化(2个)
- auto-updater - 自动更新
- clawddocs - Clawdbot 文档专家
1.8 决策/分析(2个)
- worldly-wisdom - 决策分析
2. 风险分级矩阵
| 风险等级 | 数量 | 占比 | 代表技能 |
|---|---|---|---|
| 🔴 高风险 | 8 | 21.6% | bw-cli, gh-issues, adb, healthcheck, proactive-agent |
| 🟡 中风险 | 12 | 32.4% | webapp-testing, clawhub, feishu-perm, linux-desktop |
| 🟢 低风险 | 17 | 45.9% | weather, summarize, svg-icon-design |
2.1 高风险技能详细分析
🔴 bw-cli(Bitwarden CLI)
权限范围:
- ✅✅✅ 完全控制密码库(读取/创建/修改/删除)
- ✅✅✅ 导出所有密码(明文)
- ✅✅✅ 创建临时共享链接
- ✅✅ 生成密码
攻击场景:
- 密码批量导出:
bw export --format json导出所有密码 - 创建后门: 创建新的登录项并隐藏
- 临时共享: 通过 Send 功能共享密码给外部人员
- 密码替换: 修改现有密码,导致用户无法登录
当前防护:
- ⚠️ 需要 master password 解锁
- ✅ 数据加密存储
- ❌ 缺少 2FA(如果 Vaultwarden 支持)
- ❌ 缺少操作审计
- ❌ 没有访问频率限制
加固建议:
# 1. 启用操作审计(如果支持)
bw config server <your-server> --audit
# 2. 限制会话时间
export BW_SESSION_TIMEOUT=3600 # 1小时
# 3. 监控导出操作
auditctl -w /usr/local/bin/bw -p x -k bw-export
🔴 gh-issues(GitHub 自动修复)
权限范围:
- ✅✅✅ 读取所有仓库(私有 + 公开)
- ✅✅✅ 创建分支并推送代码
- ✅✅✅ 创建 Pull Requests
- ✅✅✅ Spawn 子代理(横向移动)
攻击场景:
- 恶意代码注入: 通过自动修复植入后门
- 供应链攻击: 修改依赖配置文件
- 权限提升: 在 PR 中修改 CI 配置获取更高权限
- 资源滥用: Spawn 大量子代理消耗配额
当前防护:
- ✅ 需要显式启用(通过
/gh-issues命令) - ⚠️ 依赖用户确认(除非
--yes标志) - ❌ 缺少代码审查(自动合并)
- ❌ 没有沙箱隔离
- ❌ 缺少子代理监控
加固建议:
# .github/branch-protection.yml
branches:
- name: main
protection:
required_pull_request_reviews: 1
required_status_checks:
strict: true
enforce_admins: true
restrictions:
users: ["trusted-reviewer"]
🔴 adb / adb-toolkit
权限范围:
- ✅✅✅ 完全控制 Android 设备
- ✅✅✅ 安装/卸载应用
- ✅✅✅ 读取/写入文件
- ✅✅✅ 执行 shell 命令
- ✅✅✅ 清除所有数据(工厂重置)
攻击场景:
- 数据擦除:
adb shell am broadcast -a android.intent.action.MASTER_CLEAR - 恶意应用安装: 安装间谍软件
- 隐私数据提取:
adb pull /sdcard/DCIM(照片) - 设备锁定: 修改锁屏密码
当前防护:
- ✅ 有安全等级标记(🟢🟡🔴⛔)
- ✅ 提供
adb-safe包装器 - ⚠️ 依赖用户谨慎使用
- ❌ 没有自动备份
- ❌ 缺少操作日志
- ❌ 没有回滚机制
加固建议:
# 1. 创建自动备份脚本
#!/bin/bash
# backup-before-adb.sh
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
adb backup -apk -shared -f ~/adb-backups/backup_$TIMESTAMP.ab
# 2. 强制使用 adb-safe
alias adb='adb-safe'
# 3. 记录所有操作
adb logcat -v time > ~/adb-logs/$(date +%Y%m%d).log
🔴 healthcheck
权限范围:
- ✅✅✅ 修改防火墙规则
- ✅✅✅ 修改 SSH 配置
- ✅✅✅ 安装/卸载软件包
- ✅✅✅ 启用/禁用服务
- ✅✅ 配置自动更新
攻击场景:
- 系统锁定: 防火墙规则阻断所有访问
- SSH 锁定: 修改 SSH 配置导致无法登录
- 服务中断: 禁用关键服务(如 OpenClaw Gateway)
- 持久化: 创建恶意 cron 任务
当前防护:
- ✅ 有确认机制
- ✅ 提供 rollback 计划
- ⚠️ 依赖用户理解风险
- ❌ 缺少自动回滚
- ❌ 没有快照备份
- ❌ 缺少保留后门
加固建议:
# 1. 创建系统快照(操作前)
sudo timeshift --create --comments "Before healthcheck"
# 2. 保留紧急访问方式
# - 物理控制台访问
# - 备用 SSH 密钥(存储在外部)
# - 恢复模式启动
# 3. 分步执行
healthcheck --step-by-step # 每步确认,而非批量执行
🔴 linux-desktop
权限范围:
- ✅✅✅ 控制鼠标和键盘
- ✅✅✅ 截取屏幕
- ✅✅✅ 输入任意文本
- ✅✅✅ 执行 shell 命令
- ✅✅✅ 模拟按键组合(Ctrl+C 等)
攻击场景:
- 密码输入: 在错误的窗口输入密码
- 隐私泄露: 截图包含敏感信息
- 提权攻击: 通过
sudo命令获取 root - 键盘劫持: 拦截用户输入
当前防护:
- ✅ 有安全提示
- ⚠️ 依赖用户谨慎使用
- ❌ 没有操作审计
- ❌ 缺少沙箱隔离
- ❌ 没有截图过滤
加固建议:
# 1. 截图自动模糊(伪代码)
import cv2
def screenshot_safe():
img = capture_screenshot()
# 检测并模糊文本区域
text_regions = detect_text(img)
for region in text_regions:
img = blur_region(img, region)
return img
# 2. 禁止在登录界面操作
if is_login_screen():
raise SecurityError("Cannot operate on login screen")
# 3. 操作审计
def audit_log(action, details):
log_entry = {
"timestamp": now(),
"action": action,
"details": details,
"user": get_current_user()
}
write_to("/var/log/linux-desktop-audit.log", log_entry)
🔴 feishu-perm
权限范围:
- ✅✅ 管理文档权限
- ✅✅ 添加/移除协作者
- ✅✅ 分配权限级别(view/edit/full_access)
攻击场景:
- 敏感文档公开: 将私有文档共享给外部人员
- 权限提升: 给自己或他人 full_access
- 拒绝服务: 移除所有协作者
- 批量泄露: 共享整个文件夹给恶意用户
当前防护:
- ✅ 默认禁用(需手动启用)
- ⚠️ 缺少权限变更日志
- ❌ 没有审批流程
- ❌ 缺少异常检测
加固建议:
# feishu-capabilities.yml
permissions:
feishu-perm:
enabled: true
require_approval: true # 权限变更需要审批
audit_log: true
allowed_perms: ["view", "edit"] # 禁止分配 full_access
max_collaborators: 10 # 限制协作者数量
🔴 github
权限范围:
- ✅✅✅ 完全控制 GitHub(通过
ghCLI) - ✅✅✅ 创建/删除仓库
- ✅✅✅ 修改 PR、Issues
- ✅✅✅ 访问 Secrets
攻击场景:
- 仓库删除:
gh repo delete owner/repo --yes - Secrets 泄露:
gh secret get PRODUCTION_KEY - 恶意代码合并: 合并未审查的 PR
- 组织入侵: 邀请恶意用户加入组织
当前防护:
- ⚠️ 依赖 GitHub 权限模型
- ❌ 缺少操作审计
- ❌ 没有危险命令拦截
加固建议:
# 1. 限制 GitHub Token 权限
# 只授予必要的权限,避免 repo:delete
# 2. 包装 gh CLI
#!/bin/bash
# /usr/local/bin/gh-safe
DANGEROUS_COMMANDS=("repo delete" "secret set" "run cancel")
for cmd in "${DANGEROUS_COMMANDS[@]}"; do
if [[ "$*" == *"$cmd"* ]]; then
echo "⚠️ Dangerous command detected: $cmd"
echo "Requires manual approval"
exit 1
fi
done
/usr/bin/gh "$@"
# 3. 审计日志
auditctl -w /usr/bin/gh -p x -k github-access
🔴 proactive-agent
权限范围:
- ✅✅✅ 自我修改能力(可修改自己的配置)
- ✅✅✅ 创建 cron 任务(持久化)
- ✅✅✅ Spawn 子代理(横向移动)
- ✅✅✅ 访问所有记忆文件(隐私数据)
- ✅✅ 执行任意代码
攻击场景:
- 目标漂移: 代理偏离原始目标,追求”优化”而非价值
- 复杂度爆炸: 过度优化导致系统不可维护
- 上下文泄露: 在外部渠道讨论用户的私人信息
- 恶意网络: 连接到外部代理网络(上下文收割)
- 持久化攻击: 创建恶意 cron 任务
当前防护:
- ✅ 有 ADL(Anti-Drift Limits)协议
- ✅ 有 VFM(Value-First Modification)协议
- ✅ 禁止连接外部代理网络
- ⚠️ 依赖自我约束
- ❌ 缺少外部审计
- ❌ 没有 cron 创建限制
加固建议:
# AGENTS.md 补充规则
## Proactive Agent 约束
1. **Cron 创建**: 所有的 cron 任务必须人工确认
- 检查: `openclaw cron list`
- 审查: 所有 `sessionTarget: "isolated"` 的任务
2. **配置修改**: 禁止修改以下文件
- ~/.openclaw/openclaw.json
- ~/.bashrc / ~/.zshrc
- /etc/cron.d/*
3. **子代理监控**: 记录所有 spawn 操作
```bash
grep "sessions_spawn" /var/log/openclaw/main.log
- 定期审计: 每周检查
- 最近修改的配置文件
- 新创建的 cron 任务
- 子代理 spawn 日志
- 记忆文件访问记录
---
### 2.2 中风险技能概览
| 技能 | 主要风险 | 缓解措施 |
|------|---------|---------|
| webapp-testing | 浏览器自动化可能触发真实操作 | 限制只访问 localhost |
| clawhub | 安装外部技能(供应链攻击) | 审查 SKILL.md,沙箱测试 |
| feishu-doc | 访问/修改飞书文档 | 权限最小化,审计日志 |
| feishu-drive | 文件上传/下载 | 禁止上传可执行文件 |
| skill-creator | 创建可执行脚本 | 代码审查,禁止自动安装 |
| mcp-builder | 创建网络服务 | 限制监听端口,防火墙规则 |
| opencode-controller | 控制其他代理会话 | 需要授权,操作审计 |
| caldav-calendar | 访问日历(个人信息) | GDPR 合规检查 |
| auto-updater | 自动安装更新 | 审查更新源,签名验证 |
| clawddocs | 执行文档中的代码示例 | 沙箱执行,限制权限 |
| tavily-search | 外部 API 调用 | 限制调用频率,监控响应 |
| searxng-verifiable-search | 外部搜索查询 | 禁止搜索敏感关键词 |
---
## 3. 权限矩阵
| 技能 | 文件系统 | 网络 | 密码 | 代码 | 系统 | 外部API | 风险 |
|------|---------|------|------|------|------|--------|------|
| bw-cli | ✅ | ✅ | ✅✅✅ | ❌ | ❌ | ✅ | 🔴 |
| gh-issues | ✅ | ✅ | ❌ | ✅✅✅ | ❌ | ✅ | 🔴 |
| adb | ✅ | ✅ | ❌ | ✅ | ✅✅ | ❌ | 🔴 |
| healthcheck | ✅ | ❌ | ❌ | ❌ | ✅✅✅ | ❌ | 🔴 |
| proactive-agent | ✅✅ | ✅ | ✅ | ✅✅ | ✅ | ✅ | 🔴 |
| linux-desktop | ✅ | ❌ | ❌ | ✅ | ✅✅ | ❌ | 🔴 |
| feishu-perm | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | 🔴 |
| github | ✅ | ✅ | ✅ | ✅✅✅ | ❌ | ✅ | 🔴 |
| webapp-testing | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | 🟡 |
| clawhub | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | 🟡 |
| *其他 28 个* | - | - | - | - | - | - | 🟢 |
**图例**:
- ✅ = 有访问权限
- ✅✅ = 高权限访问
- ✅✅✅ = 完全控制
- ❌ = 无访问权限
---
## 4. 安全隐患总结
### 4.1 密码管理风险
**问题**:
- bw-cli 拥有密码库完全访问权限
- 缺少 2FA 保护(如果 Vaultwarden 支持)
- 没有操作审计日志
- 可批量导出明文密码
**影响**:
- 密码泄露可导致账户全面接管
- 缺少审计导致无法追踪泄露源头
- 2FA 缺失降低身份验证强度
**建议**:
1. **立即启用 2FA**(如果 Vaultwarden 支持)
2. **添加操作审计**:
```bash
# 记录所有密码访问
export BW_AUDIT_LOG=/var/log/bw-audit.log
bw config audit enable
- 限制导出权限:
# 禁用明文导出 bw config export disable-plaintext
4.2 代码仓库风险
问题:
- gh-issues 可自动推送代码
- 缺少强制代码审查
- 可创建 Pull Requests
- Spawn 子代理横向移动
影响:
- 恶意代码可能通过自动修复植入
- 供应链攻击风险(修改依赖)
- 未审查的代码可能包含后门
建议:
- 启用分支保护:
# .github/settings.yml branches: - name: main protection: required_pull_request_reviews: 1 required_status_checks: strict: true enforce_admins: true - 强制 PR Review:
- 所有代码必须经过审查
- 至少 1 个批准才能合并
- 禁止直接推送到 main
4.3 设备控制风险
问题:
- adb 可执行不可逆操作(工厂重置)
- linux-desktop 可控制键盘鼠标
- 缺少自动备份机制
- 没有操作审计
影响:
- 设备数据可能被永久删除
- 隐私数据可能泄露(截图、备份提取)
- 设备可能被锁定
建议:
- 强制自动备份:
# 创建 pre-action hook # /usr/local/bin/adb-wrapper #!/bin/bash DANGEROUS=("clear", "uninstall", "reboot", "MASTER_CLEAR") for cmd in "${DANGEROUS[@]}"; do if [[ "$*" == *"$cmd"* ]]; then echo "⚠️ Dangerous operation detected. Creating backup..." adb backup -apk -shared -f ~/adb-backups/$(date +%Y%m%d_%H%M%S).ab fi done /usr/bin/adb "$@" - 启用操作审计:
auditctl -w /usr/bin/adb -p x -k adb-access
4.4 系统配置风险
问题:
- healthcheck 可修改防火墙/SSH 配置
- 可能导致系统锁定
- 缺少自动回滚机制
- 没有快照备份
影响:
- 配置错误可能导致无法访问系统
- 防火墙规则可能阻断所有连接
- SSH 配置错误可能永久锁定
建议:
- 创建系统快照:
# 操作前 sudo timeshift --create --comments "Before healthcheck modification" - 保留紧急访问:
- 物理控制台访问
- 备用 SSH 密钥(存储在外部)
- Live USB 启动恢复
- 分步执行:
healthcheck --step-by-step --confirm-each
4.5 自我进化风险
问题:
- proactive-agent 可修改自身配置
- 可创建持久化 cron 任务
- Spawn 子代理横向移动
- 访问所有记忆文件(隐私数据)
影响:
- 代理可能偏离原始目标(目标漂移)
- 复杂度爆炸导致不可维护
- 上下文泄露到外部渠道
- 持久化恶意任务
建议:
- 限制 cron 创建:
# AGENTS.md 规则 ## Cron 任务创建约束 所有 `openclaw cron add` 操作必须人工确认。 自动创建的 cron 任务在 24 小时后自动禁用。 - 定期审计:
# 每周检查 0 0 * * 0 /usr/local/bin/audit-proactive-agent.sh - 配置文件保护:
# 设置不可变属性 sudo chattr +i ~/.openclaw/openclaw.json
4.6 供应链风险
问题:
- clawhub 安装外部技能
- 未审查的代码可能包含漏洞
- 技能可能有恶意行为
- 缺少沙箱隔离
影响:
- 供应链攻击(植入后门)
- 数据泄露到外部服务器
- 恶意代码执行
建议:
- 技能审查流程:
# 安装前检查 clawhub search <skill-name> curl https://clawhub.com/api/skills/<skill-name>/source | less - 沙箱测试:
# 在隔离环境测试 docker run -it --rm openclaw/sandbox test-skill <skill-name> - 权限最小化:
# openclaw.json skills: sandbox: true network: false filesystem: readonly
5. 优先级建议
P0 - 立即执行(24小时内)
5.1 启用 Bitwarden 2FA
# 检查是否支持 2FA
bw config server --help | grep -i 2fa
# 如果支持,启用
bw config two-factor enable --method 0 # Authenticator
5.2 添加密码访问审计
# 创建审计日志目录
sudo mkdir -p /var/log/openclaw/audit
sudo chown $USER:$USER /var/log/openclaw/audit
# 配置 auditd
cat <<EOF | sudo tee /etc/audit/rules.d/openclaw-bw.rules
-w /usr/local/bin/bw -p x -k bw-access
-w ~/.config/Bitwarden\ CLI -p wa -k bw-data
EOF
# 重启 auditd
sudo systemctl restart auditd
5.3 启用 GitHub 分支保护
# 使用 gh CLI
gh api -X PUT repos/{owner}/{repo}/branches/main/protection \
-F required_pull_request_reviews='{"required_approving_review_count":1}' \
-F required_status_checks='{"strict":true,"contexts":[]}' \
-F enforce_admins=true
5.4 配置 ADB 自动备份
# 创建备份脚本
cat <<'EOF' > ~/bin/adb-safe-wrapper
#!/bin/bash
DANGEROUS_CMDS=("uninstall" "clear" "reboot" "MASTER_CLEAR")
BACKUP_DIR=~/adb-backups
for cmd in "${DANGEROUS_CMDS[@]}"; do
if [[ "$*" == *"$cmd"* ]]; then
echo "⚠️ Dangerous operation detected: $cmd"
echo "Creating backup..."
mkdir -p "$BACKUP_DIR"
/usr/bin/adb backup -apk -shared -f "$BACKUP_DIR/pre-$(date +%Y%m%d_%H%M%S).ab"
read -p "Continue with dangerous operation? (yes/no): " confirm
[[ "$confirm" != "yes" ]] && exit 1
fi
done
/usr/bin/adb "$@"
EOF
chmod +x ~/bin/adb-safe-wrapper
sudo ln -sf ~/bin/adb-safe-wrapper /usr/local/bin/adb
P1 - 本周完成(7天内)
5.5 实施操作审计系统
# 创建统一审计日志
sudo mkdir -p /var/log/openclaw/audit
sudo chown -R $USER:$USER /var/log/openclaw
# 配置 auditd 规则
cat <<'EOF' | sudo tee /etc/audit/rules.d/openclaw-skills.rules
# High-risk skills
-w /usr/local/bin/bw -p x -k bw-cli-access
-w /usr/bin/adb -p x -k adb-access
-w /usr/bin/gh -p x -k github-access
-w /usr/bin/ydotool -p x -k desktop-automation
-w /usr/bin/openclaw -p x -k openclaw-access
# Configuration files
-w ~/.openclaw -p wa -k openclaw-config
-w ~/.secrets -p wa -k secrets-access
EOF
sudo systemctl restart auditd
5.6 配置 healthcheck 自动回滚
# 创建快照脚本
cat <<'EOF' > ~/bin/healthcheck-safe
#!/bin/bash
SNAPSHOT_NAME="pre-healthcheck-$(date +%Y%m%d_%H%M%S)"
# 创建快照
echo "Creating system snapshot: $SNAPSHOT_NAME"
sudo timeshift --create --comments "$SNAPSHOT_NAME"
# 执行 healthcheck
echo "Running healthcheck..."
/usr/bin/openclaw healthcheck "$@"
EXIT_CODE=$?
# 如果失败,提示回滚
if [[ $EXIT_CODE -ne 0 ]]; then
echo "⚠️ Healthcheck failed. Rollback with:"
echo "sudo timeshift --restore --snapshot '$SNAPSHOT_NAME'"
fi
exit $EXIT_CODE
EOF
chmod +x ~/bin/healthcheck-safe
5.7 审查 proactive-agent cron 任务
# 列出所有 cron 任务
openclaw cron list
# 检查是否有可疑任务
openclaw cron list | grep -E "(isolated|spawn|subagent)"
# 审查每个任务的 payload
for id in $(openclaw cron list --json | jq -r '.[].id'); do
echo "=== Cron Job $id ==="
openclaw cron show $id
echo
done
5.8 添加 linux-desktop 截图过滤
# 创建截图过滤脚本
# ~/.openclaw/skills/linux-desktop/scripts/screenshot_safe.py
import cv2
import numpy as np
from PIL import Image, ImageFilter
def blur_text_regions(image_path):
"""自动检测并模糊文本区域"""
img = cv2.imread(image_path)
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测文本区域(简化版,实际应使用 OCR)
# 这里使用边缘检测作为示例
edges = cv2.Canny(gray, 50, 150)
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 模糊文本区域
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
if w > 50 and h > 10: # 过滤小噪点
roi = img[y:y+h, x:x+w]
blurred_roi = cv2.GaussianBlur(roi, (99, 99), 30)
img[y:y+h, x:x+w] = blurred_roi
# 保存
output_path = image_path.replace('.png', '_safe.png')
cv2.imwrite(output_path, img)
return output_path
if __name__ == "__main__":
import sys
blur_text_regions(sys.argv[1])
P2 - 本月完成(30天内)
5.9 建立技能审查流程
# ~/.openclaw/SKILL-REVIEW.md
## 新技能安装审查流程
### 1. 来源验证
- [ ] 作者是否可信(查看历史技能)
- [ ] 是否在官方市场(ClawHub)
- [ ] 是否有安全审计记录
### 2. 代码审查
- [ ] 检查 SKILL.md 是否有可疑命令
- [ ] 搜索 shell 命令、curl/wget
- [ ] 检查是否有外部连接
- [ ] 查找数据外泄模式
### 3. 沙箱测试
```bash
# 在隔离环境测试
docker run -it --rm \
--network none \
-v $(pwd)/skill:/skill:ro \
openclaw/sandbox \
/usr/local/bin/test-skill /skill
4. 权限最小化
# 限制技能权限
skills:
<skill-name>:
filesystem: readonly
network: false
exec: false
5. 监控期
- 前 7 天每天检查日志
- 监控异常行为
- 验证无数据泄露
#### 5.10 配置监控告警
```bash
# 安装监控工具
sudo apt install -y auditd audispd-plugins
# 配置实时告警
cat <<'EOF' | sudo tee /etc/audisp/plugins.d/openclaw-alert.conf
active = yes
direction = out
path = /usr/local/bin/openclaw-alert
type = always
args = /var/log/openclaw/alerts.log
EOF
# 创建告警脚本
cat <<'EOF' | sudo tee /usr/local/bin/openclaw-alert
#!/bin/bash
LOG_FILE=$1
ALERT_RULES=(
"bw export.*--format"
"gh repo delete"
"adb.*MASTER_CLEAR"
"healthcheck.*--fix.*--yes"
)
while read line; do
for rule in "${ALERT_RULES[@]}"; do
if [[ "$line" =~ $rule ]]; then
echo "[$(date)] ALERT: $line" >> /var/log/openclaw/alerts.log
# 发送通知(示例)
# notify-send "OpenClaw Security Alert" "$line"
fi
done
done
EOF
sudo chmod +x /usr/local/bin/openclaw-alert
5.11 定期安全审计
# 创建每月审计 cron
cat <<'EOF' | sudo tee /etc/cron.d/openclaw-monthly-audit
# 每月 1 日凌晨 2 点运行安全审计
0 2 1 * * otter /usr/local/bin/openclaw-monthly-audit.sh
EOF
# 创建审计脚本
cat <<'EOF' > /usr/local/bin/openclaw-monthly-audit.sh
#!/bin/bash
REPORT_DIR=~/.openclaw/audit-reports
DATE=$(date +%Y%m%d)
REPORT_FILE="$REPORT_DIR/audit-$DATE.md"
mkdir -p "$REPORT_DIR"
echo "# OpenClaw Monthly Security Audit - $DATE" > "$REPORT_FILE"
echo >> "$REPORT_FILE"
# 1. 检查高风险技能日志
echo "## 1. High-Risk Skills Audit" >> "$REPORT_FILE"
for skill in bw adb gh healthcheck; do
echo "### $skill" >> "$REPORT_FILE"
ausearch -k $skill-access -ts recent-month | head -100 >> "$REPORT_FILE"
echo >> "$REPORT_FILE"
done
# 2. 检查 cron 任务变更
echo "## 2. Cron Job Changes" >> "$REPORT_FILE"
openclaw cron list >> "$REPORT_FILE"
echo >> "$REPORT_FILE"
# 3. 检查配置文件修改
echo "## 3. Configuration File Changes" >> "$REPORT_FILE"
find ~/.openclaw -type f -mtime -30 >> "$REPORT_FILE"
echo >> "$REPORT_FILE"
# 4. 检查新安装的技能
echo "## 4. Recently Installed Skills" >> "$REPORT_FILE"
find ~/.openclaw/skills -type d -mtime -30 >> "$REPORT_FILE"
echo >> "$REPORT_FILE"
# 发送报告
echo "Audit report saved to: $REPORT_FILE"
EOF
chmod +x /usr/local/bin/openclaw-monthly-audit.sh
5.12 备份策略
# 配置关键数据备份
cat <<'EOF' > ~/.openclaw/backup-config.sh
#!/bin/bash
BACKUP_DIR=~/.openclaw/backups
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p "$BACKUP_DIR/$DATE"
# 1. 备份配置文件
tar -czf "$BACKUP_DIR/$DATE/openclaw-config.tar.gz" ~/.openclaw/*.json ~/.openclaw/*.md
# 2. 备份密码库(加密)
bw export --format encrypted_json --output "$BACKUP_DIR/$DATE/bitwarden-encrypted.json"
# 3. 备份技能列表
openclaw skills list > "$BACKUP_DIR/$DATE/skills-list.txt"
# 4. 备份 cron 任务
openclaw cron list > "$BACKUP_DIR/$DATE/cron-jobs.txt"
# 5. 备份审计日志(最近 30 天)
tar -czf "$BACKUP_DIR/$DATE/audit-logs.tar.gz" -C /var/log/openclaw audit
# 保留最近 3 个月的备份
find "$BACKUP_DIR" -type d -mtime +90 -exec rm -rf {} \;
echo "Backup completed: $BACKUP_DIR/$DATE"
EOF
chmod +x ~/.openclaw/backup-config.sh
# 配置每周备份 cron
(crontab -l 2>/dev/null; echo "0 2 * * 0 ~/.openclaw/backup-config.sh") | crontab -
6. 合规性检查
6.1 GDPR/隐私合规
相关技能:
- ⚠️ feishu-doc - 可能处理个人数据(文档内容)
- ⚠️ caldav-calendar - 访问日历(包含个人信息、会议)
- ⚠️ linux-desktop - 截图可能包含个人信息
- ⚠️ adb - 访问设备数据(照片、联系人)
- ✅ bw-cli - 数据加密存储
合规建议:
-
数据分类:
# ~/.openclaw/data-classification.yml personal_data: - calendar_events - contacts - photos - documents handling_rules: personal_data: encryption: required access_log: required retention: 30_days external_sharing: prohibited -
访问控制:
# 限制个人信息访问 auditctl -w ~/.config/calcurse -p r -k calendar-access auditctl -w ~/DCIM -p r -k photos-access -
数据泄露防护:
# 监控外部传输 iptables -A OUTPUT -p tcp --dport 443 -m string \ --string "calendar" --algo bm -j LOG --log-prefix "CALENDAR_EXPORT"
6.2 SOC 2 / 安全控制
缺失项:
- ❌ 访问控制列表(ACL)
- ❌ 操作审计日志
- ❌ 变更管理流程
- ⚠️ 入侵检测系统(IDS)
实施建议:
-
访问控制:
# ~/.openclaw/access-control.yml skills: bw-cli: allowed_users: [otter] time_restriction: "09:00-18:00" max_attempts_per_hour: 10 adb: allowed_devices: [device-serial-1] require_backup: true healthcheck: allowed_users: [otter] require_confirmation: true -
变更管理:
# ~/.openclaw/CHANGE-MANAGEMENT.md ## 变更审批流程 ### 高风险变更(需要提前审批) - 安装新技能 - 修改系统配置(healthcheck) - 修改防火墙规则 - 创建 cron 任务 ### 中风险变更(需要当日确认) - 修改技能配置 - 访问敏感数据 - Spawn 子代理 ### 低风险变更(自动执行) - 读取非敏感数据 - 生成内容 - 本地文件操作
7. 监控与告警
7.1 实时监控
# 配置 auditd 实时监控
sudo apt install -y auditd audispd-plugins
# 监控规则
cat <<'EOF' | sudo tee /etc/audit/rules.d/openclaw-skills.rules
## 密码管理监控
-w /usr/local/bin/bw -p x -k bw-cli-access
-a always,exit -F arch=b64 -S open -F path=/etc/bitwarden -k bw-data-access
## GitHub 操作监控
-w /usr/bin/gh -p x -k github-access
-a always,exit -F arch=b64 -S execve -F comm=gh -k github-exec
## 设备控制监控
-w /usr/bin/adb -p x -k adb-access
-a always,exit -F arch=b64 -S execve -F comm=adb -k adb-exec
## 系统配置监控
-w /etc/ssh/sshd_config -p wa -k ssh-config
-w /etc/ufw -p wa -k firewall-config
-w /etc/systemd/system -p wa -k systemd-config
## 桌面自动化监控
-w /usr/bin/ydotool -p x -k desktop-automation
-w /usr/bin/xdotool -p x -k desktop-automation
EOF
# 启动审计
sudo systemctl enable auditd
sudo systemctl start auditd
7.2 日志收集
# 创建统一日志目录
sudo mkdir -p /var/log/openclaw/audit
sudo chown -R otter:otter /var/log/openclaw
# 日志轮转配置
cat <<'EOF' | sudo tee /etc/logrotate.d/openclaw-audit
/var/log/openclaw/audit/*.log {
daily
rotate 90
compress
delaycompress
missingok
notifempty
create 0640 otter otter
}
EOF
7.3 告警规则
# /usr/local/bin/openclaw-alert-engine.py
#!/usr/bin/env python3
import re
from datetime import datetime, timedelta
from collections import defaultdict
class AlertEngine:
def __init__(self):
self.alert_rules = {
"password_export": {
"pattern": r"bw export.*--format",
"severity": "critical",
"message": "Password vault export detected"
},
"repo_deletion": {
"pattern": r"gh repo delete",
"severity": "critical",
"message": "Repository deletion attempted"
},
"factory_reset": {
"pattern": r"adb.*MASTER_CLEAR",
"severity": "critical",
"message": "Android factory reset attempted"
},
"config_auto_fix": {
"pattern": r"healthcheck.*--fix.*--yes",
"severity": "high",
"message": "Automatic system configuration change"
},
"bulk_operations": {
"check": self.check_bulk_operations,
"severity": "medium",
"message": "Bulk operations detected (>5 in 1 minute)"
}
}
self.operation_history = defaultdict(list)
def check_bulk_operations(self, log_line):
# 检查短时间内大量操作
now = datetime.now()
minute_ago = now - timedelta(minutes=1)
# 清理旧记录
self.operation_history = {
k: v for k, v in self.operation_history.items()
if v[-1] > minute_ago
}
# 记录当前操作
self.operation_history[now.minute].append(now)
# 检查是否超过阈值
recent_count = len(self.operation_history[now.minute])
return recent_count > 5
def analyze_log(self, log_line):
for rule_name, rule in self.alert_rules.items():
if "pattern" in rule:
if re.search(rule["pattern"], log_line):
self.trigger_alert(rule, log_line)
elif "check" in rule:
if rule["check"](log_line):
self.trigger_alert(rule, log_line)
def trigger_alert(self, rule, log_line):
alert = {
"timestamp": datetime.now().isoformat(),
"severity": rule["severity"],
"message": rule["message"],
"log_line": log_line
}
# 写入告警日志
with open("/var/log/openclaw/alerts.log", "a") as f:
f.write(f"{alert}\n")
# 发送通知(示例)
if rule["severity"] == "critical":
self.send_notification(alert)
def send_notification(self, alert):
# 这里可以集成通知系统
# 例如: Telegram、Email、Slack
print(f"ALERT: {alert['message']}")
if __name__ == "__main__":
import sys
engine = AlertEngine()
for line in sys.stdin:
engine.analyze_log(line)
8. 应急响应
8.1 紧急情况处理流程
# ~/.openclaw/INCIDENT-RESPONSE.md
## 安全事件响应流程
### Level 1 - 紧急(立即处理)
**场景**: 密码泄露、恶意代码推送、设备数据擦除
**立即行动**:
1. 断开网络连接
```bash
sudo ifconfig eth0 down
-
撤销所有活跃会话
bw logout gh auth logout adb kill-server -
检查审计日志
ausearch -ts recent | grep -E "(bw|gh|adb)" -
通知相关人员
Level 2 - 高优先级(2小时内处理)
场景: 可疑操作、配置变更、异常访问
处理步骤:
- 记录事件详情
- 分析影响范围
- 隔离受影响系统
- 准备修复方案
Level 3 - 中等优先级(24小时内处理)
场景: 权限提升、策略违规
处理步骤:
- 调查事件原因
- 更新安全策略
- 培训相关人员
### 8.2 恢复检查清单
```bash
#!/bin/bash
# ~/.openclaw/scripts/post-incident-check.sh
echo "=== Post-Incident Security Check ==="
# 1. 检查配置文件完整性
echo "1. Checking configuration files..."
find ~/.openclaw -type f -name "*.json" -exec sha256sum {} \; > /tmp/current_checksums.txt
diff ~/.openclaw/config_checksums.txt /tmp/current_checksums.txt
# 2. 检查 cron 任务
echo "2. Checking cron jobs..."
openclaw cron list
# 3. 检查活跃会话
echo "3. Checking active sessions..."
bw status
gh auth status
# 4. 检查网络连接
echo "4. Checking network connections..."
ss -tupn
# 5. 检查最近修改的文件
echo "5. Recently modified files..."
find ~/.openclaw -type f -mtime -1
# 6. 验证技能完整性
echo "6. Verifying skills..."
openclaw skills verify
echo "=== Check complete ==="
9. 总结与行动计划
9.1 当前状态总结
风险分布:
- 🔴 高风险: 8 个技能(21.6%)
- 🟡 中风险: 12 个技能(32.4%)
- 🟢 低风险: 17 个技能(45.9%)
主要问题:
- ❌ 缺少操作审计日志
- ❌ 密码管理缺少 2FA
- ❌ 代码推送缺少强制审查
- ❌ 设备操作缺少自动备份
- ❌ 系统配置缺少自动回滚
- ❌ 自我进化缺少外部约束
9.2 改进优先级
| 优先级 | 任务 | 时间 | 影响 |
|---|---|---|---|
| P0 | 启用 bw-cli 2FA | 2h | 🔴 Critical |
| P0 | 添加操作审计 | 4h | 🔴 Critical |
| P0 | 启用分支保护 | 1h | 🔴 Critical |
| P0 | 配置 ADB 备份 | 2h | 🔴 Critical |
| P1 | 实施监控系统 | 8h | 🟡 High |
| P1 | 配置自动回滚 | 4h | 🟡 High |
| P1 | 审查 cron 任务 | 2h | 🟡 High |
| P1 | 添加截图过滤 | 4h | 🟡 High |
| P2 | 建立审查流程 | 8h | 🟢 Medium |
| P2 | 配置告警系统 | 8h | 🟢 Medium |
| P2 | 定期安全审计 | 4h | 🟢 Medium |
| P2 | 备份策略 | 4h | 🟢 Medium |
9.3 成功指标
安全性指标:
- ✅ 100% 高风险操作有审计日志
- ✅ 100% 密码访问有 2FA 保护
- ✅ 100% 代码推送经过审查
- ✅ 100% 危险操作前有备份
- ✅ < 5 分钟告警响应时间
合规性指标:
- ✅ GDPR 合规(个人数据处理)
- ✅ SOC 2 控制实施
- ✅ 定期审计执行
- ✅ 变更管理流程
可用性指标:
- ✅ < 1% 误报率
- ✅ < 2 小时恢复时间
- ✅ 99.9% 系统可用性
9.4 下次审计
审计时间: 2026-04-04(30天后) 审计重点:
- 验证 P0 任务完成情况
- 检查审计日志是否正常工作
- 审查告警系统有效性
- 评估新安装的技能
10. 附录
10.1 相关文档
10.2 联系方式
审计负责人: 獭獭(AI 助理) 紧急联系: (待配置) 安全团队: (待配置)
10.3 更新记录
| 日期 | 版本 | 变更内容 |
|---|---|---|
| 2026-03-04 | 1.0 | 初始版本 |
审计状态: ⚠️ 需要人工审查
下次审计: 2026-04-04
负责人: 獭獭(主 AI 助理)
本报告由 OpenClaw 自动生成,建议定期审查和更新。