albertdobmeyer/openclaw-vault

GitHub: albertdobmeyer/openclaw-vault

OpenClaw-Vault 是一个加固容器封装方案,通过代理侧密钥注入与网络隔离,解决本地运行大模型代理时的密钥泄露与供应链风险。

Stars: 1 | Forks: 0

# OpenClaw-Vault [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) 你已决定运行 [OpenClaw](https://github.com/anthropics/openclaw)。这会让你的决定不太可能毁掉你的一天。 **作者**: [@albertdobmeyer](https://github.com/albertdobmeyer) **核心特性**: 你的 API 密钥保持在容器外部。一个代理 sidecar 在网络层注入它到出站请求。即使容器被完全 compromise,`env | grep API` 也返回空。没有其他加固指南能做到这一点。 ### 什么是 OpenClaw? 三个名称,三个层次,一个生态系统: - **OpenClaw** 是代理运行时——一个开源的自治 AI 助手,运行在你的机器上。它拥有工具、记忆,并能代表你采取行动。你安装它、配置它,并指向一个 LLM 提供商。此前曾叫 Clawdbot,后来短暂叫 Moltbot,现在是 OpenClaw——都在几天内。旧教程会混用这三个名称。 - **ClawHub** 是技能注册表——一个人们发布插件(“技能”)的包索引,为 OpenClaw 提供新能力。可以把它看作 agent 动作的 npm。在 ClawHavoc 事件中,11.9% 的已发布技能是恶意软件,传播了 Atomic Stealer。因此金库默认屏蔽 ClawHub。 - **Moltbook** 是代理社交网络——一个 AI 代理发布、关注、评论和互动的平台。你不会在本地运行 Moltbook;你的 OpenClaw 代理通过 API 连接到它。可以把它看作机器人的 Twitter。 这些层次叠加:ClawHub 提供能力 → OpenClaw 运行代理 → Moltbook 连接代理彼此。命名令人困惑,因为整个生态系统在一周内从零变成热点,随后的快速重命名在各类教程和博客中留下了术语混乱。 **金库的作用**:它将 OpenClaw 运行时封装在一个加固容器中,这样你就可以尝试这一切——运行 Moltbook 代理、测试技能、观察生态系统——而无需将未经验证的自治进程的 API 密钥、文件或无限制网络访问权限交给你。 ``` HOST (your machine) │ │ no shared credentials ── no host mounts ── no Docker socket │ ├── Hardened Container (Podman or Docker) │ read-only root · ALL caps dropped · custom seccomp │ no-new-privileges · 4GB RAM · 256 PIDs · non-root user │ ↓ (internal network only — no default gateway) │ ├── Network Proxy (mitmproxy sidecar) │ API key injection · domain allowlist · exfiltration alerts │ request/response logging (JSON on host) · custom seccomp │ └── Kill Switch --soft (stop, preserve) --hard (nuke containers) --nuclear (destroy VM) ```

OpenClaw-Vault architecture diagram

