OpenClaw 的安全模型优先考虑"智能之前的访问控制":首先锁定谁可以与机器人对话、在哪里它可以行动、可以触及什么,而不是依赖模型行为。
核心安全原则
"安全是一个过程,而非产品。另外,不要相信有 shell 访问权限的龙虾。" 🦞
OpenClaw 的安全哲学:
- 访问控制优先: 在依赖 AI 行为之前,先通过技术手段限制访问
- 最小权限原则: 只授予完成任务所需的最小权限
- 纵深防御: 多层安全措施,任何单层失效不会导致全面失陷
- 假设突破: 假设 AI 可能被攻破,设计相应的限制措施
威胁模型
OpenClaw 的威胁模型假设:
AI Agent 能力假设
- 执行任意 shell 命令: 通过
exec工具 - 读写文件: 通过
read/write工具 - 网络访问: 通过
http-request等工具 - 发送消息: 可以向任何人发送消息
攻击者能力假设
- 社会工程: 诱骗 AI 执行恶意操作
- 提示注入: 通过精心设计的输入覆盖 AI 指令
- 数据泄露: 诱骗 AI 泄露敏感信息
- 权限提升: 尝试逃逸沙箱或获取更高权限
安全审计清单
1. 入站访问审计
检查项
- ✅ WhatsApp/Telegram 是否配对到受信任的号码
- ✅ DM 策略是否设为
pairing或allowlist - ✅ 群组是否设置白名单
- ✅ Mention 门控是否启用
- ✅ Gateway 认证是否配置 (token/password)
2. 工具爆炸半径审计
- ✅ 沙箱是否启用 (
non-main或all) - ✅ 工具是否使用允许列表 (而非拒绝列表)
- ✅ 高危工具是否禁用 (
shell,docker) - ✅
elevated是否仅在必要时启用 - ✅ 工作空间访问是否最小化 (
none或ro)
3. 网络暴露审计
- ✅ Gateway 是否仅绑定 loopback (
127.0.0.1) - ✅ 远程访问是否使用 SSH 隧道或 Tailscale
- ✅ 防火墙规则是否正确配置
- ✅ TLS/SSL 是否在生产环境启用
4. 浏览器控制审计
- ✅
browser.cdpUrl是否绝不分享 - ✅ CDP 端口是否仅监听 loopback
- ✅ 浏览器工具是否限制使用
5. 磁盘卫生审计
- ✅ 配置文件权限是否为
600或700 - ✅ 敏感凭据是否使用环境变量
- ✅
.env文件是否在.gitignore中 - ✅ 日志是否已脱敏
6. 插件审计
- ✅ 仅使用可信来源的插件
- ✅ 审查插件代码的安全性
- ✅ 插件权限是否最小化
7. 模型卫生审计
- ✅ 使用现代指令加固模型 (如 Anthropic Claude 3.5 Opus)
- ✅ API 密钥是否安全存储
- ✅ 模型提供商是否可信
凭据存储映射
通道凭据
| 服务 | 存储位置 | 敏感度 |
|---|---|---|
~/.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"
]
}
}
}
事件响应
应急步骤
- 遏制
- 立即停止 Gateway:
openclaw gateway stop - 关闭网络暴露 (SSH隧道/Tailscale)
- 隔离受影响系统
- 立即停止 Gateway:
- 密钥轮换
- 轮换 Gateway token/password
- 轮换模型提供商 API 密钥
- 撤销 OAuth 令牌
- 重新配对通道(必要时)
- 审计
- 查看日志:
openclaw logs --level error - 审查聊天记录
- 检查配置变更
- 评估数据泄露范围
- 查看日志:
- 恢复
- 加固配置
- 重新启动服务
- 监控异常活动
应急配置
# 应急关闭脚本
#!/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-main或all) - ✅ 工具使用允许列表
- ✅
elevated仅在必要时启用 - ✅ 文件权限正确 (700/600)
- ✅ 敏感凭据使用环境变量
- ✅ TLS 在生产环境启用
- ✅ 日志脱敏已配置
- ✅ 速率限制已启用
- ✅ 定期审计和更新
- ✅ 应急响应计划已制定
最佳实践总结
- 访问控制第一: 在依赖模型行为之前先限制访问
- 最小权限: 只授予必需的工具和访问
- 纵深防御: 多层安全措施
- 假设突破: 设计防御措施时假设单层可能失效
- 定期审计: 检查配置和日志
- 保持更新: 及时应用安全补丁
- 监控异常: 实时监控可疑活动
- 应急准备: 制定并演练应急响应计划