6.20 安全机制

OpenClaw 的安全模型优先考虑"智能之前的访问控制":首先锁定可以与机器人对话、在哪里它可以行动、可以触及什么,而不是依赖模型行为。

核心安全原则

"安全是一个过程,而非产品。另外,不要相信有 shell 访问权限的龙虾。" 🦞

OpenClaw 的安全哲学:

  • 访问控制优先: 在依赖 AI 行为之前,先通过技术手段限制访问
  • 最小权限原则: 只授予完成任务所需的最小权限
  • 纵深防御: 多层安全措施,任何单层失效不会导致全面失陷
  • 假设突破: 假设 AI 可能被攻破,设计相应的限制措施

威胁模型

OpenClaw 的威胁模型假设:

AI Agent 能力假设

  • 执行任意 shell 命令: 通过 exec 工具
  • 读写文件: 通过 read/write 工具
  • 网络访问: 通过 http-request 等工具
  • 发送消息: 可以向任何人发送消息

攻击者能力假设

  • 社会工程: 诱骗 AI 执行恶意操作
  • 提示注入: 通过精心设计的输入覆盖 AI 指令
  • 数据泄露: 诱骗 AI 泄露敏感信息
  • 权限提升: 尝试逃逸沙箱或获取更高权限

安全审计清单

1. 入站访问审计

检查项
  • ✅ WhatsApp/Telegram 是否配对到受信任的号码
  • ✅ DM 策略是否设为 pairingallowlist
  • ✅ 群组是否设置白名单
  • ✅ Mention 门控是否启用
  • ✅ Gateway 认证是否配置 (token/password)

2. 工具爆炸半径审计

  • ✅ 沙箱是否启用 (non-mainall)
  • ✅ 工具是否使用允许列表 (而非拒绝列表)
  • ✅ 高危工具是否禁用 (shell, docker)
  • elevated 是否仅在必要时启用
  • ✅ 工作空间访问是否最小化 (nonero)

3. 网络暴露审计

  • ✅ Gateway 是否仅绑定 loopback (127.0.0.1)
  • ✅ 远程访问是否使用 SSH 隧道或 Tailscale
  • ✅ 防火墙规则是否正确配置
  • ✅ TLS/SSL 是否在生产环境启用

4. 浏览器控制审计

  • browser.cdpUrl 是否绝不分享
  • ✅ CDP 端口是否仅监听 loopback
  • ✅ 浏览器工具是否限制使用

5. 磁盘卫生审计

  • ✅ 配置文件权限是否为 600700
  • ✅ 敏感凭据是否使用环境变量
  • .env 文件是否在 .gitignore
  • ✅ 日志是否已脱敏

6. 插件审计

  • ✅ 仅使用可信来源的插件
  • ✅ 审查插件代码的安全性
  • ✅ 插件权限是否最小化

7. 模型卫生审计

  • ✅ 使用现代指令加固模型 (如 Anthropic Claude 3.5 Opus)
  • ✅ API 密钥是否安全存储
  • ✅ 模型提供商是否可信

凭据存储映射

通道凭据

服务 存储位置 敏感度
WhatsApp ~/.openclaw/state/baileys/
Telegram ~/.openclaw/state/telegram.session
Discord channels.discord.botToken
Slack channels.slack.botToken

Gateway 认证

{
  "gateway": {
    "auth": {
      "token": "${OPENCLAW_GATEWAY_TOKEN}"  // 环境变量
    }
  }
}

模型提供商 API 密钥

{
  "models": {
    "providers": {
      "openai": {
        "apiKey": "${OPENAI_API_KEY}"
      },
      "anthropic": {
        "apiKey": "${ANTHROPIC_API_KEY}"
      }
    }
  }
}

OAuth 凭据

OAuth 令牌存储在:

~/.openclaw/state/oauth-tokens.json

提示注入防护

提示注入是一个未解决的问题,但可以通过多层缓解措施降低风险:

1. 配对和白名单

{
  "channels": {
    "whatsapp": {
      "dm": "pairing",  // 仅响应已配对的号码
      "pairing": {
        "allowNumbers": [
          "+1234567890"
        ]
      }
    }
  }
}

2. Mention 门控

{
  "channels": {
    "discord": {
      "requireMention": true  // 群组中需要 @ 提及
    }
  }
}

3. 沙箱隔离

{
  "agents": {
    "defaults": {
      "sandbox": {
        "mode": "all",
        "workspaceAccess": "none"
      }
    }
  }
}

4. 工具白名单

{
  "tools": {
    "allow": ["read", "http-request"],  // 仅允许安全工具
    "deny": ["exec", "shell", "write"]
  }
}

5. 使用现代模型

现代 AI 模型包含指令加固技术,能更好地抵御提示注入:

  • 推荐: Anthropic Claude 3.5 Opus
  • 推荐: OpenAI GPT-4
  • 避免: 旧版或未加固的模型

访问控制

DM 策略

