📦 沙箱隔离技术
🎯 为什么需要沙箱
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 os、subprocess、eval 等危险模块;限制 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 代码执行使用全新沙箱,执行完成后立即销毁,绝不复用。沙箱之间无共享状态、无共享文件系统、无共享网络。