2026年5月31日 2 分钟阅读

如何用 nilbox 沙箱安全运行不信任的 AI Agent?零令牌架构实战详解

tinyash 0 条评论

运行 AI 编码 Agent(如 OpenClaw、Claude Code、Codex)时,你面临一个两难选择:给它们 API Key 才能工作,但给了之后你基本无法控制这些 Key 被用在哪儿。容器隔离?一个容器逃逸或者 Prompt 注入就能拿到你的全部凭据。nilbox 提出了一个截然不同的方案——零令牌架构(Zero Token Architecture):API Key 物理上不出宿主机,Agent 在独立的虚拟机里拿到的是占位符字符串,真正的令牌交换在宿主机代理层完成。本文详解如何配置和使用。

问题:为什么容器隔离不够?

Docker 容器共享宿主机内核。这意味着:

  • /proc/sys 等接口可能暴露主机信息
  • 挂载的环境变量(OPENAI_API_KEY 等)进程间可见
  • 一旦 Agent 被注入恶意指令,Key 可以被直接读取和传出

现实攻击场景:Agent 安装了一个看似无害的 npm 包,该包在 postinstall 脚本中读取环境变量并发送到攻击者服务器。容器内的 Key 对容器内的所有进程可见,这是根本问题。

nilbox 的做法是:把 Agent 真的放到虚拟机里(不是容器),API Key 以占位符形式存在,真实的 Key 只在宿主机内存中,通过 VSOCK 通道按需代理。

nilbox 零令牌架构工作原理

nilbox 的核心设计只有三步:

  1. Agent 在 VM 内运行——通过 Apple Virtualization.framework(macOS)或 QEMU(Linux/Windows)启动完整的虚拟机
  2. 环境变量替换——VM 中的 ANTHROPIC_API_KEY 被设为 ANTHROPIC_API_KEY(一个无意义的字符串),真实的 Key 完全不进入 VM
  3. 宿主机代理拦截——Agent 发往 api.anthropic.com 的请求经过 VM 内 127.0.0.1:8088 代理,宿主机代理层拦截后替换请求头中的占位符为真实 Token,再转发

从 Agent 的角度看,API 调用和直接运行没有区别。但对于攻击者:即使拿到了 VM 的 root 权限,也只能拿到 ANTHROPIC_API_KEY 这个字符串,而非真实的 sk-ant-xxxx

快速上手

安装 nilbox

GitHub Releases 下载对应平台的安装包。目前支持 macOS(Apple Silicon + Intel)、Linux 和 Windows。

从源码构建(需要 Rust 工具链和 Node.js 18+):

git clone https://github.com/paiml/nilbox.git
cd nilbox
cd apps/nilbox && npm install && npm run tauri dev

配置凭据

启动桌面应用后,在设置页面配置各 AI 提供商的 API Key:

ANTHROPIC_API_KEY=sk-ant-xxxxxxxx

OPENAI_API_KEY=sk-proj-xxxxxxxx

GEMINI_API_KEY=AIzaxxxxxxxx

GITHUB_TOKEN=ghp_xxxxxxxx

这些 Key 仅存储在宿主机。VM 启动时,nilbox 自动将这些变量映射为占位符注入到 VM 中。

启动 Agent

在 nilbox 界面中点击 “New VM”,选择要运行的 Agent 镜像(内置 OpenClaw、Claude Code CLI、Codex CLI 等模板)。VM 启动后自动建立 VSOCK 通道,Agent 即可像在本地一样工作:

$ echo $ANTHROPIC_API_KEY
ANTHROPIC_API_KEY    # ← 安全占位符,不是真实 Key
$ echo $OPENAI_API_KEY
OPENAI_API_KEY       # ← 同样的保护

当 Agent 调用 api.anthropic.com 时,nilbox 代理自动注入真实 Token。而如果恶意代码尝试向 attacker.evil.com 发送请求,宿主机代理可以按域名规则拒绝或者只发送占位符

核心功能详解

域名级访问控制

nilbox 允许配置白名单域名列表。只有白名单内的域名能获得真实 Token 代理,其他域名要么被阻止,要么只发送占位符:

proxy:
  trusted_domains:
    - api.anthropic.com
    - api.openai.com
    - api.github.com
  rate_limit:
    budget_per_provider: 50  # 每日 50 美元上限

多 Provider 支持

配置多组凭据时同样遵循零令牌原则。AWS Bedrock、Google Gemini、GitHub API 等均以相同方式保护:

AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID     # 占位
AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY  # 占位

零代码改造

这是最实用的设计——Agent 不需要任何修改。OpenClaw、Claude Code、Codex、Cline 等主流 Agent 开箱即用。环境变量名和结构保持一致,只是值被替换为安全占位符。

适用场景

  1. 运行不信任的开源 Agent——从 GitHub 拉下来的新 Agent,不想把自己的 Key 交给它
  2. 多租户隔离——在同一台机器上跑多个 Agent,彼此完全隔离
  3. 外包/协作场景——让外部开发者的 Agent 在你的基础设施上运行,不需要暴露任何凭据
  4. 教育/演示环境——给学生或观众演示 AI Agent,无需担心 Key 被滥用

注意事项

  • VM 启动需要几秒到几十秒(取决于系统配置),比 Docker 容器慢
  • 磁盘占用更大(每个 VM 需要独立的系统镜像)
  • 免费版支持同时运行 1 个 VM,高级版支持多个并发实例
  • 目前 Agent 镜像模板数量有限,但支持自定义 ISO 镜像

结语

nilbox 用零令牌架构从根源上解决了 AI Agent 的安全问题——API Key 物理上不在 Agent 运行的环境中。对于任何认真对待 AI 安全的团队来说,这比容器级别隔离可靠得多。如果你用 Claude Code、Codex 或 OpenClaw 做日常开发,花半小时配置 nilbox,可以省去后期 Key 泄露的无数麻烦。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。