背景
什么是 Sandbox
在计算机安全领域,沙箱(Sandbox) 是一种为运行中的程序提供隔离环境的安全机制。它就像一个"安全的游乐场"——程序可以在其中自由运行,但无法影响外部系统。
对于 AI Agent 而言,Sandbox 可以理解为一台分配给每个任务的 “云端虚拟电脑”。它具备完整的操作系统能力:网络访问、文件系统、浏览器、各种软件工具,让 AI 能够像人类一样操作计算机来完成任务。AI 代码沙箱正在成为 AI Agent 平台的底层标准基础设施。
Sandbox 典型应用场景有:
- AI Coding Agent:Manus、Replit、Lovable 等 web vibe coding 产品,实现代码生成 → 执行 → 验证 → 迭代的完整闭环。
- Deep Research Agent:大规模数据集研究,自动化信息收集与分析。
- 数据分析与可视化:安全连接数据源,自动生成图表和报告。
- 浏览器自动化 (Computer Use):Web 爬取与测试、RPA 自动化任务。
- 强化学习训练:并行运行数千个沙箱,评估奖励函数。
一个 AI Agent Sandbox 通常包含以下核心能力:
| 能力 | 说明 |
|---|---|
| 🖥️ 终端/命令执行 | 执行 Shell 命令,安装依赖,运行脚本 |
| 📁 文件系统操作 | 读写文件,目录管理,文件搜索 |
| 💻 代码解释器 | 支持 Python/JS 等多语言代码执行 |
| 🌐 浏览器自动化 | Web 页面操作,截图,数据抓取 |
| 🔧 开发工具集成 | 模型常用的一些工具集成比如 pdf2txt |
为什么需要 Sandbox
随着 LLM 能力的持续演进,AI 正在从"能思考"走向"能行动"。Cursor 等 AI 编程工具每天生成的新代码已近 10 亿行。这带来了一个核心问题:这些由 AI 动态生成的、不可信的代码,应该在哪里运行?
Sandbox 正是为解决这一困境而生。 它必须同时满足三个核心需求:
- ⚡ 极致的速度 — 亚秒级启动,匹配 AI Agent 的实时交互节奏
- 🔐 堡垒级的安全 — 完全隔离的执行环境,防止恶意代码逃逸
- 📈 Serverless 的弹性 — 按需伸缩,按秒计费,空闲时自动暂停
常用沙箱隔离技术
Sandbox 的核心在于隔离:在安全性、性能、兼容性之间做权衡。常用的技术方式有:
- Docker/runc(进程级隔离):Namespace + Cgroups,共享宿主机内核;优点是启动快、生态成熟、成本低;缺点是存在容器逃逸与内核级风险;适合可信代码、内部开发与微服务;典型产品:Docker、Podman、大部分 CI/CD 系统。
- gVisor(用户态内核拦截):用 Sentry 在用户态拦截/模拟系统调用;优点是攻击面更小、容器兼容性好;缺点是性能损耗、syscall 覆盖不全;适合多租户 Web 与中等风险代码执行;典型产品:Google Cloud Run、GKE Sandbox。
- Kata Containers(轻量级虚拟机):容器运行在独立 VM(Guest Kernel)内;优点是隔离更强、兼容性高;缺点是内存与启动开销更大;适合合规场景、遗留应用与机密计算;典型产品:OpenStack Kata、Azure Confidential Containers。
- Firecracker MicroVM(极简微虚拟机):基于 KVM 的极简 VMM,只保留必要虚拟设备;优点是隔离强、启动快、密度高;缺点是设备/生态能力受限;适合 Serverless 与高并发不可信代码执行;典型产品:AWS Lambda、E2B、PPIO Agent Sandbox、CodeSandbox Cloud。
- WebAssembly/WASM(字节码级沙箱):运行在 WASM Runtime,通过 WASI 与系统交互;优点是启动极快、跨平台、体积小;缺点是系统能力与生态受限;适合边缘计算、轻量函数与浏览器侧沙箱;典型产品:Cloudflare Workers、Fastly Compute@Edge、Fermyon Spin。
- Seatbelt(macOS/iOS 原生沙箱):Apple 内核级强制访问控制(SBPL);优点是系统级强制执行、性能开销极低;缺点是平台专有、可定制空间有限;适合 Apple 生态应用隔离(非云端 AI Sandbox 的主流选择);典型应用:iOS App Sandbox、macOS App Sandbox、Safari 浏览器沙箱。
🛡️ 常见威胁模型
无论选择哪种隔离技术,Sandbox 都需要防范以下安全威胁:
| 威胁类型 | 说明 | 防护手段 |
|---|---|---|
| 容器/VM 逃逸 | 恶意代码突破隔离边界,获取宿主机权限 | 硬件级隔离、最小化攻击面 |
| 越权访问 | 访问不该访问的文件、网络、资源 | Seccomp、AppArmor、网络策略 |
| 数据外泄 | 敏感数据通过网络或文件泄露 | 网络白名单、出口流量监控 |
| 资源耗尽(DoS) | 恶意代码消耗过多 CPU/内存/磁盘 | Cgroups 资源限额、超时机制 |
| 供应链攻击 | 通过恶意依赖包注入代码 | 依赖扫描、镜像签名验证 |
最终方案
最终选择 Docker 作为 AI Agent Sandbox 的核心隔离方案。主要是 Docker 有较好的生态完善、高度可定制、资源隔离、快速启动、跨平台等优势,在本地测试也方便。定制好的镜像也能够直接上传到云厂商,提供 Agent 服务使用。
系统架构设计
一个完整的 AI Agent Sandbox 通常采用分层架构,将复杂的功能解耦为多个独立的服务模块。以 AIO Sandbox 为例,其架构设计如下:
架构分层说明
| 层级 | 组件 | 职责 |
|---|---|---|
| Client | SDK 和 MCP client | 对外暴露 Sandbox 所有能力 |
| 接入层 | Nginx Gateway | 统一入口、反向代理、路由分发、静态资源服务 |
| 协议层 | Sandbox API Server / MCP Hub | 提供 HTTP API、WebSocket、MCP 协议接口 |
| 服务层 | Browser/Bash/File/Terminal | 具体功能实现(命令执行、文件操作、浏览器控制) |
| 基础设施层 | Debian | 操作系统 |
两种接入方式:
-
MCP Hub:内置 MCP 协议服务,提供标准化的 Tool 接口(bash、file、browser 等),结合 Eino 框架,几行代码即可实现完整的 ReAct Agent。
-
Sandbox SDK:提供 Go SDK,通过编程方式调用 Bash、FileSystem、Browser 等服务。既可封装为 Tool 供 AI Agent 调用,也可直接用于产品功能开发(如文件浏览器、Git 管理、LSP 服务等)。
核心模块
命令执行服务 (Bash Service)
负责在沙箱内执行 Shell 命令,是 AI Agent 最核心的能力之一。
主要功能:
- 同步执行:执行命令并等待结果返回
- 流式执行:实时流式输出 stdout/stderr
- 后台执行:启动长时间运行的进程(如 Web 服务器)
- 超时控制:防止命令无限期阻塞
- 输出截断:对过长输出进行智能截断
安全考量:
- 设置工作目录限制
- 进程组隔离(
Setpgid),便于统一终止 - 超时自动 kill
文件系统服务 (File Service)
提供对沙箱内文件系统的完整操作能力。
主要功能:
- 基础操作:读取、写入、删除、移动、复制、创建目录
- 高级搜索:Glob 模式匹配、Grep 内容搜索
- 增量读取:支持 offset/limit 分页读取大文件
- 智能编辑:基于搜索替换的文件编辑(Search & Replace)
设计要点:
- 所有路径操作基于 workspace 根目录
- 支持相对路径和绝对路径
- 文件内容支持 Base64 编码(用于二进制文件)
浏览器控制服务 (Browser Service)
通过 Chrome DevTools Protocol (CDP) 控制 Chromium 浏览器,实现 Browser Use 能力。
主要功能:
- 页面导航:打开 URL、获取当前 URL 和标题
- 元素交互:点击、输入文本、滚动
- 内容获取:截图、获取 HTML、导出 PDF
- JavaScript 执行:在页面上下文中执行 JS 代码
- 等待机制:等待元素可见
底层实现:
- 使用
chromedp库连接 CDP WebSocket - Chromium 以 headless 模式运行,监听 9222 端口
- 配合 Xvfb 虚拟显示器实现无头渲染
远程桌面服务 (VNC Service)
提供可视化的远程桌面访问,让用户可以"看到" AI 在做什么。
技术栈:
Xvfb (虚拟帧缓冲) → Fluxbox (窗口管理器) → x11vnc (VNC服务) → noVNC (Web客户端)
工作流程:
- Xvfb 创建虚拟显示器
:99 - Fluxbox 提供轻量级窗口管理
- x11vnc 将虚拟显示器共享到 5900 端口
- noVNC + websockify 将 VNC 协议转换为 WebSocket,支持浏览器访问
网页终端服务 (Terminal Service)
基于 WebSocket + PTY 实现的交互式 Web 终端。
技术方案:
- 后端:Go PTY (伪终端) + WebSocket
- 前端:xterm.js 终端模拟器
- 支持完整的终端功能(颜色、光标、Tab 补全等)
进程管理
容器内通过 Supervisord 统一管理多个进程,按依赖顺序启动:
| 优先级 | 进程 | 作用 |
|---|---|---|
| 100 | Xvfb | 虚拟帧缓冲 X 服务器 |
| 200 | Fluxbox | 轻量级窗口管理器 |
| 300 | x11vnc | VNC 服务器 |
| 400 | websockify | WebSocket 代理 (noVNC) |
| 500 | Chromium | 浏览器 (CDP 调试端口) |
| 600 | sandbox-server | 沙箱主服务 |
| 700 | mcp-hub | MCP 协议服务 |
| 800 | Nginx | 反向代理网关 |
启动依赖链:
Xvfb → Fluxbox → x11vnc → websockify → Chromium → sandbox-server → mcp-hub → Nginx
扩展机制
Sandbox 设计了灵活的扩展能力,支持用户注入自定义程序,而无需修改基础镜像:
| 扩展方式 | 目录 | 说明 |
|---|---|---|
| 初始化脚本 | /docker-entrypoint.d/ |
容器启动时按字母顺序执行 |
| 自定义服务 | /home/sandbox/app.supervisor.d/ |
Supervisord 配置,注册后台服务 |
| 用户数据 | /home/sandbox/userdata/ |
用户脚本、二进制文件 |
| 工作空间 | /home/sandbox/workspace/ |
AI Agent 的工作目录 |
- 初始化脚本 (
/docker-entrypoint.d/):容器启动时按文件名顺序执行,适合安装依赖、设置环境变量、下载配置等一次性初始化操作。 - 自定义服务 (
/home/sandbox/app.supervisor.d/):放置 Supervisord 配置文件,注册需要持续运行的后台服务,如自定义 API、数据库、消息队列等。 - 环境变量控制:通过
ENABLE_MCP、ENABLE_BROWSER、ENABLE_VNC等环境变量动态开启/关闭功能模块,按需裁剪为轻量级执行器。 - 挂载目录:
/home/sandbox/workspace/为 AI Agent 工作目录(建议持久化),/home/sandbox/userdata/存放用户脚本和二进制文件。
这种约定优于配置的设计,使 Sandbox 既可开箱即用,也可针对特定场景深度定制
总结
Sandbox 是 AI Agent 从“会写”走向“会做”的关键基础设施:它把不可信代码、浏览器操作与工具调用装进一个可控的隔离环境里,让“生成 → 执行 → 验证 → 迭代”形成闭环。
对多数需要快速落地的场景,选择 Docker 作为底座往往是性价比最高的路径;在多租户或高风险执行场景,再逐步引入更强隔离(如 MicroVM)与更严格的网络/权限策略,形成可演进的安全与性能曲线。