{
  "channels": {
    "whatsapp": {
      "dm": "pairing"  // pairing | allowlist | open | disabled
    }
  }
}
策略 说明 安全级别
disabled 禁用所有 DM 最高
pairing 仅响应配对号码
allowlist 白名单号码
open 响应任何人

群组白名单

{
  "channels": {
    "whatsapp": {
      "groupAllowlist": [
        "group-jid-1@g.us",
        "group-jid-2@g.us"
      ]
    }
  }
}

斜杠命令授权

{
  "commands": {
    "useAccessGroups": true
  },
  "channels": {
    "discord": {
      "channelAllowlist": [
        "admin-channel-id",
        "bot-commands-id"
      ]
    }
  }
}

事件响应

应急步骤

  1. 遏制
    • 立即停止 Gateway: openclaw gateway stop
    • 关闭网络暴露 (SSH隧道/Tailscale)
    • 隔离受影响系统
  2. 密钥轮换
    • 轮换 Gateway token/password
    • 轮换模型提供商 API 密钥
    • 撤销 OAuth 令牌
    • 重新配对通道(必要时)
  3. 审计
    • 查看日志: openclaw logs --level error
    • 审查聊天记录
    • 检查配置变更
    • 评估数据泄露范围
  4. 恢复
    • 加固配置
    • 重新启动服务
    • 监控异常活动

应急配置

# 应急关闭脚本
#!/bin/bash
echo "Emergency shutdown initiated..."
openclaw gateway stop
pkill -9 openclaw
sudo ufw deny 18789
echo "System secured. Check logs for details."

加固配置

最小权限配置

{
  "gateway": {
    "bind": "loopback",
    "auth": {
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    }
  },
  "channels": {
    "whatsapp": {
      "dm": "pairing",
      "pairing": {
        "allowNumbers": ["+1234567890"]
      },
      "requireMention": true
    }
  },
  "agents": {
    "defaults": {
      "sandbox": {
        "mode": "all",
        "scope": "session",
        "workspaceAccess": "none"
      }
    }
  },
  "tools": {
    "allow": ["read", "http-request"],
    "elevated": {
      "enabled": false
    }
  }
}

文件权限

# 设置严格的文件权限
chmod 700 ~/.openclaw
chmod 600 ~/.openclaw/openclaw.json
chmod 600 ~/.openclaw/.env
chmod 700 ~/.openclaw/state

# 检查权限
ls -la ~/.openclaw

日志脱敏

{
  "gateway": {
    "logging": {
      "redact": [
        "token",
        "password",
        "apiKey",
        "secret"
      ]
    }
  }
}

TLS 配置

{
  "gateway": {
    "tls": {
      "enabled": true,
      "cert": "/path/to/cert.pem",
      "key": "/path/to/key.pem",
      "minVersion": "TLSv1.3",
      "cipherSuites": [
        "TLS_AES_256_GCM_SHA384",
        "TLS_CHACHA20_POLY1305_SHA256"
      ]
    }
  }
}

速率限制

{
  "gateway": {
    "rateLimit": {
      "enabled": true,
      "maxRequests": 100,
      "windowMs": 60000,
      "maxConnections": 10
    }
  }
}

安全监控

日志监控

# 监控异常活动
openclaw logs --level error --follow

# 监控认证失败
openclaw logs --filter auth --level warn

# 监控工具执行
openclaw logs --filter tool.exec

审计脚本

#!/bin/bash
# security-audit.sh

echo "=== OpenClaw Security Audit ==="

# 检查 Gateway 绑定
echo "Gateway binding:"
openclaw config show | grep bind

# 检查认证配置
echo "Auth config:"
openclaw config show | grep -A 3 auth

# 检查沙箱
echo "Sandbox mode:"
openclaw config show | grep -A 5 sandbox

# 检查工具策略
echo "Tool policy:"
openclaw config show | grep -A 10 tools

# 检查文件权限
echo "File permissions:"
ls -la ~/.openclaw

# 检查运行的容器
echo "Running containers:"
docker ps | grep openclaw

安全检查清单

  • ✅ Gateway 仅绑定 loopback
  • ✅ 强认证已配置 (32+ 字符 token)
  • ✅ DM 策略设为 pairing 或更严格
  • ✅ 群组使用白名单
  • ✅ 沙箱启用 (non-mainall)
  • ✅ 工具使用允许列表
  • elevated 仅在必要时启用
  • ✅ 文件权限正确 (700/600)
  • ✅ 敏感凭据使用环境变量
  • ✅ TLS 在生产环境启用
  • ✅ 日志脱敏已配置
  • ✅ 速率限制已启用
  • ✅ 定期审计和更新
  • ✅ 应急响应计划已制定

最佳实践总结

  • 访问控制第一: 在依赖模型行为之前先限制访问
  • 最小权限: 只授予必需的工具和访问
  • 纵深防御: 多层安全措施
  • 假设突破: 设计防御措施时假设单层可能失效
  • 定期审计: 检查配置和日志
  • 保持更新: 及时应用安全补丁
  • 监控异常: 实时监控可疑活动
  • 应急准备: 制定并演练应急响应计划

相关资源