LLM Agent 执行沙箱闸门:失败含义与当天最小实验

千笔-AIWritePaper · https://www.aiwritepaper.com

Agent 会写文件、调 API、跑命令之后,再靠「提示词里写不要删库」不够。Data Science Dojo 工作坊 Running your LLM agents safely: Hands-on with @DockerInc sandboxes (Dan Ndombe,YouTube SBhsvta0E9A,约 58 分钟)把隔离落到 microVM 级沙箱、网络代理注入密钥、工作区挂载与不可协商策略。本文本机无 Docker Desktop ,用已验证的 bwrap(bubblewrap)做等价演示 :根只读、工作区可写、可断网、可清环境;并注入五类故障。文中口误字幕里的「spx」均按语境校正为 sbx(Docker sandboxes CLI)。

目标说明

  1. 说清「普通容器 ≠ Agent 沙箱」:缺网络/内核隔离时,等同裸机权限。
  2. 列出视频强调的能力:microVM、密钥不进沙箱进程、网络策略、审计。
  3. 当天跑完五类故障注入,每类留下退出码与日志。
  4. 写明本实验是 bwrap 等价演示,不是 Docker sbx 产品评测。

视频要点(字幕事实)

  • 动机案例:按指令清空生产库、README 提示注入、CI 自治装包并写库。
  • 无效策略:纯文本 deny list、提示词里的规则(上下文一长就丢)、普通 Docker 容器(无网络/内核隔离)、把密钥放环境变量却仍给 Agent 进程看见、全程人工审批(牺牲自主性)。
  • sbx 目标:microVM 隔离、密钥经宿主机代理注入、不可协商策略、工作区定向挂载(爆炸半径限于该目录)。
  • CLI 概念:sbx 版本与登录、策略档(open / locked / balanced)、sbx secret、sbx create / sbx run、多沙箱并存。
  • 本地版免费使用中;云版当时尚未提供。
  • 容器不能代替沙箱------主持人特别追问 microVM,讲者确认。

当天最小实验(bwrap)

工作区 workspace/,宿主密钥目录 host_secret/。默认:--ro-bind / /、--bind workspace、--unshare-net、--clearenv。

ID 故障 观察 结论
B0 基线写 ok.txt exit=0 闸门未误杀正常工作
F1a 写宿主文件(未挂载) PermissionError,文件不存在 根只读有效
F1b 故意 bind 宿主可写 文件被创建 挂载面=爆炸半径
F2a 断网访问 example.com 失败 --unshare-net 有效
F2b 允许网络 HTTP 200 网络要显式关
F3a clearenv 读 HOST_API_KEY <absent> 默认不继承宿主密钥
F3b 故意 setenv 传入 密钥出现在输出 密钥不得进沙箱环境
F4 死循环 + timeout 2 exit=124 必须有 CPU/时间保险丝
F5 50 万字符 stdout 日志只留 2000 字 输出要截断,防上下文炸穿

完整日志与 sandbox-gate.csv 在 _w/bwrap-gate/。

失败含义(写进运行手册)

失败 含义 立即动作
越界写成功 挂载策略错了 收回 bind,审计宿主机文件
外联成功但策略应为锁定 网络策略未生效 切断出口,查代理白名单
密钥出现在 Agent 输出 密钥进了进程环境或工作区文件 轮换密钥,改走代理注入
失控进程拖死宿主机 缺 cgroup/timeout 先杀进程,再补限额
超大输出进模型上下文 费用与提示注入面扩大 截断并分文件落盘

与 Docker sbx 的对照(避免误读)

能力 视频中的 sbx 本文 bwrap 演示
隔离强度 microVM 用户命名空间 + 挂载/网络命名空间
密钥 宿主机代理注入 用 clearenv 对比「勿传入」
策略 UI open/locked/balanced 手工组合参数
多 Agent 多沙箱并列 未演示
结论 生产可评估 sbx 仅教学用最小集

验收清单

  • 文档写明「非 Docker sbx 评测」。
  • 五类故障均有日志与 CSV 行。
  • 默认配置断网、清环境、工作区外只读。
  • 密钥轮换流程与 Agent 发布流程绑定。
  • 超时与输出截断有具体数字。

当天 40 分钟落地

  1. 10 分钟:安装/确认 bwrap、timeout。
  2. 20 分钟:跑 sandbox_gate.py,保存 CSV。
  3. 10 分钟:若团队有 Docker,对照安装 sbx 文档(视频 References),只做只读体验,不把密钥写进仓库。

踩坑

  • 以为「Agent 自己说只访问当前目录」等于隔离------视频用 cd .. 反例说明不可信。
  • 把 API key 放进工作区文件「图省事」。
  • 演示用开网对照后忘记改回断网。

实践备忘 1

把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 2

所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 3

若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 4

发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 5

把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 6

所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 7

若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 8

发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 9

把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 10

所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 11

若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 12

发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 13

把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 14

所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 15

若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 16

发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 17

把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 18

所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 19

若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 20

发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 21

把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 22

所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

实践备忘 23

若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。

总结

沙箱闸门的核心不是多写几句 system prompt,而是让越权在操作系统层失败、并可观测。bwrap 最小实验证明:挂载面、网络、环境变量、时间与输出五处任一放开,失败模式就会从「理论」变成日志里的一行。生产环境再评估 Docker sbx 或同类 microVM 方案,而不是停在容器里「感觉隔离了」。

相关推荐
灯澜忆梦2 小时前
【docker】#2 | 基础命令
docker·容器·eureka
程序员老赵4 小时前
Docker 部署 WordPress:轻松搭建开源内容管理平台
docker·开源·wordpress
sbjdhjd6 小时前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
Pocker_Spades_A7 小时前
Penpot自托管设计协作:Docker部署、MCP接入与Codex生成UI实操记录
ui·docker·容器
Lvan的前端笔记16 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
sbjdhjd21 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
帷幕落秋1 天前
Docker的两种安装
运维·docker·容器
工业一体机老司机1 天前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互