## 存在的意义 这不是理论上的。所有这些都在一周内发生(2026年1月28日至2月3日): | 事件 | 影响 | |------|------| | **CVE-2026-25253** | 一次点击即可实现 RCE —— 窃取到的令牌通过 OpenClaw 自身的 API 禁用沙箱 | | **ClawHavoc** | 2,857 个 ClawHub 技能中有 341 个是恶意软件(11.9%),传播了 Atomic Stealer | | **数据库泄露** | 150 万个 API 令牌、3.5 万个电子邮件暴露 —— Supabase 的 RLS 被完全禁用 | | **21,639 个实例暴露** | 在公共互联网上运行,大多数没有身份验证 | 其他加固指南将 API 密钥放在容器内作为环境变量。被破坏的进程可以从 `/proc/self/environ` 读取它。OpenClaw-Vault 通过代理 sidecar 注入解决了这个问题:容器与 `http://vault-proxy:8080` 通信,代理检查域名允许列表,注入认证头并转发。容器无法访问真实的密钥。 关于威胁态势的深入分析,请参阅[安全分析汇编](https://github.com/albertdobmeyer/openclaw-research/blob/main/docs/security-report.md)。 ## 适用人群(以及不适用人群) **如果你符合以下情况,这适合你**:你了解 OpenClaw 是什么,已安装 Docker 或 Podman,想尝试 Moltbook 或基于代理的工作流,不想让未经验证的进程在你的主要机器上获取 API 密钥和不受限制的网络访问权限。 **如果你不符合以下情况,这不适合你**:你从未使用过终端,不知道容器是什么,或期望这能让 OpenClaw 对日常使用变得安全。OpenClaw 的维护者曾说过:“如果你无法理解如何运行命令行,这对你来说太危险了。”OpenClaw-Vault 不会改变这一点——它只是让注定要做这件事的人所做的事情更安全。 ## 它是什么(以及不是什么) **OpenClaw-Vault 是一个安全的探索工具。** 它让你在容器中无头运行 OpenClaw,通过 Telegram 与其交互,观察代理生态系统,尝试系统提示词和角色设定,并在加固容器中原型化工作流——该容器配置为阻止对文件、账户和未授权网络目标的访问。 **OpenClaw-Vault 不是一个代理工作站。** 那些让 OpenClaw 成为“个人 AI 助手”的功能——管理你的邮件、读取你的文件、控制你的浏览器、代表你发送 WhatsApp 消息——被故意禁用。这些功能需要主机级访问,而这正是 OpenClaw-Vault 阻止的。如果你想让 OpenClaw 管理你的生活,你就接受了完整的风险面。OpenClaw-Vault 并不是那样设计的。 **具体来说,你可以:** - 运行一个 Moltbook 代理,通过允许的 API 读取、发布、评论和投票 - 通过 Telegram 向你的代理发消息并批准或拒绝其操作 - 在安全可失败的环境中测试系统提示词、角色设定和代理行为 - 在不接触 ClawHub 供应链的情况下编写和测试自定义技能 - 在信任真实基础设施之前,原型化调度、记忆和工具使用工作流 - 通过结构化的代理日志监控代理发出的每个出站请求 **你无法做到:** - 从容器内访问主机的电子邮件、日历、文件或浏览器 - 使用 WhatsApp、iMessage 或 Signal 集成(需要主机级访问) - 从 ClawHub 安装技能(注册表域名默认被屏蔽——恶意率 11.9%) - 在没有显式卷配置的情况下跨容器重启持久化数据 - 运行 Docker-in-Docker(未挂载 socket) ## 选择你的隔离级别 OpenClaw-Vault 是针对 OpenClaw 可用的最佳容器级隔离。但容器不是虚拟机,虚拟机也不是物理隔离的。在选择之前,请诚实地评估你的威胁模型。 ### 层级 1:一次性云 VM —— 最强,推荐 在 $6/月的 DigitalOcean、Hetzner 或 Linode 滴答上运行 OpenClaw-Vault。独立内核,独立网络,与你的个人基础设施零关联。如果被 compromise,攻击者只会在一个空 VM 上,没有任何东西。他们与你的家庭网络、其他机器以及任何真实资源隔离。销毁并在几分钟内重建。 **选择此项如果**:你认真对待威胁景观,计划无监督运行代理,或想要真正的基础设施隔离。 ### 层级 2:本地 VM —— 较强 在本地机器上的 VirtualBox、Hyper-V 或 UTM 中运行 OpenClaw-Vault。独立内核,快照/销毁能力类似云滴答。但虚拟机共享你的物理硬件和本地网络。VM escape(罕见,国家级别攻击者)会让攻击者进入你的机器。DNS rebinding 可能访问 LAN 设备。 **选择此项如果**:你不想为云托管付费,但想要比容器更强的隔离。OpenClaw-Vault 的第二阶段(WSL2/Hyper-V 层)针对此层级。 ### 层级 3:本地机器上的容器 —— 良好,默认 这是 OpenClaw-Vault 开箱即用的方式。容器无法访问你的文件(无主机挂载),被限制访问未授权域名(代理允许列表),并且有防止权限提升的机制(能力被丢弃,seccomp 强制执行,非 root 用户)。当你停止堆栈时,代理的会话数据会被销毁。 **但是**:容器共享你的主机内核。内核漏洞(虽不太可能但并非不可能)会让攻击者进入你的真实机器。容器运行时在主机上存储元数据和层缓存,这些在容器销毁后仍然存在。在活动会话期间,被 compromise 的代理可能通过允许的域名在触发 kill switch 之前外传数据。 **选择此项如果**:你在做实验,接受与不受信任软件共享内核的残余风险,并使用具有硬支出上限的专用 API 密钥。 ### 为什么要独占一个空硬盘? 不。空硬盘不会给你内核隔离,而这才是实际的安全缺口。容器本来就无法访问你的其他硬盘,因为没有主机卷挂载。将 Docker 数据目录移动到独立硬盘只会改变容器层缓存的位置——不会改变安全边界。如果需要比层级 3 更高的隔离,请使用虚拟机(层级 2)或云滴答(层级 1),而不是不同的磁盘。 ## 快速开始 **要求**:Podman 或 Docker。一个 Anthropic 或 OpenAI API 密钥。 ### 路径 A:Podman/Docker + mitmproxy(推荐) ``` git clone https://github.com/albertdobmeyer/openclaw-vault.git cd openclaw-vault bash scripts/setup.sh # Linux / macOS .\scripts\setup.ps1 # Windows PowerShell ``` 检测你的运行时,提示输入 API 密钥,构建加固镜像,启动堆栈,运行 24 项安全检查。五分钟完成。 ### 路径 B:Docker Desktop 沙盒插件(更简单,强度) ``` bash scripts/docker-sandbox-setup.sh ``` 如果使用 Docker Desktop 4.49+,组件更少。折中方案:API 密钥以环境变量形式存在于容器内。文档标注为比路径 A 弱。 ## 你实际如何使用这个 OpenClaw-Vault 在容器中无头运行 OpenClaw。你不会坐在终端里向它键入命令。一个典型会话如下: ### 控制:Telegram OpenClaw 通过消息应用控制——这就是用户界面。堆栈运行后,连接到容器(`podman exec -it openclaw-vault sh`)并运行 OpenClaw 自己的 Telegram 配对流程。它会给你一个代码,输入到 Telegram 机器人中。使用**专用的 Telegram 账户**进行操作——不是你的个人账户(请参阅残余风险)。 从那时起,你向你的代理发消息,它响应,你批准或拒绝操作。全部通过手机或桌面 Telegram 完成,而不是通过 shell。 加固配置默认为**批准模式**:每个操作都需要你通过 Telegram 明确确认。信任系统提示后,可以放宽此设置。开始时要严格。 ### 监控:主机上的代理日志 ``` # 每个请求代理允许、阻止、标记 podman exec vault-proxy cat /var/log/vault-proxy/requests.jsonl # 实时容器日志 podman compose logs -f # 重新运行24点安全检查 bash scripts/verify.sh ``` ### 数据进出 默认情况下没有主机文件系统挂载。这是故意为之——被 compromise 的容器无法直接访问你的文件。 ``` # 将文件放入容器 podman cp ~/research/prompt-tests.txt openclaw-vault:/home/vault/workspace/ # 拉取结果 podman cp openclaw-vault:/home/vault/workspace/results.json ~/research/ ``` 代理也会通过 Telegram 直接将结果发送给你——这是大多数交互的正常流程。 ### 停止 ``` bash scripts/kill.sh --soft # stop, preserve workspace for review bash scripts/kill.sh --hard # remove containers, volumes, networks bash scripts/kill.sh --nuclear # terminate WSL distro / VM (Phase 2) ``` ## 验证 ``` bash scripts/verify.sh ``` **检查 1-14:通用外骨骼**(适用于所有外壳层级) | # | 检查 | 证明什么 | |---|------|----------| | 1 | 代理 DNS 解析 | 网络路由通过 sidecar 工作 | | 2 | 代理 TCP 连接 | 代理正在接受连接 | | 3 | 根文件系统只读 | 防止将恶意软件持久化到镜像 | | 4 | 能力被丢弃 | 无原始套接字,无权限提升 | | 5 | 主机挂载不可访问 | 容器无法访问主机文件 | | 6 | Windows 互操作禁用 | 无法通过 WSL 进行 `cmd.exe` 逃逸 | | 7 | 环境变量中无 API 密钥 | 确认代理侧注入 | | 8 | Docker 套接字未挂载 | 防止生成兄弟容器 | | 9 | sudo 不可用 | 无权限提升路径 | | 10 | 以非 root 用户运行(uid 1000) | 最小权限原则 | | 11 | Seccomp 配置文件已加载 | 自定义系统调用过滤生效 | | 12 | 对 /tmp 禁用执行 | 防止执行注入的有效载荷 | | 13 | 设置了 no-new-privileges | 阻止 setuid 二进制文件提升权限 | | 14 | PID 限制活跃 | 限制 fork 炸弹 | **检查 15-18:Shell 特定**(适配检测到的 Hard Shell、Split Shell 或 Soft Shell) | # | 检查 | 证明什么 | |---|------|----------| | 15 | 配置文件匹配外壳层级 | 对应检测到的外壳的正确基线工具 | | 16 | 执行安全策略匹配外壳 | Hard 为拒绝,Split 为允许列表+始终 | | 17 | 主机 + 提升正确 | 网关执行,提升永久禁用 | | 18 | SafeBins 匹配配置文件 | 无孤儿 safeBins(静默丢弃被阻止) | **检查 19-23:每工具安全**(零信任强制执行) | # | 检查 | 证明什么 | |---|------|----------| | 19 | 永不启用被拒绝的工具 | gateway、nodes、bash 永久在拒绝列表 | | 20 | rm 不在 safeBins 中 | 代理仅具建设性——无删除能力 | | 21 | 解释器不在 safeBins 中 | sh、bash、node、python 被阻止 | | 22 | 代理允许列表干净 | 仅预期域名,无额外内容 | | 23 | 风险评分在预期范围内 | 评分与外壳层级匹配 | ## 域名允许列表 编辑 `proxy/allowlist.txt`。每行一个域名。子域名会自动包含。 ``` podman compose restart vault-proxy # full restart podman exec vault-proxy kill -HUP 1 # hot-reload without restart ``` ClawHub 注册表域名默认被注释掉。仅在手动审查特定技能的源代码后取消注释。 ## 保护范围 ### 防护对象 - API 密钥外泄(代理侧注入——密钥不在容器内) - 到未授权域的网络外泄(允许列表 + 日志记录) - 通过文件、能力或权限提升的容器逃逸 - 资源耗尽(fork 炸弹、内存、PID 限制) - 主机污染来自恶意负载 ### 不防护对象 - 虚拟机监控程序逃逸(状态级攻击者——非你的威胁模型) - WSL2/容器内核零日(通过第二阶段 VM 隔离缓解) - 社会工程学(如果你批准了恶意操作,沙箱无法帮助) - 旁路攻击(推测执行/Meltdown 类——在此不现实) ### 必须理解的残余风险 这些不是理论担忧,而是 OpenClaw-Vault 设计的架构现实。部署前请阅读。 **代理 sidecar 持有 API 密钥。** mitmproxy 容器是拥有你密钥的唯一组件。如果攻击者 compromise 代理容器本身(而非 OpenClaw 容器),他们将直接获得密钥。代理被加固为只读根、丢弃能力、无新权限、内存/PID 限制、自定义 seccomp 配置文件(阻止 io_uring、ptrace、unshare、setns、bpf 及其他逃逸向量),表面最小化——与金库容器在所有方面匹配。代理的 seccomp 配置文件比金库更宽(mitmproxy 需要更宽的系统调用访问以进行 TLS 拦截),但仍阻止已知容器逃逸向量。你应理解密钥在堆栈某处存在——只是 OpenClaw 无法访问它。 **允许的域名可能在活动会话中被滥用。** API 提供商域名(例如 `api.anthropic.com`)必须在允许列表中,OpenClaw 才能工作。被 compromise 的代理可以使用注入的凭证发起任意 API 调用——它看不到原始密钥,但可以使用它。这意味着它可能产生费用、生成内容,或将外传数据编码到 API 请求负载中。**你的缓解措施:在 API 密钥上设置硬支出上限。这不是可选项。将支出上限视为安全边界的一部分,而非计费偏好。** **Telegram 控制通道是信任边界。** 如果有人 compromise 你的 Telegram 账户,他们将控制代理并可以批准任何操作。使用**专用的 Telegram 账户**(不是你的个人账户),启用双因素认证,并将这些凭证视为安全关键。不要重用密码。 **允许列表子域名匹配是隐式的。** 每个允许域名的子域名也都会被允许。例如,允许 `github.com` 也允许 `api.github.com`,这可能被用于通过 Gists API 外传数据。因此,`github.com` 默认被注释掉——只允许 `raw.githubusercontent.com`。如果将域名加入允许列表,请考虑其子域名是否创建外传路径。 **`raw.githubusercontent.com` 默认启用。** 此域名允许从 GitHub 获取公共文件内容——用于查看技能源代码。它是只读的(无基于推送的外传),但被 compromise 的代理可能将窃取的数据编码到 URL 路径中(例如 `/user/repo/main/`)。请求会返回 404,但 GitHub 服务器会记录路径。如果不需要此域名,请在允许列表中注释掉。 **即使在容器内,`npm install` 也是供应链风险。** 注册表域名 `registry.npmjs.org` 默认在允许列表中被注释掉。如果取消注释,npm 包在安装时可能通过生命周期脚本(`preinstall`、`postinstall`)执行任意代码,而 Node.js 的 `require()` 会加载并执行 JavaScript,无论 noexec 挂载标志如何(noexec 仅阻止 ELF 二进制文件,不阻止解释代码)。恶意 npm 包因此可能在容器内安装时运行代码。容器的其他限制(无网络(除允许域名外)、无主机挂载、无能力)限制了爆炸半径,但这确实是一个真实缺口。**只安装你已审查的 npm 包。** **容器 kill 并不保证完全清理。** 当你运行 `kill.sh --hard` 时,容器、卷和网络被销毁。代理的工作空间随之消失。但容器运行时在主机上存储的层缓存和镜像元数据仍然存在(这些不包含你的 API 密钥,因为代理侧注入确保了这一点),可能包含会话日志或代理活动元数据。为了彻底清理 OpenClaw-Vault 使用完毕后的所有内容,还需删除克隆的仓库目录并清理容器运行时:`man system prune -a` 或 `docker system prune -a`。 ## 项目结构 ``` openclaw-vault/ ├── Containerfile # Hardened image (multi-stage, stripped) ├── compose.yml # Container + proxy orchestration ├── Makefile # 17 make targets (setup, verify, test, tools-status, etc.) ├── component.yml # Lobster-TrApp manifest contract ├── config/ │ ├── tool-manifest.yml # Source of truth — all 26 tools, risk levels, injection vectors │ ├── openclaw-hardening.json5 # Active agent config (baked into image) │ ├── hard-shell.json5 # Hard Shell preset config │ ├── split-shell.json5 # Split Shell preset config │ ├── soft-shell.json5 # Soft Shell preset config (the safari) │ ├── hard-shell-allowlist.txt # Hard Shell domain template │ ├── vault-seccomp.json # Custom syscall filter (vault container) │ └── vault-proxy-seccomp.json # Custom syscall filter (proxy container) ├── docs/ │ ├── openclaw-reference.md # How OpenClaw works — tools, config, Telegram, sessions │ ├── openclaw-internals.md # Source code analysis (verified from dist/ bundles) │ ├── roadmap.md # Phased development plan (all 5 phases complete) │ ├── setup-guide.md # Non-technical user setup guide │ ├── definitions.md # OpenClaw ecosystem terminology │ ├── phase1-findings.md # Phase 1 compatibility test results │ ├── research/ # Official docs research notes │ └── specs/ # Feature specs (tool control, skill installation, etc.) ├── proxy/ │ ├── vault-proxy.py # Key injection + domain allowlist + request logging │ └── allowlist.txt # Active domain allowlist (managed by tool-control) ├── scripts/ │ ├── tool-control.sh # Per-tool whitelisting/blacklisting │ ├── tool-control-core.py # Config generator core (python3) │ ├── verify.sh # 24-point security verification │ ├── vault-audit.sh # Workspace audit (files, memory, network, tools, injection) │ ├── read-chat.sh # Read Telegram conversation from transcripts │ ├── install-skill.sh # Install forge-vetted skills into workspace │ ├── run-tests.sh # Test runner (13 test scripts) │ ├── log-rotate.sh # Proxy log rotation + transcript size monitoring │ ├── setup.sh / setup.ps1 # One-command setup │ ├── kill.sh / kill.ps1 # Three-level kill switch │ ├── entrypoint.sh # Container startup (config + CA cert + auth) │ └── switch-shell.sh # DEPRECATED — use tool-control.sh ├── monitoring/ │ ├── network-log-parser.py # Proxy log anomaly detection │ └── session-report.py # Post-session activity summary ├── tests/ # 13 test scripts (12 non-destructive + 1 kill-switch) │ ├── test-tool-control.sh # 47 tests for config generation + security enforcement │ ├── test-config-integrity.sh # Running config verification │ ├── test-network-isolation.sh # Proxy and direct access tests │ └── ... # Capability, escape, filesystem, key, seccomp, etc. └── phase2-vm-isolation/ # [Planned] WSL2/Hyper-V isolation layer ``` ## 背景 这始于安全研究,而非容器项目。理解 OpenClaw 的架构、映射其威胁景观,并记录使其在未隔离状态下运行危险的事件——这些研究指导了设计。 配套研究仓库完整记录了这段旅程: - [openclaw-research](https://github.com/albertdobmeyer/openclaw-research) — 安全分析、威胁建模、生态系统探索以及 24 个已发布的 ClawHub 技能 OpenClaw-Vault 是从理解问题空间中产生的基础设施。 ## 免责声明 ## 许可证 MIT。安全工具,而非安全保证。
标签:AI 代理, API key protection, ClawHub, container hardening, Cutter, env security, Hardened container, JSONLines, Linux 容器, Moltbook, OpenClaw, Sidecar proxy, Web截图, 代理网关, 威胁情报, 安全合规, 安全强化, 安全架构, 容器安全, 密钥外置, 密钥注入, 开发者工具, 网络代理, 网络安全, 网络隔离, 请求拦截, 进程隔离, 逆向工具, 隐私保护, 零信任