Agent Sandboxing
智能体沙箱会在隔离环境中运行 AI 智能体的命令和生成的代码,并限制其文件、网络、凭据和计算资源。
智能体沙箱化是指将 AI 智能体的操作(例如 shell 命令、生成的代码、文件编辑和网页浏览)放在隔离环境中运行,限制这些操作可以访问的文件、网络、凭据和计算资源。基于大型语言模型(LLM)构建的智能体会根据读取到的文本选择每条命令,而这些文本可能有误或带有恶意。沙箱在操作系统或虚拟机监控程序层面强制执行这些限制,因此即使模型遵循网页或 README 中隐藏的提示注入,或只是犯了错,限制依然有效。
智能体为什么需要沙箱#
函数调用和工具使用会将模型生成的文本转化为实际操作,因此能够运行 shell 的智能体也能删除文件、读取 SSH 密钥或上传源代码。OWASP AI 智能体安全清单将允许智能体在没有沙箱的情况下执行任意代码列为应避免的做法;2025 年 12 月发布的《OWASP 智能体应用十大风险》也将意外代码执行列为智能体系统的十大主要风险之一。沙箱还让智能体更易用:要求用户批准每条命令会导致审批疲劳;Anthropic 发现,在其内部使用中,为 Claude Code 启用沙箱将权限提示减少了 84%,因为边界内的命令不再需要提示。
沙箱限制哪些内容#
智能体沙箱通常会控制五类内容:
- 文件系统:智能体只能看到临时工作区或单个代码仓库,通常位于只读基础映像上,并且无法读取凭据、浏览器配置文件或其他项目。
- 网络:阻止出站流量,或通过代理路由流量,仅允许访问列出的域名(例如软件包注册表),以防被劫持的智能体向攻击者的服务器发送数据。
- 凭据:机密信息留在沙箱之外,或以仅限单项任务使用的短期令牌形式提供,这体现了数据安全中的最小权限原则。
- 计算资源:限制 CPU 时间、内存、进程数和实际运行时间,以阻止失控循环和分叉炸弹。
- 系统调用:seccomp 等过滤器会阻止智能体工具根本不需要的内核接口。
隔离强度取决于边界所在的位置。Docker 容器与宿主机共用内核,因此内核漏洞可能让攻击者逃出容器。gVisor 增加了一个用户空间内核,用于拦截每个容器的系统调用;Firecracker 等微型虚拟机由 AWS 为 Lambda 构建,可让每个沙箱拥有自己的精简内核,同时在 125 毫秒内启动,内存开销低于 5 MiB。托管代码解释器和云端编程智能体通常会在全新容器或微型虚拟机中运行每项任务,并在任务结束后销毁环境。在开发者机器上,Claude Code 沙箱在 macOS 上使用 Seatbelt,在 Linux 上使用 bubblewrap;它只允许 shell 命令写入工作目录和临时目录,并通过代理发送网络流量,由代理对照允许列表检查每个主机。
沙箱是智能体运行框架的一层;该软件负责执行模型的工具调用。运行框架会根据策略检查每项拟议操作,在沙箱中运行获准的操作,并在支付、部署或向组织外发送消息等不可逆操作前暂停,等待人员确认:
沙箱化生成的代码#
从数据分析助手到智能体编程工具,所有会编写并运行代码的智能体都需要最严格的限制,因为生成的代码可以执行解释器能执行的任何操作。最内层是普通的进程隔离,Python 标准库就能演示这种做法:下面的脚本会在临时目录中运行模型编写的代码,使用空环境,并通过 resource 模块设置 CPU 时间限制(适用于 Linux 和 macOS)。
import os
import resource
import subprocess
import sys
import tempfile
os.environ["API_KEY"] = "sk-live-123" # 智能体自身进程持有的机密信息
# 模型编写的代码:读取环境变量,然后无限循环
generated = "import os\nprint('API_KEY =', os.environ.get('API_KEY'), flush=True)\nwhile True: pass"
def limit_cpu():
"""Stop the child process after 2 seconds of CPU time."""
resource.setrlimit(resource.RLIMIT_CPU, (2, 2))
# 在隔离模式下,于临时目录中运行,并使用空环境
cmd = [sys.executable, "-I", "-c", generated]
with tempfile.TemporaryDirectory() as workspace:
proc = subprocess.run(cmd, cwd=workspace, env={}, capture_output=True, text=True, preexec_fn=limit_cpu)
print(proc.stdout.strip())
print("exit code:", proc.returncode)子进程会打印 API_KEY = None,因为它启动时使用的是空环境,看不到父进程的机密信息;随后以代码 -24 退出,这表示无限循环达到 2 秒的 CPU 时间限制时,内核通过 SIGXCPU 终止了它。容器或微型虚拟机可以在此进程周围增加文件系统和网络边界。
沙箱与相关控制措施的比较#
- AI 安全护栏:在输入、输出或拟议操作执行前对其进行筛查的分类器和规则。安全护栏放行操作后,沙箱会约束该操作的一切行为。
- 权限:访问控制决定智能体可以使用哪些工具和资源。沙箱在操作系统层面强制执行这些决定,位于模型可能通过话术绕过的任何检查之下。
- 容器化:将软件及其依赖项打包起来,以便可重复部署。容器在移除特权、限制挂载并设置出站规则后运行时,就能充当沙箱。
- 测试沙箱:用于安全试用软件的非生产系统副本。智能体沙箱会包裹智能体执行的每项操作,无论是在生产环境还是开发环境中。
智能体沙箱的应用场景#
- 编程智能体:每项任务都会获得一个全新的容器或虚拟机,其中只包含一个代码仓库;智能体可以在其中安装依赖项、运行测试,并返回差异供人工审查。
- 计算机操控智能体:通过屏幕截图和点击操作桌面或浏览器的智能体会在拥有独立账户的虚拟机中运行,因为它们查看的任何页面都可能包含针对它们的指令。
- 代码解释器:分析上传的电子表格或图像的助手会在每个会话专属的沙箱中运行 Python,通常无法访问互联网。
- MCP 服务器和智能体技能:第三方工具和技能脚本会使用用户的凭据,因此谨慎的主机服务会在与智能体 shell 相同的边界内启动本地服务器和脚本。
托管智能体平台也会对自己的工作流施加相同限制。Ultralytics Platform Agents会串联 YOLO26 检测、视觉语言模型和警报模块,将每次共享试运行限制为 60 秒、20 张输入图像,以及 20 次模型或提供商调用;其 Webhook 模块只会向公开的 HTTPS URL 发送请求,不跟随重定向,并会在 5 秒后超时。










