OpenClaw 使用 TLA+/TLC 对最高风险路径进行机器检查的安全模型验证。
目标:提供机器检查的论证,证明 OpenClaw 在显式假设下执行其预期安全策略(授权、会话隔离、工具门控、错误配置安全)。
当前状态:可执行的、攻击者驱动的安全回归套件,每个声明都有有限状态空间上的可运行模型检查,以及配对的负面模型(产生反例 trace)。
不是:证明”OpenClaw 在所有方面都安全”或完整 TypeScript 实现正确性的证明。
模型仓库
vignesh07/openclaw-formal-models
运行方式
git clone https://github.com/vignesh07/openclaw-formal-models
cd openclaw-formal-models
# 需要 Java 11+(TLC 运行在 JVM 上)
make <target>已验证的安全声明
Gateway 暴露与错误配置
声明:绑定到非 loopback 且无认证会增加远程妥协风险;token/password 阻断未认证攻击者。
make gateway-exposure-v2 # 绿色(通过)
make gateway-exposure-v2-negative # 红色(预期反例)节点 Exec 流水线(最高风险能力)
声明:exec host=node 需要节点命令 allowlist + 声明命令 + 实时审批(配置时);审批令牌化防止重放。
make nodes-pipeline # 绿色
make approvals-token # 绿色
make nodes-pipeline-negative # 红色(预期)配对存储(DM 门控)
声明:配对请求遵守 TTL 和待处理请求上限。
make pairing # 绿色
make pairing-cap # 绿色入口门控(mention + 控制命令绕过)
声明:在需要 mention 的群组上下文中,未授权的”控制命令”无法绕过 mention 门控。
路由/会话键隔离
声明:来自不同对等方的 DM 不会合并到同一 session,除非显式链接/配置。
重要注意事项
- 这些是模型,不是完整的 TypeScript 实现;模型与代码之间可能存在漂移
- 结果受 TLC 探索的状态空间限制;“绿色”不意味着超出建模假设和边界的安全性
- 某些声明依赖显式环境假设(如正确部署、正确配置输入)
相关页面
- security-threat-model-atlas — MITRE ATLAS 威胁模型
- security-threat-model-contributing — 贡献指南