📦 沙箱隔离技术

🎯 为什么需要沙箱

Agent 在执行过程中可能需要运行代码、访问文件系统、调用外部 API。一旦 Agent 被注入或产生不可信输出,沙箱是最后一道防线——它将 Agent 的执行环境与宿主系统隔离,确保即使攻击成功,也无法逃逸到宿主系统。

🏗️ 隔离层级架构

🖥️

宿主系统

物理机/虚拟机 · 不可被Agent触及

📦

容器运行时

Docker/K8s · 资源受限

轻量运行时

WASM/gVisor · 函数级隔离

🔒

Agent沙箱

代码执行 · 网络受限 · 文件隔离

🧩 四种隔离方案

1. 代码执行沙箱

限制 Agent 生成的代码在受限的运行时环境中执行,控制 CPU、内存、执行时间、网络访问。

技术隔离级别启动速度适用语言
Python RestrictedPython 语言级 极快 Python 子集
PyPy Sandbox 进程级 Python
Node.js vm2/isolated-vm V8 隔离 JavaScript
seccomp / Landlock 系统调用级 极快 任意语言
gVisor (Sentry) 内核级 任意语言

核心限制:禁用 import ossubprocesseval 等危险模块;限制 CPU 时间(如 5s)、内存上限(如 256MB)、禁用网络和文件 I/O。

2. 容器级隔离(Docker)

使用 Docker 容器为每次 Agent 代码执行提供独立的操作系统级隔离环境。最成熟的隔离方案,安全性高但有一定启动延迟。

配置项推荐设置目的
--read-only 只读根文件系统 防止文件篡改
--tmpfs /tmp 临时文件使用内存 执行后自动清除
--network none 禁用网络 防止数据外泄
--memory 256m 内存限制 防止资源耗尽
--cpus 1 CPU 限制 防止 CPU 占用
--pids-limit 64 进程数限制 防止 fork 炸弹
--security-opt no-new-privileges 禁止提权 防止权限提升
--cap-drop ALL 移除所有 capabilities 最小权限

3. 函数级隔离(WebAssembly)

WebAssembly (WASM) 提供接近原生的性能极小的攻击面。代码在沙箱化的虚拟机中运行,无法访问宿主系统,除非显式导入。

  • WasmEdge / Wasmtime:支持 Python (通过 RustPython)、JavaScript、Rust 在 WASM 中运行
  • 启动速度:毫秒级,远快于 Docker
  • 隔离保证:线性内存模型,默认无系统调用
  • 适用场景:高频次的代码执行、插件化 Agent 工具、边缘计算
🔮 趋势 WASM 正在成为 Agent 沙箱的新标准。OpenAI Code Interpreter、Cloudflare Workers AI 等都在使用 WASM 作为底层沙箱技术。相比 Docker,WASM 的启动速度快 100 倍以上,冷启动几乎无延迟。

4. 数据访问隔离

除了代码执行隔离,还需要对 Agent 的数据访问进行隔离,确保 Agent 无法访问其任务范围之外的数据。

隔离技术实现方式隔离粒度
数据库视图 为 Agent 创建受限视图,过滤敏感列 列级
行级安全 (RLS) 数据库层自动过滤,Agent 无感知 行级
临时数据卷 为每次 Agent 执行创建独立的数据卷,执行后销毁 会话级
API 代理网关 Agent 通过代理网关访问 API,网关做权限校验 请求级
数据脱敏中间件 在数据返回前自动脱敏敏感字段 字段级

📊 隔离方案对比

方案隔离强度启动时间资源开销安全级别适用场景
WASM 沙箱 函数级 ~1ms 极低 高频代码执行
seccomp 沙箱 系统调用级 ~5ms 轻量脚本执行
gVisor 内核级 ~100ms 极高 多语言任意代码
Docker 容器 操作系统级 ~1-3s 完整环境需求
Firecracker microVM 虚拟化级 ~125ms 极高 多租户隔离
Kata Containers 虚拟化级 ~500ms 极高 高安全合规

🔄 沙箱生命周期管理

创建沙箱
(配置限制)
注入代码
+ 数据
执行超时
监控
收集结果 销毁沙箱
(无痕)
⚠️ 关键原则 沙箱的生命周期必须严格遵循"用完即毁"原则:每次 Agent 代码执行使用全新沙箱,执行完成后立即销毁,绝不复用。沙箱之间无共享状态、无共享文件系统、无共享网络。