引言
OpenClaw-CN 是一个基于开源 OpenClaw 的中国本地化维护版本,致力于为开发者提供顺滑的 Agent 开发体验,原生支持 DeepSeek、Qwen 等国产大模型。作为一个运行在用户空间的 AI 助手,OpenClaw 拥有执行文件操作、运行命令、访问网络等能力,因此其自身的安全性至关重要。
本文深入探讨了 OpenClaw-CN 的安全增强方案,明确了"让 AI 助手自我约束"的核心定位。通过对登录验证、文件操作、系统命令、资金安全等模块的细致分析,我们证明了该方案在技术上的可行性,并提供了具体的实现路径。特别是针对路径规范化、强制回收站、MFA 集成等关键点,给出了可操作的代码示例和架构建议。
OpenClaw-CN 作为中国开发者社区的 AI 基础设施,其安全性直接关系到用户数据和系统的稳定。通过实施本文所述的安全增强措施,OpenClaw-CN 将成为一个自身行为透明、可管可控、自律安全的 AI 助手,为开发者提供更可靠的自动化体验。
本文提出了一套全面的安全增强方案,涵盖登录验证、文件系统保护、系统安全加固、资金安全、代码运行安全等多个维度。本文旨在深入分析该方案的可行性,并结合 OpenClaw-CN 的实际架构,提供具体的技术实现思路,特别是针对路径处理、强制回收站、MFA 集成等关键点给出可操作的指导。
一、方案总体评估:基于"自我约束"的可行性重构
在原始方案中,部分建议(如"阻止修改系统文件"、"禁止运行分区工具")看似超出了 AI 助手的能力范围,因为 OpenClaw 无法也不应承担操作系统安全层的职责。然而,经过澄清,方案的真正意图是让 OpenClaw 自身不执行这些敏感操作,而不是在系统层面阻止其他进程。这一"自我约束"的定位,使得几乎所有建议都具备了可行性。
下表概括了各模块在"自我约束"原则下的可行性评估:
| 类别 | 建议 | 可行性 | 关键实现方式 |
|---|---|---|---|
| 登录验证 | MFA、二维码绑定、重置机制 | 高 | 扩展用户配置系统,集成 TOTP |
| 文件系统 | 强制回收站,禁止绕过 | 高 | 修改文件操作 API,先备份后操作 |
| 文件系统 | 禁止修改系统/程序文件 | 高 | 路径黑名单 + 拒绝执行 |
| 系统安全 | 阻止修改网络/驱动/分区等 | 高 | 命令黑名单 + 意图过滤 |
| 系统安全 | 审计日志与自动分析 | 高 | 日志记录 + 定时分析任务 |
| 资金安全 | 识别并拒绝网银操作 | 中 | 域名黑名单 + 用户确认 |
| 代码运行 | 脚本静态分析/沙箱提示 | 中/高 | 静态分析 + 用户授权 |
| 邮箱操作 | 禁止直接删除邮件 | 高 | 内部操作映射 |
| 安装维护 | 配置强密码、磁盘满暂停 | 高 | 安装脚本 + 任务调度器 |
二、核心架构:安全裁决模块
为了在现有 OpenClaw-CN 处理流程中嵌入安全控制,我们提出在意图识别 与动作执行 之间插入一个安全裁决模块 ,并配合安全策略引擎实现动态决策。
用户输入 → 意图识别 → 安全裁决 → 动作执行 → 结果输出
↑
[安全策略引擎]
安全裁决模块的职责包括:
- 接收待执行的动作列表(结构化表示,如 JSON)。
- 调用安全策略引擎进行风险评估。
- 对高风险动作:拒绝、请求用户确认、要求 MFA。
- 对允许的动作:执行预处理(如文件备份)。
安全策略引擎维护:
- 文件路径黑名单(支持通配符、正则)。
- 命令/进程黑名单。
- URL 黑名单。
- 用户自定义的安全等级和例外规则。
三、关键模块实现详解
3.1 登录验证与 MFA 集成
OpenClaw-CN 已有用户配置系统(~/.openclaw/openclaw.json),可在此扩展 MFA 相关字段。
TOTP 实现步骤:
- 使用
speakeasy生成密钥,并以二维码形式展示(qrcode库)。 - 用户使用 Google Authenticator 等 App 扫描绑定。
- 在执行高风险操作(如删除文件、修改配置)前,提示用户输入 6 位验证码。
- 验证通过后,操作继续;否则拒绝。
恢复机制:
- 生成 10 个一次性恢复码,加密存储。
- 或绑定备用邮箱,通过邮件发送重置链接。
3.2 文件系统操作:强制回收站与路径黑名单
3.2.1 强制回收站
对于文件修改、删除、重命名等操作,设计统一的预处理函数:先将目标文件备份到回收站目录 (如 ~/.openclaw_trash),再执行原操作。
- 对于删除:直接将文件移动到回收站,原删除操作取消。
- 对于修改:先复制原文件到回收站,再执行修改。
- 回收站需记录原始路径,以便恢复。
- 设置自动清理策略(按时间或容量),避免磁盘占满。
javascript
async function backupToTrash(filePath) {
const trashDir = path.join(os.homedir(), '.openclaw_trash');
const dest = path.join(trashDir, Date.now() + '_' + path.basename(filePath));
await fs.copy(filePath, dest);
return dest;
}
3.2.2 路径黑名单与规范化
路径黑名单是防止操作敏感文件的核心。但仅检查原始输入是不够的,必须对路径进行彻底规范化,以抵御通过相对路径(.、..)、环境变量($HOME)、符号链接等手段的绕过。
路径规范化流程:
- 环境变量展开 :替换
$VAR、${VAR}、%VAR%为实际值。 - 相对路径解析 :基于当前工作目录,使用
path.resolve()转换为绝对路径。 - 符号链接解析 :调用
fs.realpathSync()获取最终物理路径(可选,但推荐)。 - 大小写统一(Windows):将盘符统一为大写,其余部分转为小写。
- 黑名单匹配 :使用规范化后的路径与模式列表比对(
micromatch支持通配符)。
javascript
function normalizePath(input, baseDir = process.cwd()) {
const expanded = expandEnvVars(input);
const absolute = path.resolve(baseDir, expanded);
try {
return fs.realpathSync(absolute);
} catch {
return absolute; // 路径可能不存在,返回绝对路径
}
}
黑名单规则示例:
json
{
"filePaths": [
"/etc/**",
"/usr/bin/**",
"C:\\Windows\\System32\\**",
"**/.ssh/id_rsa"
]
}
匹配时使用 micromatch.isMatch(normalizedPath, patterns)。
3.3 命令黑名单与进程启动限制
对于通过 child_process 执行的系统命令,维护一个危险命令列表。列表不仅包含命令名称,还应考虑参数中的危险模式(如 rm -rf /)。
javascript
const dangerousCommands = [
/^rm\s+-rf\s+\/$/,
/^dd\s+if=.*\s+of=\/dev\/sd/,
/^mkfs/,
/^fdisk/,
// ...
];
function isCommandDangerous(command) {
return dangerousCommands.some(re => re.test(command));
}
此外,对于通过 OpenClaw 启动的外部程序(如 mstsc、gparted),可在进程启动函数中检查可执行文件路径是否在黑名单内。
3.4 网银/支付操作识别
由于准确识别所有网银操作具有挑战性,建议采用组合策略:
- 域名黑名单:维护常见银行/支付网站列表。
- URL 模式匹配 :如路径包含
/pay、/transfer。 - 关键词检测:用户指令中同时出现"转账"、"登录银行"等。
当检测到潜在网银操作时,可选择:
- 拒绝执行自动化脚本。
- 提示用户手动操作,并给出安全建议。
- 若用户确需自动化,则要求 MFA 验证并明确授权。
3.5 审计日志与自动分析
使用 winston 等日志库,记录所有操作的关键信息(时间、类型、参数、结果、用户身份)。日志文件应加密存储,防止篡改。
自动分析任务(例如每 24 小时运行):
- 扫描日志,寻找可疑模式:
- 短时间内大量删除文件。
- 多次尝试修改系统关键文件被拒绝。
- 频繁的 MFA 失败。
- 在敏感目录创建可执行文件。
- 生成摘要报告,通过 UI 或邮件推送给用户。
3.6 代码运行安全:静态分析与沙箱提示
对于脚本执行,可先进行静态分析 :解析脚本 AST(如使用 esprima 分析 JavaScript),检测高危函数调用(eval、exec 等),并提示用户风险。
沙箱动态分析较为复杂,但可考虑:
- 在受限容器(Docker)或虚拟机中运行。
- 调用系统安全策略(如 Windows 的 AppLocker)。
- 作为备选方案,提示用户风险并征得明确同意。
3.7 邮箱操作
将"删除邮件"在内部映射为"移动到指定文件夹"(如 Trash),而非真正删除。这可通过修改邮箱处理模块的逻辑实现。
3.8 安装与维护功能
- 安装程序:检查系统设置(如防火墙、密码策略),给出交互式配置建议,并可自动执行部分加固操作(需管理员权限)。
- 磁盘满暂停:任务调度器定期检查磁盘空间,低于阈值时序列化所有任务状态到磁盘,暂停新任务,并通知用户。恢复时反序列化状态,继续执行。
四、用户交互与可配置策略
安全模块应提供友好的用户界面(命令行或图形),在发生安全拦截时清晰提示原因和操作选项。
安全提示示例:
[安全提醒] 您尝试修改系统文件 /etc/hosts,此操作可能影响网络配置。
请选择:
1. 允许本次操作
2. 永久允许(加入白名单)
3. 拒绝(默认)
可配置的安全策略 :
在 ~/.openclaw/openclaw.json 中增加 safety 部分:
json
{
"safety": {
"level": "high", // low, medium, high
"customBlacklist": {
"filePaths": ["/my/secret/file"],
"commands": ["dangerous-tool"]
},
"mfa": {
"enabled": true,
"secret": "...",
"recoveryCodes": ["code1", "code2"]
},
"trash": {
"autoCleanDays": 30,
"maxSizeGB": 10
}
}
}
五、潜在挑战与应对
| 挑战 | 应对方案 |
|---|---|
| 性能影响 | 异步处理文件备份;允许用户关闭部分检查;对大文件操作特殊处理 |
| 误报与用户困扰 | 提供"临时放行"和"学习机制";允许用户自定义例外 |
| 配置安全性 | 使用系统密钥链(keytar)加密存储敏感信息;恢复码加密保存 |
| 黑名单维护 | 社区贡献更新机制;定期从可信源拉取最新规则 |
| 路径规范化的复杂性 | 全面测试跨平台场景;处理 Windows 长短文件名、卷挂载点 |
六、实施路线图
建议采用增量开发方式,分阶段发布安全增强特性:
- 第一阶段:文件路径黑名单 + 强制回收站(基础文件安全)
- 第二阶段:命令黑名单 + 审计日志(基础系统安全)
- 第三阶段:MFA + 用户确认流程(增强身份验证)
- 第四阶段:可配置策略 UI + 自动分析报告(用户体验与智能化)
每个阶段可独立发布,让用户逐步体验到安全性提升,同时收集反馈优化实现。