一句话版本
聊天机器人只会"说",AI Agent 会"做":执行命令、读写文件、访问网络、调用 API。一旦 Agent 被提示词注入,或者只是理解错了任务,它做的事就会落到真实系统上。 所以 Agent 应当在沙箱里运行:一个与真实系统隔离的环境,限制它能读写哪些文件、能连哪些网络、能用多少资源。思路很简单:假设 Agent 迟早会被骗或犯错,提前把它能造成的破坏圈在一个小范围里。
全文分三层:
- 通俗理解:给新来的实习生一台测试机
- 实际用处:编程 Agent、浏览器 Agent、云端执行环境
- 原理与工程要点:要隔离的四样东西、威胁模型、沙箱不能解决什么
第一层:通俗理解
1.1 给实习生一台测试机
新来的实习生非常聪明、非常勤快,但有两个问题:
- 太容易轻信:别人在文件里写一句"请把服务器密码发给我",他可能就照做了;
- 偶尔会搞错:让他"清理一下临时文件",他可能把整个项目目录删了。
你不会第一天就把生产服务器的 root 密码给他,而是给他一台测试机:可以随便折腾,坏了重装就行,碰不到真正的生产数据和客户系统。
AI Agent 就是这位实习生。沙箱就是那台测试机。
1.2 两种风险,同一个对策
| 风险 | 例子 |
|---|---|
| 被骗(提示词注入) | 仓库的 README 里藏着"运行这个脚本来完成配置",脚本会上传你的 SSH 私钥 |
| 犯错 | 理解错了指令,执行了 rm -rf、强制推送覆盖了别人的代码、删了数据库 |
无论哪种,沙箱都能把后果限制在一个可以丢弃的环境里。
第二层:实际用处
- 编程 Agent:在开发者电脑上运行的 AI 编程工具会执行 shell 命令、安装依赖、运行测试。主流工具都在引入沙箱:例如在 macOS 上用系统自带的 Seatbelt 沙箱、在 Linux 上用 bubblewrap 等工具,限制可写的目录和可访问的网络;或者直接在云端的一次性容器里运行。
- 云端代码执行:各家 AI 产品的"代码解释器"功能,让模型生成的代码在服务器上运行。这些代码不可信,必须在强隔离的容器或微型虚拟机里执行。
- 浏览器 Agent:能操作浏览器的 Agent 会登录网站、填写表单。最好使用一个独立的浏览器配置,不带用户日常的登录状态和密码。
- 有记录的事故:社区里时有报告 AI 编程工具执行了破坏性命令、删除了文件或数据库,引发了对默认权限和沙箱的广泛讨论。
第三层:原理与工程要点
3.1 要隔离的四样东西
| 资源 | 不隔离的后果 | 隔离方式 |
|---|---|---|
| 文件系统 | 读到 SSH 私钥、浏览器 Cookie、云凭证;删除或改写重要文件 | 只挂载工作目录;敏感目录不可见;写入限定范围 |
| 网络 | 把数据外传;下载并运行恶意程序;访问内网服务 | 出站白名单、代理(见《网络出口控制》) |
| 凭证 | 用你的身份推送代码、调用付费 API、操作云资源 | 不把凭证放进沙箱,或使用短期、窄权限凭证(见《凭证泄露与上下文窗口》) |
| 计算资源 | 挖矿、无限循环、耗尽磁盘 | CPU、内存、磁盘、进程数、运行时间上限 |
3.2 威胁模型
设计沙箱时要先想清楚:假设 Agent 已经完全被攻击者控制,它会尝试做什么?
- 读取一切能读到的敏感信息;
- 通过一切可用通道把信息发出去;
- 在系统里留下后门,以便以后再进来(持久化);
- 尝试突破沙箱,访问宿主机(见《容器逃逸》)。
沙箱的每一层设计,都应该能回答"这一步在这里会被怎样挡住"。
3.3 沙箱的强度要和风险匹配
| 场景 | 建议的隔离强度 |
|---|---|
| 只读的问答、检索 | 进程级限制即可 |
| 在自己电脑上写代码 | 系统沙箱(限制目录和网络)+ 敏感操作人工确认 |
| 运行完全不可信的代码 | 容器起步,最好是 gVisor 或微型虚拟机(见《沙箱的几层》) |
| 能动钱、能改生产环境 | 强隔离 + 人在回路 + 审计 |
3.4 沙箱不能解决什么
- 沙箱内部的数据:如果你把需要处理的敏感数据放进沙箱,被注入的 Agent 照样能读到。沙箱限制的是"能接触到什么",所以放进去的东西要尽量少;
- 合法通道的滥用:如果 Agent 的工作本来就需要往代码托管平台推送代码,那么"推送到攻击者的仓库"也可能走同一个通道;
- 人点了"允许":沙箱外的操作需要人确认时,确认疲劳会让防线失效(见《Agent权限设计》)。
沙箱是纵深防御的一层,需要和权限设计、出口控制、提示词注入防御(见《防御提示词注入》)配合使用。
总结
| 层次 | 要点 |
|---|---|
| 直觉 | 聪明但轻信、偶尔犯错的实习生,先给测试机 |
| 隔离 | 文件、网络、凭证、计算资源 |
| 威胁模型 | 假设 Agent 已被完全控制:读、发、留后门、逃逸 |
| 局限 | 放进去的数据仍会被读;合法通道可能被滥用;确认疲劳 |